一套分布式账本系统
区块的生成
矿工在挖矿前要组建 区块
将coinbase交易打包进区块
将交易池中高优先级的交易打包进区块
优先级:交易的额度 * UTXO的深度(UTXO所在区块的深度:最新的最浅) / 交易的size(多个输入,多个输出size相对于单个大)
防粉尘攻击:这种优先级可以防止粉尘攻击(交易的size特别大)
创建区块的头部:(每个区块包含父区块哈希,没有自己的哈希)
区块链的头部挖矿成功后,将计算出来的随机数nonce填入区块头部,向临近节点传播
区块的验证 和 链接
相邻节点收到信的区块后,立即做检查
验证POW的nonce值是否符合难度值
检查时间戳是否小于当前的2个小时
检查merkle tree 是否正确
检查区块size要小于区块size的上限
第一个交易必须是coinbase交易
验证每个交易
Merkle Tree(二叉树)
tree - 由多个节点组成的一种数据结构
每个节点存储数据
根节点 root
父节点,子节点,兄弟节点
构建二叉搜索树
二叉树:大量数据中能快速搜索某个交易Merkle Tree
防止数据篡改
快速验证某个交易是否存在
节点存储Hash值
从叶子节点构造树
Merkle Path - 验证路径
验证某个交易是否在区块中1. 共识机制 POW (proof of work)
通过挖矿保证我是个善意的节点, 并获得生成区块和在这个区块记账的权利
2. 基于P2P网络,每个全节点都存储了一个历史完整的账本,抗攻击强
3. 新区块通过包含前一个区块头部的哈希值(每个区块的唯一标识符)建立链接关系
例如一列火车,每个区块是一节车厢,每节车厢装满了交易记录
4. 经过6个以上的区块确定的交易才是安全确认的,因为篡改的成本巨大
5. 区块链有时会产生临时的分叉而生成两条链,最终较短的链会被舍弃
不同矿机在同一时间点挖出来区块,然后各自广播,各个区域的矿机接受最近的广播,这样就会分叉,因为每次同时挖出来的概率太低,所以最后会有一条最长链开始被打包广播,较短的那条链就会被舍弃,改链的交易记录会全部被取消,这也是为什么经历多个区块才是安全确定的原因
区块链的软分叉与硬分叉
由于比特币交易结构的改变引起区块链数据结构未改变,就是当前在某个区块上更新软件,添加功能继续按照这个区块建立链接
软分叉由于比特币交易结构的改变引起区块链数据结构改变, 类似BTC分叉出了BCH,BCH这条链添加了功能, 链上算法软件不一样新生成了新的一条链
硬分叉利益之争 遍历完整2^256个哈希还是不小于目标值通过改变区块中的交易顺序来更改merkle root 重新来运算区块链所有的软件开发与更新都需要让矿工来执行,不管是软分叉还是硬分叉
“隔离见证segwit” 这件事让core团队与矿工团队发生了分歧,矿工希望扩容,更多的交易进行可以收更多的费用, 但是core团队不同意, 所以矿工团队拒绝给链上添加隔离见证功能, 隔离见证- 区块上本来交易和见证两个功能合在一起,隔离见证就是把见证功能移到另外的地方去,这样可以大大增加交易量
网友评论