April 22, 2018 · 区块链 本文字数: 3.3k 阅读时长:11 min 全站字数:345.6k

比特币白皮书学习笔记

  1. 0 比特币分享ppt
  2. 1 简介
  3. 2 交易
  4. 3 时间戳服务器
  5. 4 工作量证明
  6. 5 网络
  7. 6 激励
  8. 7 存储空间优化
  9. 8 简化交易验证
  10. 9 合并和分隔
  11. 10 隐私
  12. 11 安全性计算
  13. 总结
  14. 资料

0 比特币分享ppt

详见:比特币与区块链

1 简介

点对点的点子现金系统,可以实现点对点转账。不需要依赖中心机构来解决双花问题。

网络将时间戳打在交易上,交易通过hash被保存到一个区块链上,这个区块链是基于hash的工作量证明。除非重新进行工作量证明,否则无法修改交易记录。最长的链不仅表示事件发生的见证者,也代表最大算力。

由于大多数节点时诚实的,可以使得网络免收攻击。网络中的节点可以随时加入和离开,消息以尽力广播的方式传播,接收最长的链为可以信任的链。

依赖第三方金融机构提供服务,成本高,无法实现不可逆的交易。由于交易可能被修改,导致信用需要传播。金融机构必须控制风险,收集足够的信息,这大大增加了成本。但仍然可以通过使用现金来避免监管。

需要有一种点对点的交易系统,通过算法替代信任,去掉第三方机构,交易在计算概率上无法修改,防止欺诈,保护诚实的交易双方。

提出了一种解决双花问题的方案:点对点的时间戳服务器生成基于时间排序的交易的证据。只要诚实的节点是大多数,
系统就是安全的。

2 交易

将电子货币定义为一个数字签名的链。数字货币的拥有者通过对之前的交易以及转账对象的公钥进行签名,接收方可以通过验证数字签名来验证这个链,即数字货币的所有权。

这里存在的问题是接收方无法确定这个数字货币之前是否已经被花费过,即双花问题。传统的解决方法是通过一个第三方机构来检查每笔交易。这种方法依赖第三方机构的信用,无法防止第三方机构作弊。

这里的解决方法是保证付款方之前没有签名过该交易。最早的签名交易才是有效的。而保证这一点的方法是要拥有所有的历史交易。为了避免第三方机构,交易需要公开,需要一种机制让所有的参与者对单个完整的交易记录达成共识。

接收方需要的保证是,在交易发生时,网络中的多数节点对当前及其之前的交易达成共识。

3 时间戳服务器

解决方案是使用一个时间戳服务器,它将一个块上存储的所有数据打上时间戳,并计算hash,并广播这个块信息和hash。
块中的时间戳表明在该时间戳发生了这个交易,每个块包含了前个块的hash,后面的时间戳加强了前面的时间戳。

4 工作量证明

为了是上面的时间戳服务器运行,需要一种工作量证明:寻找一个值,使得最后hash的值以多个0开头。平均的工作量和0的数目是指数关系。验证只需要进行一次hash运算。

对于时间戳网络,只需要增加nonce值,使得最终区块的hash满足前缀是指定数目个零即可。一旦算力投入,这个区块内容就不能更改,除非重新进行hash运算。而且后面的区块会链接到当前区块,如果想改变当前区块的hash,需要将之后的所有区块的hash重新计算一遍。

一个cpu一票,最长的链代表最长的cpu算力集合。如果多数节点时诚实的,那么最长的链将快速增长,超过其他竞争链。
如果一个攻击者想修改过去的一个区块,需要修改这个区块后面所有的区块,也就是要重新进行工作量证明,并最后超过诚实节点维护的最长链。

我们将证明,随着后面连接的区块数量的增加,攻击者攻击成功的概率呈指数式递减。

为了补偿硬件性能的提升和网络整体节点的数量,难度会随着每个小时产生区块的数目来决定。如果生成区块速度过快,将增加难度。

5 网络

整个网络是这样运行的:

  1. 新的交易会被广播到所有的节点。
  2. 每个节点将新的交易打包到一个区块。
  3. 每个区块对这个区块进行工作量证明计算。
  4. 如果一个区块完成了工作量证明,则广播到所有其他节点。
  5. 如果这个区块中的所有交易是有效的,没有被双花,则接受这个区块为新的区块。
  6. 节点表达共识是通过继续寻找下一个区块,使用接受的这个区块的hash作为将要寻找的区块的previous hash。

节点将选择最长的链,并试图扩展它。如果有两个节点同时发现了新的区块,则这个结果会广播到不同节点,这是一个节点可能同时保留这两个分支,以防止其中一个变为最长。这个平衡最终被下一个区块的生成所打破。

所有节点继续在最长的链上工作。

新的交易没有必要广播的所有节点,只要大多数收到即可,没收到交易的节点可以在随后接收下一个块时获取到丢失的那个块。

6 激励

每个块的第一个交易是个特殊的交易。给块的创建者生成数字货币。这可以激励这个节点保持诚实,并继续支持网络的运转。也是一种数字货币的发行机制。

生成新数字货币的速率是稳定的,就像是旷工挖矿来获取黄金,这里消耗的是算力。

激励还可以是交易费用。如果交易的输出小于输入,则多余的就是这个块创建者的奖励。一旦所有的数字货币发行完毕,交易费用就是唯一的激励来源。永远不会通货膨胀。

