cs_mwc_bch/messages/
mod.rs

1//! Peer-to-peer network protocol messages
2//!
3//! # Examples
4//!
5//! Decode a network message
6//!
7//! ```rust
8//! use bch::messages::Message;
9//! use bch::network::Network;
10//! use std::io::Cursor;
11//!
12//! let bytes = [
13//!     227, 225, 243, 232, 104, 101, 97, 100, 101, 114, 115,
14//!     0, 0, 0, 0, 0, 1, 0, 0, 0, 20, 6, 224, 88, 0,
15//! ];
16//! let magic = Network::Mainnet.magic();
17//! let message = Message::read(&mut Cursor::new(&bytes), magic).unwrap();
18//!
19//! match message {
20//!     Message::Headers(headers) => { /* Handle headers message */ },
21//!     _ => { /* All other messages */ }
22//! }
23//! ```
24//!
25//! Construct a transaction:
26//!
27//! ```rust
28//! use bch::messages::{OutPoint, Tx, TxIn, TxOut};
29//! use bch::transaction::p2pkh::{create_pk_script, create_sig_script};
30//! use bch::util::{hash160, Amount, Hash256, Units};
31//!
32//! // Use real values here
33//! let signature = [0; 72];
34//! let public_key = [0; 33];
35//! let prev_output = OutPoint {
36//!     hash: Hash256([0; 32]),
37//!     index: 0,
38//! };
39//!
40//! let inputs = vec![TxIn {
41//!     prev_output,
42//!     sig_script: create_sig_script(&signature, &public_key),
43//!     sequence: 0,
44//! }];
45//!
46//! let outputs = vec![TxOut {
47//!     amount: Amount::from(1., Units::Bch),
48//!     pk_script: create_pk_script(&hash160(&public_key)),
49//! }];
50//!
51//! let tx = Tx {
52//!     version: 2,
53//!     inputs,
54//!     outputs,
55//!     lock_time: 0,
56//! };
57//! ```
58
59mod addr;
60mod block;
61mod block_header;
62mod block_locator;
63mod fee_filter;
64mod filter_add;
65mod filter_load;
66mod headers;
67mod inv;
68mod inv_vect;
69mod merkle_block;
70mod message;
71mod message_header;
72mod node_addr;
73mod node_addr_ex;
74mod out_point;
75mod ping;
76mod reject;
77mod send_cmpct;
78mod tx;
79mod tx_in;
80mod tx_out;
81mod version;
82
83pub use self::addr::Addr;
84pub use self::block::Block;
85pub use self::block_header::BlockHeader;
86pub use self::block_locator::{BlockLocator, NO_HASH_STOP};
87pub use self::fee_filter::FeeFilter;
88pub use self::filter_add::{FilterAdd, MAX_FILTER_ADD_DATA_SIZE};
89pub use self::filter_load::{
90    FilterLoad, BLOOM_UPDATE_ALL, BLOOM_UPDATE_NONE, BLOOM_UPDATE_P2PUBKEY_ONLY,
91};
92pub use self::headers::{header_hash, Headers};
93pub use self::inv::{Inv, MAX_INV_ENTRIES};
94pub use self::inv_vect::{
95    InvVect, INV_VECT_BLOCK, INV_VECT_COMPACT_BLOCK, INV_VECT_ERROR, INV_VECT_FILTERED_BLOCK,
96    INV_VECT_TX,
97};
98pub use self::merkle_block::MerkleBlock;
99pub use self::message::{commands, Message, Payload, MAX_PAYLOAD_SIZE, NO_CHECKSUM};
100pub use self::message_header::MessageHeader;
101pub use self::node_addr::NodeAddr;
102pub use self::node_addr_ex::NodeAddrEx;
103pub use self::out_point::{OutPoint, COINBASE_OUTPOINT_HASH, COINBASE_OUTPOINT_INDEX};
104pub use self::ping::Ping;
105pub use self::reject::{
106    Reject, REJECT_CHECKPOINT, REJECT_DUPLICATE, REJECT_DUST, REJECT_INSUFFICIENT_FEE,
107    REJECT_INVALID, REJECT_MALFORMED, REJECT_NONSTANDARD, REJECT_OBSOLETE,
108};
109pub use self::send_cmpct::SendCmpct;
110pub use self::tx::{Tx, MAX_SATOSHIS};
111pub use self::tx_in::TxIn;
112pub use self::tx_out::TxOut;
113pub use self::version::{
114    Version, MIN_SUPPORTED_PROTOCOL_VERSION, NODE_BITCOIN_CASH, NODE_NETWORK, NODE_NONE,
115    PROTOCOL_VERSION, UNKNOWN_IP,
116};