京东秒杀
国美-超级5
索尼Xperia旗舰
限时优惠页 - 京东
自营热卖

区块链与状态机

愁蝶未知 1年前   阅读数 133 0

区块链与状态机

前言

在学数字逻辑的时候接触过状态机,区块链, 以太坊智能合约中也提到了状态机,想把这两个概念融合在一起理解清楚。

状态机

状态机的关键是转移,会把转移的状态表现出来。而状态机一般以状态图的形式呈现。
像参考中说的一样,状态机编程有点像系统编程,在windows编程中,一个窗口有多种状态,简单一点就是两个状态:选中和非选中状态。当鼠标点击窗口内部(事件发生,或者理解成一个触发器trigger)时,窗口的状态改变,由非选中变成了选中,而可视化窗口看到的就是灰色的菜单栏变亮。这就是一个简单的状态机。
现在让我们放开想象,切换一下视角(或者专业一点,切换视图view),假设我们成了windows这个庞大系统中的一个小进程,系统中还有千百个进程处于不同的状态,或中止,或挂起,或正在运行。
现在,再切换一下视角,成为庞大互联网中的一个小主机,想象一下蜘蛛网的样子,每台主机的状态也有不同,或关机,或传输数据,或被攻击,每台主机都有不同的状态。

github贪吃蛇
github贪吃蛇的状态机示例

区块链

区块链中将各个节点(主机)视为状态机,整个网络是在不断动态变化的,通过状态机可以把握整个网络的动态。

状态机在区块链中的应用

切换成区块链内部视角,区块链除了各个区块外,本质上还是离不开网络。可以将区块生产节点理解为生态系统中的生产者,其他节点基于区块完成交易,验证,广播等各个动作,可以理解为消费者。每个节点都有不同的状态,通过状态机我们能描述清楚区块链的网络节点部分。

  • 智能合约接收外界输入,内部执行代码(执行动作,进行状态转换),最终达到一个新的状态

状态机与共识算法

共识算法理解

共识,也就是节点之间达成一致。达成一致是一种动态的平衡,可以理解为是一种状态。共识算法要求节点每隔一段时间达成一次共识,从状态机的角度上来看就是每隔一段时间达到某种状态。

区块链网络,本质上是一个P2P网络,也是一个分布式网络。分布式网络中一份数据有多个备份,存储在不同的节点(主机)上。使用状态机方法来解决分布式网络中的容错问题和一致性问题,是一种典型的解决方法。自然而然地,区块链的共识算法中的共识,就是保持各个节点的一致性,使用状态机方法来构建区块链的共识算法,也是一种主要的途径。

如何把状态机应用到区块链共识算法中

有限确定状态机,指的是状态机的状态是有限的,而且是确定的。通俗地讲,如果有10个相同的状态机,它们的输入一样,接受输入执行的动作顺序也一样,得到的最终输出也是一样的。共识算法的目的是在分布式网络中,让多个节点(主机)达成共识(一致的状态)。如果每一个节点(主机)上运行相同的状态机,那么当网络中的节点收到广播消息,并且通过验证机制确认消息的真实性后,执行这个消息中的指令,就能达到一致性的目的。

状态机在共识算法的具体表现

共识算法中,一般会规定多个角色,在角色之间进行切换,就可以理解是状态机进行状态的切换。

如何对消息进行验证(确认消息是真的)

这就可以讨论拜占庭问题了。

区块链生态

生态,也可以理解为一个系统。仅仅从技术层面看,区块链不止是区块和链,还有网络,规则等一系列衍生。

参考

状态机理解
状态机理解2
【paper】状态机方法来实现分布式容错系统

阅读更多
(function(){ function setArticleH(btnReadmore,posi){ var winH = $(window).height(); var articleBox = $("div.article_content"); var artH = articleBox.height(); if(artH > winH*posi){ articleBox.css({ 'height':winH*posi+'px', 'overflow':'hidden' }) btnReadmore.click(function(){ if(typeof window.localStorage === "object" && typeof window.csdn.anonymousUserLimit === "object"){ if(!window.csdn.anonymousUserLimit.judgment()){ window.csdn.anonymousUserLimit.Jumplogin(); return false; }else if(!currentUserName){ window.csdn.anonymousUserLimit.updata(); } } articleBox.removeAttr("style"); $(this).parent().remove(); }) }else{ btnReadmore.parent().remove(); } } var btnReadmore = $("#btn-readmore"); if(btnReadmore.length>0){ if(currentUserName){ setArticleH(btnReadmore,3); }else{ setArticleH(btnReadmore,1.2); } } })()
注意:本文归作者所有,未经作者允许,不得转载

全部评论: 0

    我有话说: