比特币中的共识机制
我们知道对于比特币系统,所有的比特币用户都维护着一条相同的区块链。让这么多人不断地更新区块链的数据,如何才能维持共识与统一呢?
一、 区块的创建
区块中包含区块头和区块体,我们的矿工在开始挖矿时,就将需要写入区块体的交易打包在区块内,随后用不同的nonce去尝试,以获取满足记账权的hash值。
明确了这一点,我们可以想象当各种客户把交易发布到区块链网络中时,矿工开始打包交易,不同的矿工打包的交易很可能是不同的。没有打包的交易只能等到下一个区块进行打包。
那一个区块如果被矿工挖出,人们怎么承认其合法性呢?
对于一个比特币用户,首先会验证区块头中的一些数据是否合法,如target(即记账权的阈值),以及nonce计算和一些版本信息。确定了这些之后区块链系统就会承认其合法性。
二、 同时获得记账权
如果两个矿工同一时间挖出区块,在短时间内,这两个区块都是合法的,剩余的矿工可以选择任意一个区块进行挖矿,当下一个区块挖出时,该区块在哪个区块之后,哪个区块就会变的合法。这里说的是最长合法链机制。
三、 重新挖矿
大家可能发现,当别人开始挖到新的矿时,对于其他矿工不得不重新打包交易,重新计算hash值,这一步开始时半途而废,但是由于哈希算法的memoryless性质,无论你什么时候开始挖矿,下一秒挖到矿的概率都是相同的。这也保证了挖矿的公平性。