TICK: Tiny Client for Blockchains
Zhang W , Yu J , He Q , et al. TICK: Tiny Client for Blockchains[J]. IEEE Internet of Things Journal, 2020, PP(99):1-1.
WHY
当前的比特币中的轻量级客户端存在以下问题
- 虽然只存储所有区块的块头,但其所占用的存储空间也很大
- 轻量级客户端无法验证当前交易是否是UTXO
- 虽然有提出将所有的UTXO生成一个UTXO的Merkle树,来解决某一交易是否有效,但效率低
虽然最新的论文中提出将所有的UTXO汇总到一个Merkle树中,但是更新Merkle很慢
传统轻节点只能验证交易是否存在,无法验证输出是否被其他事物引用,只要记录在区块内就确定是有效的
WHAT
本文提出TICK,Tiny Client for Blockchains,该客户端能够有效地验证事务,而不必下载所有的区块链数据或信任一个完整的节点。使用AVL hash树来存储所有UTXO。
此外,TICK不要求改变目前的区块链结构。在TICK中,轻型客户端的大小较小且保持不变,而不是线性增长。
同时TICK减少了采矿者在采矿前需要下载的数据量。
HOW
PS:轻客户端无法验证交易是指一个交易,轻客户端因为没有所有的记录,所以无法验证交易是否引用的是UTXO,所以无法验证交易是否合法,他只能事后验证这个交易是否记录在主链来确定这个交易是否存在
思路
存储过程
- 将整个区块链交易遍历,生成UTXO集合。
- 将所有的UTXO按照规则生成AVL hash 树,这棵树的root hash存储在coinbase中
- 将本次区块收集的所有交易生成tx tree
- 将tx tree root hash存储block header中
AVL hash 树
自平衡树,插入和删除元素很快,有序数据结构,UTXO的hash大于其左子树的hash,小于其右子树的hash
一个AVL树的节点包含Hash(ui)和Hui
Hui由以下组成:
- Hash(ui):当前这条UTXO的hash
- Height(ui):由ui确定的子树的高度。
- DiffH:左子树与右子树的差
- hl:ui左子树标签的hash
- hr:ui右子树标签的hash
H u i = H a s h ( H a s h ( u i ) , 0 , 0 , n u l l , n u l l ) H_{u_i}=Hash(Hash(u_i),0,0,null,null) Hui=Hash(Hash(ui),0,0,null,null)
例如
UTXO u2在AVL hash tree 中的节点的标签为
H a s h ( u 2 ) , H a s h ( H a s h ( u 2 ) , 1 , 0 , H u 1 , H u 2 ) Hash(u_2),Hash(Hash(u_2),1,0,H_{u_1},H_{u_2}) Hash(