主页 > imtoken官方地址 > 区块链共识机制技术1——POW(Workload Proof)共识机制

区块链共识机制技术1——POW(Workload Proof)共识机制

imtoken官方地址 2023-01-17 12:40:22

什么是共识机制

所谓“共识机制”,就是通过特殊节点的投票,在极短的时间内完成交易的验证和确认; 对于一笔交易,如果几个利益不相关的节点能够达成共识,我们就可以认为全网对此也达成了共识。

区块链是一种去中心化的分布式账本系统。 但是,在实际操作中,如何解决呢? 因为去中心化之后,可以保证整个系统有效运行,每个节点都诚实记账。 在没有所谓中心的情况下,不信任彼此的个人之间就交易的合法性达成共识的共识机制。

共识机制的目标

区块链作为一种按时间顺序存储数据的数据结构,可以支持不同的共识机制。 共识机制是区块链技术的重要组成部分。 区块链共识机制的目标是让所有诚实节点在满足两个属性的同时保持一致的区块链视图:

1)一致性。 所有诚实节点保存的区块链前缀部分完全相同。

2)有效性。 一个诚实节点发布的信息最终会被所有其他诚实节点记录在自己的区块链中。

为什么需要共识机制?

在分布式系统中,各个主机通过异步通信形成一个网络集群。 为了保证每台主机达成一致的状态共识,需要在主机之间进行状态复制。 在异步系统中,可能会出现各种问题,比如主机无法通信,或者新的性能下降,网络也可能出现拥塞和延迟。 类似的故障可能会导致错误消息在系统内传播。 因此,需要在默认不可靠的异步网络中定义一个容错协议,以保证每台主机达成安全可靠的状态共识。 因此,利用区块链构建基于互联网的去中心化账本,首要解决的问题是如何实现账本数据在不同账本节点上的一致性和正确性。

这就需要借鉴现有的分布式系统状态共识算法,确定网络中记账节点的选择机制,以及如何保证账本数据在全网形成正确一致的共识。

如何评价一个共识机制的优劣: 安全性:能否有效防止二次支付、私人挖矿 可扩展性:当系统成员数和待确认交易数增加时,系统负载和网络流量会发生变化,性能效率是通常以网络吞吐量衡量:每秒可处理的交易数量资源消耗:共识过程中消耗的CPU、内存等计算资源区块链分类

在开始梳理共识机制之前,首先需要对现在的区块链有一个简单的了解。 目前,区块链根据共识算法和应用场景分为三类:公有链、联盟链和私有链。

公链是一个完全开放的分布式系统。 公链中的节点可以自由加入或退出,无需严格的验证和审计,如比特币、以太坊、EOS等。在公链中,共识机制不仅需要考虑网络中是否存在故障节点,还需要考虑恶意节点,保证最终一致性。

联盟链是一个相对开放的分布式系统。 对于联盟链来说,每一个新加入的节点都需要进行验证和审计,比如Fabric、BCOS等。联盟链一般用于企业之间,对安全性和数据一致性要求很高。 因此,在联盟链中,共识机制不仅需要考虑网络中的故障节点,还需要考虑恶意节点。 除了保证最终一致性,还需要保证强一致性。

私有链是一个封闭的分布式系统。 由于私有链是一个内部系统,不需要考虑新节点的加入和退出,也不需要考虑恶意节点。 私有链的共识算法还是传统分布式系统中的共识算法,比如zookeeper的ZAB协议,就是一种类Paxos算法。 只考虑系统或网络原因引起的故障节点,数据一致性要求取决于系统要求。

什么是共识机制?

常见的共识机制包括:POW(工作量证明机制)、POS(权益证明机制)、POW+POS(混合共识机制)、DPOS(共享授权证书)等。此外,还有Pool验证池、Ripple瑞波共识协议、PBFT(使用拜占庭容错算法)等。 今天先介绍一下POW共识机制。

比特币技术团队_比特币技术原理通俗_区块链技术和比特币

POW 工作量证明共识机制 一、前言

PoW(Proof of Work),即工作量证明,著名于比特币,俗称“挖矿”。 PoW 是指系统为达到某个目标而设定的衡量方法。 简单理解就是证明你做了一定工作量的证书。 监控工作的整个过程通常是极其低效的,而通过证明工作结果来证明相应的工作量已经完成是一种非常高效的方式。 PoW按工作分配,算力共同决定。 谁的算力大,记账的概率就大,可以理解为权力比较。 以下内容基于比特币的 PoW 机制。

工作量证明(PoW)计算一个值(nonce),使得交易数据后的内容的哈希值满足指定的上限。 节点成功找到满意的哈希值后,会立即将打包好的区块广播给全网,全网节点收到广播的打包好的区块后会立即进行验证。

如何创建新块? 通过解决一个问题:找到一个使新区块头的哈希值小于指定值的nonce值,即区块头结构中的“难度目标”。

