比如全世界共有100个节点在争夺记账权,那么初始状态假设为区块链P,之后两个节点a,b分别同时计算出了合法的区块A,B,并广播。此时可能存在的情况是一些节点区块链为P->A,另外为P->B。此时就发生了不一致。假设之后的某时刻又有一个节点(P->B)c,产生了区块C,那么此时其区块链变为P->B->C,c节点广播区块时候就会将节点区块来呢为P->A 的节点转为 P->B->C,即选取最长链作为共识链。注意这里你可能有个疑问怎么P->A 的节点怎么会有B 的 信息呢?其实每个抢先计算成功的节点都会将区块广播给其他节点,所以同时发现区块导致的分叉会传遍全网络,只不过在c节点发现新区快C的时候,回抛弃P->A ,而选择P->B->C 。总结一句话就是最长链共识。
数学函数算法,表达一种数据映射关系。h = hash(X|z)主要具有如下特征
1、原像不可逆 即无法通过h=>z(除了暴力试错 即在值集合中一个个试)
2、发散性。即 即使z做了微小改动,其的到的h也是差别巨大的。
SHA-2 算法就是典型的哈哈希算法
区块链的结构如下其中父区块hash值 和 Merkle root 均为 hash算法的应用。
Merkle root
对称加密算法需要提前分享密钥,而非对称加密需要一对密钥,分为公钥和私钥,私钥由一个随机数生成,比特币中私钥产生的范围非常大,2的256次方,如果我们有了私钥,则
上图中,所有的交易都可以找到前向交易,例如TX5的前向交易是TX2,TX2中的Output1作为TX5中的Input0。
意思就是TX2中的付款人使用了Output1中指向的比特币转移给 TX5 中的收款人,接着TX5中的人又把收到的比特币转移给了TX6中的收款人,成为了TX6中 Output0。
我们也可以发现,TX6中的收款人还没有产生TX7交易,也就是说Output0还没有被花费,这时候我们终于得到了UTXO的真正语义:Unspent Transaction Output,未花费的交易输出。
我们这时候可以发现UTXO也同样能表示余额,不过是重演计算的方式,它用不同的方式表达了余额,我们把一个地址上所有的UTXO全部找出来,就是这个地址总的余额了。
我们还可以发现,无论是TX5还是TX2,都已经成为历史交易,它们都忠实客观地记录了两笔交易,这两笔交易代表的是事件,而不是余额状态转移,这是我们看到的最直观的区别。