Txilm协议在设计迭代中得到了原比特大陆 区块链团队 王逵 的指导和非常有意义的探讨。同时得到了孙毅老师主持的中科院计算所区块链实验室的大力支持。感谢 实验室中王鑫和姜鑫两位同学帮助完成了算法的初步模拟验证和近似误差的确认。
本文翻译自Monoxide团队的Medium博文,感谢 猎豹移动 区块链团队 王海龙 完成翻译和校对。
1 背景
假设新创建的区块中大多数交易TXes已经存储在大多数全节点的内存池中,致密区块(compact block)只携带TXIDs。这是在比特币改进提案BIP152中提出的。更多细节参见bitcoincore.org/en/2016。
总的来说,致密区块用32字节的TXID(例如,交易TX的SHA256值)替代每个交易TX(大约300-400字节)。这可以节省近10倍的带宽。
我们旨在进一步将致密区块中每个TX表示的大小减小到约40比特。我们可以在致密区块最初的提案(6.4=32字节/40比特)上做到6.4倍压缩。新的提案没有使用诸如布隆过滤器或IBLT这些额外的数据结构。此外,新提案不依赖各个全节点之间有高度一致的内存池(Mempool)。
通过结合规范的交易排序规则(canonical transaction ordering rule, CTOR),短哈希可以被进一步降低到32比特,这在致密区块最初的提案上产生了8倍压缩。做到了总的数据量减小80倍。
2 基本原理
我们通过基于TXID的小尺寸哈希值在区块中显示每个TX。
TXID-HASH = h(TXID)
其中h是一个小尺寸的哈希函数,它可以产生32比特到64比特的哈希值。该函数可以仅是CRC32,CRC40或CRC64。所提新的致密区块方案只包括一个TXID-HASH列表,按交易TX的初始列表排序。
这种k比特的小尺寸哈希可能会产生二义性(ambiguity),这需要每个全节点解决。一旦从发送方接收到包括TXID-HASH列表的新区块,接收方就在其内存池中的哈希列表中搜索每个接收到的TXID-HASH。对于每个TXID-HAS