added tests for ser/deser BlockTemplateTransaction
This commit is contained in:
parent
eb5749863c
commit
61faefb9ce
|
@ -10,6 +10,7 @@ use super::raw_transaction::RawTransaction;
|
||||||
/// https://github.com/bitcoin/bips/blob/master/bip-0023.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-0009.mediawiki#getblocktemplate_changes
|
||||||
/// https://github.com/bitcoin/bips/blob/master/bip-0145.mediawiki
|
/// https://github.com/bitcoin/bips/blob/master/bip-0145.mediawiki
|
||||||
|
#[derive(Debug, Default, Serialize, Deserialize, PartialEq, Eq, Clone)]
|
||||||
pub struct BlockTemplate {
|
pub struct BlockTemplate {
|
||||||
/// The preferred block version
|
/// The preferred block version
|
||||||
pub version: u32,
|
pub version: u32,
|
||||||
|
@ -56,6 +57,7 @@ pub struct BlockTemplate {
|
||||||
}
|
}
|
||||||
|
|
||||||
/// Transaction data as included in `BlockTemplate`
|
/// Transaction data as included in `BlockTemplate`
|
||||||
|
#[derive(Debug, Default, Serialize, Deserialize, PartialEq, Eq, Clone)]
|
||||||
pub struct BlockTemplateTransaction {
|
pub struct BlockTemplateTransaction {
|
||||||
/// Transaction data encoded in hexadecimal
|
/// Transaction data encoded in hexadecimal
|
||||||
pub data: RawTransaction,
|
pub data: RawTransaction,
|
||||||
|
@ -68,12 +70,73 @@ pub struct BlockTemplateTransaction {
|
||||||
/// Difference in value between transaction inputs and outputs (in Satoshis).
|
/// 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).
|
/// 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
|
/// If key is not present, fee is unknown and clients MUST NOT assume there isn't one
|
||||||
pub fee: Option<Option<i64>>,
|
pub fee: Option<i64>,
|
||||||
/// Total SigOps cost, as counted for purposes of block limits.
|
/// 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.
|
/// If key is not present, sigop cost is unknown and clients MUST NOT assume it is zero.
|
||||||
pub sigops: Option<Option<i64>>,
|
pub sigops: Option<i64>,
|
||||||
/// Total transaction weight, as counted for purposes of block limits.
|
/// Total transaction weight, as counted for purposes of block limits.
|
||||||
pub weight: Option<i64>,
|
pub weight: Option<i64>,
|
||||||
/// If provided and true, this transaction must be in the final block
|
/// If provided and true, this transaction must be in the final block
|
||||||
pub required: Option<Option<bool>>,
|
pub required: bool,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[cfg(test)]
|
||||||
|
mod tests {
|
||||||
|
use serde_json;
|
||||||
|
use super::super::hash::H256;
|
||||||
|
use super::super::bytes::Bytes;
|
||||||
|
use rustc_serialize::hex::FromHex;
|
||||||
|
use super::*;
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn block_template_transaction_serialize() {
|
||||||
|
assert_eq!(serde_json::to_string(&BlockTemplateTransaction {
|
||||||
|
data: Bytes("00010203".from_hex().unwrap()),
|
||||||
|
txid: None,
|
||||||
|
hash: None,
|
||||||
|
depends: None,
|
||||||
|
fee: None,
|
||||||
|
sigops: None,
|
||||||
|
weight: None,
|
||||||
|
required: false,
|
||||||
|
}).unwrap(), r#"{"data":"00010203","txid":null,"hash":null,"depends":null,"fee":null,"sigops":null,"weight":null,"required":false}"#);
|
||||||
|
assert_eq!(serde_json::to_string(&BlockTemplateTransaction {
|
||||||
|
data: Bytes("00010203".from_hex().unwrap()),
|
||||||
|
txid: Some(H256::from(1)),
|
||||||
|
hash: Some(H256::from(2)),
|
||||||
|
depends: Some(vec![1, 2]),
|
||||||
|
fee: Some(100),
|
||||||
|
sigops: Some(200),
|
||||||
|
weight: Some(300),
|
||||||
|
required: true,
|
||||||
|
}).unwrap(), r#"{"data":"00010203","txid":"0100000000000000000000000000000000000000000000000000000000000000","hash":"0200000000000000000000000000000000000000000000000000000000000000","depends":[1,2],"fee":100,"sigops":200,"weight":300,"required":true}"#);
|
||||||
|
}
|
||||||
|
|
||||||
|
#[test]
|
||||||
|
fn block_template_transaction_deserialize() {
|
||||||
|
assert_eq!(
|
||||||
|
serde_json::from_str::<BlockTemplateTransaction>(r#"{"data":"00010203","txid":null,"hash":null,"depends":null,"fee":null,"sigops":null,"weight":null,"required":false}"#).unwrap(),
|
||||||
|
BlockTemplateTransaction {
|
||||||
|
data: Bytes("00010203".from_hex().unwrap()),
|
||||||
|
txid: None,
|
||||||
|
hash: None,
|
||||||
|
depends: None,
|
||||||
|
fee: None,
|
||||||
|
sigops: None,
|
||||||
|
weight: None,
|
||||||
|
required: false,
|
||||||
|
});
|
||||||
|
assert_eq!(
|
||||||
|
serde_json::from_str::<BlockTemplateTransaction>(r#"{"data":"00010203","txid":"0100000000000000000000000000000000000000000000000000000000000000","hash":"0200000000000000000000000000000000000000000000000000000000000000","depends":[1,2],"fee":100,"sigops":200,"weight":300,"required":true}"#).unwrap(),
|
||||||
|
BlockTemplateTransaction {
|
||||||
|
data: Bytes("00010203".from_hex().unwrap()),
|
||||||
|
txid: Some(H256::from(1)),
|
||||||
|
hash: Some(H256::from(2)),
|
||||||
|
depends: Some(vec![1, 2]),
|
||||||
|
fee: Some(100),
|
||||||
|
sigops: Some(200),
|
||||||
|
weight: Some(300),
|
||||||
|
required: true,
|
||||||
|
});
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -21,7 +21,7 @@ pub enum BlockTemplateRequestMode {
|
||||||
/// https://github.com/bitcoin/bips/blob/master/bip-0023.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-0009.mediawiki#getblocktemplate_changes
|
||||||
/// https://github.com/bitcoin/bips/blob/master/bip-0145.mediawiki
|
/// https://github.com/bitcoin/bips/blob/master/bip-0145.mediawiki
|
||||||
#[derive(Debug, Serialize, Deserialize, PartialEq, Eq, Clone)]
|
#[derive(Debug, Default, Serialize, Deserialize, PartialEq, Eq, Clone)]
|
||||||
pub struct BlockTemplateRequest {
|
pub struct BlockTemplateRequest {
|
||||||
/// Request mode
|
/// Request mode
|
||||||
pub mode: Option<BlockTemplateRequestMode>,
|
pub mode: Option<BlockTemplateRequestMode>,
|
||||||
|
@ -50,11 +50,7 @@ mod tests {
|
||||||
|
|
||||||
#[test]
|
#[test]
|
||||||
fn block_template_request_serialize() {
|
fn block_template_request_serialize() {
|
||||||
assert_eq!(serde_json::to_string(&BlockTemplateRequest {
|
assert_eq!(serde_json::to_string(&BlockTemplateRequest::default()).unwrap(), r#"{"mode":null,"capabilities":null,"rules":null}"#);
|
||||||
mode: None,
|
|
||||||
capabilities: None,
|
|
||||||
rules: None,
|
|
||||||
}).unwrap(), r#"{"mode":null,"capabilities":null,"rules":null}"#);
|
|
||||||
assert_eq!(serde_json::to_string(&BlockTemplateRequest {
|
assert_eq!(serde_json::to_string(&BlockTemplateRequest {
|
||||||
mode: Some(BlockTemplateRequestMode::Template),
|
mode: Some(BlockTemplateRequestMode::Template),
|
||||||
capabilities: Some(vec!["a".to_owned()].into_iter().collect()),
|
capabilities: Some(vec!["a".to_owned()].into_iter().collect()),
|
||||||
|
|
Loading…
Reference in New Issue