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
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
//! Peer-to-peer network protocol messages
//!
//! # Examples
//!
//! Decode a network message
//!
//! ```rust
//! use sv::messages::Message;
//! use sv::network::Network;
//! use std::io::Cursor;
//!
//! let bytes = [
//!     227, 225, 243, 232, 104, 101, 97, 100, 101, 114, 115,
//!     0, 0, 0, 0, 0, 1, 0, 0, 0, 20, 6, 224, 88, 0,
//! ];
//! let magic = Network::Mainnet.magic();
//! let message = Message::read(&mut Cursor::new(&bytes), magic).unwrap();
//!
//! match message {
//!     Message::Headers(headers) => { /* Handle headers message */ },
//!     _ => { /* All other messages */ }
//! }
//! ```
//!
//! Construct a transaction:
//!
//! ```rust
//! use sv::messages::{OutPoint, Tx, TxIn, TxOut};
//! use sv::transaction::p2pkh::{create_pk_script, create_sig_script};
//! use sv::util::{hash160, Amount, Hash256, Units};
//!
//! // Use real values here
//! let signature = [0; 72];
//! let public_key = [0; 33];
//! let prev_output = OutPoint {
//!     hash: Hash256([0; 32]),
//!     index: 0,
//! };
//!
//! let inputs = vec![TxIn {
//!     prev_output,
//!     sig_script: create_sig_script(&signature, &public_key),
//!     sequence: 0,
//! }];
//!
//! let outputs = vec![TxOut {
//!     amount: Amount::from(1., Units::Bsv),
//!     pk_script: create_pk_script(&hash160(&public_key)),
//! }];
//!
//! let tx = Tx {
//!     version: 2,
//!     inputs,
//!     outputs,
//!     lock_time: 0,
//! };
//! ```

mod addr;
mod block;
mod block_header;
mod block_locator;
mod fee_filter;
mod filter_add;
mod filter_load;
mod headers;
mod inv;
mod inv_vect;
mod merkle_block;
mod message;
mod message_header;
mod node_addr;
mod node_addr_ex;
mod out_point;
mod ping;
mod reject;
mod send_cmpct;
mod tx;
mod tx_in;
mod tx_out;
mod version;

pub use self::addr::Addr;
pub use self::block::Block;
pub use self::block_header::BlockHeader;
pub use self::block_locator::{BlockLocator, NO_HASH_STOP};
pub use self::fee_filter::FeeFilter;
pub use self::filter_add::{FilterAdd, MAX_FILTER_ADD_DATA_SIZE};
pub use self::filter_load::{
    FilterLoad, BLOOM_UPDATE_ALL, BLOOM_UPDATE_NONE, BLOOM_UPDATE_P2PUBKEY_ONLY,
};
pub use self::headers::{header_hash, Headers};
pub use self::inv::{Inv, MAX_INV_ENTRIES};
pub use self::inv_vect::{InvVect, InvVectType};
pub use self::merkle_block::MerkleBlock;
pub use self::message::{commands, Message, Payload, MAX_PAYLOAD_SIZE, NO_CHECKSUM};
pub use self::message_header::MessageHeader;
pub use self::node_addr::NodeAddr;
pub use self::node_addr_ex::NodeAddrEx;
pub use self::out_point::{OutPoint, COINBASE_OUTPOINT_HASH, COINBASE_OUTPOINT_INDEX};
pub use self::ping::Ping;
pub use self::reject::{Reject, RejectCode};
pub use self::send_cmpct::SendCmpct;
pub use self::tx::{Tx, MAX_SATOSHIS};
pub use self::tx_in::TxIn;
pub use self::tx_out::TxOut;
pub use self::version::{
    Version, MIN_SUPPORTED_PROTOCOL_VERSION, NODE_BITCOIN_CASH, NODE_NETWORK, NODE_NONE,
    PROTOCOL_VERSION, UNKNOWN_IP,
};