[][src]Module sv::messages

Peer-to-peer network protocol messages

Examples

Decode a network message

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:

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,
};

Modules

commands

Message commands for the header

Structs

Addr

Known node addresses

Block

Block of transactions

BlockHeader

Block header

BlockLocator

Specifies which blocks to return

FeeFilter

Specifies the minimum transaction fee this node accepts

FilterAdd

Adds a data element to the bloom filter

FilterLoad

Loads a bloom filter using the specified parameters

Headers

Collection of block headers

Inv

Inventory payload describing objects a node knows about

InvVect

Inventory vector describing an object being requested or announced

MerkleBlock

A block header and partial merkle tree for SPV nodes to validate transactions

MessageHeader

Header that begins all messages

NodeAddr

Network address for a node on the network

NodeAddrEx

Node network address extended with a last connected time

OutPoint

Reference to a transaction output

Ping

Ping or pong payload

Reject

Rejected message

SendCmpct

Specifies whether compact blocks are supported

Tx

Bitcoin transaction

TxIn

Transaction input

TxOut

Transaction output

Version

Version payload defining a node's capabilities

Enums

InvVectType

Inventory vector type

Message

Bitcoin peer-to-peer message with its payload

RejectCode

Message rejection error codes

Constants

BLOOM_UPDATE_ALL

Filter is updated to include the serialized outpoint if any data elements matched in its script pubkey

BLOOM_UPDATE_NONE

Filter is not adjusted when a match is found

BLOOM_UPDATE_P2PUBKEY_ONLY

Filter is updated simialr to BLOOM_UPDATE_ALL but only for P2PK or multisig transactions

COINBASE_OUTPOINT_HASH

The coinbase transaction input will have this hash

COINBASE_OUTPOINT_INDEX

The coinbase transaction input will have this index

MAX_FILTER_ADD_DATA_SIZE

Maximum size of a data element in the FilterAdd message

MAX_INV_ENTRIES

Maximum number of objects in an inv message

MAX_PAYLOAD_SIZE

Max message payload size (32MB)

MAX_SATOSHIS

Maximum number of satoshis possible

MIN_SUPPORTED_PROTOCOL_VERSION

Minimum protocol version supported by this library

NODE_BITCOIN_CASH

Service flag that node is a full node and implements all protocol features

NODE_NETWORK

Service flag that node is a full node and implements all protocol features

NODE_NONE

Service flag that node is not a full node. Used for SPV wallets.

NO_CHECKSUM

Checksum to use when there is an empty payload

NO_HASH_STOP

Return results until either there are 2000 for getheaders or 500 or getblocks, or no more left

PROTOCOL_VERSION

Protocol version supported by this library

UNKNOWN_IP

Unknown IP address to use as a default

Traits

Payload

Message payload that is writable to bytes

Functions

header_hash

Returns the hash for a header at a particular index utilizing prev_hash if possible