added BlockTemplate struct to rpc package

This commit is contained in:
Svyatoslav Nikolsky 2016-12-09 10:33:38 +03:00
parent 082d81eec6
commit 88b4f1aeee
2 changed files with 81 additions and 0 deletions

View File

@ -0,0 +1,79 @@
// TODO: remove after implementing getblocktmplate RPC
#![warn(dead_code)]
use std::collections::HashMap;
use super::hash::H256;
use super::raw_transaction::RawTransaction;
/// Block template as described in:
/// https://github.com/bitcoin/bips/blob/master/bip-0022.mediawiki
/// https://github.com/bitcoin/bips/blob/master/bip-0023.mediawiki
/// https://github.com/bitcoin/bips/blob/master/bip-0009.mediawiki#getblocktemplate_changes
/// https://github.com/bitcoin/bips/blob/master/bip-0145.mediawiki
pub struct BlockTemplate {
/// The preferred block version
pub version: u32,
/// Specific block rules that are to be enforced
pub rules: Vec<String>,
/// Set of pending, supported versionbit (BIP 9) softfork deployments
/// Keys: named softfork rules
/// Values: identifies the bit number as indicating acceptance and readiness for given key
pub vbavailable: Option<HashMap<String, u32>>,
/// Bit mask of versionbits the server requires set in submissions
pub vbrequired: Option<u32>,
/// The hash of previous (best known) block
pub previousblockhash: H256,
/// Contents of non-coinbase transactions that should be included in the next block
pub transactions: Vec<BlockTemplateTransaction>,
/// Data that should be included in the coinbase's scriptSig content
/// Keys: ignored
/// Values: value to be included in scriptSig
pub coinbaseaux: Option<HashMap<String, String>>,
/// Maximum allowable input to coinbase transaction, including the generation award and transaction fees (in Satoshis)
pub coinbasevalue: Option<u64>,
/// information for coinbase transaction
pub coinbasetxn: Option<BlockTemplateTransaction>,
/// The hash target
pub target: H256,
/// The minimum timestamp appropriate for next block time in seconds since epoch (Jan 1 1970 GMT)
pub mintime: Option<i64>,
/// List of ways the block template may be changed, e.g. 'time', 'transactions', 'prevblock'
pub mutable: Option<Vec<String>>,
/// A range of valid nonces (constant 00000000ffffffff)
pub noncerange: Option<String>,
/// Limit of sigops in blocks
pub sigoplimit: Option<i64>,
/// Limit of block size
pub sizelimit: Option<u32>,
/// Limit of block weight
pub weightlimit: Option<u32>,
/// Current timestamp in seconds since epoch (Jan 1 1970 GMT)
pub curtime: i64,
/// Compressed target of next block
pub bits: u32,
/// The height of the next block
pub height: u32,
}
/// Transaction data as included in `BlockTemplate`
pub struct BlockTemplateTransaction {
/// Transaction data encoded in hexadecimal
pub data: RawTransaction,
/// Transaction id encoded in little-endian hexadecimal
pub txid: Option<H256>,
/// Hash encoded in little-endian hexadecimal (including witness data)
pub hash: Option<H256>,
/// Transactions before this one (by 1-based index in 'transactions' list) that must be present in the final block if this one is
pub depends: Option<Vec<u64>>,
/// Difference in value between transaction inputs and outputs (in Satoshis).
/// For coinbase transactions, this is a negative Number of the total collected block fees (ie, not including the block subsidy).
/// If key is not present, fee is unknown and clients MUST NOT assume there isn't one
pub fee: Option<Option<i64>>,
/// Total SigOps cost, as counted for purposes of block limits.
/// If key is not present, sigop cost is unknown and clients MUST NOT assume it is zero.
pub sigops: Option<Option<i64>>,
/// Total transaction weight, as counted for purposes of block limits.
pub weight: Option<i64>,
/// If provided and true, this transaction must be in the final block
pub required: Option<Option<bool>>,
}

View File

@ -1,7 +1,9 @@
mod block_template;
mod bytes;
mod hash;
mod raw_transaction;
pub use self::block_template::{BlockTemplate, BlockTemplateTransaction};
pub use self::bytes::Bytes;
pub use self::hash::H256;
pub use self::raw_transaction::RawTransaction;