学习区块链随笔(五)

区块链如何保证所有节点最终记录一份相同的正确数据,即达到共识呢?这是一个十分关键的问题,它关系着整个区块链系统的正确性和安全性。通过共识算法。

1.PoW(proof of Work)类的共识算法。工作量证明类,比特币采用。这类算法的核心思想是所有节点竞争记账权,而对于每一批次的记账都赋予一个难题,要求只有能够解决难题的节点挖出的区块是有效的。同时所有节点都不断地通过视图解难题来产生自己的区块并将自己的区块追加在现有的区块链之后,但全网中只有最长的链才能被认为是合法且正确的。

比特币采用这种算法的好处1.难题难以解答,但很容易验证正确性。2.全网平均解题耗时可以方便的通过调整难题的部分参数来控制,可以很好的控制链增长的速度。同时通过控制区块的增长速度,它还保证了若有一个节点成功解决难题完成出块。该区块能够以(与其他节点解决难题的速度相比)更快的速度在全部节点之间传播,并且得到其他节点验证的特性。这个特性再结合它采取的“最长链有效”的评判机制就能够在大多数节点都是诚实(正常记账初快认同最长链有效)的情况下,避免恶意节点对区块链的控制。

然后不得不承认的是,PoW类算法给参与节点带来的计算开销除了延续区块链生长外无任何其他意义,却耗费了巨大能源,且开销会随着参与的节点数目的上升而上升。

2.Po*凭证共识算法。根据每个节点的某些属性,定义每个节点进行出块的难度或优先级,并且取凭证最优的节点,或最高的小部分进行加权随机抽取某一节点,进行下一段时间的记账出块。

优点,降低整体出块开销,同时有选择地分配出块资源,即可根据应用场景选择“凭证”的获取来源。

缺点:凭证的引入了提高了中心化算法的程度,一定程度上有悖于“去中心”的思想,且该类算法未经过大规模的正确性验证试验,部分算法的矿工激励不够明确,节点缺乏参与该类共识的动力。

3.BFT类算法(拜占庭容错类算法)。无论PoW还是Po*都是将所有节点视作竞争对手,参与节点都要进行竞争来获取出块权利,BFT希望所有节点系统工作,通过协商来产生被所有节点认可的区块。

拜占庭容错问题主要描述了分布式网络节点通信的容错问题,随着区块链迅速发展,许多针对具体场景的优化BFT算法不断涌现。

BFT步骤

(1)定期选择一个领导者,领导者接收并排序区块链中的交易

(2)领导者产生区块,并递交给所有其他节点进行验证。

(3)其他几点举手表决,接收或拒绝。如果大部分节点认为领导存在问题,节点可以多轮投票崔凡领导再以某种协议产生新的领导节点。

BFT一般都有完备的安全性证明,能在算法流程上,保证群体中恶性节点数不超过三分之一时,诚实节点账本保持一致。

缺点:算法协商次数多,协商通信开销比较大,导致算法不适用于节点数目较大的系统,业界认为BFT算法承受的节点不超过100.

4.结合可信执行环境的共识算法。上述三类为传软件共识算法,本算法为软硬件结合的共识算法。可信执行环境是一类能够保证绝对安全可信无法被外检干预修改的运行环境,它与设备上的普通操作系统Rich OS并存,并且能给Rich OS提供安全服务,可信执行环境所能够访问的软硬件资源与Rich OS完全分离,从而得到了可信执行环境的安全性。

利用可信执行环境,可以对区块链系统中参与共识的节点进行限制,很大程度上可消除恶意节点的不规范或恶意操作,从而减少共识算法在设计设计时需要考虑的异常场景,一般来说能够大幅提升共识算法的性能。

智能合约。区块链从最初单一数字货币应用,至今天融入各个领域,智能合约可谓不可或缺。各类应用都是以智能合约的形式,运行在不同区块链平台上。

1.智能合约是什么?

一个智能合约是一套以数字形式定义的承诺,包括合约参与方可以在上面执行这些承诺协议。智能合约是一种满足一定条件时,就自动执行的计算机程序,例如自动售货机。智能合约不仅是将传统的合约电子化,它的真正意义在革命性地将传统合约的背书执行由法律替换成了代码。

智能合约一旦在区块链上部署,所有参与节点都会严格按照既定逻辑执行,如果某个节点修改了智能合约逻辑,那么执行结果就无法通过其它节点的校验而不会被承认,即修改无效。

2.智能合约的原理。一个基于区块链的智能合约需要包括事务处理机制,数据存储机制,以及完备的状态机,用于接收和处理各种条件,并且事务的触发,处理及数据保存都必须在链上进行。

3.智能合约的安全性。合约是严肃的事情,传统合约需要专业的律师团队来撰写。

(1)当前智能合约主要由软件从业者完成,其所编写的智能合约在完备性上有所欠缺。因此和传统相比更容易产生逻辑上的漏洞。

(2)有的区块链平台利用了Go, Java等高级语言编写只能合约的功能,而这些高级语言不乏具有不确定性的指令,可能会执行时内部状态发生分歧,从而影响整体系统的一致性。有的平台引入了不少改进,对执行动作上的不确定性进行了消除。如超级账本项目的Fabirc子项目即引入了先执行,背书,验证,再排序写入账本的机制。以太坊也是通过限制用户只能通过其提供的确定性语言进行智能合约的编写,确保了其上运行的智能合约在执行动作上的确定性。

P2P网络是一种消除了中心化的服务节点,将所有的网络参与者视为对等者,并在他们之间进行任务和工作负载分配依靠用户群共同维护的网络结构。

(1)P2P网络有着极强的可靠性,任何单一或少量节点故障都不会影响整个网络正常运转。

(2)P2P网络的容量没有上限,随着节点数量的增加,整个网络资源也在同步增加。

由于每个节点都可以从任意节点处得到服务,同时由于P2P网络中暗含的激励机制,也会尽力向其他节点提供服务,因此P2P中节点数越多,服务质量越高。

在区块链中所有交易及区块的传播并不要求发送者将消息发给所有节点,节点只需要将消息发给一定数量的相邻节点即可,其他节点收到消息后,会按照一定的规则转发给自己的相邻节点,最终通过一传十,十传百的方式,将消息发给所有节点。

猜你喜欢

转载自blog.csdn.net/u010145988/article/details/104495174