肖臻公开课(四)——比特币中的共识协议

本笔记对应北京大学肖臻老师《区块链技术与应用》公开课第四课。

0.前言

本节的内容非常多,肖老师首先提出两种有缺陷的电子货币解决思路引出使用区块链做电子货币的必要性。之后着重讲解了两个关键问题:

  • 谁来发行货币?

  • 怎样防止double spending attack?

1.使用区块链的必要性

如果央行要发行数字货币,思考如下解决方式:

  • 采取和现实世界货币类似的方式发行数字货币:在每个数字货币上印上独有的银行的“防伪标志”(数字签名)。

缺点:显然这种方式有一个巨大的缺陷,因为计算机的世界不同于现实世界,电子货币呈现在计算机内存中就是一个文件,而这个文件是非常容易被复制的。这样就无法避免某个人无限复制某张货币然后无限使用。

  • 央行维护一个巨大的数据库,记录每个人有多少钱,然后每笔交易发生的时候央行对数据库进行修改

缺点:这种方式显然是一个中心化的方式,对央行的要求太高了,繁琐而且消耗大。

  • 使用基于区块链的去中心化的电子货币解决方案,众多用户共同维护一个数据结构——区块链

优点:将中心化方案中央行的职责分配到了每个用户的身上。

2.怎样防止双花攻击?

被众多用户共同维护的区块链中,保存了所有信息,可以有效的防止双花攻击,具体结构如下:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ReKwJrZp-1677069444534)(https://gitee.com/yu88888//myimage/raw/master/master/image-20211014193848295.png)]

在上图中,包含两种哈希指针,红色的为指向币的来源的指针,绿色的为指向上一个区块的指针。

这样设计的目的就是解决双花攻击,比如第三个区块中,B转给C 2个比特币,首先B要通过红色的指针进行回溯,确定B确切拥有2个比特币后,才能完成交易。

还有几个问题需要思考:

  • 在上图中,A给B转账,那么B的地址,A怎么知道呢?

在现实生活中,想给某个人转账,那么别人会告诉你银行密码,在比特币网络上也是一样,想要给某个人转账的时候,需要对方给你提供他的公钥才能进行转账。

  • 在上面提到的这次交易中,A要提供什么信息呢?

A要在交易中提供自己的签名和公钥,网络上的其他人要使用公钥对A的签名进行验证。

  • A自己提供签名自己提供公钥,是否会产生“冒名顶替”的风险?

考虑这种情况,C提供自己的签名,提供自己的公钥,给A转给B的交易中。那么其他人验证签名和公钥显然是正确的,但是真正扣账的确实A,这样显然就照成了“冒名顶替”。

在区块链网络中,不仅要验证签名和公钥,还要验证这次交易的公钥,与溯源的上个区块中的公钥是否相同(也就是验证到底是不是这个人拥有这么多比特币)。

  • 上述交易中提到的验证过程是怎么验证的?

在每笔交易中,都有一个输入脚本和输出脚本。在每次验证的时候,都将本次交易中的输入脚本,和溯源到的上一个交易中的输出脚本拼接起来,运行一遍,如果没错就证明通过。

3.共识协议

在比特币系统中,要达成的共识是众多用户维护的去中心化账本的内容,那么需要寻找一个合理的机制来维护共识。

在现实生活中,想要达成共识,最常见的方法就是投票法。但是在比特币系统中,这种方法是行不通的。

因为比特币系统中,一个账户就是一个公私钥对,它的创建非常简单,也没有受到一些限制,所以坏人可以创建很多个账户来进行投票扰乱系统,这种攻击方式也称为女巫攻击。

在比特币系统中,使用的共识机制是POW。它和现实生活中的工作类似:如果一个人想要获得某种奖励,那么他必须要做一些工作。在比特币网络中详细来讲,想要获得去中心化账本的记账权,那么需要解开一个特定的函数:H(Block Header)<=target.这个函数是经过精心设计的,能否快速的解开这个谜团与节点的算力有关,同时这个函数的解开具有无记忆性,这种种机制就是让参与竞争的节点,全部平等,保证获得记账权的几率这个节点算力占总算力的比例相等。

  • 由上述的机制可以看出,获得记账权是很难的,那么这些节点为什么要耗费资源来争夺记账权呢?

抢夺记账权的过程也是挖矿的过程,得到记账权后,发布一个合法的区块,可以获得出块奖励(这个出块奖励是比特币唯一的产生新币的方式),最初出块奖励设置为50个比特币,协议规定每出21W个区块,出块奖励就减半。同时每笔交易都会收取交易费,但是现有的交易费普遍偏低。这两个费用能给“挖到”区块的矿工一大笔物质上的财富,所以就有了挖矿的动力。

还有额外几点需要注意:

  • 比特币协议规定,接受的区块应该是在扩展最长合法链。
  • 区块链中容易出现分叉,而不在合法链上的区块,出块奖励是无法获得的。

4.总结

本章内容非常多,也很重要,一定要把老师的课程细细品读,然后再结合笔记慢慢体会

猜你喜欢

转载自blog.csdn.net/doreen211/article/details/129170102