From 2e471a937a4662cf9c51186a146aa9740987b531 Mon Sep 17 00:00:00 2001 From: Jude Nelson Date: Sat, 9 Mar 2019 18:50:27 -0500 Subject: [PATCH] update block snapshot to include a running sortition burn total and include a parent block back pointer --- src/chainstate/burn/mod.rs | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/src/chainstate/burn/mod.rs b/src/chainstate/burn/mod.rs index a096d542c..b7acc93c4 100644 --- a/src/chainstate/burn/mod.rs +++ b/src/chainstate/burn/mod.rs @@ -42,8 +42,8 @@ use sha2::Digest; use rusqlite::Connection; use rusqlite::Transaction; -use self::db::burndb::BurnDB; -use self::db::Error as db_error; +use chainstate::burn::db::burndb::BurnDB; +use chainstate::Error as db_error; use core::SYSTEM_FORK_SET_VERSION; @@ -54,16 +54,19 @@ pub struct ConsensusHash([u8; 20]); impl_array_newtype!(ConsensusHash, u8, 20); impl_array_hexstring_fmt!(ConsensusHash); impl_byte_array_newtype!(ConsensusHash, u8, 20); +pub const CONSENSUS_HASH_ENCODED_SIZE : u32 = 20; pub struct BlockHeaderHash([u8; 32]); impl_array_newtype!(BlockHeaderHash, u8, 32); impl_array_hexstring_fmt!(BlockHeaderHash); impl_byte_array_newtype!(BlockHeaderHash, u8, 32); +pub const BLOCK_HEADER_HASH_ENCODED_SIZE : u32 = 32; pub struct VRFSeed([u8; 32]); impl_array_newtype!(VRFSeed, u8, 32); impl_array_hexstring_fmt!(VRFSeed); impl_byte_array_newtype!(VRFSeed, u8, 32); +pub const VRF_SEED_ENCODED_SIZE : u32 = 32; impl VRFSeed { /// First-ever VRF seed from the genesis block. It's all 0's @@ -89,9 +92,11 @@ impl_byte_array_newtype!(SortitionHash, u8, 32); pub struct BlockSnapshot { pub block_height: u64, pub burn_header_hash: BurnchainHeaderHash, + pub parent_burn_header_hash: BurnchainHeaderHash, pub consensus_hash: ConsensusHash, pub ops_hash: OpsHash, pub total_burn: u64, // how many burn tokens have been destroyed since genesis + pub sortition_burn: u64, // how many burn tokens have been destroyed since the last sortition pub burn_quota: u64, // how many burn tokens must be destroyed in this block for a sortition to occur pub sortition: bool, // whether or not a sortition happened in this block (will be false if either the burn quota isn't met, or no block commits occured) pub sortition_hash: SortitionHash, // rolling hash of the burn chain's block headers -- this gets mixed with the sortition VRF seed @@ -276,7 +281,7 @@ mod tests { use super::SortitionHash; use super::Txid; - use chainstate::burn::db::Error as db_error; + use chainstate::Error as db_error; use chainstate::burn::db::burndb::BurnDB; use burnchains::BurnchainHeaderHash; @@ -302,9 +307,11 @@ mod tests { let snapshot_row = BlockSnapshot { block_height: i, burn_header_hash: BurnchainHeaderHash::from_bytes(&[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,i as u8]).unwrap(), + parent_burn_header_hash: BurnchainHeaderHash::from_bytes(&[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,(if i == 0 { 0xff } else { i-1 }) as u8]).unwrap(), consensus_hash: ConsensusHash::from_bytes(&[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,i as u8]).unwrap(), ops_hash: OpsHash::from_bytes(&[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,i as u8]).unwrap(), total_burn: i, + sortition_burn: i, burn_quota: 0, sortition: true, sortition_hash: SortitionHash::initial(),