网络
运行这个网络的步骤如下:
1) 新交易给所有节点广播。
2) 每个节点将新交易放到一个区块。
3) 每个节点开始为这个区块寻找相应难度的工作量证明。
4) 当一个节点找到了这个工作量证明,把这个区块广播给所有节点。
5) 如果区块里所有的交易是有效的并且是没有被花费的,节点就会接受这个区块。
6) 节点把这个区块的哈希作为上一个哈希,并开始进行工作以竞争创建下一个区块。
节点总是认为最长的链是正确的,并且不断的工作去延长它。如果两个节点同时广播下一个区块,一些节点可能接受其中一个,也可能是另一个。这种情况下,他们在最先收到的区块上工作,但是也会保存另外一个分支以防它会变得更长。当下一个工作量被找到并且一个分支变得更长时,这种情况就会被打破,在另外一个分支上工作的节点将会切换到这个长的链上。
新交易广播不一定要广播到所有节点。只要他们能到达很多节点,这个交易很快就会进入下一个块。区块广播也能接受消息丢失。如果一个节点没有收到区块,当它收到下一个块时会发现自己少了一个区块,它就会请求来获得少的这个区块。
6. 激励
按照惯例,区块的第一个交易是一个特别的交易,这个交易会发行新币并且所有者是这个区块的创建者。这为节点支持网络引入了激励机制,并且这提供了一个初始发行货币进入流通的方式,因为没有一个中央机构去发行他们。不断增加新货币的过程类似于黄金矿工消耗资源来增加黄金的流通。在这里,消耗的事CPU的时间和电费。
激励还包括提供交易手续费。如果交易中输出值比输入值小,这个差值就是交易手续费,它被加入到这个区块激励值里。一旦预定数量的币全部进入流通,激励就全部转为交易手续费,完全没有通货膨胀。
激励有助于鼓励节点保持诚实。如果一个贪婪的攻击者掌握了比所有诚实节点还要大的算力,他将面临一个选择,是通过偷回他支付的钱来咋骗别人,还是用这个算力产生新的币。他应该会发现遵守规则更有好处,这个规则可以让他比其他人组合得到更多的新币,比破坏这个系统得到的更多,而且财产合法。
7. 回收磁盘空间
一旦一个币最新的交易被足够多的区块埋没,它之前的花费的交易就可以丢掉来节省空间。为了促成这个而不破坏区块的哈希,用这些交易生成一个默克尔树,仅仅根包含在区块的哈希里。那么旧区块可以通过去除树的一些分支进行压缩。有些内部的哈希就不用保存了。