From 27cd446cf380bdc74deefa15c5160071281ae487 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Wed, 2 Jan 2019 18:46:28 +0100 Subject: [PATCH] Block method refactor (#1535) * Using default 0-returning functions on the base class instead of overriding multiple times with the same functionality. * Adding account function to block class that returns the account for blocks that contain this information. --- nano/lib/blocks.cpp | 75 ++++++++++++++++++--------------------------- nano/lib/blocks.hpp | 18 ++++------- nano/node/node.cpp | 2 +- 3 files changed, 37 insertions(+), 58 deletions(-) diff --git a/nano/lib/blocks.cpp b/nano/lib/blocks.cpp index 0538383f..331b41a4 100644 --- a/nano/lib/blocks.cpp +++ b/nano/lib/blocks.cpp @@ -86,6 +86,26 @@ nano::block_hash nano::block::full_hash () const return result; } +nano::account nano::block::representative () const +{ + return 0; +} + +nano::block_hash nano::block::source () const +{ + return 0; +} + +nano::block_hash nano::block::link () const +{ + return 0; +} + +nano::account nano::block::account () const +{ + return 0; +} + void nano::send_block::visit (nano::block_visitor & visitor_a) const { visitor_a.send_block (*this); @@ -328,26 +348,11 @@ nano::block_hash nano::send_block::previous () const return hashables.previous; } -nano::block_hash nano::send_block::source () const -{ - return 0; -} - nano::block_hash nano::send_block::root () const { return hashables.previous; } -nano::block_hash nano::send_block::link () const -{ - return 0; -} - -nano::account nano::send_block::representative () const -{ - return 0; -} - nano::signature nano::send_block::block_signature () const { return signature; @@ -479,6 +484,11 @@ nano::block_hash nano::open_block::previous () const return result; } +nano::account nano::open_block::account () const +{ + return hashables.account; +} + void nano::open_block::serialize (nano::stream & stream_a) const { write (stream_a, hashables.source); @@ -597,11 +607,6 @@ nano::block_hash nano::open_block::root () const return hashables.account; } -nano::block_hash nano::open_block::link () const -{ - return 0; -} - nano::account nano::open_block::representative () const { return hashables.representative; @@ -828,21 +833,11 @@ bool nano::change_block::valid_predecessor (nano::block const & block_a) const return result; } -nano::block_hash nano::change_block::source () const -{ - return 0; -} - nano::block_hash nano::change_block::root () const { return hashables.previous; } -nano::block_hash nano::change_block::link () const -{ - return 0; -} - nano::account nano::change_block::representative () const { return hashables.representative; @@ -1000,6 +995,11 @@ nano::block_hash nano::state_block::previous () const return hashables.previous; } +nano::account nano::state_block::account () const +{ + return hashables.account; +} + void nano::state_block::serialize (nano::stream & stream_a) const { write (stream_a, hashables.account); @@ -1132,11 +1132,6 @@ bool nano::state_block::valid_predecessor (nano::block const & block_a) const return true; } -nano::block_hash nano::state_block::source () const -{ - return 0; -} - nano::block_hash nano::state_block::root () const { return !hashables.previous.is_zero () ? hashables.previous : hashables.account; @@ -1485,16 +1480,6 @@ nano::block_hash nano::receive_block::root () const return hashables.previous; } -nano::block_hash nano::receive_block::link () const -{ - return 0; -} - -nano::account nano::receive_block::representative () const -{ - return 0; -} - nano::signature nano::receive_block::block_signature () const { return signature; diff --git a/nano/lib/blocks.hpp b/nano/lib/blocks.hpp index 424ea0e2..fba097e4 100644 --- a/nano/lib/blocks.hpp +++ b/nano/lib/blocks.hpp @@ -51,15 +51,16 @@ public: virtual void hash (blake2b_state &) const = 0; virtual uint64_t block_work () const = 0; virtual void block_work_set (uint64_t) = 0; + virtual nano::account account () const; // Previous block in account's chain, zero for open block virtual nano::block_hash previous () const = 0; // Source block for open/receive blocks, zero otherwise. - virtual nano::block_hash source () const = 0; + virtual nano::block_hash source () const; // Previous block or account number for open blocks virtual nano::block_hash root () const = 0; // Link field for state blocks, zero otherwise. - virtual nano::block_hash link () const = 0; - virtual nano::account representative () const = 0; + virtual nano::block_hash link () const; + virtual nano::account representative () const; virtual void serialize (nano::stream &) const = 0; virtual void serialize_json (std::string &) const = 0; virtual void visit (nano::block_visitor &) const = 0; @@ -96,10 +97,7 @@ public: uint64_t block_work () const override; void block_work_set (uint64_t) override; nano::block_hash previous () const override; - nano::block_hash source () const override; nano::block_hash root () const override; - nano::block_hash link () const override; - nano::account representative () const override; void serialize (nano::stream &) const override; void serialize_json (std::string &) const override; bool deserialize (nano::stream &); @@ -143,8 +141,6 @@ public: nano::block_hash previous () const override; nano::block_hash source () const override; nano::block_hash root () const override; - nano::block_hash link () const override; - nano::account representative () const override; void serialize (nano::stream &) const override; void serialize_json (std::string &) const override; bool deserialize (nano::stream &); @@ -188,9 +184,9 @@ public: uint64_t block_work () const override; void block_work_set (uint64_t) override; nano::block_hash previous () const override; + nano::account account () const override; nano::block_hash source () const override; nano::block_hash root () const override; - nano::block_hash link () const override; nano::account representative () const override; void serialize (nano::stream &) const override; void serialize_json (std::string &) const override; @@ -233,9 +229,7 @@ public: uint64_t block_work () const override; void block_work_set (uint64_t) override; nano::block_hash previous () const override; - nano::block_hash source () const override; nano::block_hash root () const override; - nano::block_hash link () const override; nano::account representative () const override; void serialize (nano::stream &) const override; void serialize_json (std::string &) const override; @@ -291,7 +285,7 @@ public: uint64_t block_work () const override; void block_work_set (uint64_t) override; nano::block_hash previous () const override; - nano::block_hash source () const override; + nano::account account () const override; nano::block_hash root () const override; nano::block_hash link () const override; nano::account representative () const override; diff --git a/nano/node/node.cpp b/nano/node/node.cpp index 448882eb..37ce425c 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -2510,7 +2510,7 @@ public: auto callback_l (callback); std::weak_ptr node_w (node); auto next_backoff (std::min (backoff * 2, (unsigned int)60 * 5)); - node->alarm.add (now + std::chrono::seconds (backoff), [node_w, root_l, callback_l, next_backoff, difficulty = difficulty] { + node->alarm.add (now + std::chrono::seconds (backoff), [ node_w, root_l, callback_l, next_backoff, difficulty = difficulty ] { if (auto node_l = node_w.lock ()) { auto work_generation (std::make_shared (next_backoff, node_l, root_l, callback_l, difficulty));