《区块链技术与应用》笔记(三)共识机制

双花攻击

数字货币本身是一个带有签名的数据文件,既然是文件那么就可以进行复制。对于用户来说就是将统一货币花费两次。如果是中心化机构管理,那么每次验证货币防止双花都需要通过第三方机构(即中心化机构本身),但实际场景下这种可信赖的机构并不存在。

去中心化解决了那些问题?

数字货币的发行来源、发行方式、发行量、发行时间

一个交易包含了输入和输出两部分,输入部分需要说明币的来源和输入者的公钥hash,输出部分要给出收款人的公钥hash。
交易过程

如课程中的举例。A获得铸币权,发布的10个比特币转给了B和C,B又转给了C和D,而此时C的币来源有两个:B转给他的2个币和最开始A转给他的5个币。这就是一个简单的区块链。其中是有两种hash指针,一种使得区块本身形成链,第二种就是币来源形成的链,它说明了比特币的来源并非凭空捏造,进而可以防止双花攻击。
交易过程:需要付款人的签名和收款人的地址才能交易。

  • 付款人需要提供自己的公钥,如果该公钥和它的币来源交易中的公钥对的上,那么就防止了恶意节点伪造付款人公钥来偷走付款人的比特币

  • 收款人也需要付款方的公钥来验证它的签名是否有效,

:这种验证过程在比特币系统中是通过脚本来实现的,在实际场景中,一个区块包含多个交易,交易通过Markle Tree组织起来,在区块中存储

区块信息

Block Header Block Body
Version协议版本 transaction list 交易列表
Hash of revious block header指向前一个区块指针
Markle Root Hash
target 挖矿难度目标阈值
nonce 随机数

注意:

  • Hash of revious block header只计算一个区块的Header部分
  • 轻节点指利用区块链,不参与区块链系统维护和构造,没办法独立验证交易合法性。系统中大多数节点为轻节点

公式机制

各个节点是不能独自完成区块链构建的。如果肚子打包交易形成区块链,那么区块链的内容必然不一致。从分布式系统的角度来说,账本内容需要取得分布式共识,从而保证区块链内容在不同的节点上的一致性

例子:分布式hash表
不可能结论:在一个异步系统中,网络时延无上限,即使只有一个成员是有问题的,也不可能达成共识。
CAP Theorem:任何一个分布式系统中最多只能蛮子其中两个性质。paxos协议可以保证一致性,即如果达成共识那么必然是一致的,但特殊情况下可能会一直无法达成共识

  • 一致性
  • 可靠性
  • 容错性

比特币的共识机制

区块链本身可以看成是一个所有节点都在维护的账本,那么账本中所记录的交易是必须同步的。而比特币系统中创建账户是非常简单的事情,因此系统中的节点不排除包含恶意节点的可能性,只是比例较小而已。大多数节点是好节点,这种情况下需要设置一个共识机制

如果直接投票,某个节点打包交易到区块,然后将其发给其他节点,其他节点检查该候选区块,检查若正确投赞成票,票数过半则加入区块链,这种方法:

  • 恶意节点不断打包,导致一直无法达成共识,浪费时间在投票上
  • 无强迫投票手段,某些节点不投票
  • 网络延迟事先未知,投票需要等多久?效率上会产生问题
  • 成员资格membership 问题,如果是国际联盟链,加入的要求高,这种投票方式是可行。但比特币系统中只有交易时才能知道账户的存在,这样恶意者会生成大量公私钥,当这些公私钥超过系统一半数目时就可以获得支配地位,即:女巫攻击。因此简单的投票方案是不行的

比特币选用的投票机制是基于计算力来投票的。每个节点都可以在本地组装出一个候选区块,将认为合法的交易放入区块里,然后开始尝试各种nonce值,nonce位于Block Hader中的一个域,4个byte大小,计算nonce值的结果,如果哪个nonce值计算后的结果符合 [H(block header)<=target] 这个不等式的要求,求出的Hash值落在了指定范围之内,那么这个节点就获得了记账权。就可以往比特币系统中写入下一个区块的权利。其他节点收到这个区块后,需要验证区块合法性、检验Blcok hader中各种信息。如果全部符合要求,再查看block body中的交易列表,验证每个交易是否合法(1.合法签名 2.没有没花费过),如果有任何不符合要求的,那么区块就是不能接收的。

区块的合法性验证全部通过,也不一定会被区块链所接受
合法区块被拒绝

  • 如果发生分叉情况,暂时保存分叉情况,但区块链只承认最长合法链(Longest valid chain) ,所以分支上的区块会被拒绝。比特币中规定,接受的区块应该是在扩展最长合法链
  • 如果由两个节点同时获得记账权,那么将会获得两个等长的合法链。默认情况下,节点接收最先听到的区块,该节点会沿着该区块继续延续(继续扩展,代表认可所发布的区块),那么区块所在的链就胜出,被扔掉的称为孤儿区块

这个例子其实是一个分叉攻击的例子。即: 通过往区块链中间位置插入一个区块,来回滚某个已经发生了的交易。
分叉攻击

消耗计算资源区争夺记账权有什么好处?

出块奖励:一个获得合法区块的节点,可以在区块中加入一个特殊交易:铸币交易。铸币交易是比特币系统产生新比特币的唯一途径。

系统规定初始区块可以获得50个比特币,但之后每隔21万个区块,奖励减半。

挖矿:争夺记账权
矿工:争夺记账权的节点

posted @ 2022-04-05 21:14  我永远喜欢石原里美  阅读(261)  评论(0编辑  收藏  举报