深入理解比特币系列(6):比特币白皮书(第三部分)

本段是白皮书的7-10部分,涉及到的内容包括节省网络中节点的存储空间(7)、精简版本的网络节点是如何工作的(8)、交易中的价值(或者成为面额)是可以组合与分割的(9)及系统隐私保护问题(10)。

【回收硬盘空间】如果最近的交易已经被纳入了足够多的区块之中,那么就可以丢弃该交易之前的数据,以回收硬盘空间。为了同时确保不损害区块的哈希值,交易信息作哈希运算时,被构建成一种Merkle树(Merkle tree)的形态,使得只有根被纳入区块的哈希。通过将该树的分支拔除(stubbing)的方法,老区块就能被压缩。而内部的哈希值是不必保存的。

不含交易信息的区块头大小仅80字节。如果我们设定区块生成的速率为每10分钟一个,那么每一年产生的数据为4.2MB。(80 bytes * 6 * 24 * 365 = 4.2MB)。2008年,PC系统通常的内存容量为2GB,按照摩尔定律的预言,即使将全部的区块头存储于内存之中都不是问题。

注:截至2017年8月,Bitcoin的区块链大小已超过120GB(Blockchain.info数据,bitinfocharts.com则显示超过150GB),并仍以每年50GB的速度在增长(如果保持目前区块大小的情况下)。

【简化的支付确认】在不运行一个完整网络节点的情况下,也是能够对支付进行检验的。一个用户只需要保留最长工作量证明链条的区块头部的拷贝就可以,他可以不断向网络发起询问,直到他确信自己拥有最长的链条,并能够通过merkle的分支连接到被加上时间戳并纳入区块的那次交易。节点无法自行检验该交易,但通过追溯到链条中的某个位置,它就能看到某个节点曾经接受过它,并且在它后面增加的区块也进一步证明全网曾经接受了它。

当此情形,只要诚实的节点控制了网络,检验机制就是可靠的。但是,当全网被一个计算力占优的攻击者攻击时,将变得较为脆弱。因为网络节点能够自行确认交易的有效性,只要攻击者能够持续地保持计算力优势,简化的机制会被攻击者伪造的交易欺骗。一个保护的策略是只要他们发现了一个无效的区块,就立刻发出警报,收到警报的用户将立刻开始下载被警告有问题的区块或交易的完整信息,以便对信息的不一致进行判定。对于日常会发生频繁收付交易的商业机构可能仍会希望运行他们自己的完整节点,以保持较大的独立完全性和检验的快速性。

【价值的组合与分割】虽然可以单个单个地对电子货币进行处理,但是对于每一枚电子货币单独发起一次交易将是一种笨拙的办法。为了使得价值易于组合与分割,交易被设计为可以包含多个输入和输出。一般而言是某次价值较大的前次交易构成的单一输入,或者由某几个价值较小的前次交易共同构成的并行输入,但是输出最多只有两个:一个用于支付,另一个用于找零(如有)。

需要指出的是,当一笔交易依赖于之前的多笔交易时,这些交易又各自依赖于多笔交易,但这并不存在任何问题。因为这个工作机制并不需要展开检验之前发生的所有交易历史。

【隐私】传统的造币厂模型为交易的参与者提供了一定程度的隐私保护,因为试图向可信任的第三方索取交易信息是严格受限的。但是如果将交易信息向全网进行广播,就意味着这样的方法失效了。但是隐私依然可以得到保护:将公钥保持为匿名。公众得知的信息仅仅是有某个人将一定数量的货币发送给了另外一个人,但是难以将该交易同特定的人联系在一起,也就是说,公众难以确信,这些人究竟是谁。这同股票交易所发布的信息是类似的,股票交易发生的时间、交易量是记录在案且可供查询的,但是交易双方的身份信息却不予透露。

作为额外的预防措施,使用者可以让每次交易都生成一个新的地址,以确保这些交易不被追溯到一个共同的所有者。但是由于并行输入的存在,一定程度上的追溯还是不可避免的,因为并行输入表明这些货币都属于同一个所有者。此时的风险在于,如果某个人的某一个公钥被确认属于他,那么就可以追溯出此人的其它很多交易。