15 再论双重消费、工作量证明和交易费
中本聪在这次讨论中做了一些澄清,并阐明了在比特币全部开采完后,矿工 (即节点)通过交易费获得补偿的问题。
回复:比特币:点对点的电子现金支付
中本聪,星期一,2008年11月17日,09:04:47 UTC-8
我会尽快发布源代码,为澄清所有这些实现中的细节问题提供参考。
雷•迪林杰(Bear)写道:
当使用比特币时,买家和卖家对交易记录进行数字签名(盲签)。
只有头家签名,而且不存在盲签。
如果有人双重消费,那么交易记录可以去盲以揭露骗子的身份。
没有用到身份,也不依赖追索。这些都是障碍。
这是通过相当标准的分割选择算法完成的,其中买家以秘密份额来应对多重挑战。
不存在挑战,也不存在秘密份额。基本交易就是您在第2节[1]的图中所看到的内容。签名符合上次交易的公钥签名,而且也符合下次使用时卖家的新公钥。
他们也可能收到与自己试图延展的链同样长的其他链,这些链中最后的几个区块与他们正在处理的区块不同。
他们会忽略这些。
是的,如果长度相等,就保留最早的那条以打破僵局。
如果其中包含了双重消费的交易,那么他们就创建一条“交易”作为双重消费的证据,并将其添加到A池,对外广播,然后继续工作。
没必要像那样来报告“双重消费的证据”。如果同一条链中包含了双重消费的交易,那么该区块将失效且被拒绝。
同样,如果区块没有满足工作量证明,那么该区块也将失效且被拒绝。没有必要传阅关于此事的报告。每个节点在转发它之前都能看到这点并且拒绝它。
如果有两条竞争的链,每条包含同一笔交易的不同版本,其中一个版本将钱付给了一个人而另一个版本将同一笔钱付给了另一个人,判定究竟哪笔交易有效的方法是整个工作量证明链需要做的事。
我们并没有只盯着双重消费拉警报、抓骗子,只是判断哪笔交易有效。交易接收者必须要等待几个区块,才能确保有足够的时间来完成判断。骗子们可以随心所欲地尝试多次用掉同一笔钱,而他们所能得到的只是几个区块内的一笔有效交易,而其他的几笔全都无效。再过一段时间,一旦主链上有了一笔钱的花销, 针对这笔钱的新花销会立即被拒绝。
即使一笔早期支付还没有进入区块链,如果这笔交易已经存在于所有节点的交易池,那么这笔钱的第二次支付也会被所有已经包含第一笔支付的节点所拒绝。
如果新的区块链被接纳,然后停止添加当前链接的区块,把所有交易从L池移到A池(也包括自工作开始后收到或创建的交易),从A池中清除新链所包含的交易记录,然后重新开始工作尝试延长新链。
是的。每当新交易进来时就刷新,所以L池基本上总是包含A池中的所有交易。
用CPU密集型的数字签名算法来为包含新区块L的链签名。
工作量证明是用类似于Hashcash的SHA-256 (前面由一些0构成),而不是签名。
是否有机制确保区块链不是仅由3或4个最快的节点加入链接? 一次交易记录广播很容易错过那3或4个节点,一旦出现这种情况,而且这3或4个节点继续控制着区块链,那么该笔交易就再无可能加入区块链了。
如果您将此当成CPU密集型的数字签名,可能把它想象成一场耗时运算的争先赛,最快的总是赢得比赛。
工作量证明是类似于Hashcash的SHA-256碰撞搜寻。这是一个不需要内存的处理过程,每秒可以执行数百万次的哈希计算,每次计算只有很小的机会找到结果 。那3或4个最快节点的优势只与它们在整体计算能力中所占份额成正比。任何节点在任何时候找到解决方案的机会都与它们的计算能力成比例。
因为有交易费作为奖赏,所以节点才会有动力接收和收录尽可能多的交易。 当创造出的比特币总量达到预定上限时,节点最终将仅靠交易费作为补偿。
另外,添加链接到区块链上所需要完成的工作应该随着上周加入到区块链的链接数量而成倍地变化,从而导致比特币的币生成率(并因此造成通货膨胀)得到严格控制。
是的。
需要比特币叠加来获得好的伸展性。这需要是一个“可证明的”交易,例如有人可以废弃10个单币然后创建一个面值为10的新币等。
每笔交易都可以这么做。见第9节M。
中本聪密码学邮件组
[1]此处是指中本聪发表的论文的第2节,可见本书附录A.2节。一编辑注
[2]此处是指中本聪发表的论文的第9节,可见本书附录A.9节。一编辑注