1mod announcements;
2mod benchmark;
3mod error;
4mod key_pairs;
5mod simulator;
6mod transaction;
7mod validate_clvm_and_signature;
8
9pub use announcements::*;
10pub use benchmark::*;
11pub use error::*;
12pub use key_pairs::*;
13pub use simulator::*;
14pub use transaction::*;
15
16pub(crate) use validate_clvm_and_signature::validate_clvm_and_signature;
17
18#[cfg(feature = "peer-simulator")]
19mod peer_simulator;
20
21#[cfg(feature = "peer-simulator")]
22pub use peer_simulator::*;
23
24use chia_protocol::{Bytes32, Program};
25use clvm_traits::{FromClvm, ToClvm};
26use clvm_utils::tree_hash;
27use clvmr::Allocator;
28
29pub fn to_program(value: impl ToClvm<Allocator>) -> anyhow::Result<Program> {
30 let mut allocator = Allocator::new();
31 let ptr = value.to_clvm(&mut allocator)?;
32 Ok(Program::from_clvm(&allocator, ptr)?)
33}
34
35pub fn to_puzzle(value: impl ToClvm<Allocator>) -> anyhow::Result<(Bytes32, Program)> {
36 let mut allocator = Allocator::new();
37 let ptr = value.to_clvm(&mut allocator)?;
38 let puzzle_reveal = Program::from_clvm(&allocator, ptr)?;
39 let puzzle_hash = tree_hash(&allocator, ptr);
40 Ok((puzzle_hash.into(), puzzle_reveal))
41}
42
43pub fn expect_spend<T>(result: Result<T, SimulatorError>, to_pass: bool) {
44 if let Err(error) = result {
45 assert!(!to_pass, "Expected spend to pass, but got {error}");
46 } else if !to_pass {
47 panic!("Expected spend to fail");
48 }
49}