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;