续上篇~
7、回收磁盘空间
当一个最新交易被放入到足够多的区块中以后,可以删除此交易之前的交易,以节省磁盘空间。如下图,当一个新交易被足够多的节点放入到块中以后,它之前的交易可以被删除。为不破坏区块的哈希值,区块采用摩克尔树(Merkle Tree)的存贮结构,如下图中的左图所示,树的根结点是本区块的哈希值。所有旧区块将通过树枝剪除以使空间得以压缩,除根以外的内部所有哈希值都不需要保存。
左图表示块中的交易哈希树结构,右图是剪除交易TX0-2后的情形。
一个不含交易数据的区块头大约80字节,如果每10分钟产生一个区块,每年将产生80x6x24x365=4.2M 的数据量。2008年所售计算机系统的内存(RAM)的典型配置大约为2G,根据摩尔(Moore’s Law)预期每年内存将增长1.2G,即使将所有的区块头都写入内存中也不会存在问题的。
比特币系统所耗内存问题颇受人们争议。作者在文中给出了节省空间的方法,并也考虑到了内存技术的提高,最后断言,比特币系统不会因内存问题而影响未来的发展和应用。当然,这是基于在整个区块链只包含区块头的假设而做出的推断,是有一定道理的。但是在一个比特币系统中,全节点也要保持相当的数目才行。随着交易量的不断增加,每个区块的大小可能也要扩大,这样随着时间的不断积累和交易量的不断扩大,每个节点需要多大的存贮空间才能满足需要,很可能真是个问题。
8、简单支付确认
在一个非完整结点上确认支付是可行的,也即一个用户只需要保存最长POW链中所有区块头的拷贝即可。他可以通过不断查询,确认自己是否拥有最长的区块链,并且能够查到所做的那笔交易的摩可尔树的分枝,如下图的交易Tx3的摩可尔分枝。他自身并不能验证这笔交易,但是可以查到交易在区块中的位置,也可以看到交易所在区块被网络多数网络结点承认后加进了区块链上。
可以看到,只要诚实的节点掌控着网络,交易验证就是可信的,但是如果网络由攻击者操控,风险将变的更大。与能自我验证交易相比较,当攻击者操控网络的时候,简单方法更容易被攻击者的假冒交易所欺骗。为防止如此情况发生,一个防护策略是,接收网络其它节点有关无效交易的告警,提醒用户下载全区块,警告交易出现了不一致性的问题。对于交易频繁的商家,建议最好还是做为一个完全节点运行,这样可以得到更加自主的安全和更快捷的验证。
从本小节,可以看到,中本聪当初就充分考虑到了比特币系统在应用时,所占存贮资源问题,SPV确实是一个好的方法,假若一个包含交易的区块大小为2M,一个采用SPV的用户,需要下载的区块链的大小,只不到全节点的2000分之一。这样做的风险虽然会略大一些,但对于小额交易不是问题。
领取专属 10元无门槛券
私享最新 技术干货