Page 244 - 《软件学报》2025年第7期
P. 244
张孝 等: 区块链测试基准综述 3165
信息、物流信息、质检报告、交易的时间戳等, 用于记录交易的具体操作和上链的业务数据, 实现溯源和透明度.
④ 结果数据: 智能合约执行状态代码、执行结果、错误信息等. 这些数据用于记录智能合约的执行情况和结果.
图 5 是一个简单的智能合约片段, 实现了供应链应用中订单创建的功能. 其中定义了一个名为 Order 的结构
体, 用于存储订单 ID、产品名称、产品数量、买家地址、卖家地址等信息. 函数 CreateOrder 用于创建订单, 接收
产品名称、数量和卖家地址作为参数, 并将订单存储在 Orders 映射中, 实现订单的存储和检索. 当调用智能合约
的方法时, 函数的参数 (订单 ID、产品名称、数量等) 会被记录到区块链中. 此外, 交易的发起者信息、交易的时
间戳、元数据信息等也会被记录到区块链中.
contract SupplyChain {
struct Order {
uint256 orderId ;
string product;
uint256 quantity;
address buyer;
address seller;
bool is Created ;
string status;
unit256 timestamp;
}
uint256 private orderldCounter;
function createOrder (string memory _product, uint256 _quantity, address _seller) public {
require (bytes (_product). length >0 && _quantity >0 && _seller !=
address (0), "Invalid parameters");
orderldCounter++;
orders [orderIdCounter]=Order (orderIdCounter, _product, _quantity,
msg.sender, _seller, true, "Created", block .timestamp);
emit OrderCreated(orderldCounter,_product, _quantity, _seller,
block .timestamp);
}
}
图 5 智能合约举例
(2) 状态数据库: 区块链的状态数据库是一种特殊的数据结构, 记录了区块链网络中所有账户的状态信息, 并
随着交易的执行而不断变化. 状态数据库的设置包括了数据模式的设置.
数据模式是对数据库中数据的组织、管理和存储方式的描述, 它定义了数据的基本结构、属性、关系和约
束, 是设计和构建状态数据库的基础. 状态数据库中的数据模式设置对某些应用场景的性能有较大的影响. 因此,
在测试基准中需要明确说明数据模式.
下面我们以供应链应用为例说明数据模式的设置. 在供应链应用场景中, 状态数据库包含了各种实体的信息,
如订单信息、产品信息、供应商信息、物流信息、仓库信息等. 表 4 和表 5 分别展示了产品和订单实体中属性的
设置, 其中, productId 和 orderId 可以设置主键索引, 用来检索、更新或删除实体信息.
表 4 供应链中产品实体的属性设置 表 5 供应链中产品订单的属性设置
字段名 类型 描述 字段名 类型 描述
productId String 产品的唯一标识符 orderId String 订单的唯一标识符
name String 产品名称 productId String 对应的产品标识符
description String 产品描述 amount Number 订单金额
manufacturer String 制造商 orderDate Date 下单日期
price Number 产品价格 status String 订单状态

