1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
//! rawtx-rs makes information about Bitcoin transactions accessible.
//! 
//! # Examples
//!
//! ```
//! # use bitcoin::Transaction;
//! # use bitcoin::consensus::deserialize;
//! # use rawtx_rs::{tx, input, output};
//! // The first Bitcoin mainnet transaction between Satoshi and Hal
//! // f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16
//! // as rust-bitcoin's bitcoin::Transaction.
//! # let tx_bytes = hex::decode("0100000001c997a5e56e104102fa209c6a852dd90660a20b2d9c352423edce25857fcd3704000000004847304402204e45e16932b8af514961a1d3a1a25fdf3f4f7732e9d624c6c61548ab5fb8cd410220181522ec8eca07de4860a4acdd12909d831cc56cbbac4622082221a8768d1d0901ffffffff0200ca9a3b00000000434104ae1a62fe09c5f51b13905f07f06b99a2f7159b2225f374cd378d71302fa28414e7aab37397f554a7df5f142c21c1b7303b8a0626f1baded5c72a704f7e6cd84cac00286bee0000000043410411db93e1dcdb8a016b49840f8c53bc1eb68a382e97b1482ecad7b148a6909a5cb2e0eaddfb84ccf9744464f82e160bfa9b8b64f9d4c03f999b8643f656b412a3ac00000000").unwrap();
//! # let tx: Transaction = deserialize(&tx_bytes).unwrap();
//! let tx_info = tx::TxInfo::new(&tx).unwrap();
//!
//! assert_eq!(tx_info.input_infos[0].in_type, input::InputType::P2pk);
//! assert_eq!(tx_info.output_infos[0].out_type, output::OutputType::P2pk);
//! assert_eq!(tx_info.output_infos[1].out_type, output::OutputType::P2pk);
//!
//! assert!(!tx_info.is_spending_segwit());
//! assert!(tx_info.is_bip69_compliant());
//! ```
//! 
//! ```
//! # use bitcoin::Transaction;
//! # use bitcoin::consensus::deserialize;
//! # use rawtx_rs::{tx, input, output};
//! // Random mainnet transaction spending SegWit and MultiSig
//! // 7874eb36dfff6d4d38f9dbe013bceed0c31de4da1dee4a507b9abd0540aa0af4
//! // as rust-bitcoin's bitcoin::Transaction.
//! # let tx_bytes = hex::decode("01000000000101c5633dd78147d06d9ef22da883c3f35cd1d6546218854a24b6da908d1650e052010000002322002090a0daaae7ab4d2fe9737db9ea7f9b5a63dfa083cc457adf1e324167d78f1dedfdffffff02103812000000000017a914652d1b1ffc7b5216adc7fa4d0ad4c66d3108b62a879d650e2d0000000017a914d926964e36a008a5e31c6c89f3abb9c7382b6f228704004830450221008005a978a9181739691770d6e483b6c15111a8e15218b2d542c5e1e03329c08c022021bff99948a14e2517ac2f735fed1c2d4b8bc4f614d37809a5c62ac4a471c13b0148304502210097cdd57f3aef21e4b3d0910c34bf5cb9799b206a97b79a1eac5719bf1520f63c02207f0f1afe378f3d0c57914814536e82a81d8d5454a4acfef3da3722d2a859d72f018b5221025be8b2946f6e86c16b65ed1f055980940dd67931029af24a5719ba8be779a9df21025d28dc125e50efff8767536c11e7119b578d2138000b43dd12969282792a06f92102ef98444f928b2fc9dc4d248bf5c550ead2e4527eaf0fb4ac2864f267c830d60f21034434478a4a7b6963d678468bc996304316ff953c266a18051898fda11d1c511454ae00000000").unwrap();
//! # let tx: Transaction = deserialize(&tx_bytes).unwrap();
//! let tx_info = tx::TxInfo::new(&tx).unwrap();
//!
//! assert_eq!(tx_info.input_infos[0].in_type, input::InputType::P2shP2wsh);
//! assert_eq!(tx_info.output_infos[0].out_type, output::OutputType::P2sh);
//! assert_eq!(tx_info.output_infos[1].out_type, output::OutputType::P2sh);
//!
//! assert!(tx_info.is_spending_segwit());
//! assert!(tx_info.is_bip69_compliant());
//! assert!(tx_info.is_signaling_explicit_rbf_replicability());
//! assert!(tx_info.is_spending_multisig());
//! 
//! let multisig_info = tx_info.input_infos[0].multisig_info.as_ref().unwrap();
//! 
//! // 2 of 4 multisig
//! assert_eq!(multisig_info.m_of_n, (2, 4));
//! ```




pub mod input;
pub mod output;
pub mod script;
pub mod timelock;
pub mod tx;