四,比特币系统 共识机制的实现

2,共识协议
数字货币本质上是一个文档,如果没有防伪标志(或交易记录),那么用户就可以通过随意复制文档形成数字货币,从而实现double spending。
在比特币系统中,比特币只能通过铸币交易(矿工挖到一个block,会有一定额度的比特币产生,作为挖矿奖励)产生。而这种币从本质上来说是一个文档,如果不做任何防伪措施(如:人民币上有各种防伪标志,很难被复制),则用户将可以通过复制文档来实现double spending。为了保证货币的有效性,消费的合法性,比特币系统中采用了集体监管交易记录的机制,来确保货币职能,通过这一机制,在某一交易过程中,卖家可以通过追踪block chain上买家的交易记录,来确定买家目前有足够的货币来进行此项交易,从根上断绝了买家double spending的可能。如下图所示,每个账户的货币来源均可通过追踪previous block来确定,从而保证买方有足够的货币进行交易。在交易过程种,input 和 output 均需要将自己的 public key 提供给对方。(在下方A到B的交易种,A用B的Hash(public key)将info加密,B收到后,在用自己的private key 解密info。)在比特币系统中,input和output均为一段脚本,在验证交易合法性时(验证买家是否有足够的货币进行交易),需要将买家交易链上的previous output脚本与当前买家Input 脚本进行拼接,如果[input now , previous output]脚本拼接后,操作指令可执行,则认为该交易合法,否则,为非法。在A和B进行交易时,区块链中的所有“全节点"均需验证(记录)二者交易的合法性,以保证交易记录的一致性。(在比特币系统中,节点分为:全节点 full node和 轻节点 light node,全节点也被叫做 fully validating node,其参与了整个区块链的构造和维护,每个全节点均需要验证比特币系统中的所有交易,而轻节点仅使用了一些必要信息,以进行交易,无法验证double spending。)

这种保证货币有效性的方式,与中心化系统有很大区别,以支票为例说明,支票本身为一个纸质文档,如果不经银行运作,则一只支票则可以重复多次被使用,而正是由于银行对于支票(交易)的记录,才得以保证每位用户可用金额与自身所有相符,交易能够合法进行。
对比 去中心化系统 和 中心化系统,二者主要区别在于 交易记录 由谁监管,对于 去中心化系统,交易记录被记录在block chain之中,由所有节点监管,以保证交易记录不被篡改,而对于中心化系统而言,则由银行执行这一监管职能。

在这里插入图片描述

在比特币系统中,各个全节点需要针对以下两项达到共识:
1)就blockchain中账本内容达到共识
2)投票决定,某一新出的block是否写入block chain

去中心化区块链的这种共识机制应用到了一个理论:distrubited consensus(分布式共识):
举例说明,一个分布式系统维护了一个hash table,这个distrubted system需要取得的共识是,这个hash
table中包含了哪些 (key , value)。当在distrubited system中的一台电脑 向 这个 hash
table 插入了一对(key , value),这个distrubited system需要确保其中所有的服务器均收到了hash
table的这个修改,当在其他电脑上查看hash table时,同样能看到最新插入的(key , value)。
在分布式系统理论中,有几个著名的理论: 1,FLP impossibilty
therom,他指出,在一个异步的系统中,网络时延没有上限,即便整个系统中只有一个机器由于网络时延而一直处于faulty状态,整个系统也无法达到共识。
2,CAP theorem:一个分布式系统,只能满足以下这3个特性中的其中2个: consistency(一致性);
avaliability(可用性); paratition tolerance(分区容错性); 如果一个分布式系统想同时具备
consistency 和 paratition tolerance,则必须牺牲系统
随时可用的性能(因为网络时延的关系,分布式系统中各个机器 返回
consensus的时间并不一致,当且仅当分布式系统全部返回consensus,各台机器才可以执行下一条指令,否则会卡在当前consensus的确认中。
3,Paxos
theorem:根据这个理论设计出的分布式系统,极大程度的实现了consistency(只有极小可能无法达成consistency)。

针对比特币的这种共识机制,系统需要防范一些有恶意的节点 对系统的攻击,可能存在的问题如下:
1,有恶意的节点不断 提出一些 含有非法交易的 block,让系统中的其他全节点投票表决,是否将这个block写入block chain。通过这种方法,使得BTC system的其他节点一直处于 投票状态,而无法进行其他工作。
2,针对一个block是否入block chain,系统中的一些全节点 可能会直接忽略这一 投票请求,从而使得consensus一直无法达成(也叫行政不作为)。
3,由于网络时延的关系,比特币系统中各个节点对于投票结果的回复时间可能长短不一,如何设定 consensus 时间节点,使得整个系统效率最高?
4,如何确定比特币系统中 拥有投票权 的 成员? 即 membership 的设立机制?
在一些 联盟链 中,链上成员都是行业中的大型公司,侧面保证了联盟链成员都是好的,并无恶意。但是在比特币系统中,节点可以是各式各样的个人,组织 ,一个有恶意的节点可以通过不停的创造block,从而干预block入链投票结果,破坏系统性能(这种攻击也叫女巫攻击sybil attack)。

为解决上诉问题,比特币系统规定,根据节点的 ”算力“ 来决定 其 是否拥有投票权(记账权:写入下一个区块的权力):
一个节点组装好一个block后,需要搜索符合要求的nonce,只有当这个节点搜索到 有效nonce,且 block header 中的 nbits(target编码)域符合难度要求,block body中的交易全部合法(如果一个交易有合法签名,不存在double spending,则可认为其合法),这个block才能获得记账权,写入block chain。其在block chain中插入的位置 可以通过 在 blockheader中 写入 hash of previous blockheader 来设定。当一个节点A在获得记账权后,将block插入如下位置,且同时在此block中写入 一个交易 A -> A’,试图实现 A -> B 交易回滚,便对系统构成了fork attacking,为了阻止这种攻击,系统规定,如果出现 blockchain 分叉,则只有 最长链 才为合法链:
在这里插入图片描述
除上述一个分叉可能外,系统也可能由于2个矿工同时挖到block,而自成一链,从而使得block chain 分叉,在这种情况下,系统中的其他节点根据其最早收到的消息,可能会 接受 不同的区块,延其往下扩展blockchain。一段时间后,其中一链成为longest 合法链,另一个则会成为orphan block,被丢弃,这个orphan block所获得的block reward也会失效,具体如下图所示:
在这里插入图片描述
On the whole,BTC system需要对 ”去中心化区块中账本内容“ 达成共识 <- 在BTC system中,只有获得 记账权 的 节点 才能将交易内容写入 区块 <- 为了获得记账权,节点需要自行组装区块,寻找满足条件的nonce,使得H(block header)<= target <- 秉持多劳者多得,BTC system,节点通过 搜索 符合条件的nonce,来证明其工作量 <- 一个公平共享的世界。
综上,BTC system的共识机制 实质是靠 算力投票 来实现的。拥有高算力的节点 在求解 puzzle friendly nonce时,其胜出概率较大(hash rate较大)。这也从根本上防范了 sybil attack(不管一个节点创建多少账户,其算力在整体中的占比是不变的,因而,其投票权重也不会发生改变)。

猜你喜欢

转载自blog.csdn.net/u014765410/article/details/122611079