Page 252 - 《软件学报》2025年第7期
P. 252
张孝 等: 区块链测试基准综述 3173
分布是根据 Uniswap-V2 的历史数据生成的. NFT 市场: 一个 NFT 市场的交易量. 工作负载包括列出交易、发布
NFT、销售交易以及资金和 NFT 的转移. 工作负载的大小、交易组合和到达分布基于 OpenSea 的历史数据. NFT
铸造: 通过生成独特的随机数确定 NFT 特征, 使用 IPFS 将艺术作品与代币绑定, 并将代币交给用户完成交易. 这
个工作负载的交易在时刻 0 就完成了, 不需要到达分布, 因为典型的 NFT 项目在初始部署时完成大部分或全部的
铸造. 工作负载的大小基于常见的 NFT 项目规模. 体育博彩网站: 工作负载涉及计算赢家并支付奖金, 所有交易都
从时刻 0 开始, 区块链以最大吞吐量运行. 工作负载的大小是根据当前 Web2 体育博彩网站 (如 Fanduel) 上不同规
模比赛的数据确定. BBSF [88] 中使用历史数据来确定交易组合和到达分布, 交易组合描述了负载中交易类型及其比
例, 到达分布描述了负载的特征, 包括负载类型和频率随着时间的变化.
DAGBENCH [46] 中转账操作作为事务处理的工作负载. 转账操作被定义为将货币或任意数据从一个用户转移
到另一个用户. Gromit [43] 使用固定的资产转移作为工作负载, 工作负载由至多 64 个客户端发出, 均匀地分配给每
一个验证节点. 但是文献中没有详细介绍工作负载的智能合约实现. xBCBench [47] 根据不同的区块链系统开发了不
同的工作负载. 对于以太坊, 开发了 3 种工作负载: 账户创建、账户查询和账户之间的转账. 对于 Sawtooth, 开发了
查询和 Small Bank 工作负载. 对于 FiscoBcos, 开发了设置 (set) 和获取 (get) 两种工作负载, 其中设置负载负责生
成一个 HelloWorld 智能合约并部署该智能合约, 获取负载负责调用智能合约并输出 Hello World. xBCBench 中所
有负载的发送速率通过基准测试层进行配置. BlockMeter [48] 中选取了 3 个典型的区块链应用作为负载. 一是简单
的键值存储应用程序: 该应用程序在区块链中根据唯一 ID 存储特定的值, 并执行插入、更新和删除数据等操作.
二是数据密集型应用程序: 该应用程序在每个事务中处理大量数据, 对大小为 10 KB 的记录执行读写操作. 三是
CPU 密集型应用程序: 该应用程序包括对随机数进行重复算术运算操作.
(3) 负载产生器
少量区块链测试基准提供了一个负载产生器, 可以自由定义负载的类型和比例, 但并不绑定具体应用场景.
Touloupou 等人 [99] 提出的测试基准中开发了两个组件, 负责生成账户并在网络中执行交易. 用户可以通过参数, 调
整要执行的交易数量和要交换的货币金额. BCTMark [45] 中提供了两种方式产生负载, 一种是使用 Python 编写的负
载生成器 Locust 产生随机负载, 另一种是基于区块链主网的历史交易数据生成负载, 重放交易过程. BCadvisor [44]
开发了一个工作负载引擎, 为区块链生成预定义的工作负载量.
5.3.2 数据查询负载
目前区块链基准中只有 BlockBench [39] 和 DAGBENCH [46] 定义了数据查询负载. BlockBench [39] 中定义了一个查
询负载用来测试区块链数据层的性能. 该负载包含以下两个查询, 实现从区块链数据获取统计信息.
● Q1: 计算在第 i 个块和第 j 个块之间提交的总交易金额.
● Q2: 计算在第 i 个块和第 j 个块之间涉及给定状态 (账户) 的最大交易金额.
DAGBENCH [46] 定义了交易查询的负载用来测试 DAG 网络对历史数据检索的性能. 它包含两个查询: 查询 1
(Q1): 计算给定账户的输入交易数量和输出交易数量. 查询 2 (Q2): 计算给定账户的余额.
5.3.3 负载总结
目前的测试基准大多数都包含了对工作负载的说明, 但是仍然存在一些问题.
● 对于实现工作负载的智能合约描述的都比较简单, 缺少了对合约具体实现方法的设计和描述.
● 大多数文献缺少了对负载动态特性的考虑, 只有 BlockBench [39] 、BBSF [100] 和 Diablo [42] 关注了负载的动态特
性, 并将其设置为与真实业务场景相匹配.
● 数据查询负载比较少, 只有 BlockBench [39] 和 DAGBENCH [46] 中定义了查询负载, 其他测试基准均没有考虑
数据查询负载.
5.4 指 标
5.4.1 指标定义
根据业务场景不同, 区块链测试基准中的指标定义也不同, 现有测试基准的指标总结如表 9 所示. 绝大部分区

