diff --git a/nano/core_test/active_transactions.cpp b/nano/core_test/active_transactions.cpp index dc59f954..2b1bc50d 100644 --- a/nano/core_test/active_transactions.cpp +++ b/nano/core_test/active_transactions.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/core_test/backlog.cpp b/nano/core_test/backlog.cpp index facbf0b5..fa58f702 100644 --- a/nano/core_test/backlog.cpp +++ b/nano/core_test/backlog.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/core_test/block.cpp b/nano/core_test/block.cpp index 2b669208..b187f63b 100644 --- a/nano/core_test/block.cpp +++ b/nano/core_test/block.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/core_test/block_store.cpp b/nano/core_test/block_store.cpp index 56f1c838..2b96b65b 100644 --- a/nano/core_test/block_store.cpp +++ b/nano/core_test/block_store.cpp @@ -1,4 +1,5 @@ #include +#include #include #include #include diff --git a/nano/core_test/blockprocessor.cpp b/nano/core_test/blockprocessor.cpp index 38ccdc65..381cd1a9 100644 --- a/nano/core_test/blockprocessor.cpp +++ b/nano/core_test/blockprocessor.cpp @@ -1,4 +1,5 @@ #include +#include #include #include #include diff --git a/nano/core_test/bootstrap.cpp b/nano/core_test/bootstrap.cpp index d1fbbb37..27c78bb2 100644 --- a/nano/core_test/bootstrap.cpp +++ b/nano/core_test/bootstrap.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/core_test/bootstrap_ascending.cpp b/nano/core_test/bootstrap_ascending.cpp index a9ca2584..257b35c6 100644 --- a/nano/core_test/bootstrap_ascending.cpp +++ b/nano/core_test/bootstrap_ascending.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/core_test/bootstrap_server.cpp b/nano/core_test/bootstrap_server.cpp index 9be0f8eb..80abdd80 100644 --- a/nano/core_test/bootstrap_server.cpp +++ b/nano/core_test/bootstrap_server.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/core_test/confirmation_height.cpp b/nano/core_test/confirmation_height.cpp index 906c6bc2..b0d3c416 100644 --- a/nano/core_test/confirmation_height.cpp +++ b/nano/core_test/confirmation_height.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/core_test/confirmation_solicitor.cpp b/nano/core_test/confirmation_solicitor.cpp index c47ae54e..6cad1221 100644 --- a/nano/core_test/confirmation_solicitor.cpp +++ b/nano/core_test/confirmation_solicitor.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/core_test/conflicts.cpp b/nano/core_test/conflicts.cpp index 644388bd..65ff27d1 100644 --- a/nano/core_test/conflicts.cpp +++ b/nano/core_test/conflicts.cpp @@ -1,4 +1,4 @@ - +#include #include #include #include diff --git a/nano/core_test/election.cpp b/nano/core_test/election.cpp index fc193cc6..d008489f 100644 --- a/nano/core_test/election.cpp +++ b/nano/core_test/election.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/core_test/election_scheduler.cpp b/nano/core_test/election_scheduler.cpp index af028dd9..b2af2740 100644 --- a/nano/core_test/election_scheduler.cpp +++ b/nano/core_test/election_scheduler.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/core_test/frontiers_confirmation.cpp b/nano/core_test/frontiers_confirmation.cpp index 76812a6b..9d476ed3 100644 --- a/nano/core_test/frontiers_confirmation.cpp +++ b/nano/core_test/frontiers_confirmation.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/core_test/ledger.cpp b/nano/core_test/ledger.cpp index b8c827a9..ac26b842 100644 --- a/nano/core_test/ledger.cpp +++ b/nano/core_test/ledger.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/core_test/memory_pool.cpp b/nano/core_test/memory_pool.cpp index 3e5049bc..1d9c1fc1 100644 --- a/nano/core_test/memory_pool.cpp +++ b/nano/core_test/memory_pool.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/core_test/message.cpp b/nano/core_test/message.cpp index 102af44d..3053bbf0 100644 --- a/nano/core_test/message.cpp +++ b/nano/core_test/message.cpp @@ -1,4 +1,5 @@ #include +#include #include #include #include diff --git a/nano/core_test/message_deserializer.cpp b/nano/core_test/message_deserializer.cpp index 27133049..44e9fa06 100644 --- a/nano/core_test/message_deserializer.cpp +++ b/nano/core_test/message_deserializer.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/core_test/network.cpp b/nano/core_test/network.cpp index e6a514b9..2e15d5ef 100644 --- a/nano/core_test/network.cpp +++ b/nano/core_test/network.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/core_test/network_filter.cpp b/nano/core_test/network_filter.cpp index ae7f47e8..a886ae95 100644 --- a/nano/core_test/network_filter.cpp +++ b/nano/core_test/network_filter.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/core_test/node.cpp b/nano/core_test/node.cpp index fa999b31..28dcae3d 100644 --- a/nano/core_test/node.cpp +++ b/nano/core_test/node.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/core_test/optimistic_scheduler.cpp b/nano/core_test/optimistic_scheduler.cpp index 0f03c04f..789eb66b 100644 --- a/nano/core_test/optimistic_scheduler.cpp +++ b/nano/core_test/optimistic_scheduler.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/core_test/processor_service.cpp b/nano/core_test/processor_service.cpp index 9a9f33b1..959495d1 100644 --- a/nano/core_test/processor_service.cpp +++ b/nano/core_test/processor_service.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/core_test/request_aggregator.cpp b/nano/core_test/request_aggregator.cpp index dff32155..94f6d8c1 100644 --- a/nano/core_test/request_aggregator.cpp +++ b/nano/core_test/request_aggregator.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/core_test/scheduler_buckets.cpp b/nano/core_test/scheduler_buckets.cpp index 0b3aff23..43912e29 100644 --- a/nano/core_test/scheduler_buckets.cpp +++ b/nano/core_test/scheduler_buckets.cpp @@ -1,3 +1,4 @@ +#include #include #include diff --git a/nano/core_test/system.cpp b/nano/core_test/system.cpp index 8ac65cc7..b89524e8 100644 --- a/nano/core_test/system.cpp +++ b/nano/core_test/system.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/core_test/unchecked_map.cpp b/nano/core_test/unchecked_map.cpp index 3688b6f5..105ee313 100644 --- a/nano/core_test/unchecked_map.cpp +++ b/nano/core_test/unchecked_map.cpp @@ -1,4 +1,5 @@ #include +#include #include #include #include diff --git a/nano/core_test/vote_processor.cpp b/nano/core_test/vote_processor.cpp index c19a8953..1da68596 100644 --- a/nano/core_test/vote_processor.cpp +++ b/nano/core_test/vote_processor.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/core_test/voting.cpp b/nano/core_test/voting.cpp index cc95dd84..cf210e3a 100644 --- a/nano/core_test/voting.cpp +++ b/nano/core_test/voting.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/core_test/wallet.cpp b/nano/core_test/wallet.cpp index 3c9802c6..079eb007 100644 --- a/nano/core_test/wallet.cpp +++ b/nano/core_test/wallet.cpp @@ -1,4 +1,5 @@ #include +#include #include #include #include diff --git a/nano/core_test/wallets.cpp b/nano/core_test/wallets.cpp index 38009cdb..f624f70d 100644 --- a/nano/core_test/wallets.cpp +++ b/nano/core_test/wallets.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/core_test/websocket.cpp b/nano/core_test/websocket.cpp index 317d999e..0735b5e4 100644 --- a/nano/core_test/websocket.cpp +++ b/nano/core_test/websocket.cpp @@ -1,4 +1,5 @@ #include +#include #include #include #include diff --git a/nano/lib/CMakeLists.txt b/nano/lib/CMakeLists.txt index 271091dc..c7029af7 100644 --- a/nano/lib/CMakeLists.txt +++ b/nano/lib/CMakeLists.txt @@ -21,6 +21,11 @@ add_library( ${platform_sources} asio.hpp asio.cpp + block_sideband.hpp + block_sideband.cpp + block_type.hpp + block_type.cpp + block_uniquer.hpp blockbuilders.hpp blockbuilders.cpp blocks.hpp diff --git a/nano/lib/block_sideband.cpp b/nano/lib/block_sideband.cpp new file mode 100644 index 00000000..e69de29b diff --git a/nano/lib/block_sideband.hpp b/nano/lib/block_sideband.hpp new file mode 100644 index 00000000..871f9bfc --- /dev/null +++ b/nano/lib/block_sideband.hpp @@ -0,0 +1,69 @@ +#pragma once + +#include +#include +#include +#include +#include + +#include +#include + +namespace nano +{ +class object_stream; +} + +namespace nano +{ +class block_details +{ + static_assert (std::is_same::type, uint8_t> (), "Epoch enum is not the proper type"); + static_assert (static_cast (nano::epoch::max) < (1 << 5), "Epoch max is too large for the sideband"); + +public: + block_details () = default; + block_details (nano::epoch const epoch_a, bool const is_send_a, bool const is_receive_a, bool const is_epoch_a); + static constexpr size_t size () + { + return 1; + } + bool operator== (block_details const & other_a) const; + void serialize (nano::stream &) const; + bool deserialize (nano::stream &); + nano::epoch epoch{ nano::epoch::epoch_0 }; + bool is_send{ false }; + bool is_receive{ false }; + bool is_epoch{ false }; + +private: + uint8_t packed () const; + void unpack (uint8_t); + +public: // Logging + void operator() (nano::object_stream &) const; +}; + +std::string state_subtype (nano::block_details const); + +class block_sideband final +{ +public: + block_sideband () = default; + block_sideband (nano::account const &, nano::block_hash const &, nano::amount const &, uint64_t const, nano::seconds_t const local_timestamp, nano::block_details const &, nano::epoch const source_epoch_a); + block_sideband (nano::account const &, nano::block_hash const &, nano::amount const &, uint64_t const, nano::seconds_t const local_timestamp, nano::epoch const epoch_a, bool const is_send, bool const is_receive, bool const is_epoch, nano::epoch const source_epoch_a); + void serialize (nano::stream &, nano::block_type) const; + bool deserialize (nano::stream &, nano::block_type); + static size_t size (nano::block_type); + nano::block_hash successor{ 0 }; + nano::account account{}; + nano::amount balance{ 0 }; + uint64_t height{ 0 }; + uint64_t timestamp{ 0 }; + nano::block_details details; + nano::epoch source_epoch{ nano::epoch::epoch_0 }; + +public: // Logging + void operator() (nano::object_stream &) const; +}; +} // namespace nano diff --git a/nano/lib/block_type.cpp b/nano/lib/block_type.cpp new file mode 100644 index 00000000..4afb9b0f --- /dev/null +++ b/nano/lib/block_type.cpp @@ -0,0 +1,13 @@ +#include + +#include + +std::string_view nano::to_string (nano::block_type type) +{ + return magic_enum::enum_name (type); +} + +void nano::serialize_block_type (nano::stream & stream, const nano::block_type & type) +{ + nano::write (stream, type); +} diff --git a/nano/lib/block_type.hpp b/nano/lib/block_type.hpp new file mode 100644 index 00000000..020722e3 --- /dev/null +++ b/nano/lib/block_type.hpp @@ -0,0 +1,26 @@ +#pragma once + +#include + +#include +#include + +namespace nano +{ +enum class block_type : uint8_t +{ + invalid = 0, + not_a_block = 1, + send = 2, + receive = 3, + open = 4, + change = 5, + state = 6 +}; + +std::string_view to_string (block_type); +/** + * Serialize block type as an 8-bit value + */ +void serialize_block_type (nano::stream &, nano::block_type const &); +} // namespace nano diff --git a/nano/lib/block_uniquer.hpp b/nano/lib/block_uniquer.hpp new file mode 100644 index 00000000..d39bb3af --- /dev/null +++ b/nano/lib/block_uniquer.hpp @@ -0,0 +1,10 @@ +#pragma once + +#include +#include + +namespace nano +{ +class block; +using block_uniquer = nano::uniquer; +} diff --git a/nano/lib/blockbuilders.cpp b/nano/lib/blockbuilders.cpp index 69b375eb..d8fa600f 100644 --- a/nano/lib/blockbuilders.cpp +++ b/nano/lib/blockbuilders.cpp @@ -1,4 +1,7 @@ #include +#include +#include +#include #include diff --git a/nano/lib/blockbuilders.hpp b/nano/lib/blockbuilders.hpp index 077d5840..1471c9bb 100644 --- a/nano/lib/blockbuilders.hpp +++ b/nano/lib/blockbuilders.hpp @@ -1,9 +1,18 @@ #pragma once -#include +#include #include +namespace nano +{ +class change_block; +class send_block; +class state_block; +class open_block; +class receive_block; +} + namespace nano { /** Flags to track builder state */ diff --git a/nano/lib/blocks.cpp b/nano/lib/blocks.cpp index 3a13bb38..688e614d 100644 --- a/nano/lib/blocks.cpp +++ b/nano/lib/blocks.cpp @@ -13,6 +13,12 @@ #include #include +size_t constexpr nano::send_block::size; +size_t constexpr nano::receive_block::size; +size_t constexpr nano::open_block::size; +size_t constexpr nano::change_block::size; +size_t constexpr nano::state_block::size; + /** Compare blocks, first by type, then content. This is an optimization over dynamic_cast, which is very slow on some platforms. */ namespace { @@ -1443,11 +1449,6 @@ std::shared_ptr nano::deserialize_block_json (boost::property_tree: return result; } -void nano::serialize_block_type (nano::stream & stream, const nano::block_type & type) -{ - nano::write (stream, type); -} - void nano::serialize_block (nano::stream & stream_a, nano::block const & block_a) { nano::serialize_block_type (stream_a, block_a.type ()); @@ -1986,8 +1987,3 @@ void nano::block_sideband::operator() (nano::object_stream & obs) const obs.write ("source_epoch", source_epoch); obs.write ("details", details); } - -std::string_view nano::to_string (nano::block_type type) -{ - return magic_enum::enum_name (type); -} diff --git a/nano/lib/blocks.hpp b/nano/lib/blocks.hpp index 19c31d95..e89f2ddd 100644 --- a/nano/lib/blocks.hpp +++ b/nano/lib/blocks.hpp @@ -1,89 +1,23 @@ #pragma once -#include +#include +#include +#include #include #include #include -#include #include #include -#include -#include -#include -#include #include -#include +typedef struct blake2b_state__ blake2b_state; namespace nano { class block_visitor; class mutable_block_visitor; - -enum class block_type : uint8_t -{ - invalid = 0, - not_a_block = 1, - send = 2, - receive = 3, - open = 4, - change = 5, - state = 6 -}; - -std::string_view to_string (block_type); - -class block_details -{ - static_assert (std::is_same::type, uint8_t> (), "Epoch enum is not the proper type"); - static_assert (static_cast (nano::epoch::max) < (1 << 5), "Epoch max is too large for the sideband"); - -public: - block_details () = default; - block_details (nano::epoch const epoch_a, bool const is_send_a, bool const is_receive_a, bool const is_epoch_a); - static constexpr size_t size () - { - return 1; - } - bool operator== (block_details const & other_a) const; - void serialize (nano::stream &) const; - bool deserialize (nano::stream &); - nano::epoch epoch{ nano::epoch::epoch_0 }; - bool is_send{ false }; - bool is_receive{ false }; - bool is_epoch{ false }; - -private: - uint8_t packed () const; - void unpack (uint8_t); - -public: // Logging - void operator() (nano::object_stream &) const; -}; - -std::string state_subtype (nano::block_details const); - -class block_sideband final -{ -public: - block_sideband () = default; - block_sideband (nano::account const &, nano::block_hash const &, nano::amount const &, uint64_t const, nano::seconds_t const local_timestamp, nano::block_details const &, nano::epoch const source_epoch_a); - block_sideband (nano::account const &, nano::block_hash const &, nano::amount const &, uint64_t const, nano::seconds_t const local_timestamp, nano::epoch const epoch_a, bool const is_send, bool const is_receive, bool const is_epoch, nano::epoch const source_epoch_a); - void serialize (nano::stream &, nano::block_type) const; - bool deserialize (nano::stream &, nano::block_type); - static size_t size (nano::block_type); - nano::block_hash successor{ 0 }; - nano::account account{}; - nano::amount balance{ 0 }; - uint64_t height{ 0 }; - uint64_t timestamp{ 0 }; - nano::block_details details; - nano::epoch source_epoch{ nano::epoch::epoch_0 }; - -public: // Logging - void operator() (nano::object_stream &) const; -}; +class object_stream; class block { @@ -146,8 +80,6 @@ public: // Logging virtual void operator() (nano::object_stream &) const; }; -using block_list_t = std::vector>; - class send_hashables { public: @@ -441,15 +373,9 @@ public: virtual ~mutable_block_visitor () = default; }; -using block_uniquer = nano::uniquer; - std::shared_ptr deserialize_block (nano::stream &); std::shared_ptr deserialize_block (nano::stream &, nano::block_type, nano::block_uniquer * = nullptr); std::shared_ptr deserialize_block_json (boost::property_tree::ptree const &, nano::block_uniquer * = nullptr); -/** - * Serialize block type as an 8-bit value - */ -void serialize_block_type (nano::stream &, nano::block_type const &); /** * Serialize a block prefixed with an 8-bit typecode */ diff --git a/nano/lib/config.cpp b/nano/lib/config.cpp index 7f40e3b0..1839d741 100644 --- a/nano/lib/config.cpp +++ b/nano/lib/config.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/lib/work.cpp b/nano/lib/work.cpp index 480dba57..90a74095 100644 --- a/nano/lib/work.cpp +++ b/nano/lib/work.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/load_test/entry.cpp b/nano/load_test/entry.cpp index e41e376a..13f56e38 100644 --- a/nano/load_test/entry.cpp +++ b/nano/load_test/entry.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include diff --git a/nano/nano_node/entry.cpp b/nano/nano_node/entry.cpp index 25b17af5..3c5b79a6 100644 --- a/nano/nano_node/entry.cpp +++ b/nano/nano_node/entry.cpp @@ -1,4 +1,5 @@ #include +#include #include #include #include diff --git a/nano/node/active_transactions.cpp b/nano/node/active_transactions.cpp index 585bb428..2545c5d4 100644 --- a/nano/node/active_transactions.cpp +++ b/nano/node/active_transactions.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/node/blockprocessor.cpp b/nano/node/blockprocessor.cpp index 24ed8067..731a000f 100644 --- a/nano/node/blockprocessor.cpp +++ b/nano/node/blockprocessor.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/node/blockprocessor.hpp b/nano/node/blockprocessor.hpp index 3cc7663c..f0dae027 100644 --- a/nano/node/blockprocessor.hpp +++ b/nano/node/blockprocessor.hpp @@ -1,6 +1,5 @@ #pragma once -#include #include #include @@ -10,6 +9,13 @@ #include #include +namespace nano +{ +class block; +class node; +class write_database_queue; +} + namespace nano::store { class write_transaction; @@ -17,8 +23,6 @@ class write_transaction; namespace nano { -class node; -class write_database_queue; enum class block_source { diff --git a/nano/node/bootstrap/block_deserializer.hpp b/nano/node/bootstrap/block_deserializer.hpp index 9e53aa79..98499200 100644 --- a/nano/node/bootstrap/block_deserializer.hpp +++ b/nano/node/bootstrap/block_deserializer.hpp @@ -1,6 +1,8 @@ #pragma once -#include +#include + +#include #include #include diff --git a/nano/node/bootstrap/bootstrap_attempt.cpp b/nano/node/bootstrap/bootstrap_attempt.cpp index 4057dd8e..390d5026 100644 --- a/nano/node/bootstrap/bootstrap_attempt.cpp +++ b/nano/node/bootstrap/bootstrap_attempt.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/node/bootstrap/bootstrap_bulk_pull.cpp b/nano/node/bootstrap/bootstrap_bulk_pull.cpp index 276e6441..cad42863 100644 --- a/nano/node/bootstrap/bootstrap_bulk_pull.cpp +++ b/nano/node/bootstrap/bootstrap_bulk_pull.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/node/bootstrap/bootstrap_bulk_push.cpp b/nano/node/bootstrap/bootstrap_bulk_push.cpp index 5ff069ba..8a1e8111 100644 --- a/nano/node/bootstrap/bootstrap_bulk_push.cpp +++ b/nano/node/bootstrap/bootstrap_bulk_push.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/node/bootstrap/bootstrap_frontier.hpp b/nano/node/bootstrap/bootstrap_frontier.hpp index 1f6575cd..75ee9c1a 100644 --- a/nano/node/bootstrap/bootstrap_frontier.hpp +++ b/nano/node/bootstrap/bootstrap_frontier.hpp @@ -1,7 +1,10 @@ #pragma once +#include + #include #include +#include namespace nano { diff --git a/nano/node/bootstrap/bootstrap_lazy.cpp b/nano/node/bootstrap/bootstrap_lazy.cpp index 49cd39c0..14393798 100644 --- a/nano/node/bootstrap/bootstrap_lazy.cpp +++ b/nano/node/bootstrap/bootstrap_lazy.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/node/bootstrap/bootstrap_server.cpp b/nano/node/bootstrap/bootstrap_server.cpp index 078d374d..3128b9ad 100644 --- a/nano/node/bootstrap/bootstrap_server.cpp +++ b/nano/node/bootstrap/bootstrap_server.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/node/bootstrap_ascending/service.cpp b/nano/node/bootstrap_ascending/service.cpp index 0b6c85b7..2db59429 100644 --- a/nano/node/bootstrap_ascending/service.cpp +++ b/nano/node/bootstrap_ascending/service.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/node/cli.cpp b/nano/node/cli.cpp index bc829fcb..984f1656 100644 --- a/nano/node/cli.cpp +++ b/nano/node/cli.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/node/confirmation_height_bounded.cpp b/nano/node/confirmation_height_bounded.cpp index 26cc21b4..53c3ffbf 100644 --- a/nano/node/confirmation_height_bounded.cpp +++ b/nano/node/confirmation_height_bounded.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/node/confirmation_height_processor.cpp b/nano/node/confirmation_height_processor.cpp index 4b9d9d82..e6081644 100644 --- a/nano/node/confirmation_height_processor.cpp +++ b/nano/node/confirmation_height_processor.cpp @@ -1,3 +1,4 @@ +#include #include #include #include @@ -239,3 +240,8 @@ nano::block_hash nano::confirmation_height_processor::current () const nano::lock_guard lk (mutex); return original_block ? original_block->hash () : 0; } + +std::reference_wrapper nano::confirmation_height_processor::block_wrapper::hash () const +{ + return block->hash (); +} diff --git a/nano/node/confirmation_height_processor.hpp b/nano/node/confirmation_height_processor.hpp index d3126783..828a6161 100644 --- a/nano/node/confirmation_height_processor.hpp +++ b/nano/node/confirmation_height_processor.hpp @@ -65,10 +65,7 @@ private: { } - std::reference_wrapper hash () const - { - return block->hash (); - } + std::reference_wrapper hash () const; std::shared_ptr block; }; diff --git a/nano/node/confirmation_height_unbounded.cpp b/nano/node/confirmation_height_unbounded.cpp index 18c1e0dc..03c4c42a 100644 --- a/nano/node/confirmation_height_unbounded.cpp +++ b/nano/node/confirmation_height_unbounded.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/node/confirmation_solicitor.cpp b/nano/node/confirmation_solicitor.cpp index cece99c5..feb78245 100644 --- a/nano/node/confirmation_solicitor.cpp +++ b/nano/node/confirmation_solicitor.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/node/election.cpp b/nano/node/election.cpp index d967201d..d01d3718 100644 --- a/nano/node/election.cpp +++ b/nano/node/election.cpp @@ -1,3 +1,4 @@ +#include #include #include #include @@ -801,4 +802,4 @@ void nano::election_extended_status::operator() (nano::object_stream & obs) cons obs.write ("hash", block->hash ().to_string ()); obs.write ("amount", amount); }); -} \ No newline at end of file +} diff --git a/nano/node/epoch_upgrader.cpp b/nano/node/epoch_upgrader.cpp index 9072b532..48007b35 100644 --- a/nano/node/epoch_upgrader.cpp +++ b/nano/node/epoch_upgrader.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index 9fdf72b3..2639aa44 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/node/local_block_broadcaster.cpp b/nano/node/local_block_broadcaster.cpp index 0e5097e5..59c0e4df 100644 --- a/nano/node/local_block_broadcaster.cpp +++ b/nano/node/local_block_broadcaster.cpp @@ -1,3 +1,4 @@ +#include #include #include #include @@ -167,4 +168,9 @@ std::unique_ptr nano::local_block_broadcaster::c auto composite = std::make_unique (name); composite->add_component (std::make_unique (container_info{ "local", local_blocks.size (), sizeof (decltype (local_blocks)::value_type) })); return composite; -} \ No newline at end of file +} + +nano::block_hash nano::local_block_broadcaster::local_entry::hash () const +{ + return block->hash (); +} diff --git a/nano/node/local_block_broadcaster.hpp b/nano/node/local_block_broadcaster.hpp index 486fe855..b4e7093d 100644 --- a/nano/node/local_block_broadcaster.hpp +++ b/nano/node/local_block_broadcaster.hpp @@ -1,6 +1,5 @@ #pragma once -#include #include #include #include @@ -66,10 +65,7 @@ private: std::chrono::steady_clock::time_point const arrival; mutable std::chrono::steady_clock::time_point last_broadcast{}; // Not part of any index - nano::block_hash hash () const - { - return block->hash (); - } + nano::block_hash hash () const; }; // clang-format off diff --git a/nano/node/messages.hpp b/nano/node/messages.hpp index 68d5d424..11d96d6b 100644 --- a/nano/node/messages.hpp +++ b/nano/node/messages.hpp @@ -1,7 +1,7 @@ #pragma once #include -#include +#include #include #include #include diff --git a/nano/node/network.cpp b/nano/node/network.cpp index 0c9cf226..5da1940e 100644 --- a/nano/node/network.cpp +++ b/nano/node/network.cpp @@ -1,4 +1,5 @@ #include +#include #include #include #include diff --git a/nano/node/node.cpp b/nano/node/node.cpp index 4ed49e6e..09d119f2 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/node/node.hpp b/nano/node/node.hpp index 0776b728..d4105e61 100644 --- a/nano/node/node.hpp +++ b/nano/node/node.hpp @@ -1,5 +1,6 @@ #pragma once +#include #include #include #include diff --git a/nano/node/nodeconfig.cpp b/nano/node/nodeconfig.cpp index 175d7847..beb93cb4 100644 --- a/nano/node/nodeconfig.cpp +++ b/nano/node/nodeconfig.cpp @@ -1,4 +1,5 @@ #include +#include #include #include #include @@ -560,4 +561,4 @@ nano::account nano::node_config::random_representative () const std::size_t index (nano::random_pool::generate_word32 (0, static_cast (preconfigured_representatives.size () - 1))); auto result (preconfigured_representatives[index]); return result; -} \ No newline at end of file +} diff --git a/nano/node/request_aggregator.cpp b/nano/node/request_aggregator.cpp index 452f0e0b..f822ace9 100644 --- a/nano/node/request_aggregator.cpp +++ b/nano/node/request_aggregator.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/node/scheduler/optimistic.cpp b/nano/node/scheduler/optimistic.cpp index bd524795..8672d976 100644 --- a/nano/node/scheduler/optimistic.cpp +++ b/nano/node/scheduler/optimistic.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/node/scheduler/priority.cpp b/nano/node/scheduler/priority.cpp index 649502c1..66d2008b 100644 --- a/nano/node/scheduler/priority.cpp +++ b/nano/node/scheduler/priority.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/node/telemetry.cpp b/nano/node/telemetry.cpp index e1fe6ece..5e5b15fd 100644 --- a/nano/node/telemetry.cpp +++ b/nano/node/telemetry.cpp @@ -1,3 +1,4 @@ +#include #include #include #include @@ -439,4 +440,4 @@ nano::telemetry_data nano::consolidate_telemetry_data (std::vector (version_fragments[4]); return consolidated_data; -} \ No newline at end of file +} diff --git a/nano/node/unchecked_map.cpp b/nano/node/unchecked_map.cpp index b20651d7..4d65a40d 100644 --- a/nano/node/unchecked_map.cpp +++ b/nano/node/unchecked_map.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/node/voting.cpp b/nano/node/voting.cpp index 9ea31745..9967f7ed 100644 --- a/nano/node/voting.cpp +++ b/nano/node/voting.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/node/wallet.cpp b/nano/node/wallet.cpp index e1c2d7a8..53380f4b 100644 --- a/nano/node/wallet.cpp +++ b/nano/node/wallet.cpp @@ -1,4 +1,5 @@ #include +#include #include #include #include diff --git a/nano/node/websocket.cpp b/nano/node/websocket.cpp index c2b3af2f..dbd16637 100644 --- a/nano/node/websocket.cpp +++ b/nano/node/websocket.cpp @@ -1,6 +1,7 @@ #include #include #include +#include #include #include #include @@ -1078,4 +1079,4 @@ void nano::websocket_server::stop () { server->stop (); } -} \ No newline at end of file +} diff --git a/nano/node/websocket.hpp b/nano/node/websocket.hpp index 6bb7426a..4b58bae7 100644 --- a/nano/node/websocket.hpp +++ b/nano/node/websocket.hpp @@ -1,6 +1,5 @@ #pragma once -#include #include #include #include @@ -20,6 +19,7 @@ namespace nano { +class block; class wallets; class logger; class vote; diff --git a/nano/qt/qt.cpp b/nano/qt/qt.cpp index 73f719bf..22c4221c 100644 --- a/nano/qt/qt.cpp +++ b/nano/qt/qt.cpp @@ -1,3 +1,4 @@ +#include #include #include diff --git a/nano/qt_test/qt.cpp b/nano/qt_test/qt.cpp index 3f1972bd..6ff9e931 100644 --- a/nano/qt_test/qt.cpp +++ b/nano/qt_test/qt.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/rpc_test/receivable.cpp b/nano/rpc_test/receivable.cpp index 81563180..65821616 100644 --- a/nano/rpc_test/receivable.cpp +++ b/nano/rpc_test/receivable.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index da0b1af1..f6fe1b06 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -1,5 +1,6 @@ #include #include +#include #include #include #include diff --git a/nano/secure/common.cpp b/nano/secure/common.cpp index d34f9daf..091e45fc 100644 --- a/nano/secure/common.cpp +++ b/nano/secure/common.cpp @@ -1,4 +1,5 @@ #include +#include #include #include #include @@ -17,12 +18,6 @@ #include #include -size_t constexpr nano::send_block::size; -size_t constexpr nano::receive_block::size; -size_t constexpr nano::open_block::size; -size_t constexpr nano::change_block::size; -size_t constexpr nano::state_block::size; - nano::networks nano::network_constants::active_network = nano::networks::ACTIVE_NETWORK; namespace diff --git a/nano/secure/common.hpp b/nano/secure/common.hpp index 2e183267..9ce68582 100644 --- a/nano/secure/common.hpp +++ b/nano/secure/common.hpp @@ -2,7 +2,6 @@ #include #include -#include #include #include #include diff --git a/nano/secure/ledger.cpp b/nano/secure/ledger.cpp index c27abacb..561a87c0 100644 --- a/nano/secure/ledger.cpp +++ b/nano/secure/ledger.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/secure/network_filter.cpp b/nano/secure/network_filter.cpp index 059cddb3..c60a1117 100644 --- a/nano/secure/network_filter.cpp +++ b/nano/secure/network_filter.cpp @@ -1,4 +1,5 @@ #include +#include #include #include #include diff --git a/nano/secure/utility.cpp b/nano/secure/utility.cpp index d7e263d8..07d64724 100644 --- a/nano/secure/utility.cpp +++ b/nano/secure/utility.cpp @@ -2,6 +2,8 @@ #include #include +#include + #include static std::vector all_unique_paths; diff --git a/nano/slow_test/node.cpp b/nano/slow_test/node.cpp index b9b8e4ed..7aa3a4d3 100644 --- a/nano/slow_test/node.cpp +++ b/nano/slow_test/node.cpp @@ -1,4 +1,5 @@ #include +#include #include #include #include diff --git a/nano/slow_test/vote_cache.cpp b/nano/slow_test/vote_cache.cpp index 3c4a7ccb..1e0b4aba 100644 --- a/nano/slow_test/vote_cache.cpp +++ b/nano/slow_test/vote_cache.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/slow_test/vote_processor.cpp b/nano/slow_test/vote_processor.cpp index ff1ae1f5..4dc3c099 100644 --- a/nano/slow_test/vote_processor.cpp +++ b/nano/slow_test/vote_processor.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/store/CMakeLists.txt b/nano/store/CMakeLists.txt index a992ba59..bf79b03e 100644 --- a/nano/store/CMakeLists.txt +++ b/nano/store/CMakeLists.txt @@ -5,6 +5,7 @@ add_library( component.hpp confirmation_height.hpp db_val.hpp + db_val_impl.hpp iterator.hpp iterator_impl.hpp final.hpp diff --git a/nano/store/block.hpp b/nano/store/block.hpp index 826aafc4..ad1fd559 100644 --- a/nano/store/block.hpp +++ b/nano/store/block.hpp @@ -1,6 +1,6 @@ #pragma once -#include +#include #include #include #include @@ -9,6 +9,7 @@ namespace nano { +class block; class block_hash; } namespace nano::store diff --git a/nano/store/component.cpp b/nano/store/component.cpp index cd68dc2a..67826f63 100644 --- a/nano/store/component.cpp +++ b/nano/store/component.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/store/db_val.hpp b/nano/store/db_val.hpp index 957492e2..a9fc4cc8 100644 --- a/nano/store/db_val.hpp +++ b/nano/store/db_val.hpp @@ -9,6 +9,11 @@ #include +namespace nano +{ +class block; +} + namespace nano::store { /** @@ -92,15 +97,7 @@ public: static_assert (std::is_standard_layout::value, "Standard layout is required"); } - db_val (std::shared_ptr const & val_a) : - buffer (std::make_shared> ()) - { - { - nano::vectorstream stream (*buffer); - nano::serialize_block (stream, *val_a); - } - convert_buffer_to_value (); - } + db_val (std::shared_ptr const & val_a); db_val (uint64_t val_a) : buffer (std::make_shared> ()) @@ -209,16 +206,7 @@ public: return result; } - explicit operator block_w_sideband () const - { - nano::bufferstream stream (reinterpret_cast (data ()), size ()); - nano::store::block_w_sideband block_w_sideband; - block_w_sideband.block = (nano::deserialize_block (stream)); - auto error = block_w_sideband.sideband.deserialize (stream, block_w_sideband.block->type ()); - release_assert (!error); - block_w_sideband.block->sideband_set (block_w_sideband.sideband); - return block_w_sideband; - } + explicit operator block_w_sideband () const; explicit operator std::nullptr_t () const { @@ -230,12 +218,7 @@ public: return no_value::dummy; } - explicit operator std::shared_ptr () const - { - nano::bufferstream stream (reinterpret_cast (data ()), size ()); - std::shared_ptr result (nano::deserialize_block (stream)); - return result; - } + explicit operator std::shared_ptr () const; template std::shared_ptr convert_to_block () const diff --git a/nano/store/db_val_impl.hpp b/nano/store/db_val_impl.hpp new file mode 100644 index 00000000..a8de6f00 --- /dev/null +++ b/nano/store/db_val_impl.hpp @@ -0,0 +1,33 @@ +#include +#include + +template +nano::store::db_val::db_val (std::shared_ptr const & val_a) : + buffer (std::make_shared> ()) +{ + { + nano::vectorstream stream (*buffer); + nano::serialize_block (stream, *val_a); + } + convert_buffer_to_value (); +} + +template +nano::store::db_val::operator std::shared_ptr () const +{ + nano::bufferstream stream (reinterpret_cast (data ()), size ()); + std::shared_ptr result (nano::deserialize_block (stream)); + return result; +} + +template +nano::store::db_val::operator nano::store::block_w_sideband () const +{ + nano::bufferstream stream (reinterpret_cast (data ()), size ()); + nano::store::block_w_sideband block_w_sideband; + block_w_sideband.block = (nano::deserialize_block (stream)); + auto error = block_w_sideband.sideband.deserialize (stream, block_w_sideband.block->type ()); + release_assert (!error); + block_w_sideband.block->sideband_set (block_w_sideband.sideband); + return block_w_sideband; +} diff --git a/nano/store/lmdb/block.cpp b/nano/store/lmdb/block.cpp index ff6113f0..38e695ba 100644 --- a/nano/store/lmdb/block.cpp +++ b/nano/store/lmdb/block.cpp @@ -1,4 +1,5 @@ #include +#include #include #include diff --git a/nano/store/lmdb/lmdb_env.cpp b/nano/store/lmdb/lmdb_env.cpp index e66511da..cd1897c8 100644 --- a/nano/store/lmdb/lmdb_env.cpp +++ b/nano/store/lmdb/lmdb_env.cpp @@ -1,6 +1,8 @@ #include #include +#include + nano::store::lmdb::env::env (bool & error_a, std::filesystem::path const & path_a, nano::store::lmdb::env::options options_a) { init (error_a, path_a, options_a); diff --git a/nano/store/rocksdb/block.cpp b/nano/store/rocksdb/block.cpp index 2fe5365e..a910e0cc 100644 --- a/nano/store/rocksdb/block.cpp +++ b/nano/store/rocksdb/block.cpp @@ -1,4 +1,5 @@ #include +#include #include #include diff --git a/nano/store/rocksdb/rocksdb.cpp b/nano/store/rocksdb/rocksdb.cpp index 09997258..43b82f2b 100644 --- a/nano/store/rocksdb/rocksdb.cpp +++ b/nano/store/rocksdb/rocksdb.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/store/versioning.hpp b/nano/store/versioning.hpp index 01605353..b165eef7 100644 --- a/nano/store/versioning.hpp +++ b/nano/store/versioning.hpp @@ -1,6 +1,5 @@ #pragma once -#include #include struct MDB_val; diff --git a/nano/test_common/chains.cpp b/nano/test_common/chains.cpp index e7a745a3..9bc2fa99 100644 --- a/nano/test_common/chains.cpp +++ b/nano/test_common/chains.cpp @@ -1,3 +1,4 @@ +#include #include using namespace std::chrono_literals; diff --git a/nano/test_common/chains.hpp b/nano/test_common/chains.hpp index 2004159c..f8fd4229 100644 --- a/nano/test_common/chains.hpp +++ b/nano/test_common/chains.hpp @@ -8,6 +8,11 @@ #include #include +namespace nano +{ +using block_list_t = std::vector>; +} + /* * Helper functions to deal with common chain setup scenarios */ diff --git a/nano/test_common/ledger.cpp b/nano/test_common/ledger.cpp index 063000f3..a4c91533 100644 --- a/nano/test_common/ledger.cpp +++ b/nano/test_common/ledger.cpp @@ -1,3 +1,4 @@ +#include #include #include #include diff --git a/nano/test_common/system.cpp b/nano/test_common/system.cpp index 3ba0ce00..efbd13dd 100644 --- a/nano/test_common/system.cpp +++ b/nano/test_common/system.cpp @@ -1,4 +1,5 @@ #include +#include #include #include #include diff --git a/nano/test_common/testutil.cpp b/nano/test_common/testutil.cpp index fcdd79e6..e7eab6a2 100644 --- a/nano/test_common/testutil.cpp +++ b/nano/test_common/testutil.cpp @@ -1,4 +1,5 @@ #include +#include #include #include #include