This is a read note of “The Book of Satoshi”.

  • 11/01/2008 Satoshi published his paper
  • 11/09/2008 Source code in SourceForge.net
  • 01/03/2009 Genesis block
  • 01/09/2009 Bitcoin V 0.1
  • 12/12/2010 Last post in bitcointalk.org

On 11/17/2008, Satoshi mentioned that he started coding 18 months ago.

1 基本设计

可扩展性:用户就安全地使用简化支付验证来检查双重消费了,该方法只需要区块链的头文件,差不多相当于每天 12KB。

51%攻击:根据长尾理论,小、中、少量大型集群计算能力的总和应该远超过最大僵尸集群的计算能力。即使一个坏人的计算机能力能够压倒网络,也不会瞬间致富。他所能做的就 是收回自己花出去的钱,就像开了一张空头支票。要利用这一点,他要先从商家买点东西,等到发货之后,压制网络并尝试收回自己的钱。这样的计划赚到的钱不太可能比产生比特币的多。有那么大的僵尸集群,产生出来的比特币应该比其他人加起来都多。

点对点网络: 政府擅长切断中央控制的网络,如 Napster,但像 Gnutella、Tor 这样的纯点对点网络看起来还能挺得住。

35%的通胀率基本上是由技术发展的速度确定的。数字货币必须以某种方式进行初次分配,而稳定的速率似乎是最好的公式。

2 交易处理

节点将交易保留在工作集中,直到进入区块。如果 90%的节点包含这笔交易,那么每次发现一个新区块时,该交易就有 90%的可能性存在于区块里。

重复消费:领先区块链分支中的交易会成为有效的交易,而另一个分支中的交易将是无效的。如果有人以这种方式重复消费,有且仅有一次消费永远有效,其他的均无效。交易接收者通常要等 1 小时或更久,以便为解决这种可能性留有时间。他们仍然可以立即再次花掉这笔比特币,但应该在采取实际行动之前等待,比如说发货。

攻击者不会向区块链的末尾添加区块。他必须回去重新计算其交易所在的区块、后续的所有区块以及同时网络不断添加到区块链末尾的新区块。他在改写历史。一旦他的分支变得更长,就变成了有效的区块链。

工作量证明投票的计算能力必须有最终的发言权。无论如何,让大家取得一致的唯一方法就是相信最长链为有效链。

收款方只需要在区块链上回溯一定的深度进行验证即可,通常只需要回溯 2 笔交易。再之前的所有交易都可以丢弃。

当节点收到区块时,它根据区块上的先前交易检查每笔交易的签名是否正确。区块可能仅包含依赖当前或先前区块的有效交易。例如,交易 C 可以依赖同区块中的交易 B,而 B 依赖于早先区块中的交易 A。

两个矿工同一时间生成的区块,都会广播自己的区块。所有的节点都收到区块并保留二者,但只会在先收到的区块上接着工作。假设恰好一半节点先收到其中一个区块,而另一半先收到另一个区块。当发现下一个工作量证明时,无论节点在哪个区块上工作,所在的分支都会变长,从而打破僵局。无论在哪一方,新区块都会包含另一半的交易,因此在任何一种情况下,分支都将包含所有的交易。甚至在不太可能发生的连续两次分叉的情况下,第二次分叉的双方也会包含完整的交易集。即使交易需要等待一个或多个额外的周期才进入区块都不会成为问题。

交易信息会快速传播至整个网络,因此如果同一笔交易的两个版本几乎同时发出,先发出去的那条就有很大优势首先抵达更多的节点。节点只会接纳先到达的第一条,而拒绝后到达的第二条,因此发出较早的交易会有较多的节点致力于将其包含在下一个工作量证明中。实际上,每个节点通过把交易包含在自己的工作量证明成果中,就是在为自己首先看到的交易投赞成票。如果交易确实在同一时间到达,并且正好还出现了一个分叉,那就只好依据谁有运气先完成工作量证明来决定哪条有效了。

区块之间的预定时间很可能会是 10 分钟。每个区块都包含它的创建时间。如果时间超过 36 小时,其他节点不会在这块区块上工作。如果过去的 6×24×30 个区块跨越的时间不到 15 天,那么区块就产生太快了,于是系统把工作量证明的难度增加一倍。每个节点都以同样的区块链数据做同样的计算,因此它们在区块链的同一个链上会得出相同的结果。

系统无法做到即时的不可抵赖性,但仍比现有系统要快得多。纸质支票的交易可能在一两周后被拒付。信用卡的交易可能在 60 到 180 天后被驳回。而比特币的交易可以在一两个小时内完成不可逆转。

3 发布 V0.1

我把初始的工作量证明难度调得非常低,所以在比特币的早期阶段普通的个人电脑就能在几个小时内生成比特币。当竞争使铸币难度自动调升时就困难多了。生成的比特币必须要等 120 个区块出现后才可用于支付。

有两种汇款方式。如果接收人在线,可以输入对方的 IP 地址,连接后会取得一个新的公钥,然后发送带有备注的交易。如果接收人不在线,则可以发送至对方的比特币地址,也就是对方提供的公钥哈希值。接收人会在下次上网时收到这笔交易并获得交易所在的区块。这种汇款方法的缺点是没有发送备注信息,而且如果多次使用这个地址还将会丧失一定的私密性,但在双方不能同时在线或收款方无法接收连接的情况下,这不失为一种有效的替代方案。

比特币的总流通量将达到 2100 万枚。比特币将被分发给产生区块的网络节点,分发的数量每 4 年减半。 第一个 4 年:1050 万枚 第二个 4 年:525 万枚 第三个 4 年:262.5 万枚 第四个 4 年:131.25 万枚 以此类推……在所有的比特币都发完后,如果需要,可以通过收取交易费来支持系统的持续发展。这是建立在公开市场竞争的基础上的,而且可能总会有愿意免费处理交易的节点。