This commit is contained in:
Piotr Wójcik 2024-06-25 13:35:50 +02:00
commit e519bbb740
17 changed files with 56 additions and 34 deletions

View file

@ -3,6 +3,7 @@
#include <nano/node/active_elections.hpp>
#include <nano/node/confirming_set.hpp>
#include <nano/node/election.hpp>
#include <nano/node/online_reps.hpp>
#include <nano/node/scheduler/component.hpp>
#include <nano/node/scheduler/manual.hpp>
#include <nano/node/scheduler/priority.hpp>

View file

@ -1,6 +1,7 @@
#include <nano/lib/blocks.hpp>
#include <nano/node/active_elections.hpp>
#include <nano/node/election.hpp>
#include <nano/node/online_reps.hpp>
#include <nano/node/scheduler/component.hpp>
#include <nano/node/scheduler/priority.hpp>
#include <nano/node/vote_router.hpp>

View file

@ -3,6 +3,7 @@
#include <nano/node/active_elections.hpp>
#include <nano/node/election.hpp>
#include <nano/node/make_store.hpp>
#include <nano/node/online_reps.hpp>
#include <nano/secure/ledger.hpp>
#include <nano/secure/ledger_set_any.hpp>
#include <nano/secure/ledger_set_confirmed.hpp>

View file

@ -8,6 +8,7 @@
#include <nano/node/inactive_node.hpp>
#include <nano/node/local_vote_history.hpp>
#include <nano/node/make_store.hpp>
#include <nano/node/online_reps.hpp>
#include <nano/node/portmapping.hpp>
#include <nano/node/scheduler/component.hpp>
#include <nano/node/scheduler/manual.hpp>

View file

@ -3,6 +3,7 @@
#include <nano/lib/jsonconfig.hpp>
#include <nano/lib/work_version.hpp>
#include <nano/node/active_elections.hpp>
#include <nano/node/online_reps.hpp>
#include <nano/node/telemetry.hpp>
#include <nano/node/transport/fake.hpp>
#include <nano/node/vote_router.hpp>

View file

@ -15,6 +15,7 @@
#include <nano/node/ipc/ipc_server.hpp>
#include <nano/node/json_handler.hpp>
#include <nano/node/node.hpp>
#include <nano/node/online_reps.hpp>
#include <nano/node/transport/inproc.hpp>
#include <nano/secure/ledger.hpp>
#include <nano/secure/ledger_set_any.hpp>

View file

