bsv_rs/script/mod.rs
1//! # BSV Script
2//!
3//! Bitcoin Script construction, parsing, execution, validation, and templates.
4//!
5//! This module provides:
6//! - Opcode constants (`op` module)
7//! - Script chunks (`ScriptChunk`)
8//! - Script parsing and serialization (`Script`)
9//! - Locking and unlocking script types (`LockingScript`, `UnlockingScript`)
10//! - Script number encoding (`script_num` module)
11//! - Script evaluation errors (`evaluation_error` module)
12//! - Spend validation (`Spend`)
13//! - Script templates (`template` module, `templates` module)
14//!
15//! # Example: Building Scripts
16//!
17//! ```rust
18//! use bsv_rs::script::{Script, LockingScript, op};
19//!
20//! // Create a P2PKH locking script from ASM
21//! let script = Script::from_asm("OP_DUP OP_HASH160 0000000000000000000000000000000000000000 OP_EQUALVERIFY OP_CHECKSIG").unwrap();
22//!
23//! // Build a script programmatically
24//! let mut script = Script::new();
25//! script
26//! .write_opcode(op::OP_DUP)
27//! .write_opcode(op::OP_HASH160)
28//! .write_bin(&[0u8; 20])
29//! .write_opcode(op::OP_EQUALVERIFY)
30//! .write_opcode(op::OP_CHECKSIG);
31//!
32//! // Serialize to hex
33//! let hex = script.to_hex();
34//!
35//! // Convert to a locking script
36//! let locking = LockingScript::from_script(script);
37//! assert!(locking.is_locking_script());
38//! ```
39//!
40//! # Example: Using Templates
41//!
42//! ```rust,ignore
43//! use bsv_rs::script::templates::P2PKH;
44//! use bsv_rs::script::template::{ScriptTemplate, SignOutputs};
45//! use bsv_rs::primitives::ec::PrivateKey;
46//!
47//! let private_key = PrivateKey::random();
48//! let pubkey_hash = private_key.public_key().hash160();
49//!
50//! // Create locking script
51//! let template = P2PKH::new();
52//! let locking = template.lock(&pubkey_hash)?;
53//!
54//! // Or from an address
55//! let locking = P2PKH::lock_from_address("1BvBMSEYstWetqTFn5Au4m4GFg7xJaNVN2")?;
56//! ```
57
58pub mod address;
59pub mod bip276;
60pub mod chunk;
61pub mod evaluation_error;
62pub mod locking_script;
63pub mod op;
64#[allow(clippy::module_inception)]
65pub mod script;
66pub mod script_num;
67pub mod spend;
68pub mod template;
69pub mod templates;
70pub mod transaction;
71pub mod unlocking_script;
72
73// Re-exports for convenience
74pub use address::Address;
75pub use bip276::*;
76pub use chunk::ScriptChunk;
77pub use evaluation_error::{ExecutionContext, ScriptEvaluationError};
78pub use locking_script::LockingScript;
79pub use script::Script;
80pub use script_num::ScriptNum;
81pub use spend::{Spend, SpendParams};
82pub use template::{ScriptTemplate, ScriptTemplateUnlock, SignOutputs, SigningContext};
83pub use transaction::{
84 SimpleUtxo, SpendValidation, TransactionContext, TransactionInputContext,
85 TransactionOutputContext, UtxoProvider,
86};
87pub use unlocking_script::UnlockingScript;