pub mod address;
pub mod checksum;
pub mod descriptor;
pub mod error;
pub mod key;
pub mod script;
pub use address::{derive_address, derive_addresses};
pub use checksum::{add_checksum, compute_checksum, strip_checksum, verify_checksum};
pub use descriptor::Descriptor;
pub use error::DescriptorError;
pub use key::{parse_key, DescriptorKey, KeyOrigin, Wildcard};
pub use script::{generate_script_pubkey, ScriptPubkey, ScriptType};
pub mod prelude {
pub use crate::address::{derive_address, derive_addresses};
pub use crate::checksum::add_checksum;
pub use crate::descriptor::Descriptor;
pub use crate::error::DescriptorError;
pub use crate::key::{DescriptorKey, Wildcard};
pub use crate::script::{ScriptPubkey, ScriptType};
}
#[cfg(test)]
mod tests {
use super::*;
use rustywallet_address::Network;
#[test]
fn test_basic_workflow() {
let desc = Descriptor::parse(
"wpkh(02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5)",
)
.unwrap();
let script = generate_script_pubkey(&desc, 0).unwrap();
assert_eq!(script.script_type(), ScriptType::P2wpkh);
let address = derive_address(&desc, Network::BitcoinMainnet, 0).unwrap();
assert!(address.starts_with("bc1q"));
}
#[test]
fn test_checksum_workflow() {
let desc = "pkh(02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5)";
let with_checksum = add_checksum(desc);
assert!(with_checksum.contains('#'));
let parsed = Descriptor::parse(&with_checksum).unwrap();
assert_eq!(parsed.descriptor_type(), "pkh");
}
#[test]
fn test_nested_descriptor() {
let desc = Descriptor::parse(
"sh(wpkh(02c6047f9441ed7d6d3045406e95c07cd85c778e4b8cef3ca7abac09b95c709ee5))",
)
.unwrap();
assert!(desc.is_segwit());
assert_eq!(desc.descriptor_type(), "sh");
let address = derive_address(&desc, Network::BitcoinMainnet, 0).unwrap();
assert!(address.starts_with('3'));
}
}