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 神奇豆
每月下载量 587 次
在 ckb-capsule 中使用
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