如果验证通过,则说明部分节点已经成功解谜,不再竞争当前区块的打包,而是选择接受这个区块,记录在自己的账本中,然后进行竞争猜测下一个区块。 只有网络中解谜速度最快的区块才会被添加到账本中,其他节点复制它,从而保证了整个账本的唯一性。

如果节点有作弊行为,将导致网络节点验证失败,打包区块将直接丢弃。 这个块不能记入总账,作弊节点的成本就白白浪费了。 因此,在巨大的挖矿成本下,也使得矿工自愿遵守比特币系统的共识协议,从而保证了整个系统的安全性。

在了解pow共识机制之前,我们先来了解一下比特币区块的结构。 下图是比特币区块的结构图:

在这里插入图片描述

从图中可以看出,比特币的结构分为区块头和区块体,而区块头又细分为:

Parent block header hash value:前一个块的hash值,使用SHA256计算(SHA256(parent block header)).32字节

Version:区块的版本号,表示该区块遵守的验证规则。4字节

时间戳:出块的大概时间,UNIX时间戳,精确到秒,必须严格大于前11个出块时间的中位数,全节点也会拒绝那些超过自身2小时时间戳的区块。4字节

Difficulty:该区块工作量证明算法的难度目标,使用特定算法编码。4字节

随机数(Nonce):为了找到满足难度目标的随机数集合,为了解决在算力飙升的情况下32位随机数不够用的问题,规定时间stamp 和 coinbase 交易信息可以更改,从而扩展 nonce 的位数。4 字节

默克尔根:本区块交易的默克尔根的哈希值也是使用SHA256计算的(SHA256())。32字节

比特币技术团队_区块链技术和比特币_比特币技术原理通俗

这样,细心的同学会发现,区块头一共占用了80个字节。

除了代币交易记录(由 Merkle 二叉树组成)之外,区块体还有一个交易计数。

比特币任何一个节点想要产生一个新的区块,都必须使用自己节点拥有的算力来解决 pow 问题。 因此,我们先来了解一下POW工作量证明的三要素。

2. POW 工作量证明的三要素

工作机制

为了将区块链交易数据记录在区块链上,并在一定时间内达成共识(共识),PoW提供了一种思路,即所有区块链网络节点参与者竞争记账,即所谓的竞争记账这意味着如果你想生成一个新的区块并将其写入区块链,你必须解决比特币网络的工作量证明难题。 谁先解出答案,谁就获得记账权,然后开始记账,并将解出的答案和交易记录广播给其他节点进行验证,由自己开始下一轮挖矿。 如果该区块的交易被其他节点参与者验证有效且拼图答案正确,则说明答案可信,新节点将被写入验证者的节点区块链,验证者将进入下一轮竞争性采矿。

本题的三个关键要素是工作量证明函数、区块和难度值。 工作量证明函数是这道题的计算方式,区块决定了这道题的输入数据,难度值决定了这道题需要的计算量。

1.工作量证明功能

比特币中使用的是SHA256算法函数,是密码学哈希函数族中输出值为256位的哈希算法。

2.块

区块头在前言中已经详细介绍过,这里介绍一下区块体的默克尔树算法:

在这里插入图片描述

如上图所示,首先对L1-L4这4条交易记录计算hash(L1)-hash(L4),然后计算hash0=hash0-0+hash0-1和hash1=hash1-0+hash1-1,最后计算根节点的哈希值top hash。

3.难度值

关于难度值,我们直接看公式:

比特币技术团队_区块链技术和比特币_比特币技术原理通俗

新难度值=旧难度值*(过去2016个区块花费的时间/20160分钟)

Tips:难度值随网络变化,目的是保证在不同网络环境下每10分钟可以出一个块。

新难度值分析:抛开旧难度值不谈,按照比特币每10分钟的理想速度比特币技术原理通俗,过去2016个区块的总成本接近20160分钟,所以这个值会一直趋近于1。

目标值=最大目标值/难度值

目标值分析:最大目标值是一个固定的数字。 如果过去2016个区块花费的时间小于20160分钟,那么这个系数就小,目标值就调大。 否则,目标值将被调整得更小。 因此,比特币的难度和出块速度会成反比,适当调整出块速度。

如何计算呢? SHA256(SHA256(Block_Header)),即只需要对区块头进行两次SHA256运算,将得到的值与目标值进行比较,小于目标值。

区块头中有一个很重要的东西叫做 MerkleRoot 的哈希值。 这个东西的意思是:为了让区块头能够反映出区块中包含的所有交易,在区块的构建过程中,需要通过Merkle Tree算法为交易列表生成一个Merkle Root Hash被包含在区块中,并使用 这被存储在区块头中作为交易列表的摘要。

至此,我们发现除了block header中的nonce,其余的数据都是清晰的。 解决问题的核心在于不断调整nonce值,对区块头进行双重SHA256运算。

介绍完POW工作量证明的三个要素之后,我们就可以来说明一下工作量证明的过程了。

