【读书笔记】- 比特币为什么需要 6 个区块确认才会被认为难以篡改? #14
simonliuliu
started this conversation in
General
Replies: 1 comment
-
Simon,我认为你对 “点对点网络度量时间” 的方法(区块时间戳中位数)以及参数选择的解释是对的。但这并不能解释为什么用户需要等待 6 个区块得确认。 如果我们认为控制 6 个区块足够困难,会自然而然选择 11 作为 MTP 的参数。也就是说,存在同一个理由(控制 6 个区块足够困难)可以同时解释 用户要等待 6 个区块 以及 MTP 参数为 11 这两件事。但这两件事却不能相互解释,不能认为是 MTP 参数导致了用户要等待这么多数量的确认。 等待一定数量的区块确认的要求来自于 PoW 共识算法本身;在点对点网络中,由于带宽的限制,特定的 PoW 算法以及相应的区块大小会存在一个自然的分叉(区块重组)概率。给定该概率,即使完全不考虑矿工恶意发动区块重组的可能性,用户也需要等待一定数量的区块确认,才能认定自己的交易被逆转的概率足够小。 在这里,推理会跟你在上文对 MTP 参数选择的推理类似:更多的区块确认意味着更小的逆转概率,但也会让整个系统变得更不友好。因此只能取一个折中。 从历史上看,“需要等待 6 个区块确认” 的提法出现得相当早(可能中本聪就已经提到),现在大多数 人/应用 都已不再等待那么久,比如闪电网络的客户端一般只等待 3 个确认;而 MTP 规则是直到 2016 年才在网络中激活的东西。 |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
一个困扰多年的问题
2016 年,我刚加入区块链行业,当时在 imToken 做钱包就遇到了一个问题:
交易为什么需要 6 个区块链确认才会被认为难以篡改?
得到的比较笼统的回答一般是,这样做矿工篡改的成本过高。这当然是一个正确的答案,但却过于表面。
最近在重读《精通比特币》第三版,这是去年年底最新修订的版本,看到书中提及了这一内容,所以单独拿出来说说。
6 源于 11
首先我们要明确两个概念:
我们通过 getblockhash 命令,从 bitcoin core 的 API 拉取区块信息的时候会得到如下信息
这其中有一个
mediantime
字段,我们称之为「中位时间」- MTP。该「中位时间」是从(该区块的)之前 11 个区块计算得到的中位时间。为什么要使用中位数?
中位数具有更好的「抗操纵性」,它是统计学上用于测量数据集中趋势的一个稳健估计值,特别适合处理含有异常值(outliers)的数据。相比于平均值(容易受到极端值的影响),中位数只关心排序后最中间的值,因此少量极端值(时间戳被操控的区块)不会显著改变结果。
为什么是 11?
首先如果计算中位数,那么最好选择一个「奇数」,奇数的好处是中位数始终是一个确定的值,因为可以准确地取中间的那个值(比如第 6 个区块),避免了偶数情况下取两个中间值再平均的复杂性。
而选择 11 个区块的原因与中位数的特性有关,因为它能很好地处理小样本中的极端值,同时保持计算的简便性。
简单来说就是它足够小以保持计算效率,同时又足够大确保抗操纵性:
为什么是 6?
之前我们谈到,中位数是将数据排序后,选择中间位置的那个数值。而在 11 个区块的情况下,中位数是第 6 个区块的时间戳(按照时间戳大小排序后)。
要改变中位数的值,矿工至少需要控制超过一半的区块。因为中位数是基于排序后的位置值决定的,改变排序的多数才能影响最终的中位数。 💡 在 11 个区块的情况下:
如果矿工只控制 5 个区块,这些区块的时间戳只能影响排序的前半部分,但无法影响中位数(第 6 个位置)。
如果矿工控制了 6 个区块,他们就能确保排序后的中位数被自己的区块所决定,从而对整个链的时间戳产生影响。
一个例子
我们有 11 个区块,假设这些区块的时间戳如下(单位是时间):
现在,我们将这些时间戳从小到大进行排序(这里时间戳已经是按时间顺序递增的):
在这个排序列表中,第 6 个区块的时间戳是 1628003000,这是过去 11 个区块的中位时间,也就是 MTP。
现在,假设一个矿工控制了一些区块,并试图通过篡改时间戳来影响中位数。
情况 1:矿工控制 5 个区块
假设矿工控制了 区块 1、2、3、4、5,并且他们想通过操控这些区块的时间戳来改变 MTP。为了做到这一点,矿工将这些区块的时间戳篡改为一个非常小的值,假设为 1627000000。
篡改后的时间戳如下:
排序后的时间戳为:
你可以看到,虽然前 5 个区块的时间戳被篡改得很低,但中位数仍然是 1628003000,因为第 6 个区块的时间戳没有被矿工控制。
情况 2:矿工控制 6 个区块
现在,假设矿工控制了 区块 1、2、3、4、5、6,并且他们同样篡改这些区块的时间戳为 1627000000。篡改后的时间戳如下:
排序后的时间戳为:
此时,新的中位数是 1627000000(第 6 个位置的时间戳),这是矿工篡改的时间戳。因此,通过控制 6 个区块,矿工成功操纵了 MTP。
所以,如果矿工控制了 6 个区块,他们就能保证至少有 6 个区块的时间戳是他们自己设定的。这样,无论剩余 5 个区块的时间戳如何,矿工控制的区块一定会影响或决定中位数。
总结
要想了解为什么需要 6 个区块确认,就要了解为什么选择 11 作为「中位时间」校验。因为 11 相较于其他数字,具有足够的抗操纵性和高效性,这是一个权衡后的神奇数字。而如果想操纵 11 个区块的中位数,则需要满足 6 个确认才可以,这是一个简单的数学问题。
Beta Was this translation helpful? Give feedback.
All reactions