From c8d760cd61256e1e608e0819bad9b731c8b8bc9b Mon Sep 17 00:00:00 2001 From: cryptocode <34946442+cryptocode@users.noreply.github.com> Date: Wed, 2 Jan 2019 00:45:51 +0100 Subject: [PATCH] Block size computation improvement (#1528) --- nano/lib/blocks.hpp | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/nano/lib/blocks.hpp b/nano/lib/blocks.hpp index 3deb0006..424ea0e2 100644 --- a/nano/lib/blocks.hpp +++ b/nano/lib/blocks.hpp @@ -81,6 +81,7 @@ public: nano::block_hash previous; nano::account destination; nano::amount balance; + static size_t constexpr size = sizeof (previous) + sizeof (destination) + sizeof (balance); }; class send_block : public nano::block { @@ -110,10 +111,10 @@ public: bool operator== (nano::block const &) const override; bool operator== (nano::send_block const &) const; bool valid_predecessor (nano::block const &) const override; - static size_t constexpr size = sizeof (nano::account) + sizeof (nano::block_hash) + sizeof (nano::amount) + sizeof (nano::signature) + sizeof (uint64_t); send_hashables hashables; nano::signature signature; uint64_t work; + static size_t constexpr size = nano::send_hashables::size + sizeof (signature) + sizeof (work); }; class receive_hashables { @@ -125,6 +126,7 @@ public: void hash (blake2b_state &) const; nano::block_hash previous; nano::block_hash source; + static size_t constexpr size = sizeof (previous) + sizeof (source); }; class receive_block : public nano::block { @@ -154,10 +156,10 @@ public: bool operator== (nano::block const &) const override; bool operator== (nano::receive_block const &) const; bool valid_predecessor (nano::block const &) const override; - static size_t constexpr size = sizeof (nano::block_hash) + sizeof (nano::block_hash) + sizeof (nano::signature) + sizeof (uint64_t); receive_hashables hashables; nano::signature signature; uint64_t work; + static size_t constexpr size = nano::receive_hashables::size + sizeof (signature) + sizeof (work); }; class open_hashables { @@ -170,6 +172,7 @@ public: nano::block_hash source; nano::account representative; nano::account account; + static size_t constexpr size = sizeof (source) + sizeof (representative) + sizeof (account); }; class open_block : public nano::block { @@ -200,10 +203,10 @@ public: bool operator== (nano::block const &) const override; bool operator== (nano::open_block const &) const; bool valid_predecessor (nano::block const &) const override; - static size_t constexpr size = sizeof (nano::block_hash) + sizeof (nano::account) + sizeof (nano::account) + sizeof (nano::signature) + sizeof (uint64_t); nano::open_hashables hashables; nano::signature signature; uint64_t work; + static size_t constexpr size = nano::open_hashables::size + sizeof (signature) + sizeof (work); }; class change_hashables { @@ -215,6 +218,7 @@ public: void hash (blake2b_state &) const; nano::block_hash previous; nano::account representative; + static size_t constexpr size = sizeof (previous) + sizeof (representative); }; class change_block : public nano::block { @@ -244,10 +248,10 @@ public: bool operator== (nano::block const &) const override; bool operator== (nano::change_block const &) const; bool valid_predecessor (nano::block const &) const override; - static size_t constexpr size = sizeof (nano::block_hash) + sizeof (nano::account) + sizeof (nano::signature) + sizeof (uint64_t); nano::change_hashables hashables; nano::signature signature; uint64_t work; + static size_t constexpr size = nano::change_hashables::size + sizeof (signature) + sizeof (work); }; class state_hashables { @@ -271,6 +275,8 @@ public: nano::amount balance; // Link field contains source block_hash if receiving, destination account if sending nano::uint256_union link; + // Serialized size + static size_t constexpr size = sizeof (account) + sizeof (previous) + sizeof (representative) + sizeof (balance) + sizeof (link); }; class state_block : public nano::block { @@ -300,10 +306,10 @@ public: bool operator== (nano::block const &) const override; bool operator== (nano::state_block const &) const; bool valid_predecessor (nano::block const &) const override; - static size_t constexpr size = sizeof (nano::account) + sizeof (nano::block_hash) + sizeof (nano::account) + sizeof (nano::amount) + sizeof (nano::uint256_union) + sizeof (nano::signature) + sizeof (uint64_t); nano::state_hashables hashables; nano::signature signature; uint64_t work; + static size_t constexpr size = nano::state_hashables::size + sizeof (signature) + sizeof (work); }; class block_visitor {