Page 390 - 《软件学报》2025年第8期
P. 390
张子龙 等: 基于原生链的跨 Rollup 机制研究 3813
TX receiver 内的字段在链上仅存储短索引, 而不保存完整的数据. 当
的较短索引存储在链上索引表中, 而接收方交易
接收方 Rollup 接收交易后, 可以自行读取索引表解析还原完整原文. 这样一来, 本文就能够在不占用过多链上资
源的前提下, 实现便于交易的同步.
2.4.2 交易数据结构压缩
TX receiver 传输的方法, 其核心思路在于仅保留最简化的数据格式, 而
交易数据结构压缩是一种优化接收方交易
非采用标准的以太坊交易数据结构. 这种方法能够显著减小跨 Rollup 交易数据的存储需求和传输负担, 从而提高
整体的区块链性能和扩展性.
为实现交易数据结构的压缩, 本文剔除了交易中无效或冗余的交易字段. 这些字段包括但不限于交易备注, 交
易 Gaslimit 上限等. 这些字段对于接收方 Rollup 而言并不会直接产生影响. 仅需要记录接收方 Rollup 需要执行的
字段即可. 其次合并了相关字段, 由于同一批交易的发送方 Rollup 和接收方的 Rollup 都是固定的, 因此若每一笔
交易 TX receiver 均保留发送方 Rollup 和接收方 Rollup 字段会产生浪费. 对于交易手续费用, 不需要每一笔交易单独
记录, 而将整批交易总共计量一个总费用支出. 整体上传的批量跨 Rollup 交易数据结构如表 3 所示. 它包含整批
次的交易唯一标识, 发送方 Rollup 的编号, 接收方 Rollup 的编号, 以及单笔跨 Rollup 交易的集合.
表 3 批量跨 Rollup 交易数据结构
密文输入字段 具体含义 类型
nonce 该批交易的唯一标识 bytes
发送方Rollup序号
Rollup sender bytes
接收方Rollup序号 bytes
Rollup receiver
GasTotal 所有交易的总手续费开销 int
TX receiver List 跨Rollup交易集合 List < Transaction simple >
在批量跨 Rollup 交易数据结构中包含单笔跨 Rollup 交易数据结构, 其类型为 Transaction simple , 单笔交易的类
型结构如表 4 所示. 按照以太坊的交易格式只包含不可缺省的字段, 包括交易发送方, 交易接收方, 转移金额, 调用
合约的二进制数据以及后续为字段进一步压缩所增加的压缩协议字段.
表 4 单笔跨 Rollup 交易数据结构
字段 具体含义 类型
发送方用户地址 Address
Address sender
接收方用户地址 Address
Address receiver
Value 发送金额 int
Calldata 调用合约二进制数据 bytes
CompressionType 数据压缩协议 bytes
2.4.3 基于索引表数据压缩
在现有实际交易的情况分析来看, 交易之间会频繁调用一些字段, 而这些字段为了保证数据的完整性通常会
使用更长的存储. 例如在调用合约过程中, Address sender 为合约地址, 合约地址为高频出现的字符串. 一个合约地址
为了防止哈希冲突, 通常具有 20 字节长度的内容. 而事实上一个 Rollup 内所涉及的所有地址若按照序号来标记,
只需要 2–4 字节即可. 4 字节可标记共计 2 −1 = 4294967295 个地址, 这个数量已经远远单个 Rollup 会使用的地
32
址总数. 此外根据第 1.3.3 节的统计结果也可以看出, 链上交易的用户地址也是具有高度重复性的.
本文提出的数据压缩方案利用部分字段使用频率高的特点, 通过部署在链上的索引表的形式, 使用短索引而
替代原始字段, 整体上而言减少了链上存储的开销. 在实际链上交易存储的过程中, 交易中实际存储的仅为较短的
索引, 将较长字段和较短索引对应的关系更新在链上索引表中, 后续链下节点通过从索引表还原索引替代前的交
易原始信息. 索引表内的数据只需要一次更新便永久使用, 例如一个合约地址的索引关系仅需要在第一次部署的
时候更新索引表内的对应关系, 之后任意次数的使用都可以直接使用索引表, 从而节省链上存储成本.

