x

xxddwang

V1

2022/10/23阅读:16主题:WeChat-Format

共识机制是区块链的本质关键

共识机制确保区块链记录的交易准确有效

比特币网络被认为是一个去中心化现金系统,链上完整记录了所有账户之间的交易。最初的比特币都是从矿工那里来的,矿工可以把比特币转账给其他账户,这些转账记录完整地记录在链上,就形成了比特币网络。

以太坊在现金系统上增加了可以针对状态进行编程的虚拟机EVM,编程语言solidity,以及智能合约。智能合约是可以在虚拟机里执行的程序,这种程序一旦发布到链上,永远无人能够改变。这些程序也可以改变账户之间转账的记录,就是状态。

共识机制的重要性

区块链上有海量的账户,相互之间转账也是海量的,这么多的转账必须要获得一致性的认可才算数。

你说张三给给你了一个币,这个不仅张三认,网上所有的人都得承认,这是最关键的,而且这个认可是没有歧义唯一的。这种认可,就是”共识机制“。如何形成共识机制,是区块链必须解决的关键问题。说白了就是让所有人,在网络上就是所有计算机,都认可有这个交易记录的结论。

具体来说,就是要一个机制来决定最新的区块由谁产生。这里要解决两个问题:

必须“确定权威链”抵抗“女巫攻击” 区块链上有女巫组织了一群计算机想篡改记录,把自己的账户列成接收账户,然后尝试让其他计算机把这个记录认可。这些恶意节点伪装成多个用户来把虚假的账本尝试记录到链上,这称为“女巫攻击”。这种情况必须要有能力保证不会发生,这个机制我们把它称之为”确定权威链”

共识机制必须防止双花,还有一种情况是如何防止你只有一个币但是因为两个人记录了收到你的币导致账本上认为你原来是有两个币。你转给了张三一个币,但是张三、李四两个人都有收到的记录。相当于一笔钱花了两次,简称“双花”。这种情况如果发生就会导致恶性通胀,破坏掉整个经济系统。因此必须有机制来确定人家一致认可的交易是不重复,无歧义的。

因此区块链需要机制,来保障一个分布式,没有中心控制的网络能够有效地达成共识,不产生争议,没有双花,不容易被攻击。这个机制就是共识机制,产生这个机制的网络模块就叫做“共识层”。

影响最大的共识机制是PoW与PoS

共识机制有很多种,影响最大的是比特币以及以太坊早期使用的PoW工作量证明,以及以太坊现在使用的PoS权益证明。

当前最流行的共识机制就是PoW工作量证明机制,但是PoW非常消耗能源,因此以太坊用了几年的时间将自己换成了PoS权益证明。

权益证明里不再有传统意义上的矿工,而是改为验证者,虽然还有人将这些验证者称为矿工。矿工是相互竞争看谁算的快,而验证者不再竞争,不再内卷,而是由算法随机选择。验证者有质押,因此可以被惩罚。

工作量证明PoW解释说明

Hash(哈希)过程

我们先讲哈希函数这个基础知识。Hash(哈希)的计算的输入是一个任意长度的字符串数据,可以是一个单词,也可以是一本红楼梦,但是输出永远是一个固定长度的字符串,比如比特币使用的SHA256函数永远输出一个256位的字符串。

你输入红楼梦里所有的文字,输出得到一个256位的字符串,但是你改动了红楼梦里的一个字,再用这个函数计算,就会得到一个完全不同的256位字符串。而通过这个字符串是无法知道你输入了什么的。但是知道你给了原来的字符串,任何人都可以验证你这个哈希值是不是通过这个字符串生成的。因为他只要自己也用哈希函数对这个字符串做运算,然后对比你的两个字符串是否相同就可以了。

另外,你哈希出来的这个数,可以提出要求,比如要求前56位是0,那么也就是说只有小于200位最大数的数字才符合要求。这个200位的最大数,就可以被认为是一个难度,降低了难度就要求小于一个201位的数就可以了,同样的,增加难度就可以要求必须小于199位的数。

PoW的工作原理

我们知道区块链又叫做分布式账本,就是把网上所有的转账交易都记录下来,打包成一个块,提交到一条链上,然后所有节点的链就多了一个记录块。 这个打包、提交的过程是由叫做“矿工”的计算机来完成的。

这里有个问题,网络上有数不清的交易,每个节点都记录,有的多有的少,到底以谁的为准呢?因此一条链需要限制节奏,比如比特币网络大约10分钟左右记录一次,以最先提交的节点为准,后面的就要排到下一个区块了。

然后系统会让矿工算两道数学题,一道简单,一道难。简单的这道题就是把记录当前这10分钟内的交易记录打包,然后对上一个区块进行Hash运算,并把这个哈希值添加到这个包的后面。

第二道题是每个节点都会获得一个随机数,然后让所有节点都把这个随机数添加在当前这个块的后面,再针对这个新快做哈希运算。虽然每个节点的块都是相同的,但是分配的随机数不同,因此导致新的数据也不相同,这样算出来的哈希值就是完全不同的。

第二道题的答案,就是谁先算出来前72位都是0的哈希值,就算谁赢,这个节点作为矿工就赢得了这个区块的奖励。然后把这个区块添加到区块链的末尾。这样网络就完成了一次PoW的新区块确认。

以太坊的幽灵算法处理分叉,确定权威链。

之所以要这么设计一种毫无意义的计算,就是为了让产生新区块的难度增加,避免同时产生新区块的情况。但是由于网络延迟等问题,总还是有小概率情况下发生两个或者多个节点同时产生了有效区块。

这种情况下那个没有被接受的区块会获得一点奖励(在以太坊PoW阶段是1.75ETH),并且把这个正确但是不会被使用的块叫做“叔块”,大叔很好但是不是爸爸。因此还建议所有使用这些交易记录的应用等待一分钟以上,以确保交易完成。

比特币网络采用的中本聪共识两个关键特点:PoW与最长链规则。 最长链规则就是选择最长的那条链作为权威链。

以太坊采用的是幽灵算法来确定权威链。具体来说是将分叉区块也考虑了进来,对于“叔块”一定的权益,虽然最终不会承认叔块的交易,但是会给叔块的提交者一定的奖励。

如图:虽然5B、6A的链最长,但是考虑分叉的因素,GHOST协议选择了3D作为权威链。

Pow用简单的比拼算力方式带来了能耗浪费的问题

这里可以看到算第二道题的过程中所有的矿工都开足了算力在计算,但是最终只能有一个矿工成功,获得奖励,其他矿工就只是白白浪费了算力以及背后的电费。这也是PoW一直被人所诟病的地方,尤其是今天全世界的能源紧缺的情况下。

分类:

后端

标签:

区块链

作者介绍

x
xxddwang
V1