1. 高性能交易调度技术使用文档

算法代码地址ECNUStarChain

基于冲突图切分的非确定性交易并发调度算法在chainmaker-go的partdag分支中。

基于批处理的确定性交易并发调度算法在chainmaker-go的batchExecute分支中

基于试探性执行的严格确定性交易并发调度算法在chainmaker-go、contract-sdk-go、protocol、vm-engine、vm的strict-deterministic分支中。

基于容器执行引擎的细粒度交易回退算法在contract-sdk-go的roll-back分支中。

推测性调度策略算法在chainmaker-go的partdag分支中。

调度算法链上热切换算法在chainmaker-go的switch_control分支中。

1.1. 基于冲突图切分的非确定性交易并发调度算法与推测性调度算法使用说明

因在原调度算法基础上修改,因此链部署使用方法与原来相同,具体方法参考文档导航,与原合约执行方法无差别。 DAG切分算法启动入口:将’chainmaker-go/blob/partdag/module/core/common/scheduler/scheduler.go’内的enableDAGpartial设置为ture即可开启dag切分算法 推测性调度算法启动入口:将’chainmaker-go/blob/partdag/module/core/common/scheduler/scheduler.go’内的enablePreDag 设置为ture即可开启推测性调度算法

1.2. 交易批处理使用说明

因在原交易执行基础上修改,因此使用方法参考文档导航,与原合约执行方法无差别。

1.3. 严格确定性调度并发调度算法使用说明:

链部署使用方法大致与原来相同,具体方法参考文档导航文档导航,与原合约执行方法无差别。

  1. 拉取代码(chainmaker-go) git pull

  2. 下载 vendor 依赖 go mod vendor

  3. 应用补丁 patch -p1 < patches/contract_manager.patch

  4. 重新编译 go build -mod=vendor -o build/release/…/bin/chainmaker ./main/

1.4. 基于容器执行引擎的细粒度交易回滚策略使用说明

代码位于contract-sdk-go库的roll-back分支

1.5. 性能评估

1.5.1. 测试环境

1.5.1.1. 测试场景:银行转账合约

实现了包含以下操作的银行合约:

  1. 存款 (deposit):1 读 + 1 写

  2. 取款 (withdraw):1 读 + 1 写

  3. 转账 (transfer):2 读 + 2 写

  4. 多账户转账 (transferMulti):N 读 + N 写

  5. 查询余额 (getBalance):1 读

1.5.1.2. 测试方法

  • 交易数量:5000 笔交易

  • 账户数量:50 个账户

  • 访问分布:使用 Zipf 分布模拟真实世界的访问模式

    • Zipf = 0.0:均匀分布(低冲突)

    • Zipf = 1.5:高度集中分布(高冲突)

  • 冲突概率:与 Zipf 参数相关,conflictProb = (zipf/1.5)²

1.5.1.3. 关键发现

  1. 低冲突场景 (Zipf ≤ 0.5)

    • Origin 模式和 Partial 模式操作数接近

    • 部分回退优势不明显(冲突率低)

  2. 中等冲突场景 (0.6 ≤ Zipf ≤ 1.0)

    • Partial 模式开始显示优势

    • 操作数节省逐渐增加

  3. 高冲突场景 (Zipf > 1.0)

    • Partial 模式优势显著

    • 在 Zipf = 1.5 时,操作数节省可达 20-30%

1.6. 链上交易调度策略自适应热切换算法使用说明

本算法未引入任何额外代码,仅对长安链交易调度器及公式广播内容进行了一定修改,因此实际使用与文档导航无异。