惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

大猫的无限游戏
大猫的无限游戏
阮一峰的网络日志
阮一峰的网络日志
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
WordPress大学
WordPress大学
博客园 - 叶小钗
Hugging Face - Blog
Hugging Face - Blog
博客园 - 司徒正美
Last Week in AI
Last Week in AI
罗磊的独立博客
量子位
Jina AI
Jina AI
T
Tailwind CSS Blog
Apple Machine Learning Research
Apple Machine Learning Research
IT之家
IT之家
美团技术团队
雷峰网
雷峰网
爱范儿
爱范儿
S
SegmentFault 最新的问题
小众软件
小众软件
月光博客
月光博客
酷 壳 – CoolShell
酷 壳 – CoolShell
人人都是产品经理
人人都是产品经理
The Cloudflare Blog
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报

smallyu的博客

为什么买的加密货币一定要去中心化 RISC-V 虚拟机无法代替 EVM 虚拟机 Polkadot 的 Existential Deposit 机制错在哪里 利息,套利,交易策略,金融市场 LayerZero 从来不挑战比特币的地位 默认参数引起的以太坊节点运行错误 硬件钱包与资产安全 预测市场比币圈更赌场 为什么去中心化的跨链桥不可能实现 我对于 AI 时代的答案 不要投资任何隐私币 区块链技术世界的三大真理 以太坊 AA 钱包的致命问题是什么 基于 AI 语义执行的 MCP 区块链的设计 一个集成 Geth 和 CometBFT 的兼容层 我的加密货币定投策略(二) DeFi 基础: 理解 AMM 定价机制 Go 语言 GMP 调度器的原理是什么 Web3 项目分析计划 对 Psyche Network 项目的分析 continuation 教程: 理解 CPS 如何开发一个比特币符文(Runes)协议 比特币脚本开发教程 我从王垠的计算机科学视频班学到了什么 区块链技术面试题(2025年版) Rust 语言容易让新手困惑的一个“过度优化” Solana 智能合约开发教程 (1) 尝试开发一个最小 EVM 虚拟机 基于 ZK 的链上身份系统设计 一个 Web3 打赏系统的设计
对区块链共识机制的理解
2023-07-01 · via smallyu的博客

对区块链共识机制的理解

2023-07-01

共识机制的作用,是让大多数节点的数据能够保持一致。共识机制有两种大的类型,一种是 PoW 风格的,一种是 PBFT 风格的。几乎所有的共识都在这两种风格之下。

可以从头思考一下,如果是一个人类的群体,怎么样才能让大多数人保持一致呢?一种方法是选出一个领袖,大家都听领袖的意见,再一种方法是大家一起商量进行决策,达成统一的意见。

对于第一种方法,问题在于如何选出领袖,依据什么样的标准选出,或者怎么样的人才能够成为领袖。对于第二种方法,问题在于哪些人可以参与商量,如何做出决策。

先看第一种方法,流程上主要有 3 个步骤:

  1. 通过某种方式选出领袖
  2. 所有人在时间单位内都听领袖的
  3. 所有人在时间单位内将会达成一致

PoW 的过程就是这样:

  1. 解出哈希难题的矿工成为出块节点
  2. 所有节点接收并验证矿工的块
  3. 所有节点的块数据达成一致

