中本聪区块链原文还藏着哪些未解之谜?
摘要:
Bitcoin: A Peer-to-Peer Electronic Cash System作者:Satoshi Nakamoto日期:2008年10月31日一个纯粹的点对点版本的... Bitcoin: A Peer-to-Peer Electronic Cash System
作者:Satoshi Nakamoto 日期:2008年10月31日 一个纯粹的点对点版本的电子现金系统,允许在线支付直接从一方发送到另一方,而无需通过金融机构,数字签名提供了部分解决方案,但如果仍然需要可信的第三方来解决双重支付问题,那么这个系统的优势就大打折扣,我们提出一个解决方案,使用点对点网络来解决双重支付问题,网络通过将交易哈希到一个基于工作量证明的链上来记录一个公共交易历史,除非重算整个网络的计算能力,否则历史记录无法被更改,最长链不仅作为被 observed 的证明,也作为计算机节点之间选择的共识,只要诚实的节点控制了网络的计算能力,这个系统就是安全的。
互联网上的商业几乎完全依赖于金融机构作为可信的第三方来处理电子支付,尽管该系统在大多数情况下运行良好,但它仍然基于信任模型,该模型在交易成本中产生了不可避免的成本,并且限制了可能的最小交易规模,随着无法撤销的第三方托管服务的出现,仍然存在信任问题,完全非可逆的交易是不可能的,因为金融机构不能避免调解争议,交易成本可能会增加,以覆盖欺诈造成的损失和增加的成本,有了可撤销的信任链,收款方无法确定付款方何时完成了支付,只有解决双重支付问题,才能实现真正的电子支付。
我们提出一个基于点对点网络的解决方案,它使用工作量证明来记录一个公共历史,从而解决双重支付问题,由于最长的链被认为是诚实的,并且可以被网络节点验证,因此任何需要验证交易的接收方都可以自行完成验证,而无需依赖任何中央服务。
交易
我们定义一枚电子硬币为一串数字签名,每个所有者通过将前一次所有者的数字签名和下一位所有者的公钥一起添加到硬币的末尾来将硬币转移给下一位所有者,收款方可以通过验证签名来验证链的所有权。
图1:一笔交易,A 将一枚币发送给 B,A 用自己的私钥对 [ previous transaction + public key of B ] 进行签名。
问题在于,收款方无法验证 payer 是否是同一枚币的多次支付中的唯一支付者,解决这个问题的常见方法是引入受信任的中央机构,或像银行那样的清算中心,该机构每笔交易都检查双重支付,在以下描述中,我们将证明,通过点对点网络,双重支付问题是可以解决的。
时间戳服务器
我们提出的解决方案始于一个分布式的时间戳服务器,时间戳服务器通过对区块中包含的某件事件(哈希)的哈希值进行哈希,并广泛发布哈希(在 Usenet 或新闻组中)来将区块时间戳化,并将该时间戳添加到区块中,显然,时间戳证明数据在某个时间点必然存在,每个时间戳都包含前一个时间戳的哈希值,形成一个链,每个附加的时间戳都将其前一个时间戳的数据绑定在一起。
图2:时间戳服务器,每个时间戳都包含前一个时间戳的哈希值,形成一个链。
工作量证明
为了实现分布式时间戳服务器,我们需要使用工作量证明(Proof-of-Work)来找到一个困难的哈希值,就像 Hashcash 一样,工作量证明包含一个用于验证的计算难题,调整难度,使得整个网络平均每 10 分钟才能找到一个解决方案,当一个节点找到一个解决方案时,它会向网络广播该区块,其他节点接受该区块,前提是它有效,并且该区块中的交易尚未被支付,节点在区块中表达对前一区块的接受,通过在其区块头中包含前一区块的哈希值来实现。
在节点总是接受最长链的假设下,通过工作量证明的链证明了它所包含的区块在它们被创造之后被观察到,如果观察者重新计算工作量证明,那么最长的链将是来自最大计算量池的链。
为了让两个区块同时广播到网络中,一些节点可能会收到一个区块,而另一些节点可能会收到另一个区块,它们会在收到第一个区块的基础上工作,但当他们收到第二个区块时,他们会切换到更长的链,并在其上工作,节点在发现更长的链时会切换,因此一个孤立的区块将很快被抛弃。
网络
运行网络的步骤如下:
- 新交易广播:一笔交易被广播到所有节点。
- 节点验证交易:每个节点将交易收集到一个区块中,节点在验证交易时检查以下几点:
- 每一笔交易都只能花费一次输入(即没有双重支付)。
- 交易中的输入确实属于该交易发起者(通过数字签名验证)。
- 节点寻找工作量证明:节点为每个区块寻找一个随机数,该随机数使得区块头的哈希值小于当前目标值,节点一直在寻找,直到找到一个解决方案。
- 节点广播解决方案:当一个节点找到一个解决方案时,它会向网络广播该区块。
- 节点接受验证:其他节点在收到该区块时,会验证该区块中的交易是否有效,以及该区块是否确实找到了工作量证明,只有当两者都有效时,它们才接受该区块。
- 节点在其上工作:节点将在它们接受的区块上寻找下一个区块,从而延长该链。
节点总是认为最长的链是正确的,并将在其上继续工作,如果一个节点从两条等长的链中接收到一条,它将基于一些随机的选择(查看接收到的区块的时间)来选择其中一条,并在这条链上工作。
激励
按照惯例,第一个解决工作量证明的节点会获得一笔新铸造的币以及该区块中包含的所有交易的手续费,这样,激励节点支持网络,并为早期采用者提供一种货币形式的奖励,随着货币的成熟,新币的固定发行率将提供一种激励机制,直到通货膨胀消失,完全依靠交易手续费来激励节点。
激励也可以通过交易费来帮助保护网络,一旦预定数量的币进入流通,激励将转变为完全基于交易费,这将提供一种保护网络免受通货膨胀的方式,因为没有人可以通过产生大量新币来破坏网络。
激励机制可能有助于节点保持诚实,如果一个攻击者能够控制超过全网一半的计算能力,他就可以制造自己的支付链,并从中花费币,但这样做会破坏对他自己拥有的币的价值,因为他将无法让任何人接受他的支付链,他可能仍然从交易费中获利,但一旦他失去了他的币的价值,这个收益就会变得微不足道。
回收磁盘空间
一旦交易被包含在区块中,并且该区块位于以工作量证明为基础的链的足够深处之后,该交易就可以被丢弃,以节省磁盘空间,为了在不破坏区块哈希值的情况下实现这一点,交易被 Merkle 树哈希化,只有根被包含在区块的哈希中,这样,一旦旧的区块被深度埋葬,旧的区块就可以被修剪掉,只要 Merkle 树的根仍然可用,内部哈希不需要被存储。
简化的支付验证
运行网络的完整节点需要存储所有区块的副本,这会随着时间推移变得很大,一个不需要存储所有交易历史的用户,只要他能找到诚实的节点,就可以验证支付,他需要检查最长的工作量证明链,并验证该区块中的交易是否有效,为了高效地做到这一点,他只需要区块头的 Merkle 根,这些根存储在区块头中,他可以通过获取 Merkle 分支来验证一笔交易,该分支包含所有必要的哈希值来连接该交易到 Merkle 根,通过检查该区块是否被足够多的工作量证明所保护,他可以看到该交易是否被网络接受。
图3:一个 Merkle 树,A 是根,L, N, O, P 是叶子,V, X, Y, Z 是单个交易的哈希。
分叉和计算能力
我们在这里考虑一个攻击者试图生成一个替代链,该链比诚实节点生成的链更长,攻击者从某个区块开始,在他自己的链上生成后续区块,他的链会比诚实链短,因为诚实链在他开始攻击之后仍在继续生成。
攻击者只有在他赶上并超过诚实链时才能成功,我们假设网络有 P 的计算能力,攻击者有 q 的计算力(P > q),攻击者赶上链长度的概率类似于赌徒破产问题,概率函数是一个指数衰减函数,随着区块数量的增加而趋近于零。
图4:攻击者追赶的概率,这是一个 q/p 的函数,q < 1。
由于难度是根据全网计算能力动态调整的,随着诚实链的增长,攻击者追赶的概率会呈指数级下降。
我们提出了一个不依赖信任的电子现金系统,我们通过点对点网络使用工作量证明来记录一个公共交易历史,从而解决双重支付问题,最长链被认为是诚实的,只要诚实的节点控制了网络,这个系统就是安全的,节点可以自行验证交易,而无需依赖中央服务。
补充信息
- 中本聪的比特币白皮书(PDF原文):https://bitcoin.org/bitcoin.pdf
- 中本聪发布白皮书的邮件:https://metzdowd.com/pipermail/cryptography/2008-November/014841.html
这份原文是理解区块链和比特币核心思想的基石,它以清晰、简洁的方式阐述了一个革命性的技术构想。
作者:咔咔本文地址:https://jits.cn/content/11561.html发布于 2025-11-16
文章转载或复制请以超链接形式并注明出处杰思科技・AI 股讯
还没有评论,来说两句吧...