3. POW工作量证明流程

在这里插入图片描述

从流程图可以看出,POW工作量证明过程主要经过三个步骤:

1.生成Merkle根哈希

生成Merkle root hash在第二章第二个要素中已经讲解过,即节点自己生成一个token交易,通过Merkle树算法生成Merkle root hash和其他所有交易一起打包,所以为什么说区块是工作量证明的三要素之一。

2.组装区块头

区块链技术和比特币_比特币技术团队_比特币技术原理通俗

区块头会作为输入参数来计算工作量证明的输出,所以第一步计算的默克尔根哈希和区块头的其他组成部分被组装到区块头中,这就是为什么我们要花前言中很多时间来提前解释比特币的区块头。

3.计算工作量证明的输出

下面我们直接使用公式和一些伪代码来理解工作量证明的输出:

一世。 工作量证明的输出 = SHA256(SHA256(区块头))

二. 如果(工作量证明的输出=目标值),改变随机数,递归i的逻辑,继续和目标值比较。

注:目标值的计算见第二章要素3的难度值。

以上流程图和分析就是pow工作量证明的全过程。

4. POW共识记账

前面三部分讲解了单节点工作量证明过程。 有了这个计算过程,我们就不得不用它了。 在比特币平台中,中本聪使用POW工作量证明让全网节点达到51%及以上的共识记账,下面将介绍POW工作量证明共识是如何记账的?

首先,客户端产生新的交易并广播到全网

二、每个节点收到将交易包含在区块中的请求

三、每个节点通过第3章描述的POW工作量证明

第四,当一个节点找到证明时,它向全网广播

五、其他节点同意该区块的有效性当且仅当该区块中的交易有效且之前不存在

六、接受区块并在区块末尾创建一个新区块

区块链技术和比特币_比特币技术原理通俗_比特币技术团队

大致时序图如下:

在这里插入图片描述

5. POW的优缺点

通过上面的描述,PoW的优势显而易见:

完全去中心化(任何人都可以加入); 节点自由进出,易于实现; 破坏系统的代价是巨大的;

破坏系统的巨大成本可以从两个方面来理解:

在给定时间内,给定难度,找到答案的概率唯一地取决于所有参与者能够多快地迭代哈希。 它与之前的历史无关,与数据无关,只与计算能力有关。 以 51% 的算力攻击系统所付出的代价远远大于作为系统的维护者和诚实的参与者所得到的。

缺点也很明显:

对节点性能和网络环境要求高; 资源浪费; 每秒最多只有7笔交易,效率低下; 矿场的出现违背了去中心化的初衷; 无法保证最终一致性; 比特币产量每 4 年减少一半,利润驱动的减少导致缺勤人数减少,从而导致比特币网络瘫痪。 6. 网络攻击和链分叉

1)网络攻击

假设一个恶意节点试图对先前花费的交易进行双花,攻击者需要重做包含该交易的区块,以及该区块之后的所有区块,从而创建比当前诚实的区块链链更长的区块。 只有当网络中的大多数节点切换到攻击者创建的区块链时,攻击者的攻击才会成功。 由于每个区块都包含了之前所有区块的交易信息,随着区块高度的增加,之前的区块会被再次确认一次,如果确认超过6次,可以理解为不可修改。

考虑包含在区块 b1 中的交易 T。 每个后续区块 b2, b3, b4, ... bn 都会降低交易 T 被修改的可能性,因为修改这些后续区块需要更多的计算能力。 中本聪用概率论证明,攻击者在六个区块后追上最长链的可能性降低到 0.0002428%。 在 4 个或更多块之后,这个概率下降到 0.0000012%。 每增加一个新的区块bn,被攻击的可能性就会呈指数下降,很快整个攻击的可能性就会低到可以忽略不计。

2) 链叉

所谓链分叉,主要是在计算哈希时,每个人得到的区块内容不同,导致区块结果不同,但都是正确的结果。 所以,此时此刻,区块链上,有两个不同的区块都符合要求,缺勤怎么办? 由于距离、网络等原因,这两个区块被不同矿工看到的顺序是不一样的。 通常比特币技术原理通俗,矿工会先复制他们看到的区块链,然后在这个区块上继续。 开始一个新的采矿工作,所以有一个链叉。

工作量证明解决方案:

从分叉区块开始,由于不同的矿工跟随不同的区块,所以在两条不同的分叉链上算力是不同的。 由于解决问题的能力与矿工的算力成正比,因此两条链的增长速度也不同。 一段时间后,一条链条总是比另一条链条长。 当矿工发现全网有一条更长的链时,他会放弃自己当前的链,复制所有新的更长的链,并在这条链的基础上继续挖矿。 所有矿工都这样操作,这条链成为主链,分叉弃链消失。

区块链唯一性的前提是所有矿工遵循相同的机制。 当矿工遵循不同的机制时会发生硬分叉,这会导致资产增加并且两条链同时存在,例如 BBC。