use crate::block::{block_transactions::BlockTransactions, header::Header};
use serde::{Deserialize, Serialize};
use super::{block_adproofs::BlockAdProofs, block_extension::BlockExtension};
#[derive(Debug, Clone, Serialize, Deserialize)]
pub struct Block {
pub header: Header,
#[serde(rename = "blockTransactions")]
pub block_transactions: BlockTransactions,
#[serde(rename = "adProofs")]
pub ad_proofs: BlockAdProofs,
#[serde(rename = "extension")]
pub extension: BlockExtension,
pub size: u64,
}
impl Block {
pub fn new(
header: Header,
block_transactions: BlockTransactions,
ad_proofs: BlockAdProofs,
extension: BlockExtension,
size: u64,
) -> Self {
Self {
header,
block_transactions,
ad_proofs,
extension,
size,
}
}
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_block() {
let json = r#"{
"header": {
"extensionId": "af4c9de8106960b47964d21e6eb2acdad7e3e168791e595f0806ebfb036ee7de",
"difficulty": "1199990374400",
"votes": "000000",
"timestamp": 1561978977137,
"size": 279,
"stateRoot": "18b7a08878f2a7ee4389c5a1cece1e2724abe8b8adc8916240dd1bcac069177303",
"height": 1,
"nBits": 100734821,
"version": 1,
"id": "b0244dfc267baca974a4caee06120321562784303a8a688976ae56170e4d175b",
"adProofsRoot": "766ab7a313cd2fb66d135b0be6662aa02dfa8e5b17342c05a04396268df0bfbb",
"transactionsRoot": "93fb06aa44413ff57ac878fda9377207d5db0e78833556b331b4d9727b3153ba",
"extensionHash": "0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8",
"powSolutions": {
"pk": "03be7ad70c74f691345cbedba19f4844e7fc514e1188a7929f5ae261d5bb00bb66",
"w": "02da9385ac99014ddcffe88d2ac5f28ce817cd615f270a0a5eae58acfb9fd9f6a0",
"n": "000000030151dc63",
"d": 46909460813884299753486408728361968139945651324239558400157099627
},
"adProofsId": "cfc4af9743534b30ef38deec118a85ce6f0a3741b79b7d294f3e089c118188dc",
"transactionsId": "fc13e7fd2d1ddbd10e373e232814b3c9ee1b6fbdc4e6257c288ecd9e6da92633",
"parentId": "0000000000000000000000000000000000000000000000000000000000000000"
},
"blockTransactions": {
"headerId": "b0244dfc267baca974a4caee06120321562784303a8a688976ae56170e4d175b",
"transactions": [
{
"id": "4c6282be413c6e300a530618b37790be5f286ded758accc2aebd41554a1be308",
"inputs": [
{
"boxId": "b69575e11c5c43400bfead5976ee0d6245a1168396b2e2a4f384691f275d501c",
"spendingProof": {
"proofBytes": "",
"extension": {}
}
}
],
"dataInputs": [],
"outputs": [
{
"boxId": "71bc9534d4a4fe8ff67698a5d0f29782836970635de8418da39fee1cd964fcbe",
"value": 93409065000000000,
"ergoTree": "101004020e36100204a00b08cd0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798ea02d192a39a8cc7a7017300730110010204020404040004c0fd4f05808c82f5f6030580b8c9e5ae040580f882ad16040204c0944004c0f407040004000580f882ad16d19683030191a38cc7a7019683020193c2b2a57300007473017302830108cdeeac93a38cc7b2a573030001978302019683040193b1a5730493c2a7c2b2a573050093958fa3730673079973089c73097e9a730a9d99a3730b730c0599c1a7c1b2a5730d00938cc7b2a5730e0001a390c1a7730f",
"assets": [],
"creationHeight": 1,
"additionalRegisters": {},
"transactionId": "4c6282be413c6e300a530618b37790be5f286ded758accc2aebd41554a1be308",
"index": 0
},
{
"boxId": "45dc27302332bcb93604ae63c0a543894b38af31e6aebdb40291e3e8ecaef031",
"value": 67500000000,
"ergoTree": "100204a00b08cd03be7ad70c74f691345cbedba19f4844e7fc514e1188a7929f5ae261d5bb00bb66ea02d192a39a8cc7a70173007301",
"assets": [],
"creationHeight": 1,
"additionalRegisters": {},
"transactionId": "4c6282be413c6e300a530618b37790be5f286ded758accc2aebd41554a1be308",
"index": 1
}
],
"size": 341
}
],
"blockVersion": 1,
"size": 374
},
"extension": {
"headerId": "b0244dfc267baca974a4caee06120321562784303a8a688976ae56170e4d175b",
"digest": "0e5751c026e543b2e8ab2eb06099daa1d1e5df47778f7787faab45cdf12fe3a8",
"fields": []
},
"adProofs": {
"headerId": "b0244dfc267baca974a4caee06120321562784303a8a688976ae56170e4d175b",
"proofBytes": "0200000000000000000000000000000000000000000000000000000000000000005527430474b673e4aafb08e0079c639de23e6a17e87edd00f78662b43c88aeda0000000002b69575e11c5c43400bfead5976ee0d6245a1168396b2e2a4f384691f275d501c0000012a80d6d0c7cfdad807100e040004c094400580809cde91e7b0010580acc7f03704be944004808948058080c7b7e4992c0580b4c4c32104fe884804c0fd4f0580bcc1960b04befd4f05000400ea03d192c1b2a5730000958fa373019a73029c73037e997304a305958fa373059a73069c73077e997308a305958fa373099c730a7e99730ba305730cd193c2a7c2b2a5730d00d50408000000010e6f98040483030808cd039bb5fe52359a64c99a60fd944fc5e388cbdc4d37ff091cc841c3ee79060b864708cd031fb52cf6e805f80d97cde289f4f757d49accf0c83fb864b27d2cf982c37f9a8b08cd0352ac2a471339b0d23b3d2c5ce0db0e81c969f77891b9edf0bda7fd39a78184e70000000000000000000000000000000000000000000000000000000000000000000002b8ce8cfe331e5eadfb0783bdc375c94413433f65e1e45857d71550d42e4d83bd0000011180bac28bc7e3f6a501101004020e36100204a00b08cd0279be667ef9dcbbac55a06295ce870b07029bfcdb2dce28d959f2815b16f81798ea02d192a39a8cc7a7017300730110010204020404040004c0fd4f05808c82f5f6030580b8c9e5ae040580f882ad16040204c0944004c0f407040004000580f882ad16d19683030191a38cc7a7019683020193c2b2a57300007473017302830108cdeeac93a38cc7b2a573030001978302019683040193b1a5730493c2a7c2b2a573050093958fa3730673079973089c73097e9a730a9d99a3730b730c0599c1a7c1b2a5730d00938cc7b2a5730e0001a390c1a7730f000000000000000000000000000000000000000000000000000000000000000000000000031b3c7ef0d25f3c71bbc4b55d4dbafb1f5172a498f884c562cece96243282534d00000416",
"digest": "766ab7a313cd2fb66d135b0be6662aa02dfa8e5b17342c05a04396268df0bfbb",
"size": 786
},
"size": 1439
}"#;
let block: Block = serde_json::from_str(json).unwrap();
assert_eq!(block.size, 1439);
assert_eq!(block.header.id, "b0244dfc267baca974a4caee06120321562784303a8a688976ae56170e4d175b");
}
}