比特战纪 > 比特币 > 比特币是什么 > 比特币白皮书中文版(全文详解)

比特币白皮书中文版(全文详解)

比特币:一个点对点的电子现金系统


  1 摘要

 
  纯粹的点对点版本的电子现金将允许在线付款直接从一方发送到另一方,而无需通过金融机构。数字签名提供了该解决方案的一部分,但是如果仍然需要一个受信任的第三方来防止重复支出,则将失去主要优势。我们提出了一种使用对等网络解决双花问题的解决方案。网络通过将交易散列到正在进行的基于散列的工作量证明链中来对交易进行时间戳记,从而形成一条记录,除非重做工作量证明,否则无法更改该记录。最长的链不仅可以证明所见证事件的顺序,还可以证明它来自最大的CPU能力。只要大多数CPU能力由不合作攻击网络的节点控制,它们将产生最长的链并超过攻击者。网络本身需要最小的结构。消息以尽力而为的方式广播,节点可以随意离开并重新加入网络,接受最长的工作量证明链作为消息消失时发生的证据。

  2 介绍

 
  互联网上的商业几乎已经完全依赖作为可信赖的第三方的金融机构来处理电子支付。尽管该系统对于大多数交易而言运行良好,但仍然遭受基于信任模型的固有弱点的困扰。由于金融机构无法避免调解纠纷,因此完全不可能进行完全不可逆的交易。调解的成本增加了交易成本,限制了最小的实际交易规模,并切断了小额临时交易的可能性,并且损失了不可逆服务不可逆支付能力的损失。有了逆转的可能性,信任的需求就会扩散。商家必须警惕他们的客户,向他们索要比他们原本需要更多的信息。一定比例的欺诈行为是不可避免的。通过使用实物货币可以亲自避免这些成本和付款不确定性,但是在没有受信方的情况下,不存在通过通信渠道进行付款的机制。
 
  所需要的是一种基于密码证明而不是信任的电子支付系统,该系统允许任意两个愿意的当事方直接彼此进行交易,而无需受信任的第三方。在计算上不可行进行逆转的交易将保护卖方免受欺诈,并且可以容易地实施常规托管机制来保护买方。在本文中,我们提出了一种使用对等分布式时间戳服务器生成交易的时间顺序的计算证明的双花问题的解决方案。只要诚实节点共同控制比任何协作的攻击者节点组都更多的CPU能力,系统就是安全的。
 

  3 交易

 
  我们将电子币定义为数字签名链。每个所有者通过对上次交易的哈希值和下一个所有者的公钥进行数字签名并将它们添加到币的末尾,将币转移到下一个币。收款人可以验证签名以验证所有权链。
  当然,问题在于收款人无法验证其中一位所有者没有两次花费币。常见的解决方案是引入受信任的中央机构或薄荷,该机构检查每笔交易是否存在双重支出。每次交易后,必须将币退还给铸币厂发行新的币,并且仅相信直接从铸币厂发行的币不会被重复使用。这种解决方案的问题在于,整个货币体系的命运取决于经营铸币厂的公司,每笔交易都必须像银行一样通过铸币厂。
 
  我们需要一种让收款人知道以前的所有者未签署任何较早交易的方法。就我们的目的而言,最早的交易才是最重要的交易,因此我们不关心以后进行双倍支出的尝试。确认没有交易的唯一方法是知道所有交易。在基于造币厂的模型中,造币厂知道所有交易,并确定哪个先到。为了在没有受信任方的情况下完成此任务,必须公开宣布交易,并且我们需要一种参与者可以就接收订单的单一历史达成一致的系统。收款人需要证明在每次交易时,大多数节点都同意这是第一个收到的。
 

  4 时间戳服务器

 
  我们建议的解决方案始于时间戳服务器。时间戳服务器通过对要打时间戳的项目块进行散列并广泛发布散列来工作,例如在报纸或Usenet帖子中。时间戳证明,为了进入哈希表,数据必须在当时已经存在。每个时间戳都在其哈希中包括前一个时间戳,形成一个链,每个附加时间戳都会增强之前的时间戳。

  5 工作量证明

 
  为了实现对等的分布式时间戳服务器,我们将需要使用类似于Adam Back的Hashcash的工作量证明系统,而不是报纸或Usenet帖子。工作量证明涉及扫描一个值,该值在进行散列时(例如,使用SHA-256),散列以零位开始。所需的平均功在所需的零位数上是指数级的,可以通过执行单个哈希来验证。
 
  对于我们的时间戳网络,我们通过增加块中的随机数来实现工作量证明,直到找到一个值,该值为块的哈希提供所需的零位。一旦花费了CPU工作量来满足工作量证明,就不能在不重做工作的情况下更改该块。当后面的块链接到其后时,更改该块的工作将包括重做其后的所有块。
  工作量证明还解决了在多数决策中确定代表制的问题。如果大多数基于一个IP地址一票,那么任何能够分配许多IP的人都可以颠覆它。工作量证明实质上是一个CPU一票。多数决策由最长的链代表,而链上投入的工作量最大。如果大多数CPU功能由诚实节点控制,那么诚实链将以最快的速度增长,并超越任何竞争链。要修改过去块,攻击者必须重新进行验证的工作块和之后的所有块,然后赶上和超越诚实节点的工作。稍后我们将说明,随着添加后续块,较慢的攻击者追赶的概率将呈指数下降。
 
  为了补偿硬件速度的提高和随着时间的推移对运行节点的兴趣的不断变化,工作证明的难度由确定为每小时平均块数的移动平均值确定。如果生成速度太快,难度会增加。
 

  6 网络

 
  运行网络的步骤如下:
 
  1)新交易将广播到所有节点。
 
  2)每个节点将新交易收集到一个块中。
 
  3)每个节点都在为其块寻找困难的工作量证明。
 
  4)当节点找到工作量证明时,它将块传播到所有节点。
 
  5)仅当其中的所有交易有效且尚未花费时,节点才接受该块。
 
  6)节点通过在节点中创建下一个块来表达对块的接受链,使用接受的块的哈希作为先前的哈希。
 
  节点始终将最长的链视为正确的链,并将继续努力进行扩展。如果两个节点同时广播下一个块的不同版本,则某些节点可能首先接收一个或另一个。在这种情况下,他们将在收到的第一个分支上工作,但保留另一个分支以防分支变得更长。找到下一个工作量证明并且一个分支变长时,关系将断开。然后,在另一个分支上工作的节点将切换到更长的节点。
 
  新交易广播不一定需要到达所有节点。只要它们到达多个节点,它们很快就会进入一个块。块广播还可以容忍丢失的消息。如果一个节点没有收到一个块,它将在收到下一个块并意识到丢失了一个块时提出请求。
 

  7 激励

 
  按照惯例,区块中的第一笔交易是一种特殊交易,它启动了区块创建者拥有的新币。这增加了节点支持网络的动力,并提供了一种将币初始分配到流通中的方法,因为没有中央授权来发行它们。稳定增加一定数量的新币类似于黄金开采商消耗资源以增加黄金的流通量。在我们的示例中,所花费的时间是CPU时间和电力。
 
  激励措施也可以由交易费用提供资金。如果交易的输出值小于其输入值,则差额是交易费用,该费用加到包含交易的区块的激励值中。一旦预定数量的币进入流通,激励就可以完全过渡为交易费用,并且完全没有通货膨胀。
 
  该激励可以帮助鼓励节点保持诚实。如果一个贪婪的攻击者能够集合比所有诚实节点更多的CPU能力,他将不得不选择使用它来窃取他的付款来欺骗人们,或者使用它来生成新的代币。他应该发现,遵守这些规则比从其他任何人那里获得的钱要多得多,这些规则比其他任何人加起来都更有利于他,而不是破坏制度和自己财富的有效性。
 

  8 回收磁盘空间

 
  一旦币中的最新交易被埋在足够的块下,已用完的交易就可以丢弃,以节省磁盘空间。为了在不破坏块的哈希的情况下简化此过程,在Merkle Tree中对交易进行哈希处理,仅将根包含在块的哈希中。然后可以通过砍掉树的分支来压缩旧块。内部哈希不需要存储。
  一个没有交易的区块大约为80个字节。如果我们假设每10分钟生成一次块,则每年80字节*6*24*365=4.2MB。截止到2008年,通常销售2GB RAM的计算机系统以及摩尔定律预测当前每年将增长1.2GB,即使必须将区块保存在内存中,存储也不成问题。
 

  9 简化的付款验证

 
  无需运行完整的网络节点就可以验证付款是可能实现的。用户只需要保留最长的工作量证明链的区区块的副本,就可以通过查询网络节点来获取该副本,直到他确信自己拥有最长的链,然后获得将交易与区块链接的Merkle分支。他无法亲自检查交易,但是通过将交易链接到链中的某个位置,他可以看到网络节点已接受交易,并在进一步确认网络已接受交易之后添加了块。
  这样,只要诚实节点控制网络,验证就可靠了,但是如果网络受到攻击者的压制,验证就更容易受到攻击。尽管网络节点可以自己验证交易,但是只要攻击者可以继续使网络胜过攻击,简化的方法就可能被攻击者的虚假交易所欺骗。防止这种情况发生的一种策略是,当网络节点检测到无效块时,接受它们的警报,提示用户的软件下载完整的块并警告交易以确认不一致。收到频繁付款的企业可能仍希望运行自己的节点,以获得更独立的安全性和更快的验证。
 

  10 合并和分割价值

 
  尽管可以单独处理币,但要对转账中的每一分钱进行单独交易是不方便的。为了允许价值被分割和合并,交易包含多个输入和输出。通常会有从较大的先前交易或多个输入组合少量的任一单个输入,并且至多两个输出:一个用于支付,和一个返回的变化,如果有,返回到发送方。
  应该注意的是,扇出在此取决于一个交易,而这些交易又取决于多个交易,这在这里不是问题。永远不需要提取交易历史记录的完整独立副本。
 

  11 隐私

 
  传统的银行业务模式通过限制相关方和受信第三方对信息的访问来实现一定程度的隐私。公开宣布所有交易的必要性排除了此方法,但仍可以通过在另一位置中断信息流来保持隐私:通过使公用密钥保持匿名。公众可以看到有人正在向其他人汇款,但没有信息将交易链接到任何人。这类似于证券交易所发布的信息水平,在该水平上,公开了单个交易的时间和规模,即“磁带”,但没有告知双方是谁。
  作为额外的防火墙,每笔交易都应使用新的密钥对,以防止将其链接到公共所有者。多输入交易仍然无法避免某些链接,这必然表明它们的输入是同一所有者拥有的。风险是,如果密钥的所有者被泄露,则链接可能会揭示属于同一所有者的其他交易。
 

  12 计算

 
  我们考虑攻击者试图比诚实链更快地生成备用链的情况。即使做到这一点,也不会使系统面临任意更改的威胁,例如凭空创造价值或获取从未属于攻击者的金钱。节点将不会接受无效交易作为付款,诚实节点将永远不会接受包含它们的区块。攻击者只能尝试更改其自己的交易之一以取回最近花费的资金。
 
  诚实链和攻击者链之间的种族可以描述为二项式随机游走。成功事件是诚实链扩展了一个区块,将其领先优势增加了+1,失败事件是攻击者链扩展了一个区块,从而将差距减小了-1。
 
  攻击者追赶给定赤字的可能性类似于赌徒的破产问题。假设拥有无限信用的赌徒从赤字开始,可能进行无数次尝试以达到收支平衡。我们可以计算出他达到收支平衡或攻击者赶上诚实链的可能性,如下所示:
 
  p=诚实节点找到下一个块的概率
  q=攻击者找到下一个区块的可能性
  qz=攻击者可能追上后面z个区块的概率
  在我们假设p>q的情况下,随着攻击者必须赶上的块数增加,概率呈指数下降。面对他的机会很大,如果他不及早地向前走,那么随着他的落后,他的机会就会越来越小。
 
  现在,我们考虑新交易的接收者需要等待多长时间,才能确定发送者无法更改交易。我们假设发件人是攻击者,他想让收件人相信他已经花了一段时间,然后在一段时间后将其切换为还钱。发生这种情况时,将通知接收方,但发送方希望为时已晚。
 
  接收者生成一个新的密钥对,并在签名前不久将公共密钥提供给发送者。这可以防止发件人通过不断地进行处理,直到他有幸能够取得足够的领先优势,然后在此时执行交易,来提前准备区块链。一旦发送了交易,不诚实的发送者就开始在包含其交易替代版本的并行链上秘密工作。
 
  接收者等待,直到将交易添加到一个区块中,并在其之后链接了z个区块。他不知道攻击者取得的确切进展量,但是假设诚实的区块花费了每个区块的平均预期时间,攻击者的潜在进度将是具有预期值的泊松分布:
  为了让攻击者仍然可以赶上现在的可能性,我们乘了他可以通过概率已经取得的进展各量,他可以从该点赶上泊松密度:
  重新安排以避免对分布的无限尾求和...
  转换为C代码...
  返回总和,运行一些结果,我们可以看到概率随z呈指数下降。
  求解P小于0.1%...

  13 结论

 
  我们提出了一种不依赖信任的电子交易系统。我们从数字签名制成的币的通常框架开始,该框架提供了对所有权的强大控制,但是如果没有防止双重支出的方法,它是不完整的。为了解决这个问题,我们提出了一种使用工作量证明的对等网络来记录交易的公共历史记录,如果诚实的节点控制了大部分CPU能力,则对于攻击者而言,更改记录很快就变得在计算上不切实际。该网络的非结构化简单性十分强大。节点几乎不需要协调就可以立即工作。由于消息不会路由到任何特定的地方,只需要尽最大的努力进行传递,因此不需要标识它们。节点可以随意离开并重新加入网络,接受工作量证明链作为它们离开时发生的事情的证明。他们以CPU能力投票,通过扩展有效块来表示接受有效块,并通过拒绝对其进行操作来拒绝无效块。任何需要的规则和激励措施都可以通过这种共识机制来执行。
 

声明:文章原作者保留权利。文章为作者独立观点,不代表比特战纪立场,不构成任何投资建议,请谨慎对待。如需转载,请注明出处:https://www.bitzhanji.com/btc/ssm39.html; 如有稿件侵权、失实、错误等问题,请联系处理:734501534@qq.com

  • 全部评论(0
    还没有评论,快来抢沙发吧!