@ -8,6 +8,7 @@
#include <nano/node/confirming_set.hpp>
#include <nano/node/election.hpp>
#include <nano/node/node.hpp>
#include <nano/node/online_reps.hpp>
#include <nano/node/repcrawler.hpp>
#include <nano/node/scheduler/component.hpp>
#include <nano/node/scheduler/priority.hpp>
@ -405,6 +406,7 @@ nano::election_insertion_result nano::active_elections::insert (std::shared_ptr<
{
result.inserted = true;
auto observe_rep_cb = [&node = node] (auto const & rep_a) {
// TODO: Is this neccessary? Move this outside of the election class
// Representative is defined as online if replying to live votes or rep_crawler queries
node.online_reps.observe (rep_a);
};

View file

@ -6,6 +6,7 @@
#include <nano/node/local_vote_history.hpp>
#include <nano/node/network.hpp>
#include <nano/node/node.hpp>
#include <nano/node/online_reps.hpp>
#include <nano/node/vote_generator.hpp>
#include <nano/node/vote_router.hpp>
#include <nano/secure/ledger.hpp>

View file

@ -14,6 +14,7 @@
#include <nano/node/json_handler.hpp>
#include <nano/node/node.hpp>
#include <nano/node/node_rpc_config.hpp>
#include <nano/node/online_reps.hpp>
#include <nano/node/telemetry.hpp>
#include <nano/secure/ledger.hpp>
#include <nano/secure/ledger_set_any.hpp>

View file

@ -26,6 +26,7 @@
#include <nano/node/message_processor.hpp>
#include <nano/node/monitor.hpp>
#include <nano/node/node.hpp>
#include <nano/node/online_reps.hpp>
#include <nano/node/peer_history.hpp>
#include <nano/node/portmapping.hpp>
#include <nano/node/request_aggregator.hpp>
@ -138,7 +139,8 @@ nano::node::node (std::shared_ptr<boost::asio::io_context> io_ctx_a, std::filesy
rep_crawler (config.rep_crawler, *this),
rep_tiers{ ledger, network_params, online_reps, stats, logger },
warmed_up (0),
online_reps (ledger, config),
online_reps_impl{ std::make_unique<nano::online_reps> (config, ledger) },
online_reps{ *online_reps_impl },
history_impl{ std::make_unique<nano::local_vote_history> (config.network_params.voting) },
history{ *history_impl },
vote_uniquer{},

View file

@ -12,6 +12,7 @@
#include <nano/node/node_observers.hpp>
#include <nano/node/nodeconfig.hpp>
#include <nano/node/online_reps.hpp>
#include <nano/node/portmapping.hpp>
#include <nano/node/process_live_dispatcher.hpp>
#include <nano/node/rep_tiers.hpp>
#include <nano/node/repcrawler.hpp>
@ -39,6 +40,7 @@ class message_processor;
class monitor;
class node;
class telemetry;
class online_reps;
class vote_processor;
class vote_cache_processor;
class vote_router;
@ -176,7 +178,8 @@ public:
nano::bucketing & bucketing;
std::unique_ptr<nano::active_elections> active_impl;
nano::active_elections & active;
nano::online_reps online_reps;
std::unique_ptr<nano::online_reps> online_reps_impl;
nano::online_reps & online_reps;
nano::rep_crawler rep_crawler;
nano::rep_tiers rep_tiers;
unsigned warmed_up;

View file

@ -4,9 +4,9 @@
#include <nano/store/component.hpp>
#include <nano/store/online_weight.hpp>
nano::online_reps::online_reps (nano::ledger & ledger_a, nano::node_config const & config_a) :
ledger{ ledger_a },
config{ config_a }
nano::online_reps::online_reps (nano::node_config const & config_a, nano::ledger & ledger_a) :
config{ config_a },
ledger{ ledger_a }
{
if (!ledger.store.init_error ())
{

View file

@ -3,6 +3,7 @@
#include <nano/lib/numbers.hpp>
#include <nano/lib/numbers_templ.hpp>
#include <nano/lib/utility.hpp>
#include <nano/node/fwd.hpp>
#include <nano/secure/common.hpp>
#include <boost/multi_index/hashed_index.hpp>
@ -13,24 +14,21 @@
#include <memory>
#include <vector>
namespace mi = boost::multi_index;
namespace nano
{
class ledger;
class node_config;
namespace store
{
class transaction;
}
/** Track online representatives and trend online weight */
class online_reps final
{
public:
online_reps (nano::ledger & ledger_a, nano::node_config const & config_a);
online_reps (nano::node_config const &, nano::ledger &);
/** Add voting account \p rep_account to the set of online representatives */
void observe (nano::account const & rep_account);
/** Called periodically to sample online weight */
void sample ();
/** Returns the trended online stake */
nano::uint128_t trended () const;
/** Returns the current online stake */
@ -45,34 +43,39 @@ public:
public:
static unsigned constexpr online_weight_quorum = 67;
private: // Dependencies
nano::node_config const & config;
nano::ledger & ledger;
private:
class rep_info
nano::uint128_t calculate_trend (nano::store::transaction &) const;
nano::uint128_t calculate_online () const;
private:
struct rep_info
{
public:
std::chrono::steady_clock::time_point time;
nano::account account;
};
class tag_time
{
};
class tag_account
{
};
nano::uint128_t calculate_trend (store::transaction &) const;
nano::uint128_t calculate_online () const;
mutable nano::mutex mutex;
nano::ledger & ledger;
nano::node_config const & config;
boost::multi_index_container<rep_info,
boost::multi_index::indexed_by<
boost::multi_index::ordered_non_unique<boost::multi_index::tag<tag_time>,
boost::multi_index::member<rep_info, std::chrono::steady_clock::time_point, &rep_info::time>>,
boost::multi_index::hashed_unique<boost::multi_index::tag<tag_account>,
boost::multi_index::member<rep_info, nano::account, &rep_info::account>>>>
reps;
// clang-format off
class tag_time {};
class tag_account {};
using ordered_reps = boost::multi_index_container<rep_info,
mi::indexed_by<
mi::ordered_non_unique<mi::tag<tag_time>,
mi::member<rep_info, std::chrono::steady_clock::time_point, &rep_info::time>>,
mi::hashed_unique<mi::tag<tag_account>,
mi::member<rep_info, nano::account, &rep_info::account>>
>>;
// clang-format off
ordered_reps reps;
nano::uint128_t trended_m;
nano::uint128_t online_m;
nano::uint128_t minimum;
mutable nano::mutex mutex;
friend class election_quorum_minimum_update_weight_before_quorum_checks_Test;
};

View file

@ -1,5 +1,6 @@
#include <nano/node/active_elections.hpp>
#include <nano/node/node.hpp>
#include <nano/node/online_reps.hpp>
#include <nano/node/repcrawler.hpp>
#include <nano/secure/ledger.hpp>
#include <nano/secure/vote.hpp>

View file

@ -3,6 +3,7 @@
#include <nano/node/active_elections.hpp>
#include <nano/node/election_behavior.hpp>
#include <nano/node/node.hpp>
#include <nano/node/online_reps.hpp>
#include <nano/node/scheduler/hinted.hpp>
#include <nano/secure/ledger.hpp>
#include <nano/secure/ledger_set_any.hpp>

View file

@ -13,6 +13,7 @@
#include <nano/node/ipc/ipc_server.hpp>
#include <nano/node/json_handler.hpp>
#include <nano/node/node_rpc_config.hpp>
#include <nano/node/online_reps.hpp>
#include <nano/node/scheduler/component.hpp>
#include <nano/node/scheduler/manual.hpp>
#include <nano/node/scheduler/priority.hpp>

View file

@ -7,6 +7,7 @@
#include <nano/node/confirming_set.hpp>
#include <nano/node/election.hpp>
#include <nano/node/make_store.hpp>
#include <nano/node/online_reps.hpp>
#include <nano/node/scheduler/component.hpp>
#include <nano/node/scheduler/manual.hpp>
#include <nano/node/scheduler/priority.hpp>