确认数和最终性有什么区别?
连续生产区块,再推进教学模拟中的最终性,理解‘已经看见’与‘可以安全依赖’不是一回事。
- 区分区块高度、确认数与最终性
- 观察后续区块如何增加安全缓冲
- 理解金融应用为什么等待可依赖的状态
- 上一章同一组交易,为什么必须同一个顺序?
- 本章确认数和最终性有什么区别?
连续生产区块,再推进教学模拟中的最终性,理解‘已经看见’与‘可以安全依赖’不是一回事。
- 下一章自由实验室
先想一想这几个问题
展开答案前,可以先在心里做个判断。与预期不同的内容可以加入复习列表。
Q01确认数已经很多,为什么还要区分最终性?+
确认数通常表示重组越来越困难;最终性表示协议已经给出不可轻易撤回的承诺。两者的安全假设不同,应用等待的也不只是一个区块计数。
看到交易出现在区块里,不等于应用可以立刻把它当成永远不会改变的事实。本章连续生成区块,再推进一个简化的最终性开关,区分“已经被包含”“有了确认”和“可以安全依赖”。
区块高度、确认数和最终性
区块高度回答“链走到了哪里”;确认数回答“这个区块后面又接了多少层”;最终性回答“在当前规则下,应用是否可以依赖它而不再等待”。不同链的共识机制给出不同的最终性保证,实验室用逐块推进的方式先建立直觉。
一笔交易如何变成状态?
交易先被签名和广播,再由节点验证并打包进区块。任何一步不满足规则,余额都不会改变。
- Nonce
- 0
- 公钥
- pk_alice_demo
- Nonce
- 0
- 公钥
- pk_bob_demo
- Nonce
- 0
- 公钥
- pk_you_demo
还没有交易。先用正确 Nonce 广播一笔转账。
第一笔交易需要一个区块,后面的空区块用来制造确认缓冲。最终性高度不会自动追上链高。
- 链高 / 最终性
- #0 / #0
- 确认缓冲
- 0 个区块
先看三张账户余额和 Nonce。签名只授权一组具体字段,节点还要在打包时检查 Nonce、余额和状态规则。
还没有区块。交易先在本地 Pending,等节点打包。
- 01
创世状态:三个账户各有 1,000 积分,Nonce 从 0 开始。
拖动滑块可以回到此前的步骤。从那里继续操作时,后续记录会替换为新的操作序列。
先打包第一笔交易,再连续生成空交易区块,最后点击“推进最终性”。你会看到链高可以继续增长,而最终性高度按自己的节奏前进。
展开:这一步如何实现
if block.height <= finalizedHeight:
application_may_depend_on(block)
else:
wait_for_more_confirmations()
真实网络会用 PoS 投票、经济惩罚或其他共识规则计算最终性。这个实验室只模拟“区块被生产”和“应用选择推进最终性”的分离。
一个区块被挖出后,为什么应用还可能等待?
一条底层主线
现在可以把四章串起来:签名授权交易,交易池等待排序,区块执行并承诺状态根,确认和最终性决定上层应用何时安全依赖结果。预测市场、AMM、代币发行和撮合引擎只是把更多状态与约束接在这条主线上。