#ckb #context #contract #testing #hash #script #verification

ckb-testtool

CKB 合同测试工具

21 个版本 (11 个重大更新)

0.13.0 2024年8月1日
0.12.0 2024年5月17日
0.11.0 2024年3月15日
0.10.0 2023年11月3日
0.2.2 2020年11月8日

#876 in 神奇豆

Download history 70/week @ 2024-04-27 53/week @ 2024-05-04 215/week @ 2024-05-11 147/week @ 2024-05-18 58/week @ 2024-05-25 108/week @ 2024-06-01 138/week @ 2024-06-08 68/week @ 2024-06-15 121/week @ 2024-06-22 208/week @ 2024-06-29 187/week @ 2024-07-06 90/week @ 2024-07-13 93/week @ 2024-07-20 282/week @ 2024-07-27 116/week @ 2024-08-03 85/week @ 2024-08-10

每月下载量 587 次
ckb-capsule 中使用

MIT 许可证

32KB
618 代码行

CKB 测试工具

一个用于编写 CKB 脚本测试用例的辅助库。它来自 capsule


lib.rs:

ckb-testtool

此模块为 CKB 合同提供测试上下文。

要设置合同验证上下文,您可能需要导入 ckb 模块来构建交易结构或计算哈希结果。 ckb-testtool crate 提供了 ckb 模块的重新导出。

示例

use ckb_testtool::context::Context;
use ckb_testtool::ckb_types::{
    bytes::Bytes,
    core::TransactionBuilder,
    packed::*,
    prelude::*,
};
use std::fs;

// max cycles of verification
const MAX_CYCLES: u64 = 10_000_000;

#[test]
fn test_basic() {
    // Init testing context
    let mut context = Context::default();
    let contract_bin: Bytes = fs::read("my_contract").unwrap().into();

    // deploy contract
    let out_point = context.deploy_cell(contract_bin);

    // prepare scripts and cell dep
    let lock_script = context
        .build_script(&out_point, Default::default())
        .expect("script");

    // prepare input cell
    let input_out_point = context.create_cell(
        CellOutput::new_builder()
            .capacity(1000u64.pack())
            .lock(lock_script.clone())
            .build(),
        Bytes::new(),
    );
    let input = CellInput::new_builder()
        .previous_output(input_out_point)
        .build();

    // outputs
    let outputs = vec![
        CellOutput::new_builder()
            .capacity(500u64.pack())
            .lock(lock_script.clone())
            .build(),
        CellOutput::new_builder()
            .capacity(500u64.pack())
            .lock(lock_script)
            .build(),
    ];

    let outputs_data = vec![Bytes::new(); 2];

    // build transaction
    let tx = TransactionBuilder::default()
        .input(input)
        .outputs(outputs)
        .outputs_data(outputs_data.pack())
        .build();

    let tx = context.complete_tx(tx);

    // run
    let cycles = context
        .verify_tx(&tx, MAX_CYCLES)
        .expect("pass verification");
    println!("consume cycles: {}", cycles);
}

依赖项

~18–49MB
~769K SLoC