3. 区块链系列教程之:比特币中的共识
简介
在比特币的P2P网络中是怎么达成共识的呢?达成共识需要做哪些交易的校验呢?交易和区块是怎么传播到整个区块链网络的呢?看完这篇文章你就 明白了。
比特币中的共识
之前我在讲分布式系统的时候有讲过分布式系统的几个共识算法,包括raft,Paxos和拜占庭容错算法。
比特币的共识和之前讲的都不同,它使用的是工作量证明(POW)的算法。
比特币的去中心化共识由所有网络节点的4种独立过程相互作用而产生:
▷ 每个全节点依据综合标准对每个交易进行独立验证
▷ 通过完成工作量证明算法的验算,挖矿节点将交易记录独立打包进新区块
▷ 每个节点独立的对新区块进行校验并组装进区块链
▷ 每个节点对区块链进行独立选择,在工作量证明机制下选择累计工作量最大的区块链
交易的校验
比特币网络中,交易是由网络中的节点独立校验的。
在交易传递到临近的节点前,每一个收到交易的比特币节点将会首先验证该交易,这将确保只有有效的交易才会在网络中传播,而无效的交易将会在第一个节点处被废弃。
每一个节点在校验每一笔交易时,都需要对照一个长长的标准列表:
▷交易的语法和数据结构必须正确。
▷输入与输出列表都不能为空。
▷交易的字节大小是小于MAX_BLOCK_SIZE的。
▷每一个输出值,以及总量,必须在规定值的范围内 (小于2,100万个币,大于0)。
▷没有哈希等于0,N等于-1的输入(coinbase交易不应当被中继)。
▷nLockTime是小于或等于INT_MAX的。
▷交易的字节大小是大于或等于100的。
▷交易中的签名数量应小于签名操作数量上限。
▷解锁脚本(scriptSig)只能够将数字压入栈中,并且锁定脚本(scriptPubkey)必须要符合isStandard的格式 (该格式将会拒绝非标准交易)。
▷池中或位于主分支区块中的一个匹配交易必须是存在的。