经典分布式论文阅读:Bitcoin

562 阅读5分钟

本文是比特币白皮书的阅读笔记,网上也有他们翻译好的中文版,不过它毕竟是“白皮书”,不会像论文一样详细和完整,计算部分看不懂就跳过了。

传统的货币都需要通过可信的第三方机构来管理和发行,而本文提出了一种能够方式多次消费的点到点虚拟货币系统。比特币使用区块链保存交易历史,将区块的生成和计算能力进行挂钩,将最长的区块链(也就是最大的计算力)作为共识。

交易

在比特币系统中,货币就是一串被签名的交易记录,货币通过交易进行流动。在每次交易中,将收款方的公钥和付款方用于支付的交易一起进行哈希,然后使用付款方的私钥对哈希进行签名后将电子签名加入倒交易之中。因为电子签名的存在,任何第三方都可以使用付款方的公钥验证这笔交易。

然而,还有要解决的问题就是防止多次消费的问题,这就需要所有节点共同维护一份包含所有交易记录的历史。

时间服务器

比特币系统使用区块链来记录交易历史,一段时间内的所有交易会被保存在一个块中,块的哈希包含了当前块的数据以及上一个块的哈希。

工作量证明

比特币采用了工作量证明的机制来保证区块难以被篡改。一个区块中有一个称为nonce的32位整数,工作量证明要求区块打包节点找到一个合适的nonce使得区块的哈希值的头部存在多个连续的零位。

由于这个问题只能采用穷举方法求解,因此打包节点必须付出一定的算力。比特币系统将最长的区块链作为达成共识的交易历史记录,导致造假节点必须对造假区块以及之后的所以区块的nonce重新进行求解。

工作量证明要求的起始零位数量决定了求解的难易程度,位数可以使用最近一小时平均产生区块数量来决定,如果区块产生太快,可以增加问题的难度。

网络

比特币系统的运行方式如下:

  1. 新的交易被广播到了其他所有节点;
  2. 每个节点将收到的交易打包到一个块中;
  3. 每个节点去寻找工作量证明问题的解;
  4. 当某个节点找到一个解,将它的区块广播出去;
  5. 如果节点被广播到的区块中的交易有效并且不存在二次消费的问题,那么接受这个块;
  6. 节点之后在新的块之后组织新快,参与工作量证明。

总之,比特币系统的共识机制就是:最长的区块链就是对的。

奖励

为了鼓励节点(矿工)提供计算能力,区块链会向节点支付报酬,报酬的支付方式主要有两种:

  1. 每个区块链的第一个交易会凭空产生一些比特币支付给打包节点。不过这种奖励值会随着区块链变长而递减,最终会消失;
  2. 每个交易会留下一些比特币支付给打包节点作为交易费,交易费=输入金额-输出金额。

奖励机制也是鼓励节点保持诚实的方法,如果有人掌握了大量地算力,完全可以通过挖矿的方式来获得比特币,而不是尝试高难度的攻击。

磁盘空间回收

如果某些比特币的最新交易记录在非常深的区块链中,那么之前的交易都可以被清除来释放空间。为了保证这些交易记录被删除后,块的哈希值发生改变,区块链使用哈希树来保存所有交易的哈希值。在哈希树中,可以将交易删除,而只保留必要的用于计算最终哈希值的节点。

简单支付证明

验证某个交易通常需要一份最长的区块链副本,而对于小型设备来说这是一个比较大的负担。因此,用户可以借助其他保存完整区块链的节点来完成验证。具体就是用户的客户端请求只包含哈希树头的最长区块链,给定某个交易对应的哈希树路径,如果找到包含交易记录的区块(也就是哈希值匹配),并且已经有其他区块被添加到了这个区块之后,那么验证通过。

面值的合并与分割

比特币也会存在面值组合和找零的问题,因此也需要组合来自多个交易获得的余额,以及将找零返回给付款方。因此,比特币的交易支持多输入和两个输出:一个输出用来支付,另外一个输出用来找零

隐私

传统的银行机构通过限制外部对于交易信息的访问来保证客户的隐私安全,但是比特币的交易信息全都是公开的。因此,比特币保护隐私的方法是让公钥匿名,这样他人不知道交易双方身份。当然最好每次交易都使用新生成的密钥要进一步保护交易者身份

参考文献

  1. Nakamoto, Satoshi. "Bitcoin: A peer-to-peer electronic cash system." (2008).
  2. “Nonce.” Nonce - Bitcoin Wiki, en.bitcoin.it/wiki/Nonce.