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

推荐订阅源

博客园 - 叶小钗
D
Darknet – Hacking Tools, Hacker News & Cyber Security
S
SegmentFault 最新的问题
博客园 - 三生石上(FineUI控件)
雷峰网
雷峰网
WordPress大学
WordPress大学
有赞技术团队
有赞技术团队
博客园 - 【当耐特】
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
V
V2EX
V
Visual Studio Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
博客园 - 聂微东
P
Proofpoint News Feed
Last Week in AI
Last Week in AI
U
Unit 42
W
WeLiveSecurity
博客园 - Franky
Recent Announcements
Recent Announcements
Hacker News - Newest:
Hacker News - Newest: "LLM"
Attack and Defense Labs
Attack and Defense Labs
月光博客
月光博客
The Cloudflare Blog
Spread Privacy
Spread Privacy
腾讯CDC
P
Privacy International News Feed
N
News and Events Feed by Topic
AWS News Blog
AWS News Blog
NISL@THU
NISL@THU
T
Troy Hunt's Blog
小众软件
小众软件
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
Microsoft Security Blog
Microsoft Security Blog
L
Lohrmann on Cybersecurity
Webroot Blog
Webroot Blog
Y
Y Combinator Blog
量子位
P
Palo Alto Networks Blog
N
News and Events Feed by Topic
V
Vulnerabilities – Threatpost
K
Kaspersky official blog
IT之家
IT之家
T
Threat Research - Cisco Blogs
Cloudbric
Cloudbric
云风的 BLOG
云风的 BLOG
C
Check Point Blog
Blog — PlanetScale
Blog — PlanetScale
爱范儿
爱范儿
G
Google Developers Blog
S
Secure Thoughts

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 音乐可视化
随机确认块的共识机制
2022-09-25 · via smallyu的博客

随机确认块的共识机制

2022-09-25

步骤

  1. 在一个时间窗口内,一个节点会收到多个通过验证的块,在这些块中随机选取一个作为自己的下一个块。

  2. 在下一个时间窗口,节点如果没有收到块,同时发现网络整体的块高度已经高于自己,将丢弃掉上一个确认的块。

  3. 如果块高度相同,少数服从多数。

为什么要这样

  • 收到多个通过验证的块

Proof of work 的思路是,在一个时间窗口内,只有一个正确答案,这样就保证了整个网络的一致。换个思路的话,为什么不能在同一个时间窗口内,产生多个正确答案呢?

  • 随机选取一个块

由于网络中同时存在多个正确的块,那么就需要一种机制来从中选取一个,公平起见,就用完全随机的方式。

  • 丢弃上一个块

丢弃块的机制是为了给系统提供自我纠错的能力。Ethereum 的 DAO 攻击事件,需要开发者带领社区对区块链进行硬分叉,说明系统本身是没有纠错能力的,需要人为干预,似乎目前所有区块链系统都是这样。

  • 少数服从多数

在没有交易发生的情况下,有可能所有节点都处于等待的状态,此时因为块高度相同,没有节点愿意丢弃自己的块,整个网络是割裂的。这是一种博弈的状态,所以要按照少数服从多数的原则打破平衡。

一些问题

  • 为什么要随机?

为了避免富有的人越富有,有算力的节点更富有,有财产的节点更富有,公平地给予每个参与到网络中的节点,获取块奖励的机会。

  • 谁来随机?

每个节点各自随机,选取一个块。而不是使用类似 Varifiable random function 的方式,让每个节点都使用确认的结果。

  • 完全随机还是有限制的随机?

完全随机。

完全随机是指,节点收到 100 个块,选中某个块的概率就是 1%。有限制的随机是指,例如,上一个块已经是某个节点提供的,下一个块就不再使用它的块。相应的,块奖励也不会给它。

如果是有限制的随机,已经产生过块的节点,和没有产生过块的节点,就有了不一样的权重,无论权重侧重于哪一边,都不是合理的方式。如果产生过块的节点更有权重,依然会存在富有的人越富有的问题。如果没有产生过块的节点更有权重,网络中的参与者就会疯狂创建新的账户,使用没有获得过块奖励的节点产出块。

  • 随机会带来分叉?

一定会,但分叉是小范围的。如果网络效率很高,那么只有最新的一两个块会处于不确定的状态,等大多数节点确认下来,就成为主流的一条链了。

  • 分叉会一直存在吗?

不会,因为分叉会被淘汰。新加入网络的节点,肯定要选择某一个节点同步数据。对于其他节点,随机选择是指从通过验证的块中选择,通过验证的含义是,历史数据和自己一样。那么当某一条分叉链没有交易产生,由于纠错机制的存在,分叉链会不断丢弃掉自己的块,直到和主网络一致。

  • 如果新节点不同步数据呢?

如果新加入的节点不同步已有数据,而是另起炉灶,那么它需要拉拢超过整个网络大多数节点规模的追随者。比如有 1000 个节点,由于完全随机的机制,它需要另外 1000 个节点,自己的链才会变为网络中的主流。这种做法可以视为攻击网络的一种方式。难度似乎比 51% 攻击还要高。

  • 存在 51% 攻击?

由于块高度优先的方式加上少数服从多数的原则,可能会认为,攻击者甚至不需要 51%,只需要掌控块高度最高节点数的 51%,就可以形成攻击。

这里也许存在概念上的误区,攻击是指颠覆原有的数据而不是产生新的数据。51% 是不存在的。

  • 回滚会带来不确定性?

对于用户来说,确实是不好的体验,可能上一分钟交易已经成功了,下一分钟节点丢弃了块,交易撤销了。

不过好在这种不确定是短暂的,可以认为确认一个块需要两个时间窗口或者更多个。因为即时网络中存在小范围的分叉,最终也会趋于大多数一致。

所以问题变成了客户端确认一笔交易的时机。

  • 未确认的块会造成资源浪费?

一个节点收到 10 个块,确认 1 个,其他的块就浪费掉了。包括反复的纠错,也属于资源的浪费。

PoW 浪费的是算力资源,这种随机确认块的方式,浪费的是网络传输的资源,因为如果一个节点想要自己的块被确认,它首先要让其他节点接收到它的块。那么假如网络中有 1000 个节点,就需要每一轮都把块广播给 1000 个节点。

好在网络传输资源的浪费是有上限的,区块链网络本身就需要把每一笔交易广播到网络中,与其相比,现在只是需要多广播一个块的内容,算不上太大的负担。而且由于是完全随机地选择块,节点试图通过更高的网络配置来多次广播块也是没有意义的。

  • 如果网络异常,节点会丢弃所有块?

如果节点获取到网络中块高度非常低,按照规则 2,是不是就会逐渐丢弃掉所有块?

不会。要区分清楚,从网络中获取到异常信息,和连接不到网络、无法从网络总获取信息,是两回事。假如一个节点的路由表中有 1000 个节点的连接记录,由于网络状况异常,只能连接到 10 个,此时就属于异常情况,节点不应该按照正常的共识流程丢弃块。

  • 有哪些已有的提案?

在这篇论文《Blockchain Consensus Algorithms: A Survey》的第 16-17 页,提到了随机选择出块节点的共识方式,以及基于 coin-age 的选择方式。这确实是一个随机的概念,但论文描述的是随机是指随机选择节点,而不是针对块,并且是在 PoS 的语境下讨论的,出块节点有被选定、被内定的意味。