在这种 PoW 风格的共识过程中,最大的变数是第 1 步,也就是如何选出出块的节点,也因此有了很多 PoW 共识的变种。

  • Proof of Stake (PoS):以太坊在使用的共识机制,币种名称为 ETH。质押一定量资产的节点会随机成为出块节点,随机的过程由在信标链上运行 VRF 函数完成,并且质押的资产越多,成为出块节点的可能性越大。

  • Proof of Authority (PoA):以太坊测试网支持的共识机制。在网络的初始化阶段就已经确定哪些节点可以出块,之后按照顺序依次出块。确认验证者的过程是线下完成的,网络本身不具备对验证节点的纠正能力,比较中心化的一种共识。

  • Proof of Importance (PoI):Nem 在使用的共识机制,币种名称为 XEM。制定了一些给节点打分的机制,在多少天内交易多少次、交易额度是多少之类,以根据分数对节点进行排名,分数高于指定标准的节点,随机成为出块节点。

  • Proof os Elapsed Time (PoET):Hyperledger Sawtooth 项目使用的共识机制,是英特尔开发的一个项目。每个节点随机生成一个等待时间,等待时间最短的节点成为出块节点。出块节点需要提供一个最短时间的证明,这个证明和硬件设备相结合,达到无法伪造的效果。

  • Proof of Burn (PoB):Slimcoin 在使用的共识机制,币种名称为 SLM。节点通过销毁资产的交易获得销毁哈希,销毁哈希的计算包含了销毁的金额以及节点在一段时间内销毁的频率等信息,然后系统对每个节点提交的哈希值进行比较,哈希值最小的节点将进行本轮的出块。

  • Proof of Capacity (PoC):Burst 在使用的共识机制,币种名称为 Burst。节点使用 hard-to-pebble graph 的数据结构,在磁盘上进行文件的写入,这个步骤需要足够多的磁盘空间,写入完成后节点随机打开文件的某个位置,计算对应的哈希值,直到找到满足要求的哈希值,节点就可以进行出块。

  • Proof of History (PoH):Solana 在使用的共识机制,币种名称为 SOL。这种共识机制的创新之处在于,每一笔交易或者其他链上的操作,都会对应一个哈希值,然后 PoH 生成器生成块,这个块由一系列连续的哈希值,也就是一系列链上操作组成,从而保证链上数据的一致。这里的 PoH 生成器就是出块节点,PoH 生成器的选择标准则是质押金额最多的节点。

这些是 PoW 风格共识的例子,可以看出它们在想方设法改变选择出块节点的方式,但不管具体使用怎么样的机制,这些区块链都符合 3 个步骤的流程。

再看第二种方法,流程上也是 3 个步骤:

  1. 通过某种方式选出参与决策的人
  2. 参与决策者进行交流、达成一致
  3. 其余所有人都依照决策结果,达成一致

PBFT 的过程类似这样:

  1. 从所有节点中选出共识节点,然后共识节点依次作为提案节点
  2. 参与共识的节点经过两轮投票,对提案内容进行决策
  3. 共识节点达成一致,其余节点跟风达成一致

可以看出和第一种方法相比,由单一的领袖变为了多个决策者。在这种 PBFT 风格的共识过程中,最大的变数也是第 1 步,如何从所有节点中选出共识节点,以及共识节点成为提案节点的顺序。这是一些变种:

  • Delegated Byzantine Fault Talerance (DBFT):Neo 在使用的共识机制,币种名称为 NEO。每个持有资产的节点都可以进行共识节点的选举,将自己的资产委托给共识节点。拥有委托资产的共识节点进行排名,前几名将依次作为提案节点。

  • Federated Byzantine Agreement (FBA):Stellar 在使用的共识机制,币种名称为 Stellar。网络中的所有节点都是共识节点,都可以参与两轮投票。为了减少网络的拥堵,节点也可以委托自己的投票权给另一个节点,使用切片或者子网络的方式提高共识效率。

  • HoneyBadgerBFT:一种支持完全异步网络的 BFT 类共识,不依赖于同步的时间顺序,这是 PBFT 不具备的能力。不过异步网络的共识效率相对低一点。

  • HotStuff:一个允许部分网络异步的 BFT 类共识。它的特点是,网络中可以同时存在多个提案,提案节点将选择最好的一个提案,进行后续的流程。这样的方式相当于产生提案的过程是并行进行的,提高了整个共识的效率。

  • VBFT:Ontology 在使用的共识,币种是 ONT。使用 VRF 随机函数进行提案节点的选择,每一轮的提案节点都是随机、不可预测的。

总体而言,PoW 风格和 PBFT 风格都是通过某种方式,筛选出最终能达成一致的内容,但是在选择内容的方式上存在根本区别。PoW 中其余节点将无条件接受来源的块,只要来源的块是符合某种条件的。而 PBFT 中,其余节点先收到块的内容,然后对这个块的去留进行决策,在接受块之前有一个投票的过程。

现在也有一些创新类型的共识出现,或者是结合多种共识的混合共识等形式,不管是对节点进行信誉评估、根据历史交易质量之类打分,还是根据手机、物联网等硬件设备进行数据的验证,还是对 PBFT 做某个阶段上并行、容错能力和网络效率之类的优化,共识机制终究还是在 PoW 风格和 PBFT 风格的体系之下。

因此你可以大胆的说,共识机制也就这么回事,只是在具体的设计和实现上有差异而已。