这个奖励也可以使得节点保持诚实,如果有大多数的算力,他可以选择挖矿获取新的数字货币或者通过欺骗的方法重新支付(双花)自己拥有的数字货币。

遵守规则挖矿才是利益最大化,而不是摧毁整个系统使自己的财富变得无效。比其他人获取更多的数字货币。

7 存储空间优化

一旦一个数字货币被多次确认(已经花费),那么之前的花费记录就可以丢弃来节省磁盘空间。为了实现这个策略,同时不影响区块的hash,使用它merkle tree。只有树根包含区块的hash,其他内部历史hash可以剪掉。

A block header with no transactions would be about 80 bytes. If we suppose blocks are generated every 10 minutes, 80 bytes 6 24 * 365 = 4.2MB per year. With computer systems typically selling with 2GB of RAM as of 2008, and Moore’s Law predicting current growth of 1.2GB per year, storage should not be a problem even if the block headers must be kept in memory.

区块头大小是80字节,假设没10分钟生成一个区块,一年是4.2M。对于一个2GB内存的操作系统,根据摩尔定律,1.2G每年增长。在内存中存储区块头都不是问题。

8 简化交易验证

一个节点没有必须拥有所有数据来进行支付的验证,只要通过查询网络,确认拿到了最长链的区块头的备份就可以开始验证。

然后找到已经打上时间戳的待验证支付交易的merkle树的分支,这个分支将这个交易链接到区块链中。虽然它无法自己确认,但是如果在链上找到,说明被接受了,这个区块之后的区块确认了这个交易。

这种交易验证是可靠地,只要多数节点控制最长的链。但也使得攻击者只要伪造特定的交易即可继续维持最长的链,解决这个问题的策略是,如果网络节点发现发现一个非法区块,向用户发报警,让用户去下载完整的区块链并进行一致性验证。

经常接收交易的节点可以运行一个独立的,安全的节点,用于快速验证。

9 合并和分隔

为了允许数字货币数值的分割和合并,区块允许有多个交易输入和交易输出。

多数是输入指向一个之前的交易,或者将多个小额的交易合并为一个较大的输入,至少两个输出,一个是接受者,一个是发送者,用于找零。

这里多个交易的依赖是没有问题的,没有必要维护一个交易的所有历史。

10 隐私

传统银行保护隐私的方式是限制访问。在我们的方案中需要广播所有交易,这就使得无法限制访问。但是仍然可以通过保持公钥的匿名性来保护隐私。

知道公钥在交易,但是不知道这个公钥是是谁的。就像证券交易所,知道交易量,但是不知道是谁在交易。

另外一种保险是可以每次都生成新的公钥。对于多笔输入的交易可以看出属于哪个公钥,这是无法避免的。如果用户泄漏的私钥,那么所有的相关交易都可以找出。

11 安全性计算

攻击者试图更快的生成一条比多数诚实者维护的链更长的链。即使他成功了,也不能对诚实链有影响,所有攻击者的交易都是无效的,不会被接受。所有包含这些交易的区块都不会被接收。攻击者只能拿回自己最近花费的数字货币。

诚实链和攻击链的竞争可以建模为Binomial Random Walk。诚实链成功的事件是将诚实链扩展一个,失败的事件是攻击者将链扩展一个,将差距降1。

攻击者从一个赤字追赶可以类比Gambler’s Ruin problem。假设一个攻击者使用无限的信贷,玩无数次,直到最终收支平衡。
可以计算他收支平衡的概率,或者攻击者链追上诚实者链。

假设p大于q,随着需要追赶的区块数目的增加,概率呈指数递减。

如果攻击者运气不好,那么基本就不可能追不上了。

我们现在考虑,新的交易需要等待的时间,时间过后就可以保证发送者就不能再修改交易了。
假设发送者是攻击一方,想在发送给接受者一段时间后,又重新支付,而接收方收到报警时已经晚了。

由于是在交易前,使用接收者的公钥来签名交易,这就阻止了攻击者预先生成一系列区块,然后偷偷挖矿,保证自己的链领先,然后在这个时间点发送虚假交易。一旦交易发送,攻击者就在分叉的平行链上挖矿,生成修改后的交易。

接收方等待交易被打包到区块,然后又z个区块被链接到这个交易所在的区块后面。他不知道攻击者的进度,但是假设诚实节点按照平均的算力在期望时间内生成新的区块。

总结

一种不依赖信任的电子交易系统。以基于数字签名的数字货币说起,可以提供非常强的所有权,但是不能阻止双花。
为了解决这个问题,引入了p2p网络和工作量证明,使用工作量证明来维护一个唯一的完整的交易历史。只要多数诚实节点控制网络,攻击者就很难改变这个交易历史。
网络是鲁棒的,简洁。节点只需要很少的协作。不需要被识别,消息也不是路由到特定的节点,而且也是尽力广播消息。
节点可以随时离开和加入。接收最长的链作为所有发生交易的见证。使用cpu算力投票,表达共识是通过接收一个新的区块并继续这这个区块之后进行新的区块的生成或者拒绝。

另外的规则和奖励机制使得共识机制更好的运转。

资料

  1. https://bitcoin.org/bitcoin.pdf