25 releases (12 breaking)

0.14.1 Nov 21, 2024
0.13.2 Oct 17, 2024
0.12.0 May 17, 2024
0.11.0 Mar 15, 2024
0.2.2 Nov 8, 2020

#30 in #ckb

Download history 697/week @ 2024-10-20 655/week @ 2024-10-27 219/week @ 2024-11-03 512/week @ 2024-11-10 732/week @ 2024-11-17 466/week @ 2024-11-24 597/week @ 2024-12-01 787/week @ 2024-12-08 1600/week @ 2024-12-15 718/week @ 2024-12-22 1105/week @ 2024-12-29 847/week @ 2025-01-05 1324/week @ 2025-01-12 814/week @ 2025-01-19 351/week @ 2025-01-26 314/week @ 2025-02-02

2,848 downloads per month
Used in ckb-capsule

MIT license

34KB
680 lines

CKB Test Tool

A helper library for writing CKB script test cases. It is migrated from capsule


lib.rs:

ckb-testtool

This module provides testing context for CKB contracts.

To setup a contract verification context, you may need to import ckb modules to build the transaction structure or calculate the hash result. ckb-testtool crate provides re-exports of ckb modules.

Example

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);
}

Dependencies

~20–49MB
~783K SLoC