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

推荐订阅源

大猫的无限游戏
大猫的无限游戏
Webroot Blog
Webroot Blog
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
T
Threat Research - Cisco Blogs
V2EX - 技术
V2EX - 技术
L
LINUX DO - 热门话题
Google DeepMind News
Google DeepMind News
Recorded Future
Recorded Future
S
Schneier on Security
I
InfoQ
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
The GitHub Blog
The GitHub Blog
S
Security @ Cisco Blogs
O
OpenAI News
W
WeLiveSecurity
Vercel News
Vercel News
阮一峰的网络日志
阮一峰的网络日志
Simon Willison's Weblog
Simon Willison's Weblog
人人都是产品经理
人人都是产品经理
Cloudbric
Cloudbric
The Last Watchdog
The Last Watchdog
The Hacker News
The Hacker News
Google Online Security Blog
Google Online Security Blog
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
GbyAI
GbyAI
NISL@THU
NISL@THU
T
Tailwind CSS Blog
V
Visual Studio Blog
PCI Perspectives
PCI Perspectives
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Jina AI
Jina AI
D
DataBreaches.Net
B
Blog RSS Feed
N
News and Events Feed by Topic
N
News and Events Feed by Topic
H
Heimdal Security Blog
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
腾讯CDC
Latest news
Latest news
V
Vulnerabilities – Threatpost
Hacker News: Ask HN
Hacker News: Ask HN
WordPress大学
WordPress大学
V
V2EX
aimingoo的专栏
aimingoo的专栏
博客园 - 司徒正美
Apple Machine Learning Research
Apple Machine Learning Research
D
Darknet – Hacking Tools, Hacker News & Cyber Security
The Register - Security
The Register - Security
Help Net Security
Help Net Security

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 打赏系统的设计 鼓吹 Cursor 的人技术能力都差 关于 Code Review 的礼节 假如启动一个新的以太坊 PoS 网络 发行加密货币的最好方式 所有 BFT 共识的区块链都是中心化的 对 2025 年区块链行业的预测 Restaking 项目的经济难题 如何看懂任意区块链项目的技术架构 为什么不要做以太坊的二次开发 为什么不要做智能合约开发和 DeFi 开发 我的加密货币定投策略(一) PoS 类型的区块链如何处理分叉 Ethereum Casper 为什么需要 EIP-7251 区块链中的 PBFT 不需要第二次投票 开发者的思维方式 发币的核心要点 炒币投资的小 tips 为什么说 PoW 比 PoS 更加去中心化 牛市对普通人来说意味着什么 如何健康地远程工作 为什么比特币不用概率加密函数 程序员的 “服从权威” 心理 区块链技术面试题 如何区分公有链和联盟链 对 Layer 2 项目创业想法的回复 Pebbling Game 鹅卵石游戏 PDP 文件证明的局限性 不要小瞧 ChatGPT 为什么炒币不是一个好主意 一种在区块链上生成随机数的机制 为什么以太坊的私钥计算不可逆 关于以太坊的私钥碰撞 “猜均值的2/3” dApp 游戏设计 Proof of Storage/Space/Replication 的区别 Proofs of Retrievability 文件证明的含义 对 S-PDP 文件证明的示例和解释 我的加密货币交易机器人 对区块链行业的见闻 随机确认块的共识机制 VRF + BFT 共识引起交易失败的问题 为什么要重视编程思想 对 Web 3.0 的理解 GitBook 好用吗? 一种区块链节点存储扩容的方式 一种基于“自我中心主义”的共识机制 链表常见算法题及解析 基于 Multi-Linked List 的区块链设想 理解哈希函数与序列化 联盟链比公有链差在哪儿 在 Dijkstra 算法中保存路径 为什么数字货币使用区块链是政治问题 区块链:下一代数字身份认证体系的基石 网页技术能实现 3D 建模吗? 给区块链一个定义 从 Erlang 开始了解 Actor 模型 一种侧边导航栏的交互方式 Rust 的 ownership 是什么? Haskell 中的 Monad 是什么? 浅析 Libra 背后的区块链技术 对区块链的理性认识 Rust 基础语法概述 基于 Java 的爬虫框架 WebCollector Kotlin:简化版的 Scala JavaScript 有关联数组吗? 主流编程语言的异常处理机制 Go 语言基本语法 Scala 语法基础 用 Scala 改写 Java 浅度实践 Python 获取海贼王更新信息 HTML5 音乐可视化
对区块链共识机制的理解
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 风格的体系之下。

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