比特币完整运行机制及拜占庭将军问题的解决

对于比特币的完整运行机制,其实前面几篇已经讲完了。这里再整理一下,使大家有更完整的印象。

整个过程如下:

1、每个节点,有新发起的交易就向全网进行广播;

2、所有节点都先在自己电脑创建一个区块,将自己收到的交易信息放到这个区块中;

3、每个节点都努力解题;

4、当一个节点解出题了,它就把自己的区块和解题答案向全网进行广播;

5、其他节点收到这个节点的答案和区块后,验证三件事:

1)该节点给出的答案是否正确,因为题目是哈希尝试,所以验证的时候只要拿该节点的答案哈希一下,看得出的结果是否符合题设给出的哈希;

2)验证该区块中的所有交易是否有效,即验证发送方是否有足够的比特币,以及确实是发送方发起,具体验证方法请见0619和0620两篇;

3)该区块里的交易是全新的,也就是说,没有被打包到链上以前的那些区块里。 这些验证通过了,其他节点才认同该区块;

6、其他节点认可该区块的方法,就是跟随该区块的末尾,继续制造新的区块来延长该链条。

扫描二维码关注公众号,回复: 3068577 查看本文章

7、如果两个节点同时解出了题怎么办?关键的一个原则就是所有节点只认可最长的链条,并且持续工作和延长它。具体请见昨天的文章。

现在,我们尝试以比特币的这套办法来解决拜占庭将军问题。

1、将军们出征前领一套相同的题目,这套题目有几百道题,一个一个排着序,每一道题都不简单,解出来需要花费一定的时间;

2、将军们到达各自的驻地后,如果有作战信息要发送给其他将军,就会派9个信使往其他9个将军那里各送一遍(类似于上面的1);

3、每个将军都会收到一些其他将军的信息(不一定全),他们各自将自己收到的信息打包汇总,创建区块(类似于上面的2);

4、每个将军开始解题,最开始是解第一道题,如果发现第一个区块已经上链,就解第二道,依此类推(类似于上面的3);

5、如果某个将军解出题了,就将自己打包的信息和解题的答案发给其他将军(类似于上面的4);

6、其他将军对答案和打包的信息进行验证(类似于上面的5);

7、其他将军认可他的方法,就是在他的区块后面,继续工作予以延长(类似于上面的6);

8、如果两个将军同时解出题了,冲突解决类似于上面的7。

这样,几个区块后,每个将军的指令都存储在区块链上了,也就是说,每个人都知道了其他人的想法,便可少数服从多数,统一行动,问题得解。在0621里说过,拜占庭将军问题里只要叛徒数量少于1/3就没问题。我们假设叛徒是3个,根据叛徒的作恶类型来看看效果:

1、叛徒发给其他将军的信息是“进攻”,但真正进攻时自己却不上。 假如3个叛徒都是发的进攻指令,如果剩下的7个将军里也有3个以上发的是进攻指令,那么就有6个进攻,少数服从多数,大家都会进攻。即使叛徒不进攻,也有7只军队进攻,仍然可以取胜; 假如3个叛徒都是发的“进攻”指令,如果剩下的7个将军里不足3人发的是进攻,那么达不到条件,大家都不动,也没啥问题。

2、叛徒发给部分将军的信息是“进攻”,给另一部分将军的信息是“不进攻”。 因为每个将军的信息都会上链,如果叛徒这样做的话,立马暴露。 当然,用比特币的玩法完全应用到这个场景是不完美的。比如说,如果有个叛徒将军解题特别厉害,也就是能发动51%攻击,那这套玩法就玩不转了,因为比特币系统有博弈机制,创建区块有奖励,这里没有。

猜你喜欢

转载自blog.csdn.net/lianquan_cn/article/details/82023655