Hyperledger Caliper手册

在线工具推荐: Three.js AI纹理开发包 - YOLO合成数据生成器 - GLTF/GLB在线编辑 - 3D模型格式在线转换 - 可编程3D场景编辑器

工作负载模块的实现

工作负载模块就是暴露特定API的Node.JS模块。对于实现本身并没有 更多的要求,因此你可以在工作负载模块中实现任何逻辑。

Caliper工作负载模块API

工作负载模块必须导出以下3个异步函数:

init(blockchain: BlockchainInterface, context: object, args: object)

init函数在测试轮次开始时被调用。该函数接收三个参数:

  • blockchain:待测试系统的适配器实例
  • context:适配器相关的上下文,通常包含网络相关的额外数据
  • args:用户提供的设置对象,从基准测试配置文件的test.rounts[i].arguments提取。

run() => Promise

run函数在速率控制器每次启用交易发送时都被调用。该函数必须组织下一个交易 的内容并调用区块链适配器实例的 invokeSmartContract 或querySmartContract 函数。

end()

end()函数在每一轮测试结束时被调用。工作负载模块可以在这个时刻进行资源的清理 或其他维护性操作。

Caliper工作负载模块实例

下面是一个完整的Caliper工作负载模块示例:

/*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

'use strict';

const logger = require('@hyperledger/caliper-core').CaliperUtils.getLogger('my-module');

// save the objects during init
let bc, contx;

/**
* Initializes the workload module before the start of the round.
* @param {BlockchainInterface} blockchain The SUT adapter instance.
* @param {object} context The SUT-specific context for the round.
* @param {object} args The user-provided arguments for the workload module.
*/
module.exports.init = async (blockchain, context, args) => {
    bc = blockchain;
    contx = context;
    logger.debug('Initialized workload module');
};

module.exports.run = async () => {
    let txArgs = {
        // TX arguments for "mycontract"
    };

    return bc.invokeSmartContract(contx, 'mycontract', 'v1', txArgs, 30);
};

module.exports.end = async () => {
    // Noop
    logger.debug('Disposed of workload module');
};

建议与技巧

下面的建议可能有助于你实现你的工作负载模块

  • 你可以在代码中使用任何Node.js模块
  • 如果使用第三方的模块,那么你需要负责让该模块可用
  • Caliper提供了一些核心的辅助工具,有助于你实现工作负载模块,例如日志以及运行时配置
  • run函数是在工作进程的负载生成循环中不断调用。因此如果在该函数内 执行计算复杂的任务需要消息,这样可能会破坏交易调度的精度。你可以 在init函数中执行那些昂贵的预处理任务。