
确认数与链重组:所谓「最终」究竟有多最终
你的交易确认了。你看见了那个对勾。钱已结清——只不过「结清」原来是一条光谱而非一种状态,而你落在这条光谱的哪个位置,取决于链、金额,以及让别人把它撤销要花多少代价。
这是区块链机制里少数几处细节会真正改变你该怎么做的地方,值得花二十分钟留意。
一个确认到底在数什么
确认不是任何人盖的批准章。它是一次深度测量。
当你的交易被打包进某个区块,那个区块就位于链上的某个高度。此后每挖出一个压在它上面的区块,就把它往下埋一层。确认数就是压在你那一块上的区块有多少个,连它自己一起算。
SSP 用标准方式计算:tipHeight - blockheight + 1。那个 +1 不是差一错误——位于最新区块中的交易拥有一个确认,而不是零个。零确认意味着它还在内存池里:已经广播,但尚未被任何地方收录。
深度之所以有意义,是因为要撤销你的交易,就必须替换掉包含它的那个区块,外加其上构建的每一个区块。每多一个区块,这活儿就更难一分。在工作量证明链上,没有什么是不可能被撤销的;只是代价持续攀升,到了某个深度,成本便超过了任何人可能获得的好处。
重组是常态,不是攻击
下面这部分常常让人白白紧张:短链重组是家常便饭,而且几乎没有一次是恶意的。
地球两端的两个矿工可能相隔几秒各自解出一个区块。有那么一瞬间,网络真的对哪个区块是链尖存在分歧。随后下一个区块落在其中之一上,那条分支变得更长,另一个区块便成了孤块。任何只存在于孤块中的交易都会回到内存池,并在不久后被重新打包。
这正是协议按设计运转的样子。这也恰恰说明了为什么一个确认比看上去要弱——深度为一的交易住在一个仍可能输掉抛硬币的区块里。
深度重组则是另一种生物。它要么需要极其庞大的算力,要么偶尔需要某种更古怪的东西:Ravencoin 的共识缺陷迫使链上发生了远比任何寻常重组更深的重写——不是因为有人发动攻击,而是因为节点们对规则究竟是什么产生了分歧。这很罕见。它也提醒我们,「链不可更改」是一句简略说法,不是物理定律。
六个确认是怎么来的
六确认的惯例并非什么魔法数字,也从来不是要当作普适定律。
它出自比特币白皮书自身的概率计算:假定攻击者掌握某一比例的算力,在给定区块数之后他从后面追上的可能性有多大?答案随深度呈指数衰减。六个区块足以把成功概率压进可忽略的区间——前提是攻击者只占有算力的一小部分少数,且所在的链大到如比特币这般。
那句斜体从句的每一部分都要紧,而人们恰恰在这里出错。比特币上的六个确认,代表了地球上最昂贵算力约莫一小时的产出。而在一条小型工作量证明链上,六个确认所代表的算力,也许有人一个下午就能租到。
这并非假设。较小的工作量证明链——以太坊经典与比特币黄金都在其列——确实遭受过真实的百分之五十一攻击,并对交易所造成了真正的双花。业界的回应不是抛弃这些链,而是把确认数要求大幅提高,有时抬到数千。这种不对称就是全部教训:确认深度只有相对于该链每个区块实际买到多少安全性时才有意义。
权益证明改写了问题本身
在具备显式最终性的链上,模型的差别是种类上的,而非仅仅程度上的。
以太坊的验证者会定期投票将检查点最终化。一旦某个检查点被最终化——这大约需要两个纪元,量级在十三分钟左右——要推翻它就不再是算力上压过谁的问题。它要求占全部质押以太币极大比例的一方投票支持了互相冲突的检查点,而这是可被检测的,并会导致那笔质押被销毁。其保证不是「撤销这件事会很昂贵」,而是「谁撤销它,谁就可被证明地损失一大笔钱」。
这确实是比概率性深度更强的论断,也正因如此,在以太坊上等待最终性,与在比特币上数区块是两种不同性质的等待。Solana 也在「乐观确认」与「完全扎根」的交易之间划出了类似的界线。
实际操作上:在工作量证明链上,你数深度。在权益证明链上,你要问的是包含你交易的那个区块是否已被最终化——那是一个是或否的问题,而不是一个不断累加的数字。
无人提及的那种不对称
确认数在你收款时要紧。在你付款时几乎无关紧要。
如果你已经付给了别人,你的交易因重组被撤回只是轻微的麻烦——它回到内存池,再次确认,收款方只是多等一会儿。你什么都没损失。
但如果是别人付给你,而你凭着一个浅确认就交出货物、放出资金或寄出产品,那么一次重组就意味着你为一笔已不复存在的付款白送了东西。历史上所有真正造成损害的双花攻击都是这样运作的:它们瞄准的是那些对进账行动得太早的人。
所以诚实的规则很简单。当你花钱时,一个确认就告诉你这笔交易是真的,你可以不必再操心。当你从陌生人手里接受价值时,你所要求的深度应当随着涉及金额而上升,并且恰恰要在出块成本低廉的那些链上收紧你的信任。
SSP 给你看什么,又不给你看什么
SSP 的活动列表给你一个二元标记:已确认或未确认。这是刻意的,因为对绝大多数日常使用而言,这个二元判断就是全部答案。展开某一笔交易的行,你会得到实时的确认计数和区块高度,按当前链尖计算得出。
现在说说诚实的局限:SSP 不会以确认深度作为任何事情的门槛。 钱包不会提醒你:对于刚刚收到的这个金额,三个确认太单薄了;它根本没有「足够」这个概念——它报出数字,把判断留给你。任何钱包其实都无法有别的做法,因为「足够」取决于你打算拿这笔钱做什么,而钱包无从知晓。但这确实意味着诠释是你的活儿,而一个绿色对勾并不等同于「不可逆转」这个说法。
同样值得记住的是,你读到的确认计数来自你的钱包正在与之对话的那个节点。而在深度最要紧的那类事件当中——有争议的分叉、共识缺陷、链分裂——恰恰是单一信息源最不可信的时候。
值得留存的几条经验法则
零确认不是付款。 它是一份付款意向的声明。对于当面进行的小额低风险交易也许无妨。除此之外,它不是一笔已结清的交易。
一个确认是真实的,但很浅。 用来花钱没问题。用来从你并不信任的人手里接受任何有分量的东西,就太单薄了。
六是比特币量级的惯例,不是普适常数。 在算力便宜可租的链上,六个确认也许价值甚微,而正确的数字可能要高上几个数量级。
在权益证明链上,问最终性,而不是数数。 「已最终化」在性质上比「很深」要强得多。
让深度随价值缩放。 三十秒的耐心很廉价。一个不可逆的错误则不然。
这背后的道理一旦想通,反而令人安心。加密世界里没有什么是像数学证明那样最终的。你得到的是一份随时间陡峭攀升的撤销成本,以及在行动之前自行决定这个成本需要有多高的能力。这比多数人以为自己拥有的保证要弱——却也远比任何银行就一笔数月后仍可被追回的付款所给你的说法,来得诚实得多。


