《比特币:一种点对点的电子现金系统》

下载Bitcoin Core

Bitcoin Core 27.0


摘要: 一种纯粹的点对点电子现金版本将允许在线支付直接从一方发送到另一方,而无需通过金融机构。数字签名提供了部分解决方案,但如果仍然需要一个可信的第三方来防止双重支付,那么主要的优势就会丧失。我们提出了一种使用点对点网络解决双重支付问题的方法。网络通过将交易哈希到一个持续的基于哈希的工作量证明链中来为交易打上时间戳,形成一个无法在不重新进行工作量证明的情况下更改的记录。最长的链不仅作为见证事件顺序的证明,还证明它来自最大的 CPU 算力池。只要大多数 CPU 算力不被尝试攻击网络的的节点控制,他们将生成最长的链并超过攻击者。网络本身需要的结构最小。消息将以最大努力去广播,节点可以随意离开和重新加入网络,接受最长的工作量证明链作为他们离开期间发生的事情的证明。

1. 简介

互联网上的商业几乎完全依赖金融机构作为可信的第三方来处理电子支付。虽然该系统对于大多数交易来说运作良好,但它仍然存在基于信任模型的固有弱点。完全不可逆的交易实际上是不可能的,因为金融机构无法避免仲裁争议。仲裁的成本增加了交易成本,限制了最小的实际交易规模,并切断了小额随意交易的可能性,并且在失去进行不可逆支付的能力方面存在更广泛的成本。由于可能的逆转,信任的需求扩散开来。商家必须对他们的客户保持警惕,要求他们提供比通常需要的更多的信息。某种程度的欺诈被认为是不可避免的。这些成本和支付的不确定性可以通过使用实物货币在面对面交易中避免,但没有机制可以在没有可信方的情况下通过通信渠道进行支付。

需要的是一种基于加密证明而不是基于信任的电子支付系统,允许任何两个愿意的当事人直接进行交易,而无需可信的第三方。算力保障的不可逆转的交易将保护卖家免受欺诈,并且可以轻松实施常规的托管机制来保护买家。在本文中,我们提出了一种使用点对点分布式时间戳服务器生成交易时间顺序计算证明的解决方案。只要诚实节点集体控制的 CPU 算力超过任何合作攻击节点组的算力,系统就是安全的。

2. 交易

我们将电子硬币定义为一串数字签名。每个所有者通过数字签名前一个交易的哈希和下一个所有者的公钥并将这些添加到数字签名链的末尾来将币转移给下一个所有者。收款人可以验证签名去验证数字签名链的所属权。

transactions

当然,问题在于收款人无法验证某个所有者没有双重支付该币。一个常见的解决方案是引入一个可信的中央权威或铸币机构来检查每笔交易是否存在双重支付。在每次交易后,币必须返回铸币机构以发行新币,并且只有直接从铸币机构发行的币才被信任不会被双重支付。这个解决方案的问题在于整个货币系统的命运取决于运行铸币机构的公司,每笔交易都必须通过他们,就像银行一样。

我们需要一种方法让收款人知道前一个所有者没有签署任何之前的交易。就我们的目的而言,最早的交易是最重要的,所以我们不关心后来的双重支付尝试。确认交易不存在的唯一方法是了解所有交易。在基于铸币机构的模型中,铸币机构了解所有交易并决定哪个交易先到达。为了在没有可信方的情况下实现这一点,交易必须公开宣布 [1],我们需要一个系统让参与者就接收顺序的单一历史达成一致。收款人需要证明在每次交易时大多数节点同意它是第一个接收到的。

3. 时间戳服务器

我们提出的解决方案从时间戳服务器开始。时间戳服务器是这样工作的:为一个区块(block)的记录的哈希打上时间戳并广泛发布哈希(例如在报纸或在新闻组(Usenet)帖子中)[2][3][4][5]。时间戳证明数据在显然必须存在的时间内存在,以便进入哈希。每个时间戳在其哈希中包括前一个时间戳,形成一个链,每个额外的时间戳加强之前的时间戳。

timestamp

4. 工作量证明

为了在点对点基础上实现分布式时间戳服务器,我们需要使用类似于 Adam Back 的 Hashcash [6]的工作量证明系统,而不是报纸或 新闻组帖子。工作量证明涉及扫描一个值,当哈希(例如使用 SHA-256)时,哈希以一定数量的零位开始。所需的平均工作量在所需的零位数量上是指数级的,可以通过执行单个哈希来验证。

对于我们的时间戳网络,我们通过在区块中递增一个随机数,直到找到一个值,使区块的哈希具有所需的零位来实现工作量证明。一旦 CPU 努力使其满足工作量证明,区块就不能在不重新进行工作的情况下更改。随着新的区块不断被添加进来,改变区块的工作将包括重新进行其后的所有区块的工作。

blocks

工作量证明还解决了在多数决策中确定代表性的问题。如果多数基于一个 IP 地址一票,任何能够分配多个 IP 的人都可以颠覆它。工作量证明本质上是一个 CPU 一票。多数决策由最长的链表示,该链具有最大的工作量证明努力。如果大多数 CPU 算力由诚实节点控制,诚实链将增长最快并超过任何竞争链。要修改过去的一个区块,攻击者必须重新进行该区块及其后的所有区块的工作,然后赶上并超过诚实节点的工作。我们稍后将展示,随着后续区块的增加,较慢的攻击者赶上的概率呈指数级下降。

为了补偿硬件算力的增加和随时间变化的参与运行节点的数量变化,工作量证明难度由移动平均值确定,基于每小时的平均区块数。如果生成速度太快,难度会增加。