ckb_testtool/lib.rs
1//! ckb-testtool
2//!
3//! This module provides testing context for CKB contracts.
4//!
5//! To setup a contract verification context, you may need to import ckb modules
6//! to build the transaction structure or calculate the hash result.
7//! `ckb-testtool` crate provides re-exports of ckb modules.
8//!
9//! # Example
10//!
11//! ``` rust
12//! use ckb_testtool::context::Context;
13//! use ckb_testtool::ckb_types::{
14//! bytes::Bytes,
15//! core::TransactionBuilder,
16//! packed::*,
17//! prelude::*,
18//! };
19//! use std::fs;
20//!
21//! // max cycles of verification
22//! const MAX_CYCLES: u64 = 10_000_000;
23//!
24//! #[test]
25//! fn test_basic() {
26//! // Init testing context
27//! let mut context = Context::default();
28//! let contract_bin: Bytes = fs::read("my_contract").unwrap().into();
29//!
30//! // deploy contract
31//! let out_point = context.deploy_cell(contract_bin);
32//!
33//! // prepare scripts and cell dep
34//! let lock_script = context
35//! .build_script(&out_point, Default::default())
36//! .expect("script");
37//!
38//! // prepare input cell
39//! let input_out_point = context.create_cell(
40//! CellOutput::new_builder()
41//! .capacity(1000u64.pack())
42//! .lock(lock_script.clone())
43//! .build(),
44//! Bytes::new(),
45//! );
46//! let input = CellInput::new_builder()
47//! .previous_output(input_out_point)
48//! .build();
49//!
50//! // outputs
51//! let outputs = vec![
52//! CellOutput::new_builder()
53//! .capacity(500u64.pack())
54//! .lock(lock_script.clone())
55//! .build(),
56//! CellOutput::new_builder()
57//! .capacity(500u64.pack())
58//! .lock(lock_script)
59//! .build(),
60//! ];
61//!
62//! let outputs_data = vec![Bytes::new(); 2];
63//!
64//! // build transaction
65//! let tx = TransactionBuilder::default()
66//! .input(input)
67//! .outputs(outputs)
68//! .outputs_data(outputs_data.pack())
69//! .build();
70//!
71//! let tx = context.complete_tx(tx);
72//!
73//! // run
74//! let cycles = context
75//! .verify_tx(&tx, MAX_CYCLES)
76//! .expect("pass verification");
77//! println!("consume cycles: {}", cycles);
78//! }
79//! ```
80
81pub mod builtin;
82pub mod context;
83mod tx_verifier;
84
85// re-exports
86pub use ckb_chain_spec;
87pub use ckb_crypto;
88pub use ckb_error;
89pub use ckb_hash;
90pub use ckb_jsonrpc_types;
91pub use ckb_script;
92pub use ckb_traits;
93pub use ckb_types;
94pub use ckb_types::bytes;
95pub use ckb_verification;