From 15f9a461d6f7a0129340bfa40853da2aaefe141e Mon Sep 17 00:00:00 2001 From: theohax Date: Wed, 12 May 2021 11:45:59 +0300 Subject: [PATCH 001/346] Extend 'wallet_info' RPC command with two new keys: accounts_block_count and accounts_cemented_block_count Signed-off-by: theohax --- nano/node/json_handler.cpp | 28 +++++++++++++++++++++++++--- nano/rpc_test/rpc.cpp | 4 ++++ 2 files changed, 29 insertions(+), 3 deletions(-) diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index 1d5f75277e..02ccbc08c0 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -4208,15 +4208,32 @@ void nano::json_handler::wallet_info () nano::uint128_t balance (0); nano::uint128_t pending (0); uint64_t count (0); + uint64_t block_count (0); + uint64_t cemented_block_count (0); uint64_t deterministic_count (0); uint64_t adhoc_count (0); auto transaction (node.wallets.tx_begin_read ()); auto block_transaction (node.store.tx_begin_read ()); + for (auto i (wallet->store.begin (transaction)), n (wallet->store.end ()); i != n; ++i) { nano::account const & account (i->first); - balance = balance + node.ledger.account_balance (block_transaction, account); - pending = pending + node.ledger.account_pending (block_transaction, account); + + nano::account_info account_info{}; + if (!node.store.account_get (block_transaction, account, account_info)) + { + block_count += account_info.block_count; + } + + nano::confirmation_height_info confirmation_info{}; + if (!node.store.confirmation_height_get (block_transaction, account, confirmation_info)) + { + cemented_block_count += confirmation_info.height; + } + + balance += node.ledger.account_balance (block_transaction, account); + pending += node.ledger.account_pending (block_transaction, account); + nano::key_type key_type (wallet->store.key_type (i->second)); if (key_type == nano::key_type::deterministic) { @@ -4226,16 +4243,21 @@ void nano::json_handler::wallet_info () { adhoc_count++; } - count++; + + ++count; } + uint32_t deterministic_index (wallet->store.deterministic_index_get (transaction)); response_l.put ("balance", balance.convert_to ()); response_l.put ("pending", pending.convert_to ()); response_l.put ("accounts_count", std::to_string (count)); + response_l.put ("accounts_block_count", std::to_string (block_count)); + response_l.put ("accounts_cemented_block_count", std::to_string (cemented_block_count)); response_l.put ("deterministic_count", std::to_string (deterministic_count)); response_l.put ("adhoc_count", std::to_string (adhoc_count)); response_l.put ("deterministic_index", std::to_string (deterministic_index)); } + response_errors (); } diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index 32a21e3860..3029fd51f6 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -4128,6 +4128,10 @@ TEST (rpc, wallet_info) ASSERT_EQ ("1", pending_text); std::string count_text (response.json.get ("accounts_count")); ASSERT_EQ ("3", count_text); + std::string block_count_text (response.json.get ("accounts_block_count")); + ASSERT_EQ ("2", block_count_text); + std::string cemented_block_count_text (response.json.get ("accounts_cemented_block_count")); + ASSERT_EQ ("1", cemented_block_count_text); std::string adhoc_count (response.json.get ("adhoc_count")); ASSERT_EQ ("2", adhoc_count); std::string deterministic_count (response.json.get ("deterministic_count")); From 1d7be8d2ab9a1afa567406c50a2f8d55f9c53be2 Mon Sep 17 00:00:00 2001 From: theohax Date: Wed, 12 May 2021 13:10:17 +0300 Subject: [PATCH 002/346] Improvements to the 'wallet_info' RPC command test Signed-off-by: theohax --- nano/rpc_test/rpc.cpp | 95 +++++++++++++++++++++++++------------------ 1 file changed, 56 insertions(+), 39 deletions(-) diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index 3029fd51f6..8deac3b92c 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -4096,48 +4096,65 @@ TEST (rpc, blocks) TEST (rpc, wallet_info) { - nano::system system; - auto node = add_ipc_enabled_node (system); + nano::system system; + nano::node_config node_config (nano::get_available_port (), system.logging); + node_config.enable_voting = true; + auto node = add_ipc_enabled_node (system, node_config); system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); nano::keypair key; system.wallet (0)->insert_adhoc (key.prv); - auto send (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, 1)); - nano::account account (system.wallet (0)->deterministic_insert ()); - { - auto transaction (node->wallets.tx_begin_write ()); - system.wallet (0)->store.erase (transaction, account); - } - account = system.wallet (0)->deterministic_insert (); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); - boost::property_tree::ptree request; - request.put ("action", "wallet_info"); - request.put ("wallet", node->wallets.items.begin ()->first.to_string ()); - test_response response (request, rpc.config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - std::string balance_text (response.json.get ("balance")); - ASSERT_EQ ("340282366920938463463374607431768211454", balance_text); - std::string pending_text (response.json.get ("pending")); - ASSERT_EQ ("1", pending_text); - std::string count_text (response.json.get ("accounts_count")); - ASSERT_EQ ("3", count_text); - std::string block_count_text (response.json.get ("accounts_block_count")); - ASSERT_EQ ("2", block_count_text); - std::string cemented_block_count_text (response.json.get ("accounts_cemented_block_count")); - ASSERT_EQ ("1", cemented_block_count_text); - std::string adhoc_count (response.json.get ("adhoc_count")); - ASSERT_EQ ("2", adhoc_count); - std::string deterministic_count (response.json.get ("deterministic_count")); - ASSERT_EQ ("1", deterministic_count); - std::string index_text (response.json.get ("deterministic_index")); - ASSERT_EQ ("2", index_text); + + // at first, 1 block and 1 confirmed -- the genesis + ASSERT_EQ (1, node->ledger.cache.block_count); + ASSERT_EQ (1, node->ledger.cache.cemented_count); + + auto send (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, nano::Gxrb_ratio)); + // after the send, expect 2 blocks immediately, then 2 confirmed in a timely manner, + // and finally 3 blocks and 3 confirmed after the wallet generates the receive block for this send + ASSERT_EQ (2, node->ledger.cache.block_count); + ASSERT_TIMELY (5s, 2 == node->ledger.cache.cemented_count); + ASSERT_TIMELY (5s, 3 == node->ledger.cache.block_count && 3 == node->ledger.cache.cemented_count); + + // do another send to be able to expect some "pending" down below + auto send2 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, 1)); + ASSERT_EQ (4, node->ledger.cache.block_count); + + nano::account account (system.wallet (0)->deterministic_insert ()); + { + auto transaction (node->wallets.tx_begin_write ()); + system.wallet (0)->store.erase (transaction, account); + } + account = system.wallet (0)->deterministic_insert (); + scoped_io_thread_name_change scoped_thread_name_io; + nano::node_rpc_config node_rpc_config; + nano::ipc::ipc_server ipc_server (*node, node_rpc_config); + nano::rpc_config rpc_config (nano::get_available_port (), true); + rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; + nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); + nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); + rpc.start (); + boost::property_tree::ptree request; + request.put ("action", "wallet_info"); + request.put ("wallet", node->wallets.items.begin ()->first.to_string ()); + test_response response (request, rpc.config.port, system.io_ctx); + ASSERT_TIMELY (5s, response.status != 0); + ASSERT_EQ (200, response.status); + std::string balance_text (response.json.get ("balance")); + ASSERT_EQ ("340282366920938463463374607431768211454", balance_text); + std::string pending_text (response.json.get ("pending")); + ASSERT_EQ ("1", pending_text); + std::string count_text (response.json.get ("accounts_count")); + ASSERT_EQ ("3", count_text); + std::string block_count_text (response.json.get ("accounts_block_count")); + ASSERT_EQ ("4", block_count_text); + std::string cemented_block_count_text (response.json.get ("accounts_cemented_block_count")); + ASSERT_EQ ("3", cemented_block_count_text); + std::string adhoc_count (response.json.get ("adhoc_count")); + ASSERT_EQ ("2", adhoc_count); + std::string deterministic_count (response.json.get ("deterministic_count")); + ASSERT_EQ ("1", deterministic_count); + std::string index_text (response.json.get ("deterministic_index")); + ASSERT_EQ ("2", index_text); } TEST (rpc, wallet_balances) From 0e942be4c26ce1d0d53b2398250de9688655076b Mon Sep 17 00:00:00 2001 From: theohax Date: Wed, 12 May 2021 13:15:03 +0300 Subject: [PATCH 003/346] Fix formatting Signed-off-by: theohax --- nano/rpc_test/rpc.cpp | 98 +++++++++++++++++++++---------------------- 1 file changed, 49 insertions(+), 49 deletions(-) diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index 8deac3b92c..8215e4a667 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -4096,65 +4096,65 @@ TEST (rpc, blocks) TEST (rpc, wallet_info) { - nano::system system; - nano::node_config node_config (nano::get_available_port (), system.logging); - node_config.enable_voting = true; + nano::system system; + nano::node_config node_config (nano::get_available_port (), system.logging); + node_config.enable_voting = true; auto node = add_ipc_enabled_node (system, node_config); system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); nano::keypair key; system.wallet (0)->insert_adhoc (key.prv); // at first, 1 block and 1 confirmed -- the genesis - ASSERT_EQ (1, node->ledger.cache.block_count); - ASSERT_EQ (1, node->ledger.cache.cemented_count); + ASSERT_EQ (1, node->ledger.cache.block_count); + ASSERT_EQ (1, node->ledger.cache.cemented_count); auto send (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, nano::Gxrb_ratio)); // after the send, expect 2 blocks immediately, then 2 confirmed in a timely manner, // and finally 3 blocks and 3 confirmed after the wallet generates the receive block for this send - ASSERT_EQ (2, node->ledger.cache.block_count); - ASSERT_TIMELY (5s, 2 == node->ledger.cache.cemented_count); - ASSERT_TIMELY (5s, 3 == node->ledger.cache.block_count && 3 == node->ledger.cache.cemented_count); - - // do another send to be able to expect some "pending" down below - auto send2 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, 1)); - ASSERT_EQ (4, node->ledger.cache.block_count); - - nano::account account (system.wallet (0)->deterministic_insert ()); - { - auto transaction (node->wallets.tx_begin_write ()); - system.wallet (0)->store.erase (transaction, account); - } - account = system.wallet (0)->deterministic_insert (); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); - boost::property_tree::ptree request; - request.put ("action", "wallet_info"); - request.put ("wallet", node->wallets.items.begin ()->first.to_string ()); - test_response response (request, rpc.config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - std::string balance_text (response.json.get ("balance")); - ASSERT_EQ ("340282366920938463463374607431768211454", balance_text); - std::string pending_text (response.json.get ("pending")); - ASSERT_EQ ("1", pending_text); - std::string count_text (response.json.get ("accounts_count")); - ASSERT_EQ ("3", count_text); - std::string block_count_text (response.json.get ("accounts_block_count")); - ASSERT_EQ ("4", block_count_text); - std::string cemented_block_count_text (response.json.get ("accounts_cemented_block_count")); - ASSERT_EQ ("3", cemented_block_count_text); - std::string adhoc_count (response.json.get ("adhoc_count")); - ASSERT_EQ ("2", adhoc_count); - std::string deterministic_count (response.json.get ("deterministic_count")); - ASSERT_EQ ("1", deterministic_count); - std::string index_text (response.json.get ("deterministic_index")); - ASSERT_EQ ("2", index_text); + ASSERT_EQ (2, node->ledger.cache.block_count); + ASSERT_TIMELY (5s, 2 == node->ledger.cache.cemented_count); + ASSERT_TIMELY (5s, 3 == node->ledger.cache.block_count && 3 == node->ledger.cache.cemented_count); + + // do another send to be able to expect some "pending" down below + auto send2 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, 1)); + ASSERT_EQ (4, node->ledger.cache.block_count); + + nano::account account (system.wallet (0)->deterministic_insert ()); + { + auto transaction (node->wallets.tx_begin_write ()); + system.wallet (0)->store.erase (transaction, account); + } + account = system.wallet (0)->deterministic_insert (); + scoped_io_thread_name_change scoped_thread_name_io; + nano::node_rpc_config node_rpc_config; + nano::ipc::ipc_server ipc_server (*node, node_rpc_config); + nano::rpc_config rpc_config (nano::get_available_port (), true); + rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; + nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); + nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); + rpc.start (); + boost::property_tree::ptree request; + request.put ("action", "wallet_info"); + request.put ("wallet", node->wallets.items.begin ()->first.to_string ()); + test_response response (request, rpc.config.port, system.io_ctx); + ASSERT_TIMELY (5s, response.status != 0); + ASSERT_EQ (200, response.status); + std::string balance_text (response.json.get ("balance")); + ASSERT_EQ ("340282366920938463463374607431768211454", balance_text); + std::string pending_text (response.json.get ("pending")); + ASSERT_EQ ("1", pending_text); + std::string count_text (response.json.get ("accounts_count")); + ASSERT_EQ ("3", count_text); + std::string block_count_text (response.json.get ("accounts_block_count")); + ASSERT_EQ ("4", block_count_text); + std::string cemented_block_count_text (response.json.get ("accounts_cemented_block_count")); + ASSERT_EQ ("3", cemented_block_count_text); + std::string adhoc_count (response.json.get ("adhoc_count")); + ASSERT_EQ ("2", adhoc_count); + std::string deterministic_count (response.json.get ("deterministic_count")); + ASSERT_EQ ("1", deterministic_count); + std::string index_text (response.json.get ("deterministic_index")); + ASSERT_EQ ("2", index_text); } TEST (rpc, wallet_balances) From 024c1dfe8b03b12cd5065b675ed2ebe327baa25d Mon Sep 17 00:00:00 2001 From: Russel Waters <6511720+argakiig@users.noreply.github.com> Date: Wed, 12 May 2021 10:57:10 -0700 Subject: [PATCH 004/346] Update deploy-docker.sh this fixes a case where latest was re-added to the tags for pushing after image artifact creation --- ci/actions/linux/deploy-docker.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/actions/linux/deploy-docker.sh b/ci/actions/linux/deploy-docker.sh index 1dbc97fa0e..cf283e9b3d 100755 --- a/ci/actions/linux/deploy-docker.sh +++ b/ci/actions/linux/deploy-docker.sh @@ -51,7 +51,7 @@ if [ -n "$DOCKER_PASSWORD" ]; then echo "Deployed nano-env" exit 0 else - tags=$(docker images --format '{{.Repository}}:{{.Tag }}' | grep nanocurrency | grep -vE "env|ghcr.io|none") + tags=$(docker images --format '{{.Repository}}:{{.Tag }}' | grep nanocurrency | grep -vE "env|ghcr.io|none|latest") for a in $tags; do "$scripts"/custom-timeout.sh 30 docker push "$a" done From 31c7a685bc482cd6bc3db801691d941d0617dbeb Mon Sep 17 00:00:00 2001 From: Sergey Kroshnin Date: Thu, 13 May 2021 18:54:13 +0300 Subject: [PATCH 005/346] Improve confirmation_height.gap_live core test (#3279) Prevent possible auto-received blocks conflicts with manually created blocks --- nano/core_test/confirmation_height.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/nano/core_test/confirmation_height.cpp b/nano/core_test/confirmation_height.cpp index 671804b1bd..9ec4d966e7 100644 --- a/nano/core_test/confirmation_height.cpp +++ b/nano/core_test/confirmation_height.cpp @@ -310,11 +310,11 @@ TEST (confirmation_height, gap_live) system.wallet (1)->insert_adhoc (destination.prv); nano::genesis genesis; - auto send1 (std::make_shared (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); + auto send1 (std::make_shared (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - 1, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); node->work_generate_blocking (*send1); - auto send2 (std::make_shared (nano::genesis_account, send1->hash (), nano::genesis_account, nano::genesis_amount - 2 * nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); + auto send2 (std::make_shared (nano::genesis_account, send1->hash (), nano::genesis_account, nano::genesis_amount - 2, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); node->work_generate_blocking (*send2); - auto send3 (std::make_shared (nano::genesis_account, send2->hash (), nano::genesis_account, nano::genesis_amount - 3 * nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); + auto send3 (std::make_shared (nano::genesis_account, send2->hash (), nano::genesis_account, nano::genesis_amount - 3, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); node->work_generate_blocking (*send3); auto open1 (std::make_shared (send1->hash (), destination.pub, destination.pub, destination.prv, destination.pub, 0)); From 3135095da26738ba1a08cf2fdba02bdce3fe7abe Mon Sep 17 00:00:00 2001 From: Sergey Kroshnin Date: Thu, 13 May 2021 20:14:32 +0300 Subject: [PATCH 006/346] Prevent not processed blocks addition to confirmed elections list (#3281) * Core test node.rollback_gap_source * Move adding recently confirmed election to node.process_confirmed () function --- nano/core_test/active_transactions.cpp | 2 +- nano/core_test/node.cpp | 93 ++++++++++++++++++++++++++ nano/node/election.cpp | 1 - nano/node/node.cpp | 1 + 4 files changed, 95 insertions(+), 2 deletions(-) diff --git a/nano/core_test/active_transactions.cpp b/nano/core_test/active_transactions.cpp index e935997679..bc0bce211c 100644 --- a/nano/core_test/active_transactions.cpp +++ b/nano/core_test/active_transactions.cpp @@ -308,7 +308,7 @@ TEST (active_transactions, inactive_votes_cache_existing_vote) // Insert vote auto vote1 (std::make_shared (key.pub, key.prv, 1, std::vector (1, send->hash ()))); node.vote_processor.vote (vote1, std::make_shared (node)); - ASSERT_TIMELY (5s, election->votes ().size () == 2) + ASSERT_TIMELY (5s, election->votes ().size () == 2); ASSERT_EQ (1, node.stats.count (nano::stat::type::election, nano::stat::detail::vote_new)); auto last_vote1 (election->votes ()[key.pub]); ASSERT_EQ (send->hash (), last_vote1.hash); diff --git a/nano/core_test/node.cpp b/nano/core_test/node.cpp index 0c4244fe8d..e1b0e9d714 100644 --- a/nano/core_test/node.cpp +++ b/nano/core_test/node.cpp @@ -4055,6 +4055,99 @@ TEST (node, rollback_vote_self) ASSERT_EQ (fork->hash (), vote->second.hash); } +TEST (node, rollback_gap_source) +{ + nano::system system; + nano::node_config node_config (nano::get_available_port (), system.logging); + node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; + auto & node = *system.add_node (node_config); + nano::state_block_builder builder; + nano::keypair key; + auto send1 = builder.make_block () + .account (nano::dev_genesis_key.pub) + .previous (nano::genesis_hash) + .representative (nano::dev_genesis_key.pub) + .link (key.pub) + .balance (nano::genesis_amount - 1) + .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .work (*system.work.generate (nano::genesis_hash)) + .build_shared (); + auto fork = builder.make_block () + .account (key.pub) + .previous (0) + .representative (key.pub) + .link (send1->hash ()) + .balance (1) + .sign (key.prv, key.pub) + .work (*system.work.generate (key.pub)) + .build_shared (); + auto send2 = builder.make_block () + .from (*send1) + .previous (send1->hash ()) + .balance (send1->balance ().number () - 1) + .link (key.pub) + .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .work (*system.work.generate (send1->hash ())) + .build_shared (); + auto open = builder.make_block () + .from (*fork) + .link (send2->hash ()) + .sign (key.prv, key.pub) + .build_shared (); + ASSERT_EQ (nano::process_result::progress, node.process (*send1).code); + ASSERT_EQ (nano::process_result::progress, node.process (*fork).code); + // Node has fork & doesn't have source for correct block open (send2) + ASSERT_EQ (nullptr, node.block (send2->hash ())); + // Start election for fork + nano::blocks_confirm (node, { fork }); + { + auto election = node.active.election (fork->qualified_root ()); + ASSERT_NE (nullptr, election); + // Process conflicting block for election + node.process_active (open); + node.block_processor.flush (); + ASSERT_EQ (2, election->blocks ().size ()); + ASSERT_EQ (1, election->votes ().size ()); + // Confirm open + auto vote1 (std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, std::numeric_limits::max (), std::vector (1, open->hash ()))); + node.vote_processor.vote (vote1, std::make_shared (node)); + ASSERT_TIMELY (5s, election->votes ().size () == 2); + ASSERT_TIMELY (3s, election->confirmed ()); + } + // Wait for the rollback (attempt to replace fork with open) + ASSERT_TIMELY (5s, node.stats.count (nano::stat::type::rollback, nano::stat::detail::open) == 1); + ASSERT_TIMELY (5s, node.active.empty ()); + // But replacing is not possible (missing source block - send2) + node.block_processor.flush (); + ASSERT_EQ (nullptr, node.block (open->hash ())); + ASSERT_EQ (nullptr, node.block (fork->hash ())); + // Fork can be returned by some other forked node or attacker + node.process_active (fork); + node.block_processor.flush (); + ASSERT_NE (nullptr, node.block (fork->hash ())); + // With send2 block in ledger election can start again to remove fork block + ASSERT_EQ (nano::process_result::progress, node.process (*send2).code); + nano::blocks_confirm (node, { fork }); + { + auto election = node.active.election (fork->qualified_root ()); + ASSERT_NE (nullptr, election); + // Process conflicting block for election + node.process_active (open); + node.block_processor.flush (); + ASSERT_EQ (2, election->blocks ().size ()); + // Confirm open (again) + auto vote1 (std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, std::numeric_limits::max (), std::vector (1, open->hash ()))); + node.vote_processor.vote (vote1, std::make_shared (node)); + ASSERT_TIMELY (5s, election->votes ().size () == 2); + } + // Wait for new rollback + ASSERT_TIMELY (5s, node.stats.count (nano::stat::type::rollback, nano::stat::detail::open) == 2); + // Now fork block should be replaced with open + node.block_processor.flush (); + ASSERT_NE (nullptr, node.block (open->hash ())); + ASSERT_EQ (nullptr, node.block (fork->hash ())); +} + // Confirm a complex dependency graph starting from the first block TEST (node, dependency_graph) { diff --git a/nano/node/election.cpp b/nano/node/election.cpp index 97cce2c220..6fa31b080f 100644 --- a/nano/node/election.cpp +++ b/nano/node/election.cpp @@ -53,7 +53,6 @@ void nano::election::confirm_once (nano::unique_lock & lock_a, nano status.type = type_a; auto const status_l = status; lock_a.unlock (); - node.active.add_recently_confirmed (status_l.winner->qualified_root (), status_l.winner->hash ()); node.process_confirmed (status_l); node.background ([node_l = node.shared (), status_l, confirmation_action_l = confirmation_action] () { if (confirmation_action_l) diff --git a/nano/node/node.cpp b/nano/node/node.cpp index d87af0f933..4662eb2abd 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -1353,6 +1353,7 @@ void nano::node::process_confirmed (nano::election_status const & status_a, uint const auto num_iters = (config.block_processor_batch_max_time / network_params.node.process_confirmed_interval) * 4; if (auto block_l = ledger.store.block_get (ledger.store.tx_begin_read (), hash)) { + active.add_recently_confirmed (block_l->qualified_root (), hash); confirmation_height_processor.add (block_l); } else if (iteration_a < num_iters) From 5de7dca2bcb6c341848925f9ad9af976fa86190e Mon Sep 17 00:00:00 2001 From: Russel Waters <6511720+argakiig@users.noreply.github.com> Date: Thu, 13 May 2021 10:20:39 -0700 Subject: [PATCH 007/346] specify ip notation for preconfigured peers (#3282) --- nano/node/nodeconfig.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nano/node/nodeconfig.cpp b/nano/node/nodeconfig.cpp index e2b2df364a..1e7273e813 100644 --- a/nano/node/nodeconfig.cpp +++ b/nano/node/nodeconfig.cpp @@ -118,7 +118,7 @@ nano::error nano::node_config::serialize_toml (nano::tomlconfig & toml) const work_peers_l->push_back (boost::str (boost::format ("%1%:%2%") % i->first % i->second)); } - auto preconfigured_peers_l (toml.create_array ("preconfigured_peers", "A list of \"address\" (hostname or ip address) entries to identify preconfigured peers.")); + auto preconfigured_peers_l (toml.create_array ("preconfigured_peers", "A list of \"address\" (hostname or ipv6 notation ip address) entries to identify preconfigured peers.")); for (auto i (preconfigured_peers.begin ()), n (preconfigured_peers.end ()); i != n; ++i) { preconfigured_peers_l->push_back (*i); From 33a974155ddf4b10fc3d2c72e4c20a8abe514aef Mon Sep 17 00:00:00 2001 From: Sergey Kroshnin Date: Thu, 13 May 2021 21:10:42 +0300 Subject: [PATCH 008/346] Simplify inactive_votes_cache_election_start test (#3283) Tests only changes split from PR https://github.com/nanocurrency/nano-node/pull/3280 * additional active_transactions.restart_dropped test small changes (election scheduler) * confirmation_height.gap_live test minimum receive config value and commentary about previous test failures * additional conflicts.add_existing test small changes (election scheduler) --- nano/core_test/active_transactions.cpp | 126 +++++++------------------ nano/core_test/confirmation_height.cpp | 1 + nano/core_test/conflicts.cpp | 3 +- 3 files changed, 38 insertions(+), 92 deletions(-) diff --git a/nano/core_test/active_transactions.cpp b/nano/core_test/active_transactions.cpp index bc0bce211c..fc3e1d97b5 100644 --- a/nano/core_test/active_transactions.cpp +++ b/nano/core_test/active_transactions.cpp @@ -388,49 +388,28 @@ TEST (active_transactions, inactive_votes_cache_election_start) node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto & node = *system.add_node (node_config); nano::block_hash latest (node.latest (nano::dev_genesis_key.pub)); - nano::keypair key1, key2, key3, key4, key5; + nano::keypair key1, key2; nano::send_block_builder send_block_builder; nano::state_block_builder state_block_builder; auto send1 = send_block_builder.make_block () .previous (latest) .destination (key1.pub) - .balance (nano::genesis_amount - 2000 * nano::Gxrb_ratio) + .balance (nano::genesis_amount - 5000 * nano::Gxrb_ratio) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) .work (*system.work.generate (latest)) .build_shared (); auto send2 = send_block_builder.make_block () .previous (send1->hash ()) .destination (key2.pub) - .balance (nano::genesis_amount - 4000 * nano::Gxrb_ratio) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) - .work (*system.work.generate (send1->hash ())) - .build_shared (); - auto send3 = send_block_builder.make_block () - .previous (send2->hash ()) - .destination (key3.pub) - .balance (nano::genesis_amount - 6000 * nano::Gxrb_ratio) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) - .work (*system.work.generate (send2->hash ())) - .build_shared (); - auto send4 = send_block_builder.make_block () - .previous (send3->hash ()) - .destination (key4.pub) - .balance (nano::genesis_amount - 8000 * nano::Gxrb_ratio) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) - .work (*system.work.generate (send3->hash ())) - .build_shared (); - auto send5 = send_block_builder.make_block () - .previous (send4->hash ()) - .destination (key5.pub) .balance (nano::genesis_amount - 10000 * nano::Gxrb_ratio) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) - .work (*system.work.generate (send4->hash ())) + .work (*system.work.generate (send1->hash ())) .build_shared (); auto open1 = state_block_builder.make_block () .account (key1.pub) .previous (0) .representative (key1.pub) - .balance (2000 * nano::Gxrb_ratio) + .balance (5000 * nano::Gxrb_ratio) .link (send1->hash ()) .sign (key1.prv, key1.pub) .work (*system.work.generate (key1.pub)) @@ -439,107 +418,69 @@ TEST (active_transactions, inactive_votes_cache_election_start) .account (key2.pub) .previous (0) .representative (key2.pub) - .balance (2000 * nano::Gxrb_ratio) + .balance (5000 * nano::Gxrb_ratio) .link (send2->hash ()) .sign (key2.prv, key2.pub) .work (*system.work.generate (key2.pub)) .build_shared (); - auto open3 = state_block_builder.make_block () - .account (key3.pub) - .previous (0) - .representative (key3.pub) - .balance (2000 * nano::Gxrb_ratio) - .link (send3->hash ()) - .sign (key3.prv, key3.pub) - .work (*system.work.generate (key3.pub)) - .build_shared (); - auto open4 = state_block_builder.make_block () - .account (key4.pub) - .previous (0) - .representative (key4.pub) - .balance (2000 * nano::Gxrb_ratio) - .link (send4->hash ()) - .sign (key4.prv, key4.pub) - .work (*system.work.generate (key4.pub)) - .build_shared (); - auto open5 = state_block_builder.make_block () - .account (key5.pub) - .previous (0) - .representative (key5.pub) - .balance (2000 * nano::Gxrb_ratio) - .link (send5->hash ()) - .sign (key5.prv, key5.pub) - .work (*system.work.generate (key5.pub)) - .build_shared (); node.block_processor.add (send1); node.block_processor.add (send2); - node.block_processor.add (send3); - node.block_processor.add (send4); - node.block_processor.add (send5); node.block_processor.add (open1); node.block_processor.add (open2); - node.block_processor.add (open3); - node.block_processor.add (open4); - node.block_processor.add (open5); node.block_processor.flush (); - ASSERT_TIMELY (5s, 11 == node.ledger.cache.block_count); + ASSERT_TIMELY (5s, 5 == node.ledger.cache.block_count); ASSERT_TRUE (node.active.empty ()); ASSERT_EQ (1, node.ledger.cache.cemented_count); // These blocks will be processed later - auto send6 = send_block_builder.make_block () - .previous (send5->hash ()) + auto send3 = send_block_builder.make_block () + .previous (send2->hash ()) .destination (nano::keypair ().pub) - .balance (send5->balance ().number () - 1) + .balance (send2->balance ().number () - 1) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) - .work (*system.work.generate (send5->hash ())) + .work (*system.work.generate (send2->hash ())) .build_shared (); - auto send7 = send_block_builder.make_block () - .previous (send6->hash ()) + auto send4 = send_block_builder.make_block () + .previous (send3->hash ()) .destination (nano::keypair ().pub) - .balance (send6->balance ().number () - 1) + .balance (send3->balance ().number () - 1) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) - .work (*system.work.generate (send6->hash ())) + .work (*system.work.generate (send3->hash ())) .build_shared (); // Inactive votes - std::vector hashes{ open1->hash (), open2->hash (), open3->hash (), open4->hash (), open5->hash (), send7->hash () }; + std::vector hashes{ open1->hash (), open2->hash (), send4->hash () }; auto vote1 (std::make_shared (key1.pub, key1.prv, 0, hashes)); node.vote_processor.vote (vote1, std::make_shared (node)); - auto vote2 (std::make_shared (key2.pub, key2.prv, 0, hashes)); - node.vote_processor.vote (vote2, std::make_shared (node)); - auto vote3 (std::make_shared (key3.pub, key3.prv, 0, hashes)); - node.vote_processor.vote (vote3, std::make_shared (node)); - auto vote4 (std::make_shared (key4.pub, key4.prv, 0, hashes)); - node.vote_processor.vote (vote4, std::make_shared (node)); - ASSERT_TIMELY (5s, node.active.inactive_votes_cache_size () == 6); + ASSERT_TIMELY (5s, node.active.inactive_votes_cache_size () == 3); ASSERT_TRUE (node.active.empty ()); ASSERT_EQ (1, node.ledger.cache.cemented_count); - // 5 votes are required to start election - auto vote5 (std::make_shared (key5.pub, key5.prv, 0, hashes)); - node.vote_processor.vote (vote5, std::make_shared (node)); - ASSERT_TIMELY (5s, 5 == node.active.size ()); + // 2 votes are required to start election (dev network) + auto vote2 (std::make_shared (key2.pub, key2.prv, 0, hashes)); + node.vote_processor.vote (vote2, std::make_shared (node)); + // Only open1 & open2 blocks elections should start (send4 is missing previous block in ledger) + ASSERT_TIMELY (5s, 2 == node.active.size ()); // Confirm elections with weight quorum auto vote0 (std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, std::numeric_limits::max (), hashes)); // Final vote for confirmation node.vote_processor.vote (vote0, std::make_shared (node)); ASSERT_TIMELY (5s, node.active.empty ()); - ASSERT_TIMELY (5s, 11 == node.ledger.cache.cemented_count); + ASSERT_TIMELY (5s, 5 == node.ledger.cache.cemented_count); // A late block arrival also checks the inactive votes cache ASSERT_TRUE (node.active.empty ()); - auto send7_cache (node.active.find_inactive_votes_cache (send7->hash ())); - ASSERT_EQ (6, send7_cache.voters.size ()); - ASSERT_TRUE (send7_cache.status.bootstrap_started); - ASSERT_TRUE (send7_cache.status.confirmed); - ASSERT_TRUE (send7_cache.status.election_started); // already marked even though the block does not exist - node.process_active (send6); + auto send4_cache (node.active.find_inactive_votes_cache (send4->hash ())); + ASSERT_EQ (3, send4_cache.voters.size ()); + ASSERT_TRUE (send4_cache.status.bootstrap_started); + ASSERT_TRUE (send4_cache.status.confirmed); + ASSERT_TRUE (send4_cache.status.election_started); // already marked even though the block does not exist + node.process_active (send3); node.block_processor.flush (); // An election is started for send6 but does not confirm ASSERT_TIMELY (5s, 1 == node.active.size ()); node.vote_processor.flush (); - ASSERT_FALSE (node.block_confirmed_or_being_confirmed (node.store.tx_begin_read (), send6->hash ())); + ASSERT_FALSE (node.block_confirmed_or_being_confirmed (node.store.tx_begin_read (), send3->hash ())); // send7 cannot be voted on but an election should be started from inactive votes - ASSERT_FALSE (node.ledger.dependents_confirmed (node.store.tx_begin_read (), *send7)); - node.process_active (send7); + ASSERT_FALSE (node.ledger.dependents_confirmed (node.store.tx_begin_read (), *send4)); + node.process_active (send4); node.block_processor.flush (); - ASSERT_TIMELY (5s, 13 == node.ledger.cache.cemented_count); + ASSERT_TIMELY (5s, 7 == node.ledger.cache.cemented_count); } namespace nano @@ -1046,6 +987,7 @@ TEST (active_transactions, restart_dropped) ASSERT_EQ (0, node.active.size ()); node.process_active (send); node.block_processor.flush (); + node.scheduler.flush (); ASSERT_EQ (1, node.active.size ()); ASSERT_EQ (1, node.stats.count (nano::stat::type::election, nano::stat::detail::election_restart)); auto ledger_block (node.store.block_get (node.store.tx_begin_read (), send->hash ())); @@ -1058,6 +1000,7 @@ TEST (active_transactions, restart_dropped) // Try to restart election with the same difficulty node.process_active (send); node.block_processor.flush (); + node.scheduler.flush (); ASSERT_EQ (0, node.active.size ()); ASSERT_EQ (1, node.stats.count (nano::stat::type::election, nano::stat::detail::election_restart)); // Generate even higher difficulty work @@ -1068,6 +1011,7 @@ TEST (active_transactions, restart_dropped) ASSERT_EQ (0, node.active.size ()); node.process_active (send); node.block_processor.flush (); + node.scheduler.flush (); ASSERT_EQ (1, node.active.size ()); ASSERT_EQ (1, node.ledger.cache.cemented_count); ASSERT_EQ (2, node.stats.count (nano::stat::type::election, nano::stat::detail::election_restart)); diff --git a/nano/core_test/confirmation_height.cpp b/nano/core_test/confirmation_height.cpp index 9ec4d966e7..56dd5aa698 100644 --- a/nano/core_test/confirmation_height.cpp +++ b/nano/core_test/confirmation_height.cpp @@ -304,6 +304,7 @@ TEST (confirmation_height, gap_live) node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto node = system.add_node (node_config, node_flags); node_config.peering_port = nano::get_available_port (); + node_config.receive_minimum = nano::genesis_amount; // Prevent auto-receive & open1/receive1/receive2 blocks conflicts system.add_node (node_config, node_flags); nano::keypair destination; system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); diff --git a/nano/core_test/conflicts.cpp b/nano/core_test/conflicts.cpp index 2fe1ce8349..1bbb1a8c45 100644 --- a/nano/core_test/conflicts.cpp +++ b/nano/core_test/conflicts.cpp @@ -40,11 +40,12 @@ TEST (conflicts, add_existing) auto send2 (std::make_shared (genesis.hash (), key2.pub, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); send2->sideband_set ({}); node1.scheduler.activate (nano::dev_genesis_key.pub, node1.store.tx_begin_read ()); + node1.scheduler.flush (); auto election1 = node1.active.election (send2->qualified_root ()); + ASSERT_NE (nullptr, election1); ASSERT_EQ (1, node1.active.size ()); auto vote1 (std::make_shared (key2.pub, key2.prv, 0, send2)); node1.active.vote (vote1); - ASSERT_NE (nullptr, election1); ASSERT_EQ (2, election1->votes ().size ()); auto votes (election1->votes ()); ASSERT_NE (votes.end (), votes.find (key2.pub)); From 1027377a85330f9085fc687a6a42ca8fe569a0f7 Mon Sep 17 00:00:00 2001 From: theohax Date: Fri, 21 May 2021 13:22:23 +0300 Subject: [PATCH 009/346] Address code review --- nano/node/json_handler.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index 02ccbc08c0..9a49265247 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -4231,7 +4231,7 @@ void nano::json_handler::wallet_info () cemented_block_count += confirmation_info.height; } - balance += node.ledger.account_balance (block_transaction, account); + balance += account_info.balance; pending += node.ledger.account_pending (block_transaction, account); nano::key_type key_type (wallet->store.key_type (i->second)); From 9683b6d7239a7e9894bcc8557a09227db52019b6 Mon Sep 17 00:00:00 2001 From: Thiago Silva <82097354+thsfs@users.noreply.github.com> Date: Mon, 24 May 2021 14:28:50 -0300 Subject: [PATCH 010/346] Frontier store break up (#3287) * Start of moving frontier_store out of block_store class * More changes for frontier_store * Putting frontier_store_partial instance in to frontier_store and fixing some references. * Add frontier_store class changes to the unit tests * Clang-format fix * Remove unnecessary comment * Move macros to functions * Remove reduntant implementation * Removing function template arguments are they can be deduced. * Removing unneeded argument parenthesis as this is no longer a macro. Co-authored-by: clemahieu --- nano/core_test/block_store.cpp | 10 +- nano/core_test/ledger.cpp | 38 +++--- nano/node/lmdb/lmdb.cpp | 28 ++-- nano/secure/CMakeLists.txt | 3 +- nano/secure/blockstore.cpp | 5 + nano/secure/blockstore.hpp | 21 ++- nano/secure/blockstore_partial.hpp | 132 +++++++------------ nano/secure/ledger.cpp | 48 +++---- nano/secure/store/frontier_store_partial.hpp | 82 ++++++++++++ 9 files changed, 214 insertions(+), 153 deletions(-) create mode 100644 nano/secure/store/frontier_store_partial.hpp diff --git a/nano/core_test/block_store.cpp b/nano/core_test/block_store.cpp index 394d54547d..ba4abd95df 100644 --- a/nano/core_test/block_store.cpp +++ b/nano/core_test/block_store.cpp @@ -817,11 +817,11 @@ TEST (block_store, frontier) auto transaction (store->tx_begin_write ()); nano::block_hash hash (100); nano::account account (200); - ASSERT_TRUE (store->frontier_get (transaction, hash).is_zero ()); - store->frontier_put (transaction, hash, account); - ASSERT_EQ (account, store->frontier_get (transaction, hash)); - store->frontier_del (transaction, hash); - ASSERT_TRUE (store->frontier_get (transaction, hash).is_zero ()); + ASSERT_TRUE (store->frontier.get (transaction, hash).is_zero ()); + store->frontier.put (transaction, hash, account); + ASSERT_EQ (account, store->frontier.get (transaction, hash)); + store->frontier.del (transaction, hash); + ASSERT_TRUE (store->frontier.get (transaction, hash).is_zero ()); } TEST (block_store, block_replace) diff --git a/nano/core_test/ledger.cpp b/nano/core_test/ledger.cpp index a8cd17ed31..6041b8fa70 100644 --- a/nano/core_test/ledger.cpp +++ b/nano/core_test/ledger.cpp @@ -109,15 +109,15 @@ TEST (ledger, process_send) nano::keypair key2; nano::send_block send (info1.head, key2.pub, 50, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (info1.head)); nano::block_hash hash1 (send.hash ()); - ASSERT_EQ (nano::dev_genesis_key.pub, store->frontier_get (transaction, info1.head)); + ASSERT_EQ (nano::dev_genesis_key.pub, store->frontier.get (transaction, info1.head)); ASSERT_EQ (1, info1.block_count); // This was a valid block, it should progress. auto return1 (ledger.process (transaction, send)); ASSERT_EQ (nano::dev_genesis_key.pub, send.sideband ().account); ASSERT_EQ (2, send.sideband ().height); ASSERT_EQ (nano::genesis_amount - 50, ledger.amount (transaction, hash1)); - ASSERT_TRUE (store->frontier_get (transaction, info1.head).is_zero ()); - ASSERT_EQ (nano::dev_genesis_key.pub, store->frontier_get (transaction, hash1)); + ASSERT_TRUE (store->frontier.get (transaction, info1.head).is_zero ()); + ASSERT_EQ (nano::dev_genesis_key.pub, store->frontier.get (transaction, hash1)); ASSERT_EQ (nano::process_result::progress, return1.code); ASSERT_EQ (nano::dev_genesis_key.pub, store->block_account_calculated (send)); ASSERT_EQ (50, ledger.account_balance (transaction, nano::dev_genesis_key.pub)); @@ -143,7 +143,7 @@ TEST (ledger, process_send) ASSERT_EQ (nano::process_result::progress, return2.code); ASSERT_EQ (key2.pub, store->block_account_calculated (open)); ASSERT_EQ (nano::genesis_amount - 50, ledger.amount (transaction, hash2)); - ASSERT_EQ (key2.pub, store->frontier_get (transaction, hash2)); + ASSERT_EQ (key2.pub, store->frontier.get (transaction, hash2)); ASSERT_EQ (nano::genesis_amount - 50, ledger.account_balance (transaction, key2.pub)); ASSERT_EQ (0, ledger.account_pending (transaction, key2.pub)); ASSERT_EQ (50, ledger.weight (nano::dev_genesis_key.pub)); @@ -163,7 +163,7 @@ TEST (ledger, process_send) ASSERT_NE (nullptr, latest5); ASSERT_EQ (open, *latest5); ASSERT_FALSE (ledger.rollback (transaction, hash2)); - ASSERT_TRUE (store->frontier_get (transaction, hash2).is_zero ()); + ASSERT_TRUE (store->frontier.get (transaction, hash2).is_zero ()); nano::account_info info5; ASSERT_TRUE (ledger.store.account_get (transaction, key2.pub, info5)); nano::pending_info pending1; @@ -180,8 +180,8 @@ TEST (ledger, process_send) ASSERT_EQ (hash1, info6.head); ASSERT_FALSE (ledger.rollback (transaction, info6.head)); ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::dev_genesis_key.pub)); - ASSERT_EQ (nano::dev_genesis_key.pub, store->frontier_get (transaction, info1.head)); - ASSERT_TRUE (store->frontier_get (transaction, hash1).is_zero ()); + ASSERT_EQ (nano::dev_genesis_key.pub, store->frontier.get (transaction, info1.head)); + ASSERT_TRUE (store->frontier.get (transaction, hash1).is_zero ()); nano::account_info info7; ASSERT_FALSE (ledger.store.account_get (transaction, nano::dev_genesis_key.pub, info7)); ASSERT_EQ (1, info7.block_count); @@ -226,14 +226,14 @@ TEST (ledger, process_receive) ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); nano::receive_block receive (hash2, hash3, key2.prv, key2.pub, *pool.generate (hash2)); auto hash4 (receive.hash ()); - ASSERT_EQ (key2.pub, store->frontier_get (transaction, hash2)); + ASSERT_EQ (key2.pub, store->frontier.get (transaction, hash2)); auto return2 (ledger.process (transaction, receive)); ASSERT_EQ (key2.pub, receive.sideband ().account); ASSERT_EQ (nano::genesis_amount - 25, receive.sideband ().balance.number ()); ASSERT_EQ (2, receive.sideband ().height); ASSERT_EQ (25, ledger.amount (transaction, hash4)); - ASSERT_TRUE (store->frontier_get (transaction, hash2).is_zero ()); - ASSERT_EQ (key2.pub, store->frontier_get (transaction, hash4)); + ASSERT_TRUE (store->frontier.get (transaction, hash2).is_zero ()); + ASSERT_EQ (key2.pub, store->frontier.get (transaction, hash4)); ASSERT_EQ (nano::process_result::progress, return2.code); ASSERT_EQ (key2.pub, store->block_account_calculated (receive)); ASSERT_EQ (hash4, ledger.latest (transaction, key2.pub)); @@ -243,8 +243,8 @@ TEST (ledger, process_receive) ASSERT_EQ (nano::genesis_amount - 25, ledger.weight (key3.pub)); ASSERT_FALSE (ledger.rollback (transaction, hash4)); ASSERT_TRUE (store->block_successor (transaction, hash2).is_zero ()); - ASSERT_EQ (key2.pub, store->frontier_get (transaction, hash2)); - ASSERT_TRUE (store->frontier_get (transaction, hash4).is_zero ()); + ASSERT_EQ (key2.pub, store->frontier.get (transaction, hash2)); + ASSERT_TRUE (store->frontier.get (transaction, hash4).is_zero ()); ASSERT_EQ (25, ledger.account_balance (transaction, nano::dev_genesis_key.pub)); ASSERT_EQ (25, ledger.account_pending (transaction, key2.pub)); ASSERT_EQ (nano::genesis_amount - 50, ledger.account_balance (transaction, key2.pub)); @@ -437,11 +437,11 @@ TEST (ledger, representative_change) nano::account_info info1; ASSERT_FALSE (store->account_get (transaction, nano::dev_genesis_key.pub, info1)); nano::change_block block (info1.head, key2.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (info1.head)); - ASSERT_EQ (nano::dev_genesis_key.pub, store->frontier_get (transaction, info1.head)); + ASSERT_EQ (nano::dev_genesis_key.pub, store->frontier.get (transaction, info1.head)); auto return1 (ledger.process (transaction, block)); ASSERT_EQ (0, ledger.amount (transaction, block.hash ())); - ASSERT_TRUE (store->frontier_get (transaction, info1.head).is_zero ()); - ASSERT_EQ (nano::dev_genesis_key.pub, store->frontier_get (transaction, block.hash ())); + ASSERT_TRUE (store->frontier.get (transaction, info1.head).is_zero ()); + ASSERT_EQ (nano::dev_genesis_key.pub, store->frontier.get (transaction, block.hash ())); ASSERT_EQ (nano::process_result::progress, return1.code); ASSERT_EQ (nano::dev_genesis_key.pub, store->block_account_calculated (block)); ASSERT_EQ (0, ledger.weight (nano::dev_genesis_key.pub)); @@ -450,8 +450,8 @@ TEST (ledger, representative_change) ASSERT_FALSE (store->account_get (transaction, nano::dev_genesis_key.pub, info2)); ASSERT_EQ (block.hash (), info2.head); ASSERT_FALSE (ledger.rollback (transaction, info2.head)); - ASSERT_EQ (nano::dev_genesis_key.pub, store->frontier_get (transaction, info1.head)); - ASSERT_TRUE (store->frontier_get (transaction, block.hash ()).is_zero ()); + ASSERT_EQ (nano::dev_genesis_key.pub, store->frontier.get (transaction, info1.head)); + ASSERT_TRUE (store->frontier.get (transaction, block.hash ()).is_zero ()); nano::account_info info3; ASSERT_FALSE (store->account_get (transaction, nano::dev_genesis_key.pub, info3)); ASSERT_EQ (info1.head, info3.head); @@ -3863,7 +3863,7 @@ TEST (ledger, migrate_lmdb_to_rocksdb) store.confirmation_height_put (transaction, nano::genesis_account, { 2, send->hash () }); store.online_weight_put (transaction, 100, nano::amount (2)); - store.frontier_put (transaction, nano::block_hash (2), nano::account (5)); + store.frontier.put (transaction, nano::block_hash (2), nano::account (5)); store.peer_put (transaction, endpoint_key); store.pending_put (transaction, nano::pending_key (nano::genesis_account, send->hash ()), nano::pending_info (nano::genesis_account, 100, nano::epoch::epoch_0)); @@ -3897,7 +3897,7 @@ TEST (ledger, migrate_lmdb_to_rocksdb) ASSERT_EQ (*send, *block1); ASSERT_TRUE (rocksdb_store.peer_exists (rocksdb_transaction, endpoint_key)); ASSERT_EQ (rocksdb_store.version_get (rocksdb_transaction), version); - ASSERT_EQ (rocksdb_store.frontier_get (rocksdb_transaction, 2), 5); + ASSERT_EQ (rocksdb_store.frontier.get (rocksdb_transaction, 2), 5); nano::confirmation_height_info confirmation_height_info; ASSERT_FALSE (rocksdb_store.confirmation_height_get (rocksdb_transaction, nano::genesis_account, confirmation_height_info)); ASSERT_EQ (confirmation_height_info.height, 2); diff --git a/nano/node/lmdb/lmdb.cpp b/nano/node/lmdb/lmdb.cpp index cbb117fc5b..1425c69cab 100644 --- a/nano/node/lmdb/lmdb.cpp +++ b/nano/node/lmdb/lmdb.cpp @@ -361,7 +361,7 @@ void nano::mdb_store::upgrade_v14_to_v15 (nano::write_transaction & transaction_ nano::mdb_val value{ data.size (), (void *)data.data () }; auto s = mdb_put (env.tx (transaction_a), state_blocks_new, nano::mdb_val (hash), value, MDB_APPEND); - release_assert_success (s); + release_assert_success (*this, s); // Every so often output to the log to indicate progress constexpr auto output_cutoff = 1000000; @@ -492,7 +492,7 @@ void nano::mdb_store::upgrade_v16_to_v17 (nano::write_transaction const & transa // Clear it then append auto status (mdb_drop (env.tx (transaction_a), confirmation_height, 0)); - release_assert_success (status); + release_assert_success (*this, status); for (auto const & confirmation_height_info_pair : confirmation_height_infos) { @@ -548,7 +548,7 @@ void nano::mdb_store::upgrade_v17_to_v18 (nano::write_transaction const & transa } nano::mdb_val value{ data.size (), (void *)data.data () }; auto s = mdb_cursor_put (state_i.cursor, state_i->first, value, MDB_CURRENT); - release_assert_success (s); + release_assert_success (*this, s); // Every so often output to the log to indicate progress constexpr auto output_cutoff = 1000000; @@ -618,7 +618,7 @@ void nano::mdb_store::upgrade_v18_to_v19 (nano::write_transaction const & transa nano::mdb_val value{ data.size (), (void *)data.data () }; auto s = mdb_put (env.tx (transaction_a), temp_legacy_open_receive_change_blocks, nano::mdb_val (legacy_block.first), value, MDB_APPEND); - release_assert_success (s); + release_assert_success (*this, s); } } @@ -642,7 +642,7 @@ void nano::mdb_store::upgrade_v18_to_v19 (nano::write_transaction const & transa nano::mdb_val value{ data.size (), (void *)data.data () }; auto s = mdb_put (env.tx (transaction_a), temp_legacy_send_blocks, nano::mdb_val (i->first), value, MDB_APPEND); - release_assert_success (s); + release_assert_success (*this, s); } } @@ -660,7 +660,7 @@ void nano::mdb_store::upgrade_v18_to_v19 (nano::write_transaction const & transa for (; i != n; ++i) { auto s = mdb_put (env.tx (transaction_a), temp_legacy_send_open_receive_change_blocks, nano::mdb_val (i->first), nano::mdb_val (i->second), MDB_APPEND); - release_assert_success (s); + release_assert_success (*this, s); } // Delete tables @@ -707,7 +707,7 @@ void nano::mdb_store::upgrade_v18_to_v19 (nano::write_transaction const & transa nano::mdb_val value{ data.size (), (void *)data.data () }; auto s = mdb_put (env.tx (transaction_a), temp_state_blocks, nano::mdb_val (i->first), value, MDB_APPEND); - release_assert_success (s); + release_assert_success (*this, s); } } @@ -723,7 +723,7 @@ void nano::mdb_store::upgrade_v18_to_v19 (nano::write_transaction const & transa for (; i != n; ++i) { auto s = mdb_put (env.tx (transaction_a), blocks, nano::mdb_val (i->first), nano::mdb_val (i->second), MDB_APPEND); - release_assert_success (s); + release_assert_success (*this, s); } // Delete tables @@ -804,7 +804,7 @@ void nano::mdb_store::version_put (nano::write_transaction const & transaction_a nano::uint256_union version_key (1); nano::uint256_union version_value (version_a); auto status (mdb_put (env.tx (transaction_a), meta, nano::mdb_val (version_key), nano::mdb_val (version_value), 0)); - release_assert_success (status); + release_assert_success (*this, status); } bool nano::mdb_store::exists (nano::transaction const & transaction_a, tables table_a, nano::mdb_val const & key_a) const @@ -849,7 +849,7 @@ uint64_t nano::mdb_store::count (nano::transaction const & transaction_a, MDB_db { MDB_stat stats; auto status (mdb_stat (env.tx (transaction_a), db_a, &stats)); - release_assert_success (status); + release_assert_success (*this, status); return (stats.ms_entries); } @@ -922,7 +922,7 @@ void nano::mdb_store::rebuild_db (nano::write_transaction const & transaction_a) for (auto i (nano::store_iterator (std::make_unique> (transaction_a, table))), n (nano::store_iterator (nullptr)); i != n; ++i) { auto s = mdb_put (env.tx (transaction_a), temp, nano::mdb_val (i->first), i->second, MDB_APPEND); - release_assert_success (s); + release_assert_success (*this, s); } release_assert (count (transaction_a, table) == count (transaction_a, temp)); // Clear existing table @@ -931,7 +931,7 @@ void nano::mdb_store::rebuild_db (nano::write_transaction const & transaction_a) for (auto i (nano::store_iterator (std::make_unique> (transaction_a, temp))), n (nano::store_iterator (nullptr)); i != n; ++i) { auto s = mdb_put (env.tx (transaction_a), table, nano::mdb_val (i->first), i->second, MDB_APPEND); - release_assert_success (s); + release_assert_success (*this, s); } release_assert (count (transaction_a, table) == count (transaction_a, temp)); // Remove temporary table @@ -945,7 +945,7 @@ void nano::mdb_store::rebuild_db (nano::write_transaction const & transaction_a) for (auto i (nano::store_iterator (std::make_unique> (transaction_a, pending))), n (nano::store_iterator (nullptr)); i != n; ++i) { auto s = mdb_put (env.tx (transaction_a), temp, nano::mdb_val (i->first), nano::mdb_val (i->second), MDB_APPEND); - release_assert_success (s); + release_assert_success (*this, s); } release_assert (count (transaction_a, pending) == count (transaction_a, temp)); mdb_drop (env.tx (transaction_a), pending, 0); @@ -953,7 +953,7 @@ void nano::mdb_store::rebuild_db (nano::write_transaction const & transaction_a) for (auto i (nano::store_iterator (std::make_unique> (transaction_a, temp))), n (nano::store_iterator (nullptr)); i != n; ++i) { auto s = mdb_put (env.tx (transaction_a), pending, nano::mdb_val (i->first), nano::mdb_val (i->second), MDB_APPEND); - release_assert_success (s); + release_assert_success (*this, s); } release_assert (count (transaction_a, pending) == count (transaction_a, temp)); mdb_drop (env.tx (transaction_a), temp, 1); diff --git a/nano/secure/CMakeLists.txt b/nano/secure/CMakeLists.txt index 4bcdabe9c4..a0c9f42188 100644 --- a/nano/secure/CMakeLists.txt +++ b/nano/secure/CMakeLists.txt @@ -53,7 +53,8 @@ add_library( utility.cpp versioning.hpp versioning.cpp - working.hpp) + working.hpp + store/frontier_store_partial.hpp) target_link_libraries( secure diff --git a/nano/secure/blockstore.cpp b/nano/secure/blockstore.cpp index 4431eccdb6..bbd894eb9e 100644 --- a/nano/secure/blockstore.cpp +++ b/nano/secure/blockstore.cpp @@ -104,3 +104,8 @@ bool nano::write_transaction::contains (nano::tables table_a) const { return impl->contains (table_a); } + +nano::block_store::block_store (nano::frontier_store & frontier_store_a) : + frontier (frontier_store_a) +{ +} diff --git a/nano/secure/blockstore.hpp b/nano/secure/blockstore.hpp index 2b548d0e2e..6ee175d506 100644 --- a/nano/secure/blockstore.hpp +++ b/nano/secure/blockstore.hpp @@ -620,12 +620,25 @@ class write_transaction final : public transaction class ledger_cache; +class frontier_store +{ +public: + virtual void put (nano::write_transaction const &, nano::block_hash const &, nano::account const &) = 0; + virtual nano::account get (nano::transaction const &, nano::block_hash const &) const = 0; + virtual void del (nano::write_transaction const &, nano::block_hash const &) = 0; + virtual nano::store_iterator begin (nano::transaction const &) const = 0; + virtual nano::store_iterator begin (nano::transaction const &, nano::block_hash const &) const = 0; + virtual nano::store_iterator end () const = 0; + virtual void for_each_par (std::function, nano::store_iterator)> const & action_a) const = 0; +}; + /** * Manages block storage and iteration */ class block_store { public: + explicit block_store (nano::frontier_store &); virtual ~block_store () = default; virtual void initialize (nano::write_transaction const &, nano::genesis const &, nano::ledger_cache &) = 0; virtual void block_put (nano::write_transaction const &, nano::block_hash const &, nano::block const &) = 0; @@ -645,12 +658,7 @@ class block_store virtual nano::store_iterator blocks_begin (nano::transaction const &) const = 0; virtual nano::store_iterator blocks_end () const = 0; - virtual void frontier_put (nano::write_transaction const &, nano::block_hash const &, nano::account const &) = 0; - virtual nano::account frontier_get (nano::transaction const &, nano::block_hash const &) const = 0; - virtual void frontier_del (nano::write_transaction const &, nano::block_hash const &) = 0; - virtual nano::store_iterator frontiers_begin (nano::transaction const &) const = 0; - virtual nano::store_iterator frontiers_begin (nano::transaction const &, nano::block_hash const &) const = 0; - virtual nano::store_iterator frontiers_end () const = 0; + frontier_store & frontier; virtual void account_put (nano::write_transaction const &, nano::account const &, nano::account_info const &) = 0; virtual bool account_get (nano::transaction const &, nano::account const &, nano::account_info &) = 0; @@ -732,7 +740,6 @@ class block_store virtual void unchecked_for_each_par (std::function, nano::store_iterator)> const & action_a) const = 0; virtual void pruned_for_each_par (std::function, nano::store_iterator)> const & action_a) const = 0; virtual void blocks_for_each_par (std::function, nano::store_iterator)> const & action_a) const = 0; - virtual void frontiers_for_each_par (std::function, nano::store_iterator)> const & action_a) const = 0; virtual void final_vote_for_each_par (std::function, nano::store_iterator)> const & action_a) const = 0; virtual uint64_t block_account_height (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const = 0; diff --git a/nano/secure/blockstore_partial.hpp b/nano/secure/blockstore_partial.hpp index 3250cb61c5..7a36bcd2d5 100644 --- a/nano/secure/blockstore_partial.hpp +++ b/nano/secure/blockstore_partial.hpp @@ -6,16 +6,12 @@ #include #include #include +#include #include #include -#define release_assert_success(status) \ - if (!success (status)) \ - { \ - release_assert (false, error_string (status)); \ - } namespace { template @@ -27,15 +23,35 @@ namespace nano template class block_predecessor_set; +template +void release_assert_success (block_store_partial const & block_store, const int status) +{ + if (!block_store.success (status)) + { + release_assert (false, block_store.error_string (status)); + } +} + /** This base class implements the block_store interface functions which have DB agnostic functionality */ template class block_store_partial : public block_store { + nano::frontier_store_partial frontier_store; + + friend void release_assert_success (block_store_partial const & block_store, const int status); + public: using block_store::block_exists; using block_store::unchecked_put; friend class nano::block_predecessor_set; + friend class nano::frontier_store_partial; + + block_store_partial () : + block_store{ frontier_store }, + frontier_store{ *this } + { + } /** * If using a different store version than the latest then you may need @@ -54,7 +70,7 @@ class block_store_partial : public block_store account_put (transaction_a, network_params.ledger.genesis_account, { hash_l, network_params.ledger.genesis_account, genesis_a.open->hash (), std::numeric_limits::max (), nano::seconds_since_epoch (), 1, nano::epoch::epoch_0 }); ++ledger_cache_a.account_count; ledger_cache_a.rep_weights.representation_put (network_params.ledger.genesis_account, std::numeric_limits::max ()); - frontier_put (transaction_a, hash_l, network_params.ledger.genesis_account); + frontier.put (transaction_a, hash_l, network_params.ledger.genesis_account); } void block_put (nano::write_transaction const & transaction_a, nano::block_hash const & hash_a, nano::block const & block_a) override @@ -249,11 +265,6 @@ class block_store_partial : public block_store return nano::store_iterator (nullptr); } - nano::store_iterator frontiers_end () const override - { - return nano::store_iterator (nullptr); - } - int version_get (nano::transaction const & transaction_a) const override { nano::uint256_union version_key (1); @@ -272,7 +283,7 @@ class block_store_partial : public block_store void block_del (nano::write_transaction const & transaction_a, nano::block_hash const & hash_a) override { auto status = del (transaction_a, tables::blocks, hash_a); - release_assert_success (status); + release_assert_success (*this, status); } nano::epoch block_version (nano::transaction const & transaction_a, nano::block_hash const & hash_a) override @@ -290,20 +301,20 @@ class block_store_partial : public block_store { nano::db_val value{ data.size (), (void *)data.data () }; auto status = put (transaction_a, tables::blocks, hash_a, value); - release_assert_success (status); + release_assert_success (*this, status); } void pending_put (nano::write_transaction const & transaction_a, nano::pending_key const & key_a, nano::pending_info const & pending_info_a) override { nano::db_val pending (pending_info_a); auto status = put (transaction_a, tables::pending, key_a, pending); - release_assert_success (status); + release_assert_success (*this, status); } void pending_del (nano::write_transaction const & transaction_a, nano::pending_key const & key_a) override { auto status = del (transaction_a, tables::pending, key_a); - release_assert_success (status); + release_assert_success (*this, status); } bool pending_get (nano::transaction const & transaction_a, nano::pending_key const & key_a, nano::pending_info & pending_a) override @@ -333,51 +344,25 @@ class block_store_partial : public block_store return iterator != pending_end () && nano::pending_key (iterator->first).account == account_a; } - void frontier_put (nano::write_transaction const & transaction_a, nano::block_hash const & block_a, nano::account const & account_a) override + void unchecked_del (nano::write_transaction const & transaction_a, nano::unchecked_key const & key_a) override { - nano::db_val account (account_a); - auto status (put (transaction_a, tables::frontiers, block_a, account)); - release_assert_success (status); + auto status (del (transaction_a, tables::unchecked, key_a)); + release_assert_success (*this, status); } - nano::account frontier_get (nano::transaction const & transaction_a, nano::block_hash const & block_a) const override + bool unchecked_exists (nano::transaction const & transaction_a, nano::unchecked_key const & unchecked_key_a) override { nano::db_val value; - auto status (get (transaction_a, tables::frontiers, nano::db_val (block_a), value)); + auto status (get (transaction_a, tables::unchecked, nano::db_val (unchecked_key_a), value)); release_assert (success (status) || not_found (status)); - nano::account result (0); - if (success (status)) - { - result = static_cast (value); - } - return result; - } - - void frontier_del (nano::write_transaction const & transaction_a, nano::block_hash const & block_a) override - { - auto status (del (transaction_a, tables::frontiers, block_a)); - release_assert_success (status); + return (success (status)); } void unchecked_put (nano::write_transaction const & transaction_a, nano::unchecked_key const & key_a, nano::unchecked_info const & info_a) override { nano::db_val info (info_a); auto status (put (transaction_a, tables::unchecked, key_a, info)); - release_assert_success (status); - } - - void unchecked_del (nano::write_transaction const & transaction_a, nano::unchecked_key const & key_a) override - { - auto status (del (transaction_a, tables::unchecked, key_a)); - release_assert_success (status); - } - - bool unchecked_exists (nano::transaction const & transaction_a, nano::unchecked_key const & unchecked_key_a) override - { - nano::db_val value; - auto status (get (transaction_a, tables::unchecked, nano::db_val (unchecked_key_a), value)); - release_assert (success (status) || not_found (status)); - return (success (status)); + release_assert_success (*this, status); } void unchecked_put (nano::write_transaction const & transaction_a, nano::block_hash const & hash_a, std::shared_ptr const & block_a) override @@ -390,7 +375,7 @@ class block_store_partial : public block_store void unchecked_clear (nano::write_transaction const & transaction_a) override { auto status = drop (transaction_a, tables::unchecked); - release_assert_success (status); + release_assert_success (*this, status); } void account_put (nano::write_transaction const & transaction_a, nano::account const & account_a, nano::account_info const & info_a) override @@ -398,13 +383,13 @@ class block_store_partial : public block_store // Check we are still in sync with other tables nano::db_val info (info_a); auto status = put (transaction_a, tables::accounts, account_a, info); - release_assert_success (status); + release_assert_success (*this, status); } void account_del (nano::write_transaction const & transaction_a, nano::account const & account_a) override { auto status = del (transaction_a, tables::accounts, account_a); - release_assert_success (status); + release_assert_success (*this, status); } bool account_get (nano::transaction const & transaction_a, nano::account const & account_a, nano::account_info & info_a) override @@ -432,13 +417,13 @@ class block_store_partial : public block_store { nano::db_val value (amount_a); auto status (put (transaction_a, tables::online_weight, time_a, value)); - release_assert_success (status); + release_assert_success (*this, status); } void online_weight_del (nano::write_transaction const & transaction_a, uint64_t time_a) override { auto status (del (transaction_a, tables::online_weight, time_a)); - release_assert_success (status); + release_assert_success (*this, status); } size_t online_weight_count (nano::transaction const & transaction_a) const override @@ -449,19 +434,19 @@ class block_store_partial : public block_store void online_weight_clear (nano::write_transaction const & transaction_a) override { auto status (drop (transaction_a, tables::online_weight)); - release_assert_success (status); + release_assert_success (*this, status); } void pruned_put (nano::write_transaction const & transaction_a, nano::block_hash const & hash_a) override { auto status = put_key (transaction_a, tables::pruned, hash_a); - release_assert_success (status); + release_assert_success (*this, status); } void pruned_del (nano::write_transaction const & transaction_a, nano::block_hash const & hash_a) override { auto status = del (transaction_a, tables::pruned, hash_a); - release_assert_success (status); + release_assert_success (*this, status); } bool pruned_exists (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const override @@ -477,19 +462,19 @@ class block_store_partial : public block_store void pruned_clear (nano::write_transaction const & transaction_a) override { auto status = drop (transaction_a, tables::pruned); - release_assert_success (status); + release_assert_success (*this, status); } void peer_put (nano::write_transaction const & transaction_a, nano::endpoint_key const & endpoint_a) override { auto status = put_key (transaction_a, tables::peers, endpoint_a); - release_assert_success (status); + release_assert_success (*this, status); } void peer_del (nano::write_transaction const & transaction_a, nano::endpoint_key const & endpoint_a) override { auto status (del (transaction_a, tables::peers, endpoint_a)); - release_assert_success (status); + release_assert_success (*this, status); } bool peer_exists (nano::transaction const & transaction_a, nano::endpoint_key const & endpoint_a) const override @@ -505,7 +490,7 @@ class block_store_partial : public block_store void peer_clear (nano::write_transaction const & transaction_a) override { auto status = drop (transaction_a, tables::peers); - release_assert_success (status); + release_assert_success (*this, status); } bool exists (nano::transaction const & transaction_a, tables table_a, nano::db_val const & key_a) const @@ -559,7 +544,7 @@ class block_store_partial : public block_store { nano::db_val confirmation_height_info (confirmation_height_info_a); auto status = put (transaction_a, tables::confirmation_height, account_a, confirmation_height_info); - release_assert_success (status); + release_assert_success (*this, status); } bool confirmation_height_get (nano::transaction const & transaction_a, nano::account const & account_a, nano::confirmation_height_info & confirmation_height_info_a) override @@ -585,7 +570,7 @@ class block_store_partial : public block_store void confirmation_height_del (nano::write_transaction const & transaction_a, nano::account const & account_a) override { auto status (del (transaction_a, tables::confirmation_height, nano::db_val (account_a))); - release_assert_success (status); + release_assert_success (*this, status); } bool confirmation_height_exists (nano::transaction const & transaction_a, nano::account const & account_a) const override @@ -606,7 +591,7 @@ class block_store_partial : public block_store else { status = put (transaction_a, tables::final_votes, root_a, hash_a); - release_assert_success (status); + release_assert_success (*this, status); } return result; } @@ -638,7 +623,7 @@ class block_store_partial : public block_store for (auto & final_vote_qualified_root : final_vote_qualified_roots) { auto status (del (transaction_a, tables::final_votes, nano::db_val (final_vote_qualified_root))); - release_assert_success (status); + release_assert_success (*this, status); } } @@ -682,16 +667,6 @@ class block_store_partial : public block_store return make_iterator (transaction_a, tables::blocks, nano::db_val (hash_a)); } - nano::store_iterator frontiers_begin (nano::transaction const & transaction_a) const override - { - return make_iterator (transaction_a, tables::frontiers); - } - - nano::store_iterator frontiers_begin (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const override - { - return make_iterator (transaction_a, tables::frontiers, nano::db_val (hash_a)); - } - nano::store_iterator pending_begin (nano::transaction const & transaction_a, nano::pending_key const & key_a) const override { return make_iterator (transaction_a, tables::pending, nano::db_val (key_a)); @@ -827,15 +802,6 @@ class block_store_partial : public block_store }); } - void frontiers_for_each_par (std::function, nano::store_iterator)> const & action_a) const override - { - parallel_traversal ( - [&action_a, this] (nano::uint256_t const & start, nano::uint256_t const & end, bool const is_last) { - auto transaction (this->tx_begin_read ()); - action_a (transaction, this->frontiers_begin (transaction, start), !is_last ? this->frontiers_begin (transaction, end) : this->frontiers_end ()); - }); - } - void final_vote_for_each_par (std::function, nano::store_iterator)> const & action_a) const override { parallel_traversal ( diff --git a/nano/secure/ledger.cpp b/nano/secure/ledger.cpp index a1ab9a0625..4d571b288a 100644 --- a/nano/secure/ledger.cpp +++ b/nano/secure/ledger.cpp @@ -42,8 +42,8 @@ class rollback_visitor : public nano::block_visitor nano::account_info new_info (block_a.hashables.previous, info.representative, info.open_block, ledger.balance (transaction, block_a.hashables.previous), nano::seconds_since_epoch (), info.block_count - 1, nano::epoch::epoch_0); ledger.update_account (transaction, pending.source, info, new_info); ledger.store.block_del (transaction, hash); - ledger.store.frontier_del (transaction, hash); - ledger.store.frontier_put (transaction, block_a.hashables.previous, pending.source); + ledger.store.frontier.del (transaction, hash); + ledger.store.frontier.put (transaction, block_a.hashables.previous, pending.source); ledger.store.block_successor_clear (transaction, block_a.hashables.previous); ledger.stats.inc (nano::stat::type::rollback, nano::stat::detail::send); } @@ -64,8 +64,8 @@ class rollback_visitor : public nano::block_visitor ledger.update_account (transaction, destination_account, info, new_info); ledger.store.block_del (transaction, hash); ledger.store.pending_put (transaction, nano::pending_key (destination_account, block_a.hashables.source), { source_account, amount, nano::epoch::epoch_0 }); - ledger.store.frontier_del (transaction, hash); - ledger.store.frontier_put (transaction, block_a.hashables.previous, destination_account); + ledger.store.frontier.del (transaction, hash); + ledger.store.frontier.put (transaction, block_a.hashables.previous, destination_account); ledger.store.block_successor_clear (transaction, block_a.hashables.previous); ledger.stats.inc (nano::stat::type::rollback, nano::stat::detail::receive); } @@ -82,7 +82,7 @@ class rollback_visitor : public nano::block_visitor ledger.update_account (transaction, destination_account, new_info, new_info); ledger.store.block_del (transaction, hash); ledger.store.pending_put (transaction, nano::pending_key (destination_account, block_a.hashables.source), { source_account, amount, nano::epoch::epoch_0 }); - ledger.store.frontier_del (transaction, hash); + ledger.store.frontier.del (transaction, hash); ledger.stats.inc (nano::stat::type::rollback, nano::stat::detail::open); } void change_block (nano::change_block const & block_a) override @@ -101,8 +101,8 @@ class rollback_visitor : public nano::block_visitor ledger.store.block_del (transaction, hash); nano::account_info new_info (block_a.hashables.previous, representative, info.open_block, info.balance, nano::seconds_since_epoch (), info.block_count - 1, nano::epoch::epoch_0); ledger.update_account (transaction, account, info, new_info); - ledger.store.frontier_del (transaction, hash); - ledger.store.frontier_put (transaction, block_a.hashables.previous, account); + ledger.store.frontier.del (transaction, hash); + ledger.store.frontier.put (transaction, block_a.hashables.previous, account); ledger.store.block_successor_clear (transaction, block_a.hashables.previous); ledger.stats.inc (nano::stat::type::rollback, nano::stat::detail::change); } @@ -165,7 +165,7 @@ class rollback_visitor : public nano::block_visitor ledger.store.block_successor_clear (transaction, block_a.hashables.previous); if (previous->type () < nano::block_type::state) { - ledger.store.frontier_put (transaction, block_a.hashables.previous, block_a.hashables.account); + ledger.store.frontier.put (transaction, block_a.hashables.previous, block_a.hashables.account); } } else @@ -377,9 +377,9 @@ void ledger_processor::state_block_impl (nano::state_block & block_a) nano::account_info new_info (hash, block_a.representative (), info.open_block.is_zero () ? hash : info.open_block, block_a.hashables.balance, nano::seconds_since_epoch (), info.block_count + 1, epoch); ledger.update_account (transaction, block_a.hashables.account, info, new_info); - if (!ledger.store.frontier_get (transaction, info.head).is_zero ()) + if (!ledger.store.frontier.get (transaction, info.head).is_zero ()) { - ledger.store.frontier_del (transaction, info.head); + ledger.store.frontier.del (transaction, info.head); } } } @@ -454,9 +454,9 @@ void ledger_processor::epoch_block_impl (nano::state_block & block_a) ledger.store.block_put (transaction, hash, block_a); nano::account_info new_info (hash, block_a.representative (), info.open_block.is_zero () ? hash : info.open_block, info.balance, nano::seconds_since_epoch (), info.block_count + 1, epoch); ledger.update_account (transaction, block_a.hashables.account, info, new_info); - if (!ledger.store.frontier_get (transaction, info.head).is_zero ()) + if (!ledger.store.frontier.get (transaction, info.head).is_zero ()) { - ledger.store.frontier_del (transaction, info.head); + ledger.store.frontier.del (transaction, info.head); } } } @@ -481,7 +481,7 @@ void ledger_processor::change_block (nano::change_block & block_a) result.code = block_a.valid_predecessor (*previous) ? nano::process_result::progress : nano::process_result::block_position; if (result.code == nano::process_result::progress) { - auto account (ledger.store.frontier_get (transaction, block_a.hashables.previous)); + auto account (ledger.store.frontier.get (transaction, block_a.hashables.previous)); result.code = account.is_zero () ? nano::process_result::fork : nano::process_result::progress; if (result.code == nano::process_result::progress) { @@ -509,8 +509,8 @@ void ledger_processor::change_block (nano::change_block & block_a) ledger.cache.rep_weights.representation_add_dual (block_a.representative (), balance, info.representative, 0 - balance); nano::account_info new_info (hash, block_a.representative (), info.open_block, info.balance, nano::seconds_since_epoch (), info.block_count + 1, nano::epoch::epoch_0); ledger.update_account (transaction, account, info, new_info); - ledger.store.frontier_del (transaction, block_a.hashables.previous); - ledger.store.frontier_put (transaction, hash, account); + ledger.store.frontier.del (transaction, block_a.hashables.previous); + ledger.store.frontier.put (transaction, hash, account); result.previous_balance = info.balance; ledger.stats.inc (nano::stat::type::ledger, nano::stat::detail::change); } @@ -535,7 +535,7 @@ void ledger_processor::send_block (nano::send_block & block_a) result.code = block_a.valid_predecessor (*previous) ? nano::process_result::progress : nano::process_result::block_position; if (result.code == nano::process_result::progress) { - auto account (ledger.store.frontier_get (transaction, block_a.hashables.previous)); + auto account (ledger.store.frontier.get (transaction, block_a.hashables.previous)); result.code = account.is_zero () ? nano::process_result::fork : nano::process_result::progress; if (result.code == nano::process_result::progress) { @@ -567,8 +567,8 @@ void ledger_processor::send_block (nano::send_block & block_a) nano::account_info new_info (hash, info.representative, info.open_block, block_a.hashables.balance, nano::seconds_since_epoch (), info.block_count + 1, nano::epoch::epoch_0); ledger.update_account (transaction, account, info, new_info); ledger.store.pending_put (transaction, nano::pending_key (block_a.hashables.destination, hash), { account, amount, nano::epoch::epoch_0 }); - ledger.store.frontier_del (transaction, block_a.hashables.previous); - ledger.store.frontier_put (transaction, hash, account); + ledger.store.frontier.del (transaction, block_a.hashables.previous); + ledger.store.frontier.put (transaction, hash, account); result.previous_balance = info.balance; ledger.stats.inc (nano::stat::type::ledger, nano::stat::detail::send); } @@ -594,7 +594,7 @@ void ledger_processor::receive_block (nano::receive_block & block_a) result.code = block_a.valid_predecessor (*previous) ? nano::process_result::progress : nano::process_result::block_position; if (result.code == nano::process_result::progress) { - auto account (ledger.store.frontier_get (transaction, block_a.hashables.previous)); + auto account (ledger.store.frontier.get (transaction, block_a.hashables.previous)); result.code = account.is_zero () ? nano::process_result::gap_previous : nano::process_result::progress; //Have we seen the previous block? No entries for account at all (Harmless) if (result.code == nano::process_result::progress) { @@ -642,8 +642,8 @@ void ledger_processor::receive_block (nano::receive_block & block_a) nano::account_info new_info (hash, info.representative, info.open_block, new_balance, nano::seconds_since_epoch (), info.block_count + 1, nano::epoch::epoch_0); ledger.update_account (transaction, account, info, new_info); ledger.cache.rep_weights.representation_add (info.representative, pending.amount.number ()); - ledger.store.frontier_del (transaction, block_a.hashables.previous); - ledger.store.frontier_put (transaction, hash, account); + ledger.store.frontier.del (transaction, block_a.hashables.previous); + ledger.store.frontier.put (transaction, hash, account); result.previous_balance = info.balance; ledger.stats.inc (nano::stat::type::ledger, nano::stat::detail::receive); } @@ -714,7 +714,7 @@ void ledger_processor::open_block (nano::open_block & block_a) nano::account_info new_info (hash, block_a.representative (), hash, pending.amount.number (), nano::seconds_since_epoch (), 1, nano::epoch::epoch_0); ledger.update_account (transaction, block_a.hashables.account, info, new_info); ledger.cache.rep_weights.representation_add (block_a.representative (), pending.amount.number ()); - ledger.store.frontier_put (transaction, hash, block_a.hashables.account); + ledger.store.frontier.put (transaction, hash, block_a.hashables.account); result.previous_balance = 0; ledger.stats.inc (nano::stat::type::ledger, nano::stat::detail::open); } @@ -1472,12 +1472,12 @@ bool nano::ledger::migrate_lmdb_to_rocksdb (boost::filesystem::path const & data } }); - store.frontiers_for_each_par ( + store.frontier.for_each_par ( [&rocksdb_store] (nano::read_transaction const & /*unused*/, auto i, auto n) { for (; i != n; ++i) { auto rocksdb_transaction (rocksdb_store->tx_begin_write ({}, { nano::tables::frontiers })); - rocksdb_store->frontier_put (rocksdb_transaction, i->first, i->second); + rocksdb_store->frontier.put (rocksdb_transaction, i->first, i->second); } }); diff --git a/nano/secure/store/frontier_store_partial.hpp b/nano/secure/store/frontier_store_partial.hpp new file mode 100644 index 0000000000..7b8f0543b4 --- /dev/null +++ b/nano/secure/store/frontier_store_partial.hpp @@ -0,0 +1,82 @@ +#pragma once + +#include + +namespace +{ +template +void parallel_traversal (std::function const & action); +} + +namespace nano +{ +template +class block_store_partial; + +template +void release_assert_success (block_store_partial const & block_store, const int status); + +template +class frontier_store_partial : public frontier_store +{ +private: + nano::block_store_partial & block_store; + + friend void release_assert_success (block_store_partial const & block_store, const int status); + +public: + explicit frontier_store_partial (nano::block_store_partial & block_store_a) : + block_store (block_store_a){}; + + void put (nano::write_transaction const & transaction_a, nano::block_hash const & block_a, nano::account const & account_a) override + { + nano::db_val account (account_a); + auto status (block_store.put (transaction_a, tables::frontiers, block_a, account)); + release_assert_success (block_store, status); + } + + nano::account get (nano::transaction const & transaction_a, nano::block_hash const & block_a) const override + { + nano::db_val value; + auto status (block_store.get (transaction_a, tables::frontiers, nano::db_val (block_a), value)); + release_assert (block_store.success (status) || block_store.not_found (status)); + nano::account result (0); + if (block_store.success (status)) + { + result = static_cast (value); + } + return result; + } + + void del (nano::write_transaction const & transaction_a, nano::block_hash const & block_a) override + { + auto status (block_store.del (transaction_a, tables::frontiers, block_a)); + release_assert_success (block_store, status); + } + + nano::store_iterator begin (nano::transaction const & transaction_a) const override + { + return block_store.template make_iterator (transaction_a, tables::frontiers); + } + + nano::store_iterator begin (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const override + { + return block_store.template make_iterator (transaction_a, tables::frontiers, nano::db_val (hash_a)); + } + + nano::store_iterator end () const override + { + return nano::store_iterator (nullptr); + } + + void for_each_par (std::function, nano::store_iterator)> const & action_a) const override + { + parallel_traversal ( + [&action_a, this] (nano::uint256_t const & start, nano::uint256_t const & end, bool const is_last) { + auto transaction (this->block_store.tx_begin_read ()); + action_a (transaction, this->begin (transaction, start), !is_last ? this->begin (transaction, end) : this->end ()); + }); + } +}; + +} From dcb7840c01f47a55fdf4b1431e1e042868d03283 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Mon, 24 May 2021 21:04:24 +0100 Subject: [PATCH 011/346] Merging duplicated cleanup code in to a single function. This also simplifies some complex lock/unlock logic --- nano/node/active_transactions.cpp | 36 +++++++++++-------------------- nano/node/active_transactions.hpp | 2 +- 2 files changed, 13 insertions(+), 25 deletions(-) diff --git a/nano/node/active_transactions.cpp b/nano/node/active_transactions.cpp index b86596e88d..fe70504450 100644 --- a/nano/node/active_transactions.cpp +++ b/nano/node/active_transactions.cpp @@ -347,39 +347,40 @@ void nano::active_transactions::request_confirm (nano::unique_lock } } -void nano::active_transactions::cleanup_election (nano::unique_lock & lock_a, nano::election_cleanup_info const & info_a) +void nano::active_transactions::cleanup_election (nano::unique_lock & lock_a, nano::election const & election) { - debug_assert (lock_a.owns_lock ()); - - if (!info_a.confirmed) + if (!election.confirmed ()) { node.stats.inc (nano::stat::type::election, nano::stat::detail::election_drop); } - for (auto const & [hash, block] : info_a.blocks) + auto blocks_l = election.blocks (); + for (auto const & [hash, block] : blocks_l) { auto erased (blocks.erase (hash)); (void)erased; debug_assert (erased == 1); erase_inactive_votes_cache (hash); } + roots.get ().erase (roots.get ().find (election.qualified_root)); lock_a.unlock (); - for (auto const & [hash, block] : info_a.blocks) + vacancy_update (); + for (auto const & [hash, block] : blocks_l) { // Notify observers about dropped elections & blocks lost confirmed elections - if (!info_a.confirmed || hash != info_a.winner) + if (!election.confirmed () || hash != election.winner ()->hash ()) { node.observers.active_stopped.notify (hash); } - if (!info_a.confirmed) + if (!election.confirmed ()) { // Clear from publish filter node.network.publish_filter.clear (block); } } - lock_a.lock (); + node.logger.try_log (boost::str (boost::format ("Election erased for root %1%") % election.qualified_root.to_string ())); } std::vector> nano::active_transactions::list_active (size_t max_a) @@ -1025,17 +1026,7 @@ void nano::active_transactions::erase_recently_confirmed (nano::block_hash const void nano::active_transactions::erase (nano::block const & block_a) { - nano::unique_lock lock (mutex); - auto root_it (roots.get ().find (block_a.qualified_root ())); - if (root_it != roots.get ().end ()) - { - // This is one of few places where both the active mutex and election mutexes are held - cleanup_election (lock, root_it->election->cleanup_info ()); - roots.get ().erase (root_it); - lock.unlock (); - node.logger.try_log (boost::str (boost::format ("Election erased for block block %1% root %2%") % block_a.hash ().to_string () % block_a.root ().to_string ())); - vacancy_update (); - } + erase (block_a.qualified_root ()); } void nano::active_transactions::erase (nano::qualified_root const & root_a) @@ -1044,10 +1035,7 @@ void nano::active_transactions::erase (nano::qualified_root const & root_a) auto root_it (roots.get ().find (root_a)); if (root_it != roots.get ().end ()) { - // This is one of few places where both the active mutex and election mutexes are held - cleanup_election (lock, root_it->election->cleanup_info ()); - roots.get ().erase (root_it); - vacancy_update (); + cleanup_election (lock, *root_it->election); } } diff --git a/nano/node/active_transactions.hpp b/nano/node/active_transactions.hpp index 0669ad9b63..32337d0ee2 100644 --- a/nano/node/active_transactions.hpp +++ b/nano/node/active_transactions.hpp @@ -232,7 +232,7 @@ class active_transactions final void request_confirm (nano::unique_lock &); void erase (nano::qualified_root const &); // Erase all blocks from active and, if not confirmed, clear digests from network filters - void cleanup_election (nano::unique_lock &, nano::election_cleanup_info const &); + void cleanup_election (nano::unique_lock & lock_a, nano::election const &); // Returns a list of elections sorted by difficulty, mutex must be locked std::vector> list_active_impl (size_t) const; From f390bddbea52ee3b1f23dcdbd310f8b9dd9daf67 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Mon, 24 May 2021 21:08:12 +0100 Subject: [PATCH 012/346] Removing unused cleanup_info structure. --- nano/node/election.cpp | 16 ---------------- nano/node/election.hpp | 9 --------- 2 files changed, 25 deletions(-) diff --git a/nano/node/election.cpp b/nano/node/election.cpp index 6fa31b080f..96cc674da0 100644 --- a/nano/node/election.cpp +++ b/nano/node/election.cpp @@ -437,22 +437,6 @@ bool nano::election::publish (std::shared_ptr const & block_a) return result; } -nano::election_cleanup_info nano::election::cleanup_info () const -{ - nano::lock_guard guard (mutex); - return cleanup_info_impl (); -} - -nano::election_cleanup_info nano::election::cleanup_info_impl () const -{ - return nano::election_cleanup_info{ - confirmed (), - status.winner->qualified_root (), - status.winner->hash (), - last_blocks - }; -} - size_t nano::election::insert_inactive_votes_cache (nano::inactive_cache_information const & cache_a) { nano::unique_lock lock (mutex); diff --git a/nano/node/election.hpp b/nano/node/election.hpp index a1ec11576c..234f3700ae 100644 --- a/nano/node/election.hpp +++ b/nano/node/election.hpp @@ -45,13 +45,6 @@ enum class election_behavior normal, optimistic }; -struct election_cleanup_info final -{ - bool confirmed; - nano::qualified_root root; - nano::block_hash winner; - std::unordered_map> blocks; -}; struct election_extended_status final { nano::election_status status; @@ -116,7 +109,6 @@ class election final : public std::enable_shared_from_this size_t insert_inactive_votes_cache (nano::inactive_cache_information const &); // Confirm this block if quorum is met void confirm_if_quorum (nano::unique_lock &); - nano::election_cleanup_info cleanup_info () const; public: // Information uint64_t const height; @@ -135,7 +127,6 @@ class election final : public std::enable_shared_from_this void remove_votes (nano::block_hash const &); void remove_block (nano::block_hash const &); bool replace_by_weight (nano::unique_lock & lock_a, nano::block_hash const &); - nano::election_cleanup_info cleanup_info_impl () const; private: std::unordered_map> last_blocks; From 37a8e969b8ffabe2e8344503933e0e7b4a4b668f Mon Sep 17 00:00:00 2001 From: clemahieu Date: Thu, 20 May 2021 12:43:38 +0100 Subject: [PATCH 013/346] This change simplifies logic in the election scheduler. It extracts predicate functions so identical logic can be checked in the condition_variable wait function and also inside the election_scheduler processing loop. This allows new predicates to be easily added and also eliminates risk of disjoin checks between the loop and the condition variable. --- nano/node/election_scheduler.cpp | 33 ++++++++++++++++++-------------- nano/node/election_scheduler.hpp | 4 ++-- 2 files changed, 21 insertions(+), 16 deletions(-) diff --git a/nano/node/election_scheduler.cpp b/nano/node/election_scheduler.cpp index 71a9991ad7..577cf42d6d 100644 --- a/nano/node/election_scheduler.cpp +++ b/nano/node/election_scheduler.cpp @@ -87,6 +87,16 @@ size_t nano::election_scheduler::priority_queue_size () const return priority.size (); } +bool nano::election_scheduler::priority_queue_predicate () const +{ + return node.active.vacancy () > 0 && !priority.empty (); +} + +bool nano::election_scheduler::manual_queue_predicate () const +{ + return node.active.vacancy () > 0 && !manual_queue.empty (); +} + void nano::election_scheduler::run () { nano::thread_role::set (nano::thread_role::name::election_scheduler); @@ -94,15 +104,19 @@ void nano::election_scheduler::run () while (!stopped) { condition.wait (lock, [this] () { - auto vacancy = node.active.vacancy (); - auto has_vacancy = vacancy > 0; - auto available = !priority.empty () || !manual_queue.empty (); - return stopped || (has_vacancy && available); + return stopped || priority_queue_predicate () || manual_queue_predicate (); }); debug_assert ((std::this_thread::yield (), true)); // Introduce some random delay in debug builds if (!stopped) { - if (!priority.empty ()) + if (manual_queue_predicate ()) + { + auto const [block, previous_balance, election_behavior, confirmation_action] = manual_queue.front (); + nano::unique_lock lock2 (node.active.mutex); + node.active.insert_impl (lock2, block, previous_balance, election_behavior, confirmation_action); + manual_queue.pop_front (); + } + else if (priority_queue_predicate ()) { auto block = priority.top (); std::shared_ptr election; @@ -113,15 +127,6 @@ void nano::election_scheduler::run () election->transition_active (); } priority.pop (); - ++priority_queued; - } - if (!manual_queue.empty ()) - { - auto const [block, previous_balance, election_behavior, confirmation_action] = manual_queue.front (); - nano::unique_lock lock2 (node.active.mutex); - node.active.insert_impl (lock2, block, previous_balance, election_behavior, confirmation_action); - manual_queue.pop_front (); - ++manual_queued; } notify (); } diff --git a/nano/node/election_scheduler.hpp b/nano/node/election_scheduler.hpp index 8baf7a7e10..d90fa67ac7 100644 --- a/nano/node/election_scheduler.hpp +++ b/nano/node/election_scheduler.hpp @@ -36,10 +36,10 @@ class election_scheduler final private: void run (); bool empty_locked () const; + bool priority_queue_predicate () const; + bool manual_queue_predicate () const; nano::prioritization priority; - uint64_t priority_queued{ 0 }; std::deque, boost::optional, nano::election_behavior, std::function)>>> manual_queue; - uint64_t manual_queued{ 0 }; nano::node & node; bool stopped; nano::condition_variable condition; From 4168edfec4cd578909abd2a16496363c34f11098 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Thu, 20 May 2021 15:10:14 +0100 Subject: [PATCH 014/346] Rewrite test to use election_scheduler::activate instead of election_scheduler::manual since the semantics of ::manual will be changed to not wait for vacancy before inserting. --- nano/core_test/election_scheduler.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/nano/core_test/election_scheduler.cpp b/nano/core_test/election_scheduler.cpp index 98ba24993b..c95dc39292 100644 --- a/nano/core_test/election_scheduler.cpp +++ b/nano/core_test/election_scheduler.cpp @@ -142,7 +142,8 @@ TEST (election_scheduler, flush_vacancy) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) .work (*system.work.generate (nano::genesis_hash)) .build_shared (); - node.scheduler.manual (send); + ASSERT_EQ (nano::process_result::progress, node.process (*send).code); + node.scheduler.activate (nano::dev_genesis_key.pub, node.store.tx_begin_read ()); // Ensure this call does not block, even though no elections can be activated. node.scheduler.flush (); ASSERT_EQ (0, node.active.size ()); From 44a5de6e7ab05f528b93798d077540327cb9dd61 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Thu, 20 May 2021 15:24:07 +0100 Subject: [PATCH 015/346] - Changes the semantics of election_scheduler::manual_queue such that vacancy is not considered and elections are started for any blocks passed in. - Moves responsibility for trimming down election count from active_transaction in to election_scheduler. This is done so that more advanced filling/spilling can be done by the election scheduler in the future. - Erases from the active_transactions container by oldest transaction rather than by newest. --- nano/core_test/active_transactions.cpp | 70 ++++++++++++++++++++++++++ nano/node/active_transactions.cpp | 16 ++++-- nano/node/active_transactions.hpp | 1 + nano/node/election_scheduler.cpp | 15 ++++-- nano/node/election_scheduler.hpp | 1 + 5 files changed, 97 insertions(+), 6 deletions(-) diff --git a/nano/core_test/active_transactions.cpp b/nano/core_test/active_transactions.cpp index fc3e1d97b5..d0df474ada 100644 --- a/nano/core_test/active_transactions.cpp +++ b/nano/core_test/active_transactions.cpp @@ -1458,3 +1458,73 @@ TEST (active_transactions, vacancy) ASSERT_EQ (1, node.active.vacancy ()); ASSERT_EQ (0, node.active.size ()); } + +// Ensure transactions in excess of capacity are removed in fifo order +TEST (active_transactions, fifo) +{ + nano::system system; + nano::node_config config{ nano::get_available_port (), system.logging }; + config.active_elections_size = 1; + auto & node = *system.add_node (config); + nano::keypair key0; + nano::keypair key1; + nano::state_block_builder builder; + // Construct two pending entries that can be received simultaneously + auto send0 = builder.make_block () + .account (nano::dev_genesis_key.pub) + .previous (nano::genesis_hash) + .representative (nano::dev_genesis_key.pub) + .link (key0.pub) + .balance (nano::genesis_amount - 1) + .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .work (*system.work.generate (nano::genesis_hash)) + .build_shared (); + ASSERT_EQ (nano::process_result::progress, node.process (*send0).code); + nano::blocks_confirm (node, { send0 }, true); + ASSERT_TIMELY (1s, node.block_confirmed (send0->hash ())); + ASSERT_TIMELY (1s, node.active.empty ()); + auto send1 = builder.make_block () + .account (nano::dev_genesis_key.pub) + .previous (send0->hash ()) + .representative (nano::dev_genesis_key.pub) + .link (key1.pub) + .balance (nano::genesis_amount - 2) + .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .work (*system.work.generate (send0->hash ())) + .build_shared (); + ASSERT_EQ (nano::process_result::progress, node.process (*send1).code); + nano::blocks_confirm (node, { send1 }, true); + ASSERT_TIMELY (1s, node.block_confirmed (send1->hash ())); + ASSERT_TIMELY (1s, node.active.empty ()); + + auto receive0 = builder.make_block () + .account (key0.pub) + .previous (0) + .representative (nano::dev_genesis_key.pub) + .link (send0->hash ()) + .balance (1) + .sign (key0.prv, key0.pub) + .work (*system.work.generate (key0.pub)) + .build_shared (); + ASSERT_EQ (nano::process_result::progress, node.process (*receive0).code); + auto receive1 = builder.make_block () + .account (key1.pub) + .previous (0) + .representative (nano::dev_genesis_key.pub) + .link (send1->hash ()) + .balance (1) + .sign (key1.prv, key1.pub) + .work (*system.work.generate (key1.pub)) + .build_shared (); + ASSERT_EQ (nano::process_result::progress, node.process (*receive1).code); + node.scheduler.manual (receive0); + // Ensure first transaction becomes active + ASSERT_TIMELY (1s, node.active.election (receive0->qualified_root ()) != nullptr); + node.scheduler.manual (receive1); + // Ensure second transaction becomes active + ASSERT_TIMELY (1s, node.active.election (receive1->qualified_root ()) != nullptr); + // Ensure excess transactions get trimmed + ASSERT_TIMELY (1s, node.active.size () == 1); + // Ensure the surviving transaction is the least recently inserted + ASSERT_TIMELY (1s, node.active.election (receive1->qualified_root ()) != nullptr); +} diff --git a/nano/node/active_transactions.cpp b/nano/node/active_transactions.cpp index fe70504450..4f6ced2d7b 100644 --- a/nano/node/active_transactions.cpp +++ b/nano/node/active_transactions.cpp @@ -317,9 +317,7 @@ void nano::active_transactions::request_confirm (nano::unique_lock { bool const confirmed_l (election_l->confirmed ()); - unconfirmed_count_l += !confirmed_l; - bool const overflow_l (unconfirmed_count_l > node.config.active_elections_size && election_l->election_start < election_ttl_cutoff_l); - if (overflow_l || election_l->transition_time (solicitor)) + if (election_l->transition_time (solicitor)) { if (election_l->optimistic () && election_l->failed ()) { @@ -1046,6 +1044,18 @@ void nano::active_transactions::erase_hash (nano::block_hash const & hash_a) debug_assert (erased == 1); } +void nano::active_transactions::erase_oldest () +{ + nano::unique_lock lock (mutex); + if (!roots.empty ()) + { + auto item = roots.get ().front (); + cleanup_election (lock, item.election->cleanup_info ()); + roots.get ().erase (item.election->qualified_root); + vacancy_update (); + } +} + bool nano::active_transactions::empty () { nano::lock_guard lock (mutex); diff --git a/nano/node/active_transactions.hpp b/nano/node/active_transactions.hpp index 32337d0ee2..24e8940ac8 100644 --- a/nano/node/active_transactions.hpp +++ b/nano/node/active_transactions.hpp @@ -167,6 +167,7 @@ class active_transactions final std::vector> list_active (size_t = std::numeric_limits::max ()); void erase (nano::block const &); void erase_hash (nano::block_hash const &); + void erase_oldest (); bool empty (); size_t size (); void stop (); diff --git a/nano/node/election_scheduler.cpp b/nano/node/election_scheduler.cpp index 577cf42d6d..b7fc5f1fac 100644 --- a/nano/node/election_scheduler.cpp +++ b/nano/node/election_scheduler.cpp @@ -94,7 +94,12 @@ bool nano::election_scheduler::priority_queue_predicate () const bool nano::election_scheduler::manual_queue_predicate () const { - return node.active.vacancy () > 0 && !manual_queue.empty (); + return !manual_queue.empty (); +} + +bool nano::election_scheduler::overfill_predicate () const +{ + return node.active.vacancy () < 0; } void nano::election_scheduler::run () @@ -104,12 +109,16 @@ void nano::election_scheduler::run () while (!stopped) { condition.wait (lock, [this] () { - return stopped || priority_queue_predicate () || manual_queue_predicate (); + return stopped || priority_queue_predicate () || manual_queue_predicate () || overfill_predicate (); }); debug_assert ((std::this_thread::yield (), true)); // Introduce some random delay in debug builds if (!stopped) { - if (manual_queue_predicate ()) + if (overfill_predicate ()) + { + node.active.erase_oldest (); + } + else if (manual_queue_predicate ()) { auto const [block, previous_balance, election_behavior, confirmation_action] = manual_queue.front (); nano::unique_lock lock2 (node.active.mutex); diff --git a/nano/node/election_scheduler.hpp b/nano/node/election_scheduler.hpp index d90fa67ac7..1a2889f2d1 100644 --- a/nano/node/election_scheduler.hpp +++ b/nano/node/election_scheduler.hpp @@ -38,6 +38,7 @@ class election_scheduler final bool empty_locked () const; bool priority_queue_predicate () const; bool manual_queue_predicate () const; + bool overfill_predicate () const; nano::prioritization priority; std::deque, boost::optional, nano::election_behavior, std::function)>>> manual_queue; nano::node & node; From 316dcfadf97b1f4c8fc7ebd7dae6f086d9e62d99 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Thu, 20 May 2021 18:25:09 +0100 Subject: [PATCH 016/346] - Changes the semantics of election_scheduler::manual_queue such that vacancy is not considered and elections are started for any blocks passed in. - Moves responsibility for trimming down election count from active_transaction in to election_scheduler. This is done so that more advanced filling/spilling can be done by the election scheduler in the future. - Erases from the active_transactions container by oldest transaction rather than by newest. --- nano/core_test/active_transactions.cpp | 64 +++++++++++++------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/nano/core_test/active_transactions.cpp b/nano/core_test/active_transactions.cpp index d0df474ada..f09117c6e8 100644 --- a/nano/core_test/active_transactions.cpp +++ b/nano/core_test/active_transactions.cpp @@ -1471,51 +1471,51 @@ TEST (active_transactions, fifo) nano::state_block_builder builder; // Construct two pending entries that can be received simultaneously auto send0 = builder.make_block () - .account (nano::dev_genesis_key.pub) - .previous (nano::genesis_hash) - .representative (nano::dev_genesis_key.pub) - .link (key0.pub) - .balance (nano::genesis_amount - 1) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) - .work (*system.work.generate (nano::genesis_hash)) - .build_shared (); + .account (nano::dev_genesis_key.pub) + .previous (nano::genesis_hash) + .representative (nano::dev_genesis_key.pub) + .link (key0.pub) + .balance (nano::genesis_amount - 1) + .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .work (*system.work.generate (nano::genesis_hash)) + .build_shared (); ASSERT_EQ (nano::process_result::progress, node.process (*send0).code); nano::blocks_confirm (node, { send0 }, true); ASSERT_TIMELY (1s, node.block_confirmed (send0->hash ())); ASSERT_TIMELY (1s, node.active.empty ()); auto send1 = builder.make_block () - .account (nano::dev_genesis_key.pub) - .previous (send0->hash ()) - .representative (nano::dev_genesis_key.pub) - .link (key1.pub) - .balance (nano::genesis_amount - 2) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) - .work (*system.work.generate (send0->hash ())) - .build_shared (); + .account (nano::dev_genesis_key.pub) + .previous (send0->hash ()) + .representative (nano::dev_genesis_key.pub) + .link (key1.pub) + .balance (nano::genesis_amount - 2) + .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .work (*system.work.generate (send0->hash ())) + .build_shared (); ASSERT_EQ (nano::process_result::progress, node.process (*send1).code); nano::blocks_confirm (node, { send1 }, true); ASSERT_TIMELY (1s, node.block_confirmed (send1->hash ())); ASSERT_TIMELY (1s, node.active.empty ()); auto receive0 = builder.make_block () - .account (key0.pub) - .previous (0) - .representative (nano::dev_genesis_key.pub) - .link (send0->hash ()) - .balance (1) - .sign (key0.prv, key0.pub) - .work (*system.work.generate (key0.pub)) - .build_shared (); + .account (key0.pub) + .previous (0) + .representative (nano::dev_genesis_key.pub) + .link (send0->hash ()) + .balance (1) + .sign (key0.prv, key0.pub) + .work (*system.work.generate (key0.pub)) + .build_shared (); ASSERT_EQ (nano::process_result::progress, node.process (*receive0).code); auto receive1 = builder.make_block () - .account (key1.pub) - .previous (0) - .representative (nano::dev_genesis_key.pub) - .link (send1->hash ()) - .balance (1) - .sign (key1.prv, key1.pub) - .work (*system.work.generate (key1.pub)) - .build_shared (); + .account (key1.pub) + .previous (0) + .representative (nano::dev_genesis_key.pub) + .link (send1->hash ()) + .balance (1) + .sign (key1.prv, key1.pub) + .work (*system.work.generate (key1.pub)) + .build_shared (); ASSERT_EQ (nano::process_result::progress, node.process (*receive1).code); node.scheduler.manual (receive0); // Ensure first transaction becomes active From e1d7025342a862d3bc27cf6b0a965356316fc12f Mon Sep 17 00:00:00 2001 From: clemahieu Date: Tue, 25 May 2021 09:47:21 +0100 Subject: [PATCH 017/346] Removing duplicate code and using cleanup_election function which erases from roots and updates vacancy already. --- nano/node/active_transactions.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/nano/node/active_transactions.cpp b/nano/node/active_transactions.cpp index 4f6ced2d7b..39d95dcb7c 100644 --- a/nano/node/active_transactions.cpp +++ b/nano/node/active_transactions.cpp @@ -1050,9 +1050,7 @@ void nano::active_transactions::erase_oldest () if (!roots.empty ()) { auto item = roots.get ().front (); - cleanup_election (lock, item.election->cleanup_info ()); - roots.get ().erase (item.election->qualified_root); - vacancy_update (); + cleanup_election (lock, *item.election); } } From 64b710d7cf18d3bacab8c5df71d439bc1a72956a Mon Sep 17 00:00:00 2001 From: dsiganos Date: Tue, 25 May 2021 11:12:20 +0100 Subject: [PATCH 018/346] Fix last contacted (#3286) Fix unit test network.last_contacted (#3285) The unit test network.last_contacted has the following problems: * regular keepalive messages sent automatically can interfere with the test * the test should wait for the clock to move at least one tick to eliminate the possibility of the clock not having the time to move forward * the test waits for a the keepalive counter to be incremented and then expects the last_packet_received timestamp to be updated but the timestamp is updated after the counter is incremented, which is a race condition The solution: * send a second keepalive to handle the race condition between setting the timestamp and incrementing the counter * send a third keepalive to handle the case where an automatic keepalive message is already in flight * wait for the clock to move after reading it and before continuing Assumptions: We assume that there will be no more than 1 keelalive in flight. Of course, in theory, there could be multiple keepalives queued up but for the purposes of this test, we assume max 1 keepalive in flight. It is not an unreasonable assumption in this test case. --- nano/core_test/network.cpp | 35 +++++++++++++++++++++++++++++------ nano/node/socket.cpp | 5 +++++ nano/node/socket.hpp | 1 + 3 files changed, 35 insertions(+), 6 deletions(-) diff --git a/nano/core_test/network.cpp b/nano/core_test/network.cpp index 304c727e6c..600fdac132 100644 --- a/nano/core_test/network.cpp +++ b/nano/core_test/network.cpp @@ -133,25 +133,48 @@ TEST (network, send_node_id_handshake_tcp) TEST (network, last_contacted) { nano::system system (1); + auto node0 = system.nodes[0]; ASSERT_EQ (0, node0->network.size ()); + nano::node_config node1_config (nano::get_available_port (), system.logging); node1_config.tcp_incoming_connections_max = 0; // Prevent ephemeral node1->node0 channel repacement with incoming connection auto node1 (std::make_shared (system.io_ctx, nano::unique_path (), node1_config, system.work)); node1->start (); system.nodes.push_back (node1); + auto channel1 = nano::establish_tcp (system, *node1, node0->network.endpoint ()); ASSERT_NE (nullptr, channel1); ASSERT_TIMELY (3s, node0->network.size () == 1); - auto channel2 = node0->network.tcp_channels.find_node_id (node1->node_id.pub); - ASSERT_NE (nullptr, channel2); - // Make sure last_contact gets updated on receiving a non-handshake message - auto timestamp_before_keepalive = channel2->get_last_packet_received (); + + // channel0 is the other side of channel1, same connection different endpoint + auto channel0 = node0->network.tcp_channels.find_node_id (node1->node_id.pub); + ASSERT_NE (nullptr, channel0); + + { + // check that the endpoints are part of the same connection + std::shared_ptr sock0 = channel0->socket.lock (); + std::shared_ptr sock1 = channel1->socket.lock (); + ASSERT_TRUE (sock0->local_endpoint () == sock1->remote_endpoint ()); + ASSERT_TRUE (sock1->local_endpoint () == sock0->remote_endpoint ()); + } + + // capture the state before and ensure the clock ticks at least once + auto timestamp_before_keepalive = channel0->get_last_packet_received (); auto keepalive_count = node0->stats.count (nano::stat::type::message, nano::stat::detail::keepalive, nano::stat::dir::in); + ASSERT_TIMELY (3s, std::chrono::steady_clock::now () > timestamp_before_keepalive); + + // send 3 keepalives + // we need an extra keepalive to handle the race condition between the timestamp set and the counter increment + // and we need one more keepalive to handle the possibility that there is a keepalive already in flight when we start the crucial part of the test + // it is possible that there could be multiple keepalives in flight but we assume here that there will be no more than one in flight for the purposes of this test node1->network.send_keepalive (channel1); - ASSERT_TIMELY (3s, node0->stats.count (nano::stat::type::message, nano::stat::detail::keepalive, nano::stat::dir::in) > keepalive_count); + node1->network.send_keepalive (channel1); + node1->network.send_keepalive (channel1); + + ASSERT_TIMELY (3s, node0->stats.count (nano::stat::type::message, nano::stat::detail::keepalive, nano::stat::dir::in) >= keepalive_count + 3); ASSERT_EQ (node0->network.size (), 1); - auto timestamp_after_keepalive = channel2->get_last_packet_received (); + auto timestamp_after_keepalive = channel0->get_last_packet_received (); ASSERT_GT (timestamp_after_keepalive, timestamp_before_keepalive); } diff --git a/nano/node/socket.cpp b/nano/node/socket.cpp index fe2b6760ee..ec43f0003a 100644 --- a/nano/node/socket.cpp +++ b/nano/node/socket.cpp @@ -196,6 +196,11 @@ nano::tcp_endpoint nano::socket::remote_endpoint () const return remote; } +nano::tcp_endpoint nano::socket::local_endpoint () const +{ + return tcp_socket.local_endpoint (); +} + nano::server_socket::server_socket (nano::node & node_a, boost::asio::ip::tcp::endpoint local_a, size_t max_connections_a) : socket{ node_a, std::chrono::seconds::max () }, acceptor{ node_a.io_ctx }, diff --git a/nano/node/socket.hpp b/nano/node/socket.hpp index e2002c6790..70c002b179 100644 --- a/nano/node/socket.hpp +++ b/nano/node/socket.hpp @@ -47,6 +47,7 @@ class socket : public std::enable_shared_from_this void close (); boost::asio::ip::tcp::endpoint remote_endpoint () const; + boost::asio::ip::tcp::endpoint local_endpoint () const; /** Returns true if the socket has timed out */ bool has_timed_out () const; /** This can be called to change the maximum idle time, e.g. based on the type of traffic detected. */ From 43ef901824f208eb9ef66e19d0c343184e0cc50b Mon Sep 17 00:00:00 2001 From: theohax <81556890+theohax@users.noreply.github.com> Date: Tue, 25 May 2021 15:47:36 +0300 Subject: [PATCH 019/346] Fix build issue (#3303) * Fix build error --- nano/node/json_handler.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index 703b664fed..8acf1c8544 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -4231,7 +4231,7 @@ void nano::json_handler::wallet_info () cemented_block_count += confirmation_info.height; } - balance += account_info.balance; + balance += account_info.balance.number (); pending += node.ledger.account_pending (block_transaction, account); nano::key_type key_type (wallet->store.key_type (i->second)); From 293fee86660a28a2f28bbaa046052e9eee986ea9 Mon Sep 17 00:00:00 2001 From: theohax Date: Tue, 25 May 2021 16:06:48 +0300 Subject: [PATCH 020/346] Increase soft limit for number of open file descriptors --- nano/nano_node/daemon.cpp | 33 ++++++++++++++++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/nano/nano_node/daemon.cpp b/nano/nano_node/daemon.cpp index 0e9ccb37b2..d68ce392d2 100644 --- a/nano/nano_node/daemon.cpp +++ b/nano/nano_node/daemon.cpp @@ -10,15 +10,44 @@ #include #include #include -#include #include +#ifndef _WIN32 +#include +#endif + #include namespace { volatile sig_atomic_t sig_int_or_term = 0; + +constexpr std::size_t OPEN_FILE_DESCRIPTORS_LIMIT = 16384; + +void setOpenFileDescriptorsLimits () +{ +#ifndef _WIN32 + rlimit current_limits{}; + + if (-1 == getrlimit (RLIMIT_NOFILE, ¤t_limits)) + { + std::cerr << "Unable to get current limits for the number of open file descriptors: " << std::strerror (errno); + return; + } + + if (current_limits.rlim_cur < OPEN_FILE_DESCRIPTORS_LIMIT) + { + current_limits.rlim_cur = std::min (OPEN_FILE_DESCRIPTORS_LIMIT, current_limits.rlim_max); + if (-1 == setrlimit (RLIMIT_NOFILE, ¤t_limits)) + { + std::cerr << "Unable to set limits for the number of open file descriptors: " << std::strerror (errno); + return; + } + } +#endif +} + } static void load_and_set_bandwidth_params (std::shared_ptr const & node, boost::filesystem::path const & data_path, nano::node_flags const & flags) @@ -43,6 +72,8 @@ void nano_daemon::daemon::run (boost::filesystem::path const & data_path, nano:: sigman.register_signal_handler (SIGSEGV, sigman.get_debug_files_handler (), false); sigman.register_signal_handler (SIGABRT, sigman.get_debug_files_handler (), false); + setOpenFileDescriptorsLimits (); + boost::filesystem::create_directories (data_path); boost::system::error_code error_chmod; nano::set_secure_perm_directory (data_path, error_chmod); From ba0a12c2e9990c728daf9eb0a3f03c71862d1835 Mon Sep 17 00:00:00 2001 From: theohax Date: Tue, 25 May 2021 16:09:02 +0300 Subject: [PATCH 021/346] Fix formatting --- nano/nano_node/daemon.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/nano/nano_node/daemon.cpp b/nano/nano_node/daemon.cpp index d68ce392d2..795dc084c5 100644 --- a/nano/nano_node/daemon.cpp +++ b/nano/nano_node/daemon.cpp @@ -47,7 +47,6 @@ void setOpenFileDescriptorsLimits () } #endif } - } static void load_and_set_bandwidth_params (std::shared_ptr const & node, boost::filesystem::path const & data_path, nano::node_flags const & flags) From 3be9f228c3be51def65a95b77c67878077a49b4d Mon Sep 17 00:00:00 2001 From: theohax Date: Tue, 25 May 2021 16:32:10 +0300 Subject: [PATCH 022/346] Move the increasing of open file descriptors limit to nano/lib/utility.cpp --- nano/lib/utility.cpp | 28 ++++++++++++++++++++++++++-- nano/lib/utility.hpp | 10 +++++----- nano/nano_node/daemon.cpp | 38 ++------------------------------------ 3 files changed, 33 insertions(+), 43 deletions(-) diff --git a/nano/lib/utility.cpp b/nano/lib/utility.cpp index e6dd666b5a..5c26a772f6 100644 --- a/nano/lib/utility.cpp +++ b/nano/lib/utility.cpp @@ -35,11 +35,11 @@ #include #endif -std::size_t nano::get_filedescriptor_limit () +std::size_t nano::get_file_descriptor_limit () { std::size_t fd_limit = (std::numeric_limits::max) (); #ifndef _WIN32 - struct rlimit limit; + rlimit limit{}; if (getrlimit (RLIMIT_NOFILE, &limit) == 0) { fd_limit = static_cast (limit.rlim_cur); @@ -48,6 +48,30 @@ std::size_t nano::get_filedescriptor_limit () return fd_limit; } +void nano::set_file_descriptor_limit (std::size_t limit) +{ +#ifndef _WIN32 + rlimit fd_limit{}; + if (-1 == getrlimit (RLIMIT_NOFILE, &fd_limit)) + { + std::cerr << "Unable to get current limits for the number of open file descriptors: " << std::strerror (errno); + return; + } + + if (fd_limit.rlim_cur >= limit) + { + return; + } + + fd_limit.rlim_cur = std::min (limit, fd_limit.rlim_max); + if (-1 == setrlimit (RLIMIT_NOFILE, &fd_limit)) + { + std::cerr << "Unable to set limits for the number of open file descriptors: " << std::strerror (errno); + return; + } +#endif +} + nano::container_info_composite::container_info_composite (std::string const & name) : name (name) { diff --git a/nano/lib/utility.hpp b/nano/lib/utility.hpp index db8e2c35d3..c4157b2c48 100644 --- a/nano/lib/utility.hpp +++ b/nano/lib/utility.hpp @@ -135,12 +135,12 @@ std::string generate_stacktrace (); /** * Some systems, especially in virtualized environments, may have very low file descriptor limits, * causing the node to fail. This function attempts to query the limit and returns the value. If the - * limit cannot be queried, or running on a Windows system, this returns max-value of size_t. - * Increasing the limit programatically is highly system-dependent, and the process may lack the - * required permissions; the node thus merely logs low limits as a potential problem and leaves - * the system configuration to the user. + * limit cannot be queried, or running on a Windows system, this returns max-value of std::size_t. + * Increasing the limit programmatically can be done only for the soft limit, the hard one requiring + * super user permissions to modify. */ -size_t get_filedescriptor_limit (); +std::size_t get_file_descriptor_limit (); +void set_file_descriptor_limit (std::size_t limit); template class observer_set final diff --git a/nano/nano_node/daemon.cpp b/nano/nano_node/daemon.cpp index 795dc084c5..2c49195389 100644 --- a/nano/nano_node/daemon.cpp +++ b/nano/nano_node/daemon.cpp @@ -13,10 +13,6 @@ #include -#ifndef _WIN32 -#include -#endif - #include namespace @@ -24,29 +20,6 @@ namespace volatile sig_atomic_t sig_int_or_term = 0; constexpr std::size_t OPEN_FILE_DESCRIPTORS_LIMIT = 16384; - -void setOpenFileDescriptorsLimits () -{ -#ifndef _WIN32 - rlimit current_limits{}; - - if (-1 == getrlimit (RLIMIT_NOFILE, ¤t_limits)) - { - std::cerr << "Unable to get current limits for the number of open file descriptors: " << std::strerror (errno); - return; - } - - if (current_limits.rlim_cur < OPEN_FILE_DESCRIPTORS_LIMIT) - { - current_limits.rlim_cur = std::min (OPEN_FILE_DESCRIPTORS_LIMIT, current_limits.rlim_max); - if (-1 == setrlimit (RLIMIT_NOFILE, ¤t_limits)) - { - std::cerr << "Unable to set limits for the number of open file descriptors: " << std::strerror (errno); - return; - } - } -#endif -} } static void load_and_set_bandwidth_params (std::shared_ptr const & node, boost::filesystem::path const & data_path, nano::node_flags const & flags) @@ -71,8 +44,6 @@ void nano_daemon::daemon::run (boost::filesystem::path const & data_path, nano:: sigman.register_signal_handler (SIGSEGV, sigman.get_debug_files_handler (), false); sigman.register_signal_handler (SIGABRT, sigman.get_debug_files_handler (), false); - setOpenFileDescriptorsLimits (); - boost::filesystem::create_directories (data_path); boost::system::error_code error_chmod; nano::set_secure_perm_directory (data_path, error_chmod); @@ -101,13 +72,8 @@ void nano_daemon::daemon::run (boost::filesystem::path const & data_path, nano:: std::cout << initialization_text << std::endl; logger.always_log (initialization_text); - size_t fd_limit = nano::get_filedescriptor_limit (); - constexpr size_t fd_limit_recommended_minimum = 16384; - if (fd_limit < fd_limit_recommended_minimum) - { - auto low_fd_text = boost::str (boost::format ("WARNING: The file descriptor limit on this system may be too low (%1%) and should be increased to at least %2%.") % fd_limit % fd_limit_recommended_minimum); - logger.always_log (low_fd_text); - } + nano::set_file_descriptor_limit (OPEN_FILE_DESCRIPTORS_LIMIT); + logger.always_log (boost::format ("Open file descriptors limit is %1%") % nano::get_file_descriptor_limit ()); auto node (std::make_shared (io_ctx, data_path, config.node, opencl_work, flags)); if (!node->init_error ()) From 35a81f2040a20f4ed7cc2bce6b88bbad67a2122e Mon Sep 17 00:00:00 2001 From: Thiago Silva <82097354+thsfs@users.noreply.github.com> Date: Tue, 25 May 2021 13:14:26 -0300 Subject: [PATCH 023/346] UPnP leases issue (#3298) * Inverted logic for refreshing upnp port mapping * Refresh logic for UPnP lease to consider more than one protocol * mapping_protocol pretty print function to_string() Preparatory change for better logging in portmapping * Remove extraneous and needless call to check_mapping_loop There is no need for the call to check_mapping_loop because there is an outer check that will work every time as long as it tickets fast enough. * Remove extraneous and needless logging * Pretty print function for port_mapping and upnp_state classes * Check for missing mappings, renewals or gateway changes every health check period We currently check every health check period for renewals but every 5 minutes for devices. It is too complicated to have 2 different setting and there is no need. It is harder to code, document and to understand and there is not much benefit from it. So, use health check period for all checks. Nice and simple. * Improve logging regarding remaining upnp lease The logging before didn't make it clear if it was remaining lease or total lease time. * Always print all upnp logs if unpn logging is enabled Some upnp logs are throttle controlled so that users are not swamped by upnp messages, if upnp is not working. However, when upnp logging is explicitly enabled then it makes no sense to throttle them. Co-authored-by: Dimitrios Siganos --- nano/node/portmapping.cpp | 102 +++++++++++++++++++++++++++----------- nano/node/portmapping.hpp | 5 +- 2 files changed, 77 insertions(+), 30 deletions(-) diff --git a/nano/node/portmapping.cpp b/nano/node/portmapping.cpp index e2859a894e..35c31896c8 100644 --- a/nano/node/portmapping.cpp +++ b/nano/node/portmapping.cpp @@ -7,6 +7,14 @@ #include #include +std::string nano::mapping_protocol::to_string () +{ + std::stringstream ss; + ss << name << " " << external_address << ":" << external_port; + ss << (enabled ? " (enabled)" : " (disabled)"); + return ss.str (); +}; + nano::port_mapping::port_mapping (nano::node & node_a) : node (node_a), protocols ({ { { "TCP", boost::asio::ip::address_v4::any (), 0, true }, { "UDP", boost::asio::ip::address_v4::any (), 0, !node_a.flags.disable_udp } } }) @@ -26,6 +34,20 @@ std::string nano::port_mapping::get_config_port (std::string const & node_port_a return node.config.external_port != 0 ? std::to_string (node.config.external_port) : node_port_a; } +std::string nano::port_mapping::to_string () +{ + std::stringstream ss; + + ss << "port_mapping is " << (on ? "on" : "off") << std::endl; + for (auto & protocol : protocols) + { + ss << protocol.to_string () << std::endl; + } + ss << upnp.to_string (); + + return ss.str (); +}; + void nano::port_mapping::refresh_devices () { if (!network_params.network.is_dev_network ()) @@ -36,7 +58,7 @@ void nano::port_mapping::refresh_devices () std::array local_address_l; local_address_l.fill (0); auto igd_error_l (UPNP_GetValidIGD (upnp_l.devices, &upnp_l.urls, &upnp_l.data, local_address_l.data (), sizeof (local_address_l))); - if (check_count % 15 == 0) + if (check_count % 15 == 0 || node.config.logging.upnp_details_logging ()) { node.logger.always_log (boost::str (boost::format ("UPnP local address: %1%, discovery: %2%, IGD search: %3%") % local_address_l.data () % discover_error_l % igd_error_l)); if (node.config.logging.upnp_details_logging ()) @@ -86,34 +108,28 @@ void nano::port_mapping::refresh_mapping () { auto upnp_description = std::string ("Nano Node (") + network_params.network.get_current_network_as_string () + ")"; auto add_port_mapping_error_l (UPNP_AddPortMapping (upnp.urls.controlURL, upnp.data.first.servicetype, config_port_l.c_str (), node_port_l.c_str (), address.to_string ().c_str (), upnp_description.c_str (), protocol.name, nullptr, std::to_string (network_params.portmapping.lease_duration.count ()).c_str ())); - if (node.config.logging.upnp_details_logging ()) - { - node.logger.always_log (boost::str (boost::format ("UPnP %1% port mapping response: %2%") % protocol.name % add_port_mapping_error_l)); - } + if (add_port_mapping_error_l == UPNPCOMMAND_SUCCESS) { protocol.external_port = static_cast (std::atoi (config_port_l.data ())); - node.logger.always_log (boost::str (boost::format ("UPnP %1%:%2% mapped to %3%") % protocol.external_address % config_port_l % node_port_l)); - - // Refresh mapping before the leasing ends - node.workers.add_timed_task (std::chrono::steady_clock::now () + network_params.portmapping.lease_duration - std::chrono::seconds (10), [node_l = node.shared ()] () { - node_l->port_mapping.refresh_mapping (); - }); + auto fmt = boost::format ("UPnP %1% %2%:%3% mapped to %4%") % protocol.name % protocol.external_address % config_port_l % node_port_l; + node.logger.always_log (boost::str (fmt)); } else { protocol.external_port = 0; - node.logger.always_log (boost::str (boost::format ("UPnP failed %1%: %2%") % add_port_mapping_error_l % strupnperror (add_port_mapping_error_l))); + auto fmt = boost::format ("UPnP %1% %2%:%3% FAILED") % protocol.name % add_port_mapping_error_l % strupnperror (add_port_mapping_error_l); + node.logger.always_log (boost::str (fmt)); } } } } -bool nano::port_mapping::check_mapping () +bool nano::port_mapping::check_lost_or_old_mapping () { // Long discovery time and fast setup/teardown make this impractical for testing debug_assert (!network_params.network.is_dev_network ()); - bool result_l (true); + bool result_l (false); nano::lock_guard guard_l (mutex); auto node_port_l (std::to_string (node.network.endpoint ().port ())); auto config_port_l (get_config_port (node_port_l)); @@ -124,13 +140,19 @@ bool nano::port_mapping::check_mapping () std::array remaining_mapping_duration_l; remaining_mapping_duration_l.fill (0); auto verify_port_mapping_error_l (UPNP_GetSpecificPortMappingEntry (upnp.urls.controlURL, upnp.data.first.servicetype, config_port_l.c_str (), protocol.name, nullptr, int_client_l.data (), int_port_l.data (), nullptr, nullptr, remaining_mapping_duration_l.data ())); - if (verify_port_mapping_error_l == UPNPCOMMAND_SUCCESS || atoi (remaining_mapping_duration_l.data ()) <= (network_params.portmapping.lease_duration.count () / 2)) + auto remaining_from_port_mapping = std::atoi (remaining_mapping_duration_l.data ()); + auto lease_duration = network_params.portmapping.lease_duration.count (); + auto lease_duration_divided_by_two = (lease_duration / 2); + auto recent_lease = (remaining_from_port_mapping >= lease_duration_divided_by_two); + if (verify_port_mapping_error_l != UPNPCOMMAND_SUCCESS) { - result_l = false; + result_l = true; + node.logger.always_log (boost::str (boost::format ("UPNP_GetSpecificPortMappingEntry failed %1%: %2%") % verify_port_mapping_error_l % strupnperror (verify_port_mapping_error_l))); } - else + if (!recent_lease) { - node.logger.always_log (boost::str (boost::format ("UPNP_GetSpecificPortMappingEntry failed %1%: %2%") % verify_port_mapping_error_l % strupnperror (verify_port_mapping_error_l))); + result_l = true; + node.logger.always_log (boost::str (boost::format ("UPnP leasing time getting old, remaining time: %1%, lease time: %2%, below the threshold: %3%") % remaining_from_port_mapping % lease_duration % lease_duration_divided_by_two)); } std::array external_address_l; external_address_l.fill (0); @@ -148,7 +170,7 @@ bool nano::port_mapping::check_mapping () } if (node.config.logging.upnp_details_logging ()) { - node.logger.always_log (boost::str (boost::format ("UPnP %1% mapping verification response: %2%, external ip response: %3%, external ip: %4%, internal ip: %5%, lease: %6%") % protocol.name % verify_port_mapping_error_l % external_ip_error_l % external_address_l.data () % address.to_string () % remaining_mapping_duration_l.data ())); + node.logger.always_log (boost::str (boost::format ("UPnP %1% mapping verification response: %2%, external ip response: %3%, external ip: %4%, internal ip: %5%, remaining lease: %6%") % protocol.name % verify_port_mapping_error_l % external_ip_error_l % external_address_l.data () % address.to_string () % remaining_mapping_duration_l.data ())); } } return result_l; @@ -156,31 +178,36 @@ bool nano::port_mapping::check_mapping () void nano::port_mapping::check_mapping_loop () { + auto health_check_period = network_params.portmapping.health_check_period; + refresh_devices (); + if (upnp.devices != nullptr) { // If the mapping is lost, refresh it - if (check_mapping ()) + if (check_lost_or_old_mapping ()) { // Schedules a mapping refresh just before the leasing ends refresh_mapping (); } - // Check for mapping health frequently - node.workers.add_timed_task (std::chrono::steady_clock::now () + network_params.portmapping.health_check_period, [node_l = node.shared ()] () { - node_l->port_mapping.check_mapping_loop (); - }); + else + { + node.logger.always_log (boost::str (boost::format ("UPnP No need to refresh the mapping"))); + } } else { - if (check_count < 10) + if (check_count < 10 || node.config.logging.upnp_details_logging ()) { node.logger.always_log (boost::str (boost::format ("UPnP No IGD devices found"))); } - // Check for new devices later - node.workers.add_timed_task (std::chrono::steady_clock::now () + std::chrono::minutes (5), [node_l = node.shared ()] () { - node_l->port_mapping.check_mapping_loop (); - }); } + + // Check for new devices or after health_check_period + node.workers.add_timed_task (std::chrono::steady_clock::now () + health_check_period, [node_l = node.shared ()] () { + node_l->port_mapping.check_mapping_loop (); + }); + ++check_count; } @@ -206,6 +233,23 @@ void nano::port_mapping::stop () } } +std::string nano::upnp_state::to_string () +{ + std::stringstream ss; + ss << "Discovered UPnP devices:" << std::endl; + for (UPNPDev * p = devices; p; p = p->pNext) + { + debug_assert (p->descURL); + debug_assert (p->st); + debug_assert (p->usn); + ss << " " << p->descURL << std::endl; + ss << " " << p->st << std::endl; + ss << " " << p->usn << std::endl; + } + ss << " scope_id: " << std::endl; + return ss.str (); +} + nano::upnp_state::~upnp_state () { if (devices) diff --git a/nano/node/portmapping.hpp b/nano/node/portmapping.hpp index ae36cc0937..f1dedc4906 100644 --- a/nano/node/portmapping.hpp +++ b/nano/node/portmapping.hpp @@ -17,6 +17,7 @@ class mapping_protocol boost::asio::ip::address_v4 external_address; uint16_t external_port; bool enabled; + std::string to_string (); }; /** Collection of discovered UPnP devices and state*/ @@ -26,6 +27,7 @@ class upnp_state upnp_state () = default; ~upnp_state (); upnp_state & operator= (upnp_state &&); + std::string to_string (); /** List of discovered UPnP devices */ UPNPDev * devices{ nullptr }; @@ -44,6 +46,7 @@ class port_mapping void stop (); void refresh_devices (); nano::endpoint external_address (); + std::string to_string (); private: /** Add port mappings for the node port (not RPC). Refresh when the lease ends. */ @@ -51,7 +54,7 @@ class port_mapping /** Check occasionally to refresh in case router loses mapping */ void check_mapping_loop (); /** Returns false if mapping still exists */ - bool check_mapping (); + bool check_lost_or_old_mapping (); std::string get_config_port (std::string const &); upnp_state upnp; nano::node & node; From 15823badc77cfe94de82fe8bc1f49e3766d105bf Mon Sep 17 00:00:00 2001 From: sudokai0 <84352011+sudokai0@users.noreply.github.com> Date: Wed, 26 May 2021 23:11:26 +0200 Subject: [PATCH 024/346] Increase tcp_incoming_connections_max default value To have some more margin when encountering incoming connection bursts. --- nano/node/nodeconfig.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nano/node/nodeconfig.hpp b/nano/node/nodeconfig.hpp index a392331cf5..607febde46 100644 --- a/nano/node/nodeconfig.hpp +++ b/nano/node/nodeconfig.hpp @@ -86,7 +86,7 @@ class node_config std::chrono::nanoseconds pow_sleep_interval{ 0 }; size_t active_elections_size{ 5000 }; /** Default maximum incoming TCP connections, including realtime network & bootstrap */ - unsigned tcp_incoming_connections_max{ 1024 }; + unsigned tcp_incoming_connections_max{ 2048 }; bool use_memory_pools{ true }; static std::chrono::seconds constexpr keepalive_period = std::chrono::seconds (60); static std::chrono::seconds constexpr keepalive_cutoff = keepalive_period * 5; From 4398f054f2ea7af3b0889ee1f14d241706b41232 Mon Sep 17 00:00:00 2001 From: Thiago Silva <82097354+thsfs@users.noreply.github.com> Date: Thu, 27 May 2021 08:54:09 -0300 Subject: [PATCH 025/346] Pending store break up (#3307) * Moves pending store related methods out of the block_store class * Adds some documentation to the new classes --- nano/core_test/block_store.cpp | 40 ++++---- nano/core_test/ledger.cpp | 76 +++++++-------- nano/nano_node/entry.cpp | 4 +- nano/node/bootstrap/bootstrap_bulk_pull.cpp | 2 +- nano/node/json_handler.cpp | 22 ++--- nano/node/lmdb/lmdb.cpp | 16 ++-- nano/node/lmdb/lmdb.hpp | 2 +- nano/node/node.cpp | 6 +- nano/node/testing.cpp | 4 +- nano/node/wallet.cpp | 6 +- nano/qt/qt.cpp | 4 +- nano/rpc_test/rpc.cpp | 6 +- nano/secure/CMakeLists.txt | 3 +- nano/secure/blockstore.cpp | 5 +- nano/secure/blockstore.hpp | 32 +++++-- nano/secure/blockstore_partial.hpp | 80 ++-------------- nano/secure/ledger.cpp | 38 ++++---- nano/secure/store/pending_store_partial.hpp | 100 ++++++++++++++++++++ 18 files changed, 249 insertions(+), 197 deletions(-) create mode 100644 nano/secure/store/pending_store_partial.hpp diff --git a/nano/core_test/block_store.cpp b/nano/core_test/block_store.cpp index ba4abd95df..f21771636e 100644 --- a/nano/core_test/block_store.cpp +++ b/nano/core_test/block_store.cpp @@ -242,13 +242,13 @@ TEST (block_store, add_pending) nano::pending_key key2 (0, 0); nano::pending_info pending1; auto transaction (store->tx_begin_write ()); - ASSERT_TRUE (store->pending_get (transaction, key2, pending1)); - store->pending_put (transaction, key2, pending1); + ASSERT_TRUE (store->pending.get (transaction, key2, pending1)); + store->pending.put (transaction, key2, pending1); nano::pending_info pending2; - ASSERT_FALSE (store->pending_get (transaction, key2, pending2)); + ASSERT_FALSE (store->pending.get (transaction, key2, pending2)); ASSERT_EQ (pending1, pending2); - store->pending_del (transaction, key2); - ASSERT_TRUE (store->pending_get (transaction, key2, pending2)); + store->pending.del (transaction, key2); + ASSERT_TRUE (store->pending.get (transaction, key2, pending2)); } TEST (block_store, pending_iterator) @@ -257,10 +257,10 @@ TEST (block_store, pending_iterator) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); auto transaction (store->tx_begin_write ()); - ASSERT_EQ (store->pending_end (), store->pending_begin (transaction)); - store->pending_put (transaction, nano::pending_key (1, 2), { 2, 3, nano::epoch::epoch_1 }); - auto current (store->pending_begin (transaction)); - ASSERT_NE (store->pending_end (), current); + ASSERT_EQ (store->pending.end (), store->pending.begin (transaction)); + store->pending.put (transaction, nano::pending_key (1, 2), { 2, 3, nano::epoch::epoch_1 }); + auto current (store->pending.begin (transaction)); + ASSERT_NE (store->pending.end (), current); nano::pending_key key1 (current->first); ASSERT_EQ (nano::account (1), key1.account); ASSERT_EQ (nano::block_hash (2), key1.hash); @@ -284,18 +284,18 @@ TEST (block_store, pending_iterator_comparison) nano::stat stats; auto transaction (store->tx_begin_write ()); // Populate pending - store->pending_put (transaction, nano::pending_key (nano::account (3), nano::block_hash (1)), nano::pending_info (nano::account (10), nano::amount (1), nano::epoch::epoch_0)); - store->pending_put (transaction, nano::pending_key (nano::account (3), nano::block_hash (4)), nano::pending_info (nano::account (10), nano::amount (0), nano::epoch::epoch_0)); + store->pending.put (transaction, nano::pending_key (nano::account (3), nano::block_hash (1)), nano::pending_info (nano::account (10), nano::amount (1), nano::epoch::epoch_0)); + store->pending.put (transaction, nano::pending_key (nano::account (3), nano::block_hash (4)), nano::pending_info (nano::account (10), nano::amount (0), nano::epoch::epoch_0)); // Populate pending_v1 - store->pending_put (transaction, nano::pending_key (nano::account (2), nano::block_hash (2)), nano::pending_info (nano::account (10), nano::amount (2), nano::epoch::epoch_1)); - store->pending_put (transaction, nano::pending_key (nano::account (2), nano::block_hash (3)), nano::pending_info (nano::account (10), nano::amount (3), nano::epoch::epoch_1)); + store->pending.put (transaction, nano::pending_key (nano::account (2), nano::block_hash (2)), nano::pending_info (nano::account (10), nano::amount (2), nano::epoch::epoch_1)); + store->pending.put (transaction, nano::pending_key (nano::account (2), nano::block_hash (3)), nano::pending_info (nano::account (10), nano::amount (3), nano::epoch::epoch_1)); // Iterate account 3 (pending) { size_t count = 0; nano::account begin (3); nano::account end (begin.number () + 1); - for (auto i (store->pending_begin (transaction, nano::pending_key (begin, 0))), n (store->pending_begin (transaction, nano::pending_key (end, 0))); i != n; ++i, ++count) + for (auto i (store->pending.begin (transaction, nano::pending_key (begin, 0))), n (store->pending.begin (transaction, nano::pending_key (end, 0))); i != n; ++i, ++count) { nano::pending_key key (i->first); ASSERT_EQ (key.account, begin); @@ -309,7 +309,7 @@ TEST (block_store, pending_iterator_comparison) size_t count = 0; nano::account begin (2); nano::account end (begin.number () + 1); - for (auto i (store->pending_begin (transaction, nano::pending_key (begin, 0))), n (store->pending_begin (transaction, nano::pending_key (end, 0))); i != n; ++i, ++count) + for (auto i (store->pending.begin (transaction, nano::pending_key (begin, 0))), n (store->pending.begin (transaction, nano::pending_key (end, 0))); i != n; ++i, ++count) { nano::pending_key key (i->first); ASSERT_EQ (key.account, begin); @@ -751,9 +751,9 @@ TEST (block_store, pending_exists) nano::pending_key two (2, 0); nano::pending_info pending; auto transaction (store->tx_begin_write ()); - store->pending_put (transaction, two, pending); + store->pending.put (transaction, two, pending); nano::pending_key one (1, 0); - ASSERT_FALSE (store->pending_exists (transaction, one)); + ASSERT_FALSE (store->pending.exists (transaction, one)); } TEST (block_store, latest_exists) @@ -1305,7 +1305,7 @@ TEST (mdb_block_store, upgrade_v14_v15) store.confirmation_height_del (transaction, nano::genesis_account); modify_account_info_to_v14 (store, transaction, nano::genesis_account, confirmation_height_info.height, state_send.hash ()); - store.pending_del (transaction, nano::pending_key (nano::genesis_account, state_send.hash ())); + store.pending.del (transaction, nano::pending_key (nano::genesis_account, state_send.hash ())); write_sideband_v14 (store, transaction, state_send, store.state_blocks_v1); write_sideband_v14 (store, transaction, epoch, store.state_blocks_v1); @@ -1366,9 +1366,9 @@ TEST (mdb_block_store, upgrade_v14_v15) ASSERT_EQ (block->sideband ().details.epoch, nano::epoch::epoch_0); ASSERT_EQ (info.epoch (), nano::epoch::epoch_1); nano::pending_info pending_info; - store.pending_get (transaction, nano::pending_key (nano::dev_genesis_key.pub, send.hash ()), pending_info); + store.pending.get (transaction, nano::pending_key (nano::dev_genesis_key.pub, send.hash ()), pending_info); ASSERT_EQ (pending_info.epoch, nano::epoch::epoch_0); - store.pending_get (transaction, nano::pending_key (nano::dev_genesis_key.pub, state_send.hash ()), pending_info); + store.pending.get (transaction, nano::pending_key (nano::dev_genesis_key.pub, state_send.hash ()), pending_info); ASSERT_EQ (pending_info.epoch, nano::epoch::epoch_1); // Version should be correct diff --git a/nano/core_test/ledger.cpp b/nano/core_test/ledger.cpp index 6041b8fa70..bf5e6591ae 100644 --- a/nano/core_test/ledger.cpp +++ b/nano/core_test/ledger.cpp @@ -167,7 +167,7 @@ TEST (ledger, process_send) nano::account_info info5; ASSERT_TRUE (ledger.store.account_get (transaction, key2.pub, info5)); nano::pending_info pending1; - ASSERT_FALSE (ledger.store.pending_get (transaction, nano::pending_key (key2.pub, hash1), pending1)); + ASSERT_FALSE (ledger.store.pending.get (transaction, nano::pending_key (key2.pub, hash1), pending1)); ASSERT_EQ (nano::dev_genesis_key.pub, pending1.source); ASSERT_EQ (nano::genesis_amount - 50, pending1.amount.number ()); ASSERT_EQ (0, ledger.account_balance (transaction, key2.pub)); @@ -187,7 +187,7 @@ TEST (ledger, process_send) ASSERT_EQ (1, info7.block_count); ASSERT_EQ (info1.head, info7.head); nano::pending_info pending2; - ASSERT_TRUE (ledger.store.pending_get (transaction, nano::pending_key (key2.pub, hash1), pending2)); + ASSERT_TRUE (ledger.store.pending.get (transaction, nano::pending_key (key2.pub, hash1), pending2)); ASSERT_EQ (nano::genesis_amount, ledger.account_balance (transaction, nano::dev_genesis_key.pub)); ASSERT_EQ (0, ledger.account_pending (transaction, key2.pub)); ASSERT_EQ (store->account_count (transaction), ledger.cache.account_count); @@ -251,7 +251,7 @@ TEST (ledger, process_receive) ASSERT_EQ (nano::genesis_amount - 50, ledger.weight (key3.pub)); ASSERT_EQ (hash2, ledger.latest (transaction, key2.pub)); nano::pending_info pending1; - ASSERT_FALSE (ledger.store.pending_get (transaction, nano::pending_key (key2.pub, hash3), pending1)); + ASSERT_FALSE (ledger.store.pending.get (transaction, nano::pending_key (key2.pub, hash3), pending1)); ASSERT_EQ (nano::dev_genesis_key.pub, pending1.source); ASSERT_EQ (25, pending1.amount.number ()); ASSERT_EQ (store->account_count (transaction), ledger.cache.account_count); @@ -294,7 +294,7 @@ TEST (ledger, rollback_receiver) ASSERT_TRUE (ledger.store.account_get (transaction, key2.pub, info2)); ASSERT_EQ (store->account_count (transaction), ledger.cache.account_count); nano::pending_info pending1; - ASSERT_TRUE (ledger.store.pending_get (transaction, nano::pending_key (key2.pub, info2.head), pending1)); + ASSERT_TRUE (ledger.store.pending.get (transaction, nano::pending_key (key2.pub, info2.head), pending1)); } TEST (ledger, rollback_representation) @@ -1731,7 +1731,7 @@ TEST (ledger, state_send_receive) ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, send1.hash ())); ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::genesis_account)); - ASSERT_TRUE (store->pending_exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); + ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); ASSERT_EQ (2, send2->sideband ().height); ASSERT_TRUE (send2->sideband ().details.is_send); ASSERT_FALSE (send2->sideband ().details.is_receive); @@ -1745,7 +1745,7 @@ TEST (ledger, state_send_receive) ASSERT_EQ (nano::genesis_amount, ledger.balance (transaction, receive1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, receive1.hash ())); ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::genesis_account)); - ASSERT_FALSE (store->pending_exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); + ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); ASSERT_EQ (store->account_count (transaction), ledger.cache.account_count); ASSERT_EQ (3, receive2->sideband ().height); ASSERT_FALSE (receive2->sideband ().details.is_send); @@ -1837,10 +1837,10 @@ TEST (ledger, state_open) ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, send1.hash ())); ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::genesis_account)); - ASSERT_TRUE (store->pending_exists (transaction, nano::pending_key (destination.pub, send1.hash ()))); + ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (destination.pub, send1.hash ()))); nano::state_block open1 (destination.pub, 0, nano::genesis_account, nano::Gxrb_ratio, send1.hash (), destination.prv, destination.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open1).code); - ASSERT_FALSE (store->pending_exists (transaction, nano::pending_key (destination.pub, send1.hash ()))); + ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (destination.pub, send1.hash ()))); ASSERT_TRUE (store->block_exists (transaction, open1.hash ())); auto open2 (store->block_get (transaction, open1.hash ())); ASSERT_NE (nullptr, open2); @@ -2211,14 +2211,14 @@ TEST (ledger, state_rollback_send) ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.account_balance (transaction, nano::genesis_account)); ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::genesis_account)); nano::pending_info info; - ASSERT_FALSE (store->pending_get (transaction, nano::pending_key (nano::genesis_account, send1.hash ()), info)); + ASSERT_FALSE (store->pending.get (transaction, nano::pending_key (nano::genesis_account, send1.hash ()), info)); ASSERT_EQ (nano::genesis_account, info.source); ASSERT_EQ (nano::Gxrb_ratio, info.amount.number ()); ASSERT_FALSE (ledger.rollback (transaction, send1.hash ())); ASSERT_FALSE (store->block_exists (transaction, send1.hash ())); ASSERT_EQ (nano::genesis_amount, ledger.account_balance (transaction, nano::genesis_account)); ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::genesis_account)); - ASSERT_FALSE (store->pending_exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); + ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); ASSERT_TRUE (store->block_successor (transaction, genesis.hash ()).is_zero ()); ASSERT_EQ (store->account_count (transaction), ledger.cache.account_count); } @@ -2238,10 +2238,10 @@ TEST (ledger, state_rollback_receive) ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::state_block receive1 (nano::genesis_account, send1.hash (), nano::genesis_account, nano::genesis_amount, send1.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); - ASSERT_FALSE (store->pending_exists (transaction, nano::pending_key (nano::genesis_account, receive1.hash ()))); + ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::genesis_account, receive1.hash ()))); ASSERT_FALSE (ledger.rollback (transaction, receive1.hash ())); nano::pending_info info; - ASSERT_FALSE (store->pending_get (transaction, nano::pending_key (nano::genesis_account, send1.hash ()), info)); + ASSERT_FALSE (store->pending.get (transaction, nano::pending_key (nano::genesis_account, send1.hash ()), info)); ASSERT_EQ (nano::genesis_account, info.source); ASSERT_EQ (nano::Gxrb_ratio, info.amount.number ()); ASSERT_FALSE (store->block_exists (transaction, receive1.hash ())); @@ -2266,9 +2266,9 @@ TEST (ledger, state_rollback_received_send) ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::state_block receive1 (key.pub, 0, key.pub, nano::Gxrb_ratio, send1.hash (), key.prv, key.pub, *pool.generate (key.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); - ASSERT_FALSE (store->pending_exists (transaction, nano::pending_key (nano::genesis_account, receive1.hash ()))); + ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::genesis_account, receive1.hash ()))); ASSERT_FALSE (ledger.rollback (transaction, send1.hash ())); - ASSERT_FALSE (store->pending_exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); + ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); ASSERT_FALSE (store->block_exists (transaction, send1.hash ())); ASSERT_FALSE (store->block_exists (transaction, receive1.hash ())); ASSERT_EQ (nano::genesis_amount, ledger.account_balance (transaction, nano::genesis_account)); @@ -2320,7 +2320,7 @@ TEST (ledger, state_open_rollback) ASSERT_EQ (0, ledger.account_balance (transaction, destination.pub)); ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::genesis_account)); nano::pending_info info; - ASSERT_FALSE (store->pending_get (transaction, nano::pending_key (destination.pub, send1.hash ()), info)); + ASSERT_FALSE (store->pending.get (transaction, nano::pending_key (destination.pub, send1.hash ()), info)); ASSERT_EQ (nano::genesis_account, info.source); ASSERT_EQ (nano::Gxrb_ratio, info.amount.number ()); ASSERT_EQ (store->account_count (transaction), ledger.cache.account_count); @@ -2546,7 +2546,7 @@ TEST (ledger, epoch_blocks_receive_upgrade) ASSERT_FALSE (ledger.store.account_get (transaction, destination.pub, destination_info)); ASSERT_EQ (destination_info.epoch (), nano::epoch::epoch_0); nano::pending_info pending_send2; - ASSERT_FALSE (ledger.store.pending_get (transaction, nano::pending_key (destination.pub, send2.hash ()), pending_send2)); + ASSERT_FALSE (ledger.store.pending.get (transaction, nano::pending_key (destination.pub, send2.hash ()), pending_send2)); ASSERT_EQ (nano::dev_genesis_key.pub, pending_send2.source); ASSERT_EQ (nano::Gxrb_ratio, pending_send2.amount.number ()); ASSERT_EQ (nano::epoch::epoch_1, pending_send2.epoch); @@ -3460,14 +3460,14 @@ TEST (ledger, pruning_action) auto send1_stored (store->block_get (transaction, send1.hash ())); ASSERT_NE (nullptr, send1_stored); ASSERT_EQ (send1, *send1_stored); - ASSERT_TRUE (store->pending_exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); + ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); nano::state_block send2 (nano::genesis_account, send1.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio * 2, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); ASSERT_TRUE (store->block_exists (transaction, send2.hash ())); // Pruning action ASSERT_EQ (1, ledger.pruning_action (transaction, send1.hash (), 1)); ASSERT_EQ (0, ledger.pruning_action (transaction, genesis.hash (), 1)); - ASSERT_TRUE (store->pending_exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); + ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); ASSERT_FALSE (store->block_exists (transaction, send1.hash ())); ASSERT_TRUE (ledger.block_or_pruned_exists (transaction, send1.hash ())); // Pruned ledger start without proper flags emulation @@ -3484,7 +3484,7 @@ TEST (ledger, pruning_action) auto receive1_stored (store->block_get (transaction, receive1.hash ())); ASSERT_NE (nullptr, receive1_stored); ASSERT_EQ (receive1, *receive1_stored); - ASSERT_FALSE (store->pending_exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); + ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); ASSERT_EQ (4, receive1_stored->sideband ().height); ASSERT_FALSE (receive1_stored->sideband ().details.is_send); ASSERT_TRUE (receive1_stored->sideband ().details.is_receive); @@ -3552,7 +3552,7 @@ TEST (ledger, pruning_source_rollback) ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch1).code); nano::state_block send1 (nano::genesis_account, epoch1.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (epoch1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - ASSERT_TRUE (store->pending_exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); + ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); nano::state_block send2 (nano::genesis_account, send1.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio * 2, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); ASSERT_TRUE (store->block_exists (transaction, send2.hash ())); @@ -3564,26 +3564,26 @@ TEST (ledger, pruning_source_rollback) ASSERT_TRUE (store->pruned_exists (transaction, epoch1.hash ())); ASSERT_TRUE (store->block_exists (transaction, genesis.hash ())); nano::pending_info info; - ASSERT_FALSE (store->pending_get (transaction, nano::pending_key (nano::genesis_account, send1.hash ()), info)); + ASSERT_FALSE (store->pending.get (transaction, nano::pending_key (nano::genesis_account, send1.hash ()), info)); ASSERT_EQ (nano::genesis_account, info.source); ASSERT_EQ (nano::Gxrb_ratio, info.amount.number ()); ASSERT_EQ (nano::epoch::epoch_1, info.epoch); // Receiving pruned block nano::state_block receive1 (nano::genesis_account, send2.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, send1.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send2.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); - ASSERT_FALSE (store->pending_exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); + ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); ASSERT_EQ (2, ledger.cache.pruned_count); ASSERT_EQ (5, ledger.cache.block_count); // Rollback receive block ASSERT_FALSE (ledger.rollback (transaction, receive1.hash ())); nano::pending_info info2; - ASSERT_FALSE (store->pending_get (transaction, nano::pending_key (nano::genesis_account, send1.hash ()), info2)); + ASSERT_FALSE (store->pending.get (transaction, nano::pending_key (nano::genesis_account, send1.hash ()), info2)); ASSERT_NE (nano::genesis_account, info2.source); // Tradeoff to not store pruned blocks accounts ASSERT_EQ (nano::Gxrb_ratio, info2.amount.number ()); ASSERT_EQ (nano::epoch::epoch_1, info2.epoch); // Process receive block again ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); - ASSERT_FALSE (store->pending_exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); + ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); ASSERT_EQ (2, ledger.cache.pruned_count); ASSERT_EQ (5, ledger.cache.block_count); } @@ -3602,16 +3602,16 @@ TEST (ledger, pruning_source_rollback_legacy) nano::work_pool pool (std::numeric_limits::max ()); nano::send_block send1 (genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - ASSERT_TRUE (store->pending_exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); + ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); nano::keypair key1; nano::send_block send2 (send1.hash (), key1.pub, nano::genesis_amount - 2 * nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); ASSERT_TRUE (store->block_exists (transaction, send2.hash ())); - ASSERT_TRUE (store->pending_exists (transaction, nano::pending_key (key1.pub, send2.hash ()))); + ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (key1.pub, send2.hash ()))); nano::send_block send3 (send2.hash (), nano::genesis_account, nano::genesis_amount - 3 * nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send2.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send3).code); ASSERT_TRUE (store->block_exists (transaction, send3.hash ())); - ASSERT_TRUE (store->pending_exists (transaction, nano::pending_key (nano::genesis_account, send3.hash ()))); + ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (nano::genesis_account, send3.hash ()))); // Pruning action ASSERT_EQ (2, ledger.pruning_action (transaction, send2.hash (), 1)); ASSERT_FALSE (store->block_exists (transaction, send2.hash ())); @@ -3620,49 +3620,49 @@ TEST (ledger, pruning_source_rollback_legacy) ASSERT_TRUE (store->pruned_exists (transaction, send1.hash ())); ASSERT_TRUE (store->block_exists (transaction, genesis.hash ())); nano::pending_info info1; - ASSERT_FALSE (store->pending_get (transaction, nano::pending_key (nano::genesis_account, send1.hash ()), info1)); + ASSERT_FALSE (store->pending.get (transaction, nano::pending_key (nano::genesis_account, send1.hash ()), info1)); ASSERT_EQ (nano::genesis_account, info1.source); ASSERT_EQ (nano::Gxrb_ratio, info1.amount.number ()); ASSERT_EQ (nano::epoch::epoch_0, info1.epoch); nano::pending_info info2; - ASSERT_FALSE (store->pending_get (transaction, nano::pending_key (key1.pub, send2.hash ()), info2)); + ASSERT_FALSE (store->pending.get (transaction, nano::pending_key (key1.pub, send2.hash ()), info2)); ASSERT_EQ (nano::genesis_account, info2.source); ASSERT_EQ (nano::Gxrb_ratio, info2.amount.number ()); ASSERT_EQ (nano::epoch::epoch_0, info2.epoch); // Receiving pruned block nano::receive_block receive1 (send3.hash (), send1.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send3.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); - ASSERT_FALSE (store->pending_exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); + ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); ASSERT_EQ (2, ledger.cache.pruned_count); ASSERT_EQ (5, ledger.cache.block_count); // Rollback receive block ASSERT_FALSE (ledger.rollback (transaction, receive1.hash ())); nano::pending_info info3; - ASSERT_FALSE (store->pending_get (transaction, nano::pending_key (nano::genesis_account, send1.hash ()), info3)); + ASSERT_FALSE (store->pending.get (transaction, nano::pending_key (nano::genesis_account, send1.hash ()), info3)); ASSERT_NE (nano::genesis_account, info3.source); // Tradeoff to not store pruned blocks accounts ASSERT_EQ (nano::Gxrb_ratio, info3.amount.number ()); ASSERT_EQ (nano::epoch::epoch_0, info3.epoch); // Process receive block again ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); - ASSERT_FALSE (store->pending_exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); + ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); ASSERT_EQ (2, ledger.cache.pruned_count); ASSERT_EQ (5, ledger.cache.block_count); // Receiving pruned block (open) nano::open_block open1 (send2.hash (), nano::genesis_account, key1.pub, key1.prv, key1.pub, *pool.generate (key1.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open1).code); - ASSERT_FALSE (store->pending_exists (transaction, nano::pending_key (key1.pub, send2.hash ()))); + ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (key1.pub, send2.hash ()))); ASSERT_EQ (2, ledger.cache.pruned_count); ASSERT_EQ (6, ledger.cache.block_count); // Rollback open block ASSERT_FALSE (ledger.rollback (transaction, open1.hash ())); nano::pending_info info4; - ASSERT_FALSE (store->pending_get (transaction, nano::pending_key (key1.pub, send2.hash ()), info4)); + ASSERT_FALSE (store->pending.get (transaction, nano::pending_key (key1.pub, send2.hash ()), info4)); ASSERT_NE (nano::genesis_account, info4.source); // Tradeoff to not store pruned blocks accounts ASSERT_EQ (nano::Gxrb_ratio, info4.amount.number ()); ASSERT_EQ (nano::epoch::epoch_0, info4.epoch); // Process open block again ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open1).code); - ASSERT_FALSE (store->pending_exists (transaction, nano::pending_key (key1.pub, send2.hash ()))); + ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (key1.pub, send2.hash ()))); ASSERT_EQ (2, ledger.cache.pruned_count); ASSERT_EQ (6, ledger.cache.block_count); } @@ -3711,7 +3711,7 @@ TEST (ledger, pruning_legacy_blocks) nano::work_pool pool (std::numeric_limits::max ()); nano::send_block send1 (genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - ASSERT_TRUE (store->pending_exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); + ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); nano::receive_block receive1 (send1.hash (), send1.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); nano::change_block change1 (receive1.hash (), key1.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (receive1.hash ())); @@ -3866,7 +3866,7 @@ TEST (ledger, migrate_lmdb_to_rocksdb) store.frontier.put (transaction, nano::block_hash (2), nano::account (5)); store.peer_put (transaction, endpoint_key); - store.pending_put (transaction, nano::pending_key (nano::genesis_account, send->hash ()), nano::pending_info (nano::genesis_account, 100, nano::epoch::epoch_0)); + store.pending.put (transaction, nano::pending_key (nano::genesis_account, send->hash ()), nano::pending_info (nano::genesis_account, 100, nano::epoch::epoch_0)); store.pruned_put (transaction, send->hash ()); store.unchecked_put (transaction, nano::genesis_hash, send); store.version_put (transaction, version); @@ -3882,7 +3882,7 @@ TEST (ledger, migrate_lmdb_to_rocksdb) auto rocksdb_transaction (rocksdb_store.tx_begin_read ()); nano::pending_info pending_info; - ASSERT_FALSE (rocksdb_store.pending_get (rocksdb_transaction, nano::pending_key (nano::genesis_account, send->hash ()), pending_info)); + ASSERT_FALSE (rocksdb_store.pending.get (rocksdb_transaction, nano::pending_key (nano::genesis_account, send->hash ()), pending_info)); for (auto i = rocksdb_store.online_weight_begin (rocksdb_transaction); i != rocksdb_store.online_weight_end (); ++i) { diff --git a/nano/nano_node/entry.cpp b/nano/nano_node/entry.cpp index 4f94209011..87c4820950 100644 --- a/nano/nano_node/entry.cpp +++ b/nano/nano_node/entry.cpp @@ -1742,7 +1742,7 @@ int main (int argc, char * const * argv) start_threads (check_pending, pending); size_t const pending_deque_overflow (64 * 1024); - for (auto i (node->store.pending_begin (transaction)), n (node->store.pending_end ()); i != n; ++i) + for (auto i (node->store.pending.begin (transaction)), n (node->store.pending.end ()); i != n; ++i) { { nano::unique_lock lock (mutex); @@ -1948,7 +1948,7 @@ int main (int argc, char * const * argv) // Iterate all pending blocks and collect the lowest version for each unopened account nano::locked>> unopened_highest_pending_shared; using unopened_highest_pending_t = decltype (unopened_highest_pending_shared)::value_type; - node->store.pending_for_each_par ( + node->store.pending.for_each_par ( [&unopened_highest_pending_shared, &opened_accounts] (nano::read_transaction const & /*unused*/, nano::store_iterator i, nano::store_iterator n) { // First cache locally unopened_highest_pending_t unopened_highest_pending_l; diff --git a/nano/node/bootstrap/bootstrap_bulk_pull.cpp b/nano/node/bootstrap/bootstrap_bulk_pull.cpp index 3894317782..f496ae3fce 100644 --- a/nano/node/bootstrap/bootstrap_bulk_pull.cpp +++ b/nano/node/bootstrap/bootstrap_bulk_pull.cpp @@ -786,7 +786,7 @@ std::pair, std::unique_ptrnode->store.tx_begin_read ()); - auto stream (connection->node->store.pending_begin (stream_transaction, current_key)); + auto stream (connection->node->store.pending.begin (stream_transaction, current_key)); if (stream == nano::store_iterator (nullptr)) { diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index 8acf1c8544..47703d6628 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -398,7 +398,7 @@ uint64_t nano::json_handler::difficulty_ledger (nano::block const & block_a) if (!link.is_zero () && !details.is_send) { auto block_link (node.store.block_get (transaction, link.as_block_hash ())); - if (block_link != nullptr && node.store.pending_exists (transaction, nano::pending_key (block_a.account (), link.as_block_hash ()))) + if (block_link != nullptr && node.store.pending.exists (transaction, nano::pending_key (block_a.account (), link.as_block_hash ()))) { details.epoch = std::max (details.epoch, block_link->sideband ().details.epoch); details.is_receive = true; @@ -956,7 +956,7 @@ void nano::json_handler::accounts_pending () if (!ec) { boost::property_tree::ptree peers_l; - for (auto i (node.store.pending_begin (transaction, nano::pending_key (account, 0))), n (node.store.pending_end ()); i != n && nano::pending_key (i->first).account == account && peers_l.size () < count; ++i) + for (auto i (node.store.pending.begin (transaction, nano::pending_key (account, 0))), n (node.store.pending.end ()); i != n && nano::pending_key (i->first).account == account && peers_l.size () < count; ++i) { nano::pending_key const & key (i->first); if (block_confirmed (node, transaction, key.hash, include_active, include_only_confirmed)) @@ -1243,7 +1243,7 @@ void nano::json_handler::blocks_info () auto destination (node.ledger.block_destination (transaction, *block)); if (!destination.is_zero ()) { - exists = node.store.pending_exists (transaction, nano::pending_key (destination, hash)); + exists = node.store.pending.exists (transaction, nano::pending_key (destination, hash)); } entry.put ("pending", exists ? "1" : "0"); } @@ -2871,7 +2871,7 @@ void nano::json_handler::pending () // The ptree container is used if there are any children nodes (e.g source/min_version) otherwise the amount container is used. std::vector> hash_ptree_pairs; std::vector> hash_amount_pairs; - for (auto i (node.store.pending_begin (transaction, nano::pending_key (account, 0))), n (node.store.pending_end ()); i != n && nano::pending_key (i->first).account == account && (should_sort || peers_l.size () < count); ++i) + for (auto i (node.store.pending.begin (transaction, nano::pending_key (account, 0))), n (node.store.pending.end ()); i != n && nano::pending_key (i->first).account == account && (should_sort || peers_l.size () < count); ++i) { nano::pending_key const & key (i->first); if (block_confirmed (node, transaction, key.hash, include_active, include_only_confirmed)) @@ -2970,7 +2970,7 @@ void nano::json_handler::pending_exists () auto destination (node.ledger.block_destination (transaction, *block)); if (!destination.is_zero ()) { - exists = node.store.pending_exists (transaction, nano::pending_key (destination, hash)); + exists = node.store.pending.exists (transaction, nano::pending_key (destination, hash)); } exists = exists && (block_confirmed (node, transaction, block->hash (), include_active, include_only_confirmed)); response_l.put ("exists", exists ? "1" : "0"); @@ -3200,7 +3200,7 @@ void nano::json_handler::receive () if (node.ledger.block_or_pruned_exists (block_transaction, hash)) { nano::pending_info pending_info; - if (!node.store.pending_get (block_transaction, nano::pending_key (account, hash), pending_info)) + if (!node.store.pending.get (block_transaction, nano::pending_key (account, hash), pending_info)) { auto work (work_optional_impl ()); if (!ec && work) @@ -3464,7 +3464,7 @@ void nano::json_handler::republish () auto destination (node.ledger.block_destination (transaction, *block_b)); if (!destination.is_zero ()) { - if (!node.store.pending_exists (transaction, nano::pending_key (destination, hash))) + if (!node.store.pending.exists (transaction, nano::pending_key (destination, hash))) { nano::block_hash previous (node.ledger.latest (transaction, destination)); auto block_d (node.store.block_get (transaction, previous)); @@ -4061,8 +4061,8 @@ void nano::json_handler::unopened () if (!ec) { auto transaction (node.store.tx_begin_read ()); - auto iterator (node.store.pending_begin (transaction, nano::pending_key (start, 0))); - auto end (node.store.pending_end ()); + auto iterator (node.store.pending.begin (transaction, nano::pending_key (start, 0))); + auto end (node.store.pending.end ()); nano::account current_account (start); nano::uint128_t current_account_sum{ 0 }; boost::property_tree::ptree accounts; @@ -4078,7 +4078,7 @@ void nano::json_handler::unopened () break; } // Skip existing accounts - iterator = node.store.pending_begin (transaction, nano::pending_key (account.number () + 1, 0)); + iterator = node.store.pending.begin (transaction, nano::pending_key (account.number () + 1, 0)); } else { @@ -4596,7 +4596,7 @@ void nano::json_handler::wallet_pending () { nano::account const & account (i->first); boost::property_tree::ptree peers_l; - for (auto ii (node.store.pending_begin (block_transaction, nano::pending_key (account, 0))), nn (node.store.pending_end ()); ii != nn && nano::pending_key (ii->first).account == account && peers_l.size () < count; ++ii) + for (auto ii (node.store.pending.begin (block_transaction, nano::pending_key (account, 0))), nn (node.store.pending.end ()); ii != nn && nano::pending_key (ii->first).account == account && peers_l.size () < count; ++ii) { nano::pending_key key (ii->first); if (block_confirmed (node, block_transaction, key.hash, include_active, include_only_confirmed)) diff --git a/nano/node/lmdb/lmdb.cpp b/nano/node/lmdb/lmdb.cpp index 1425c69cab..a4ca78956b 100644 --- a/nano/node/lmdb/lmdb.cpp +++ b/nano/node/lmdb/lmdb.cpp @@ -198,7 +198,7 @@ void nano::mdb_store::open_databases (bool & error_a, nano::transaction const & error_a |= mdb_dbi_open (env.tx (transaction_a), "accounts", flags, &accounts_v0) != 0; accounts = accounts_v0; error_a |= mdb_dbi_open (env.tx (transaction_a), "pending", flags, &pending_v0) != 0; - pending = pending_v0; + lmdb_pending = pending_v0; error_a |= mdb_dbi_open (env.tx (transaction_a), "final_votes", flags, &final_votes) != 0; auto version_l = version_get (transaction_a); @@ -404,7 +404,7 @@ void nano::mdb_store::upgrade_v14_to_v15 (nano::write_transaction & transaction_ for (auto const & pending_key_pending_info_pair : pending_infos) { - mdb_put (env.tx (transaction_a), pending, nano::mdb_val (pending_key_pending_info_pair.first), nano::mdb_val (pending_key_pending_info_pair.second), MDB_APPEND); + mdb_put (env.tx (transaction_a), lmdb_pending, nano::mdb_val (pending_key_pending_info_pair.first), nano::mdb_val (pending_key_pending_info_pair.second), MDB_APPEND); } version_put (transaction_a, 15); @@ -864,7 +864,7 @@ MDB_dbi nano::mdb_store::table_to_dbi (tables table_a) const case tables::blocks: return blocks; case tables::pending: - return pending; + return lmdb_pending; case tables::unchecked: return unchecked; case tables::online_weight: @@ -942,20 +942,20 @@ void nano::mdb_store::rebuild_db (nano::write_transaction const & transaction_a) MDB_dbi temp; mdb_dbi_open (env.tx (transaction_a), "temp_table", MDB_CREATE, &temp); // Copy all values to temporary table - for (auto i (nano::store_iterator (std::make_unique> (transaction_a, pending))), n (nano::store_iterator (nullptr)); i != n; ++i) + for (auto i (nano::store_iterator (std::make_unique> (transaction_a, lmdb_pending))), n (nano::store_iterator (nullptr)); i != n; ++i) { auto s = mdb_put (env.tx (transaction_a), temp, nano::mdb_val (i->first), nano::mdb_val (i->second), MDB_APPEND); release_assert_success (*this, s); } - release_assert (count (transaction_a, pending) == count (transaction_a, temp)); - mdb_drop (env.tx (transaction_a), pending, 0); + release_assert (count (transaction_a, lmdb_pending) == count (transaction_a, temp)); + mdb_drop (env.tx (transaction_a), lmdb_pending, 0); // Put values from copy for (auto i (nano::store_iterator (std::make_unique> (transaction_a, temp))), n (nano::store_iterator (nullptr)); i != n; ++i) { - auto s = mdb_put (env.tx (transaction_a), pending, nano::mdb_val (i->first), nano::mdb_val (i->second), MDB_APPEND); + auto s = mdb_put (env.tx (transaction_a), lmdb_pending, nano::mdb_val (i->first), nano::mdb_val (i->second), MDB_APPEND); release_assert_success (*this, s); } - release_assert (count (transaction_a, pending) == count (transaction_a, temp)); + release_assert (count (transaction_a, lmdb_pending) == count (transaction_a, temp)); mdb_drop (env.tx (transaction_a), temp, 1); } } diff --git a/nano/node/lmdb/lmdb.hpp b/nano/node/lmdb/lmdb.hpp index 70c9fff45d..d61b8ae196 100644 --- a/nano/node/lmdb/lmdb.hpp +++ b/nano/node/lmdb/lmdb.hpp @@ -142,7 +142,7 @@ class mdb_store : public block_store_partial * Maps (destination account, pending block) to (source account, amount, version). (Removed) * nano::account, nano::block_hash -> nano::account, nano::amount, nano::epoch */ - MDB_dbi pending{ 0 }; + MDB_dbi lmdb_pending{ 0 }; /** * Representative weights. (Removed) diff --git a/nano/node/node.cpp b/nano/node/node.cpp index 4662eb2abd..85443218f6 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -1283,7 +1283,7 @@ void nano::node::receive_confirmed (nano::transaction const & block_transaction_ nano::account representative; nano::pending_info pending; representative = wallet->store.representative (wallet_transaction); - auto error (store.pending_get (block_transaction_a, nano::pending_key (destination_a, hash_a), pending)); + auto error (store.pending.get (block_transaction_a, nano::pending_key (destination_a, hash_a), pending)); if (!error) { auto amount (pending.amount.number ()); @@ -1607,7 +1607,7 @@ void nano::node::epoch_upgrader_impl (nano::raw_key const & prv_a, nano::epoch e uint64_t workers (0); uint64_t attempts (0); auto transaction (store.tx_begin_read ()); - for (auto i (store.pending_begin (transaction, nano::pending_key (1, 0))), n (store.pending_end ()); i != n && attempts < upgrade_batch_size && attempts < count_limit && !stopped;) + for (auto i (store.pending.begin (transaction, nano::pending_key (1, 0))), n (store.pending.end ()); i != n && attempts < upgrade_batch_size && attempts < count_limit && !stopped;) { bool to_next_account (false); nano::pending_key const & key (i->first); @@ -1668,7 +1668,7 @@ void nano::node::epoch_upgrader_impl (nano::raw_key const & prv_a, nano::epoch e } else { - i = store.pending_begin (transaction, nano::pending_key (key.account.number () + 1, 0)); + i = store.pending.begin (transaction, nano::pending_key (key.account.number () + 1, 0)); } } else diff --git a/nano/node/testing.cpp b/nano/node/testing.cpp index c0e8341bf2..35de3246a0 100644 --- a/nano/node/testing.cpp +++ b/nano/node/testing.cpp @@ -353,8 +353,8 @@ void nano::system::generate_receive (nano::node & node_a) auto transaction (node_a.store.tx_begin_read ()); nano::account random_account; random_pool::generate_block (random_account.bytes.data (), sizeof (random_account.bytes)); - auto i (node_a.store.pending_begin (transaction, nano::pending_key (random_account, 0))); - if (i != node_a.store.pending_end ()) + auto i (node_a.store.pending.begin (transaction, nano::pending_key (random_account, 0))); + if (i != node_a.store.pending.end ()) { nano::pending_key const & send_hash (i->first); send_block = node_a.store.block_get (transaction, send_hash.hash); diff --git a/nano/node/wallet.cpp b/nano/node/wallet.cpp index 7a676654f6..08a7594b54 100644 --- a/nano/node/wallet.cpp +++ b/nano/node/wallet.cpp @@ -841,7 +841,7 @@ std::shared_ptr nano::wallet::receive_action (nano::block_hash cons nano::pending_info pending_info; if (wallets.node.ledger.block_or_pruned_exists (block_transaction, send_hash_a)) { - if (!wallets.node.ledger.store.pending_get (block_transaction, nano::pending_key (account_a, send_hash_a), pending_info)) + if (!wallets.node.ledger.store.pending.get (block_transaction, nano::pending_key (account_a, send_hash_a), pending_info)) { nano::raw_key prv; if (!store.fetch (transaction, account_a, prv)) @@ -1178,7 +1178,7 @@ bool nano::wallet::search_pending (nano::transaction const & wallet_transaction_ // Don't search pending for watch-only accounts if (!nano::wallet_value (i->second).key.is_zero ()) { - for (auto j (wallets.node.store.pending_begin (block_transaction, nano::pending_key (account, 0))), k (wallets.node.store.pending_end ()); j != k && nano::pending_key (j->first).account == account; ++j) + for (auto j (wallets.node.store.pending.begin (block_transaction, nano::pending_key (account, 0))), k (wallets.node.store.pending.end ()); j != k && nano::pending_key (j->first).account == account; ++j) { nano::pending_key key (j->first); auto hash (key.hash); @@ -1243,7 +1243,7 @@ uint32_t nano::wallet::deterministic_check (nano::transaction const & transactio else { // Check if there are pending blocks for account - for (auto ii (wallets.node.store.pending_begin (block_transaction, nano::pending_key (pair.pub, 0))), nn (wallets.node.store.pending_end ()); ii != nn && nano::pending_key (ii->first).account == pair.pub; ++ii) + for (auto ii (wallets.node.store.pending.begin (block_transaction, nano::pending_key (pair.pub, 0))), nn (wallets.node.store.pending.end ()); ii != nn && nano::pending_key (ii->first).account == pair.pub; ++ii) { index = i; n = i + 64 + (i / 64); diff --git a/nano/qt/qt.cpp b/nano/qt/qt.cpp index 067a63ea60..c7ff3a1e44 100644 --- a/nano/qt/qt.cpp +++ b/nano/qt/qt.cpp @@ -2336,7 +2336,7 @@ void nano_qt::block_creation::create_receive () { nano::pending_key pending_key (destination, source_l); nano::pending_info pending; - if (!wallet.node.store.pending_get (block_transaction, pending_key, pending)) + if (!wallet.node.store.pending.get (block_transaction, pending_key, pending)) { nano::account_info info; auto error (wallet.node.store.account_get (block_transaction, pending_key.account, info)); @@ -2501,7 +2501,7 @@ void nano_qt::block_creation::create_open () { nano::pending_key pending_key (destination, source_l); nano::pending_info pending; - if (!wallet.node.store.pending_get (block_transaction, pending_key, pending)) + if (!wallet.node.store.pending.get (block_transaction, pending_key, pending)) { nano::account_info info; auto error (wallet.node.store.account_get (block_transaction, pending_key.account, info)); diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index 34e184a924..8c5c20e3e9 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -4250,7 +4250,7 @@ TEST (rpc, pending_exists) request.put ("hash", hash0.to_string ()); pending_exists ("0"); - node->store.pending_exists (node->store.tx_begin_read (), nano::pending_key (nano::dev_genesis_key.pub, block1->hash ())); + node->store.pending.exists (node->store.tx_begin_read (), nano::pending_key (nano::dev_genesis_key.pub, block1->hash ())); request.put ("hash", block1->hash ().to_string ()); pending_exists ("1"); @@ -7232,7 +7232,7 @@ TEST (rpc, epoch_upgrade) // Check pending entry auto transaction (node->store.tx_begin_read ()); nano::pending_info info; - ASSERT_FALSE (node->store.pending_get (transaction, nano::pending_key (key3.pub, send7->hash ()), info)); + ASSERT_FALSE (node->store.pending.get (transaction, nano::pending_key (key3.pub, send7->hash ()), info)); ASSERT_EQ (nano::epoch::epoch_1, info.epoch); } @@ -7333,7 +7333,7 @@ TEST (rpc, epoch_upgrade_multithreaded) // Check pending entry auto transaction (node->store.tx_begin_read ()); nano::pending_info info; - ASSERT_FALSE (node->store.pending_get (transaction, nano::pending_key (key3.pub, send7->hash ()), info)); + ASSERT_FALSE (node->store.pending.get (transaction, nano::pending_key (key3.pub, send7->hash ()), info)); ASSERT_EQ (nano::epoch::epoch_1, info.epoch); } diff --git a/nano/secure/CMakeLists.txt b/nano/secure/CMakeLists.txt index a0c9f42188..b2d8ec5a2a 100644 --- a/nano/secure/CMakeLists.txt +++ b/nano/secure/CMakeLists.txt @@ -54,7 +54,8 @@ add_library( versioning.hpp versioning.cpp working.hpp - store/frontier_store_partial.hpp) + store/frontier_store_partial.hpp + store/pending_store_partial.hpp) target_link_libraries( secure diff --git a/nano/secure/blockstore.cpp b/nano/secure/blockstore.cpp index bbd894eb9e..44e517ead3 100644 --- a/nano/secure/blockstore.cpp +++ b/nano/secure/blockstore.cpp @@ -105,7 +105,8 @@ bool nano::write_transaction::contains (nano::tables table_a) const return impl->contains (table_a); } -nano::block_store::block_store (nano::frontier_store & frontier_store_a) : - frontier (frontier_store_a) +nano::block_store::block_store (nano::frontier_store & frontier_store_a, nano::pending_store & pending_store_a) : + frontier (frontier_store_a), + pending (pending_store_a) { } diff --git a/nano/secure/blockstore.hpp b/nano/secure/blockstore.hpp index 6ee175d506..18be9bec82 100644 --- a/nano/secure/blockstore.hpp +++ b/nano/secure/blockstore.hpp @@ -620,6 +620,9 @@ class write_transaction final : public transaction class ledger_cache; +/** + * Manages frontier storage and iteration + */ class frontier_store { public: @@ -632,13 +635,30 @@ class frontier_store virtual void for_each_par (std::function, nano::store_iterator)> const & action_a) const = 0; }; +/** + * Manages pending storage and iteration + */ +class pending_store +{ +public: + virtual void put (nano::write_transaction const &, nano::pending_key const &, nano::pending_info const &) = 0; + virtual void del (nano::write_transaction const &, nano::pending_key const &) = 0; + virtual bool get (nano::transaction const &, nano::pending_key const &, nano::pending_info &) = 0; + virtual bool exists (nano::transaction const &, nano::pending_key const &) = 0; + virtual bool any (nano::transaction const &, nano::account const &) = 0; + virtual nano::store_iterator begin (nano::transaction const &, nano::pending_key const &) const = 0; + virtual nano::store_iterator begin (nano::transaction const &) const = 0; + virtual nano::store_iterator end () const = 0; + virtual void for_each_par (std::function, nano::store_iterator)> const & action_a) const = 0; +}; + /** * Manages block storage and iteration */ class block_store { public: - explicit block_store (nano::frontier_store &); + explicit block_store (nano::frontier_store &, nano::pending_store &); virtual ~block_store () = default; virtual void initialize (nano::write_transaction const &, nano::genesis const &, nano::ledger_cache &) = 0; virtual void block_put (nano::write_transaction const &, nano::block_hash const &, nano::block const &) = 0; @@ -670,14 +690,7 @@ class block_store virtual nano::store_iterator accounts_rbegin (nano::transaction const &) const = 0; virtual nano::store_iterator accounts_end () const = 0; - virtual void pending_put (nano::write_transaction const &, nano::pending_key const &, nano::pending_info const &) = 0; - virtual void pending_del (nano::write_transaction const &, nano::pending_key const &) = 0; - virtual bool pending_get (nano::transaction const &, nano::pending_key const &, nano::pending_info &) = 0; - virtual bool pending_exists (nano::transaction const &, nano::pending_key const &) = 0; - virtual bool pending_any (nano::transaction const &, nano::account const &) = 0; - virtual nano::store_iterator pending_begin (nano::transaction const &, nano::pending_key const &) const = 0; - virtual nano::store_iterator pending_begin (nano::transaction const &) const = 0; - virtual nano::store_iterator pending_end () const = 0; + pending_store & pending; virtual nano::uint128_t block_balance (nano::transaction const &, nano::block_hash const &) = 0; virtual nano::uint128_t block_balance_calculated (std::shared_ptr const &) const = 0; @@ -736,7 +749,6 @@ class block_store virtual void accounts_for_each_par (std::function, nano::store_iterator)> const &) const = 0; virtual void confirmation_height_for_each_par (std::function, nano::store_iterator)> const &) const = 0; - virtual void pending_for_each_par (std::function, nano::store_iterator)> const & action_a) const = 0; virtual void unchecked_for_each_par (std::function, nano::store_iterator)> const & action_a) const = 0; virtual void pruned_for_each_par (std::function, nano::store_iterator)> const & action_a) const = 0; virtual void blocks_for_each_par (std::function, nano::store_iterator)> const & action_a) const = 0; diff --git a/nano/secure/blockstore_partial.hpp b/nano/secure/blockstore_partial.hpp index 7a36bcd2d5..c82ac0e172 100644 --- a/nano/secure/blockstore_partial.hpp +++ b/nano/secure/blockstore_partial.hpp @@ -7,6 +7,7 @@ #include #include #include +#include #include @@ -36,7 +37,9 @@ void release_assert_success (block_store_partial const & blo template class block_store_partial : public block_store { - nano::frontier_store_partial frontier_store; + nano::frontier_store_partial frontier_store_partial; + + nano::pending_store_partial pending_store_partial; friend void release_assert_success (block_store_partial const & block_store, const int status); @@ -47,9 +50,12 @@ class block_store_partial : public block_store friend class nano::block_predecessor_set; friend class nano::frontier_store_partial; + friend class nano::pending_store_partial; + block_store_partial () : - block_store{ frontier_store }, - frontier_store{ *this } + block_store{ frontier_store_partial, pending_store_partial }, + frontier_store_partial{ *this }, + pending_store_partial{ *this } { } @@ -230,11 +236,6 @@ class block_store_partial : public block_store return nano::store_iterator (nullptr); } - nano::store_iterator pending_end () const override - { - return nano::store_iterator (nullptr); - } - nano::store_iterator online_weight_end () const override { return nano::store_iterator (nullptr); @@ -304,46 +305,6 @@ class block_store_partial : public block_store release_assert_success (*this, status); } - void pending_put (nano::write_transaction const & transaction_a, nano::pending_key const & key_a, nano::pending_info const & pending_info_a) override - { - nano::db_val pending (pending_info_a); - auto status = put (transaction_a, tables::pending, key_a, pending); - release_assert_success (*this, status); - } - - void pending_del (nano::write_transaction const & transaction_a, nano::pending_key const & key_a) override - { - auto status = del (transaction_a, tables::pending, key_a); - release_assert_success (*this, status); - } - - bool pending_get (nano::transaction const & transaction_a, nano::pending_key const & key_a, nano::pending_info & pending_a) override - { - nano::db_val value; - nano::db_val key (key_a); - auto status1 = get (transaction_a, tables::pending, key, value); - release_assert (success (status1) || not_found (status1)); - bool result (true); - if (success (status1)) - { - nano::bufferstream stream (reinterpret_cast (value.data ()), value.size ()); - result = pending_a.deserialize (stream); - } - return result; - } - - bool pending_exists (nano::transaction const & transaction_a, nano::pending_key const & key_a) override - { - auto iterator (pending_begin (transaction_a, key_a)); - return iterator != pending_end () && nano::pending_key (iterator->first) == key_a; - } - - bool pending_any (nano::transaction const & transaction_a, nano::account const & account_a) override - { - auto iterator (pending_begin (transaction_a, nano::pending_key (account_a, 0))); - return iterator != pending_end () && nano::pending_key (iterator->first).account == account_a; - } - void unchecked_del (nano::write_transaction const & transaction_a, nano::unchecked_key const & key_a) override { auto status (del (transaction_a, tables::unchecked, key_a)); @@ -667,16 +628,6 @@ class block_store_partial : public block_store return make_iterator (transaction_a, tables::blocks, nano::db_val (hash_a)); } - nano::store_iterator pending_begin (nano::transaction const & transaction_a, nano::pending_key const & key_a) const override - { - return make_iterator (transaction_a, tables::pending, nano::db_val (key_a)); - } - - nano::store_iterator pending_begin (nano::transaction const & transaction_a) const override - { - return make_iterator (transaction_a, tables::pending); - } - nano::store_iterator unchecked_begin (nano::transaction const & transaction_a) const override { return make_iterator (transaction_a, tables::unchecked); @@ -760,19 +711,6 @@ class block_store_partial : public block_store }); } - void pending_for_each_par (std::function, nano::store_iterator)> const & action_a) const override - { - parallel_traversal ( - [&action_a, this] (nano::uint512_t const & start, nano::uint512_t const & end, bool const is_last) { - nano::uint512_union union_start (start); - nano::uint512_union union_end (end); - nano::pending_key key_start (union_start.uint256s[0].number (), union_start.uint256s[1].number ()); - nano::pending_key key_end (union_end.uint256s[0].number (), union_end.uint256s[1].number ()); - auto transaction (this->tx_begin_read ()); - action_a (transaction, this->pending_begin (transaction, key_start), !is_last ? this->pending_begin (transaction, key_end) : this->pending_end ()); - }); - } - void unchecked_for_each_par (std::function, nano::store_iterator)> const & action_a) const override { parallel_traversal ( diff --git a/nano/secure/ledger.cpp b/nano/secure/ledger.cpp index 4d571b288a..19e0a465b5 100644 --- a/nano/secure/ledger.cpp +++ b/nano/secure/ledger.cpp @@ -28,7 +28,7 @@ class rollback_visitor : public nano::block_visitor auto hash (block_a.hash ()); nano::pending_info pending; nano::pending_key key (block_a.hashables.destination, hash); - while (!error && ledger.store.pending_get (transaction, key, pending)) + while (!error && ledger.store.pending.get (transaction, key, pending)) { error = ledger.rollback (transaction, ledger.latest (transaction, block_a.hashables.destination), list); } @@ -37,7 +37,7 @@ class rollback_visitor : public nano::block_visitor nano::account_info info; [[maybe_unused]] auto error (ledger.store.account_get (transaction, pending.source, info)); debug_assert (!error); - ledger.store.pending_del (transaction, key); + ledger.store.pending.del (transaction, key); ledger.cache.rep_weights.representation_add (info.representative, pending.amount.number ()); nano::account_info new_info (block_a.hashables.previous, info.representative, info.open_block, ledger.balance (transaction, block_a.hashables.previous), nano::seconds_since_epoch (), info.block_count - 1, nano::epoch::epoch_0); ledger.update_account (transaction, pending.source, info, new_info); @@ -63,7 +63,7 @@ class rollback_visitor : public nano::block_visitor nano::account_info new_info (block_a.hashables.previous, info.representative, info.open_block, ledger.balance (transaction, block_a.hashables.previous), nano::seconds_since_epoch (), info.block_count - 1, nano::epoch::epoch_0); ledger.update_account (transaction, destination_account, info, new_info); ledger.store.block_del (transaction, hash); - ledger.store.pending_put (transaction, nano::pending_key (destination_account, block_a.hashables.source), { source_account, amount, nano::epoch::epoch_0 }); + ledger.store.pending.put (transaction, nano::pending_key (destination_account, block_a.hashables.source), { source_account, amount, nano::epoch::epoch_0 }); ledger.store.frontier.del (transaction, hash); ledger.store.frontier.put (transaction, block_a.hashables.previous, destination_account); ledger.store.block_successor_clear (transaction, block_a.hashables.previous); @@ -81,7 +81,7 @@ class rollback_visitor : public nano::block_visitor nano::account_info new_info; ledger.update_account (transaction, destination_account, new_info, new_info); ledger.store.block_del (transaction, hash); - ledger.store.pending_put (transaction, nano::pending_key (destination_account, block_a.hashables.source), { source_account, amount, nano::epoch::epoch_0 }); + ledger.store.pending.put (transaction, nano::pending_key (destination_account, block_a.hashables.source), { source_account, amount, nano::epoch::epoch_0 }); ledger.store.frontier.del (transaction, hash); ledger.stats.inc (nano::stat::type::rollback, nano::stat::detail::open); } @@ -137,11 +137,11 @@ class rollback_visitor : public nano::block_visitor if (is_send) { nano::pending_key key (block_a.hashables.link.as_account (), hash); - while (!error && !ledger.store.pending_exists (transaction, key)) + while (!error && !ledger.store.pending.exists (transaction, key)) { error = ledger.rollback (transaction, ledger.latest (transaction, block_a.hashables.link.as_account ()), list); } - ledger.store.pending_del (transaction, key); + ledger.store.pending.del (transaction, key); ledger.stats.inc (nano::stat::type::rollback, nano::stat::detail::send); } else if (!block_a.hashables.link.is_zero () && !ledger.is_epoch_link (block_a.hashables.link)) @@ -150,7 +150,7 @@ class rollback_visitor : public nano::block_visitor [[maybe_unused]] bool is_pruned (false); auto source_account (ledger.account_safe (transaction, block_a.hashables.link.as_block_hash (), is_pruned)); nano::pending_info pending_info (source_account, block_a.hashables.balance.number () - balance, block_a.sideband ().source_epoch); - ledger.store.pending_put (transaction, nano::pending_key (block_a.hashables.account, block_a.hashables.link.as_block_hash ()), pending_info); + ledger.store.pending.put (transaction, nano::pending_key (block_a.hashables.account, block_a.hashables.link.as_block_hash ()), pending_info); ledger.stats.inc (nano::stat::type::rollback, nano::stat::detail::receive); } @@ -327,7 +327,7 @@ void ledger_processor::state_block_impl (nano::state_block & block_a) { nano::pending_key key (block_a.hashables.account, block_a.hashables.link.as_block_hash ()); nano::pending_info pending; - result.code = ledger.store.pending_get (transaction, key, pending) ? nano::process_result::unreceivable : nano::process_result::progress; // Has this source already been received (Malformed) + result.code = ledger.store.pending.get (transaction, key, pending) ? nano::process_result::unreceivable : nano::process_result::progress; // Has this source already been received (Malformed) if (result.code == nano::process_result::progress) { result.code = amount == pending.amount ? nano::process_result::progress : nano::process_result::balance_mismatch; @@ -368,11 +368,11 @@ void ledger_processor::state_block_impl (nano::state_block & block_a) { nano::pending_key key (block_a.hashables.link.as_account (), hash); nano::pending_info info (block_a.hashables.account, amount.number (), epoch); - ledger.store.pending_put (transaction, key, info); + ledger.store.pending.put (transaction, key, info); } else if (!block_a.hashables.link.is_zero ()) { - ledger.store.pending_del (transaction, nano::pending_key (block_a.hashables.account, block_a.hashables.link.as_block_hash ())); + ledger.store.pending.del (transaction, nano::pending_key (block_a.hashables.account, block_a.hashables.link.as_block_hash ())); } nano::account_info new_info (hash, block_a.representative (), info.open_block.is_zero () ? hash : info.open_block, block_a.hashables.balance, nano::seconds_since_epoch (), info.block_count + 1, epoch); @@ -430,7 +430,7 @@ void ledger_processor::epoch_block_impl (nano::state_block & block_a) // Non-exisitng account should have pending entries if (result.code == nano::process_result::progress) { - bool pending_exists = ledger.store.pending_any (transaction, block_a.hashables.account); + bool pending_exists = ledger.store.pending.any (transaction, block_a.hashables.account); result.code = pending_exists ? nano::process_result::progress : nano::process_result::gap_epoch_open_pending; } } @@ -566,7 +566,7 @@ void ledger_processor::send_block (nano::send_block & block_a) ledger.store.block_put (transaction, hash, block_a); nano::account_info new_info (hash, info.representative, info.open_block, block_a.hashables.balance, nano::seconds_since_epoch (), info.block_count + 1, nano::epoch::epoch_0); ledger.update_account (transaction, account, info, new_info); - ledger.store.pending_put (transaction, nano::pending_key (block_a.hashables.destination, hash), { account, amount, nano::epoch::epoch_0 }); + ledger.store.pending.put (transaction, nano::pending_key (block_a.hashables.destination, hash), { account, amount, nano::epoch::epoch_0 }); ledger.store.frontier.del (transaction, block_a.hashables.previous); ledger.store.frontier.put (transaction, hash, account); result.previous_balance = info.balance; @@ -617,7 +617,7 @@ void ledger_processor::receive_block (nano::receive_block & block_a) { nano::pending_key key (account, block_a.hashables.source); nano::pending_info pending; - result.code = ledger.store.pending_get (transaction, key, pending) ? nano::process_result::unreceivable : nano::process_result::progress; // Has this source already been received (Malformed) + result.code = ledger.store.pending.get (transaction, key, pending) ? nano::process_result::unreceivable : nano::process_result::progress; // Has this source already been received (Malformed) if (result.code == nano::process_result::progress) { result.code = pending.epoch == nano::epoch::epoch_0 ? nano::process_result::progress : nano::process_result::unreceivable; // Are we receiving a state-only send? (Malformed) @@ -636,7 +636,7 @@ void ledger_processor::receive_block (nano::receive_block & block_a) debug_assert (!error); } #endif - ledger.store.pending_del (transaction, key); + ledger.store.pending.del (transaction, key); block_a.sideband_set (nano::block_sideband (account, 0, new_balance, info.block_count + 1, nano::seconds_since_epoch (), block_details, nano::epoch::epoch_0 /* unused */)); ledger.store.block_put (transaction, hash, block_a); nano::account_info new_info (hash, info.representative, info.open_block, new_balance, nano::seconds_since_epoch (), info.block_count + 1, nano::epoch::epoch_0); @@ -687,7 +687,7 @@ void ledger_processor::open_block (nano::open_block & block_a) { nano::pending_key key (block_a.hashables.account, block_a.hashables.source); nano::pending_info pending; - result.code = ledger.store.pending_get (transaction, key, pending) ? nano::process_result::unreceivable : nano::process_result::progress; // Has this source already been received (Malformed) + result.code = ledger.store.pending.get (transaction, key, pending) ? nano::process_result::unreceivable : nano::process_result::progress; // Has this source already been received (Malformed) if (result.code == nano::process_result::progress) { result.code = block_a.hashables.account == ledger.network_params.ledger.burn_account ? nano::process_result::opened_burn_account : nano::process_result::progress; // Is it burning 0 account? (Malicious) @@ -708,7 +708,7 @@ void ledger_processor::open_block (nano::open_block & block_a) debug_assert (!error); } #endif - ledger.store.pending_del (transaction, key); + ledger.store.pending.del (transaction, key); block_a.sideband_set (nano::block_sideband (block_a.hashables.account, 0, pending.amount, 1, nano::seconds_since_epoch (), block_details, nano::epoch::epoch_0 /* unused */)); ledger.store.block_put (transaction, hash, block_a); nano::account_info new_info (hash, block_a.representative (), hash, pending.amount.number (), nano::seconds_since_epoch (), 1, nano::epoch::epoch_0); @@ -842,7 +842,7 @@ nano::uint128_t nano::ledger::account_pending (nano::transaction const & transac { nano::uint128_t result (0); nano::account end (account_a.number () + 1); - for (auto i (store.pending_begin (transaction_a, nano::pending_key (account_a, 0))), n (store.pending_begin (transaction_a, nano::pending_key (end, 0))); i != n; ++i) + for (auto i (store.pending.begin (transaction_a, nano::pending_key (account_a, 0))), n (store.pending.begin (transaction_a, nano::pending_key (end, 0))); i != n; ++i) { nano::pending_info const & info (i->second); if (only_confirmed_a) @@ -1445,12 +1445,12 @@ bool nano::ledger::migrate_lmdb_to_rocksdb (boost::filesystem::path const & data } }); - store.pending_for_each_par ( + store.pending.for_each_par ( [&rocksdb_store] (nano::read_transaction const & /*unused*/, auto i, auto n) { for (; i != n; ++i) { auto rocksdb_transaction (rocksdb_store->tx_begin_write ({}, { nano::tables::pending })); - rocksdb_store->pending_put (rocksdb_transaction, i->first, i->second); + rocksdb_store->pending.put (rocksdb_transaction, i->first, i->second); } }); diff --git a/nano/secure/store/pending_store_partial.hpp b/nano/secure/store/pending_store_partial.hpp new file mode 100644 index 0000000000..bfe1502cc1 --- /dev/null +++ b/nano/secure/store/pending_store_partial.hpp @@ -0,0 +1,100 @@ +#pragma once + +#include + +namespace +{ +template +void parallel_traversal (std::function const & action); +} + +namespace nano +{ +template +class block_store_partial; + +template +void release_assert_success (block_store_partial const & block_store, const int status); + +template +class pending_store_partial : public pending_store +{ +private: + nano::block_store_partial & block_store; + + friend void release_assert_success (block_store_partial const & block_store, const int status); + +public: + explicit pending_store_partial (nano::block_store_partial & block_store_a) : + block_store (block_store_a){}; + + void put (nano::write_transaction const & transaction_a, nano::pending_key const & key_a, nano::pending_info const & pending_info_a) override + { + nano::db_val pending (pending_info_a); + auto status = block_store.put (transaction_a, tables::pending, key_a, pending); + release_assert_success (block_store, status); + } + + void del (nano::write_transaction const & transaction_a, nano::pending_key const & key_a) override + { + auto status = block_store.del (transaction_a, tables::pending, key_a); + release_assert_success (block_store, status); + } + + bool get (nano::transaction const & transaction_a, nano::pending_key const & key_a, nano::pending_info & pending_a) override + { + nano::db_val value; + nano::db_val key (key_a); + auto status1 = block_store.get (transaction_a, tables::pending, key, value); + release_assert (block_store.success (status1) || block_store.not_found (status1)); + bool result (true); + if (block_store.success (status1)) + { + nano::bufferstream stream (reinterpret_cast (value.data ()), value.size ()); + result = pending_a.deserialize (stream); + } + return result; + } + + bool exists (nano::transaction const & transaction_a, nano::pending_key const & key_a) override + { + auto iterator (begin (transaction_a, key_a)); + return iterator != end () && nano::pending_key (iterator->first) == key_a; + } + + bool any (nano::transaction const & transaction_a, nano::account const & account_a) override + { + auto iterator (begin (transaction_a, nano::pending_key (account_a, 0))); + return iterator != end () && nano::pending_key (iterator->first).account == account_a; + } + + nano::store_iterator begin (nano::transaction const & transaction_a, nano::pending_key const & key_a) const override + { + return block_store.template make_iterator (transaction_a, tables::pending, nano::db_val (key_a)); + } + + nano::store_iterator begin (nano::transaction const & transaction_a) const override + { + return block_store.template make_iterator (transaction_a, tables::pending); + } + + nano::store_iterator end () const override + { + return nano::store_iterator (nullptr); + } + + void for_each_par (std::function, nano::store_iterator)> const & action_a) const override + { + parallel_traversal ( + [&action_a, this] (nano::uint512_t const & start, nano::uint512_t const & end, bool const is_last) { + nano::uint512_union union_start (start); + nano::uint512_union union_end (end); + nano::pending_key key_start (union_start.uint256s[0].number (), union_start.uint256s[1].number ()); + nano::pending_key key_end (union_end.uint256s[0].number (), union_end.uint256s[1].number ()); + auto transaction (this->block_store.tx_begin_read ()); + action_a (transaction, this->begin (transaction, key_start), !is_last ? this->begin (transaction, key_end) : this->end ()); + }); + } +}; + +} From c1af0f8f9eef739536703b65e42d19b4954ff4a6 Mon Sep 17 00:00:00 2001 From: theohax Date: Thu, 27 May 2021 16:11:08 +0300 Subject: [PATCH 026/346] Log a warning if the number of open file descriptors limit is still lower than recommended after changing it --- nano/nano_node/daemon.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/nano/nano_node/daemon.cpp b/nano/nano_node/daemon.cpp index 2c49195389..184f48145a 100644 --- a/nano/nano_node/daemon.cpp +++ b/nano/nano_node/daemon.cpp @@ -73,7 +73,15 @@ void nano_daemon::daemon::run (boost::filesystem::path const & data_path, nano:: logger.always_log (initialization_text); nano::set_file_descriptor_limit (OPEN_FILE_DESCRIPTORS_LIMIT); - logger.always_log (boost::format ("Open file descriptors limit is %1%") % nano::get_file_descriptor_limit ()); + const auto file_descriptor_limit = nano::get_file_descriptor_limit (); + if (file_descriptor_limit < OPEN_FILE_DESCRIPTORS_LIMIT) + { + logger.always_log (boost::format ("WARNING: open file descriptors limit is %1%, lower than the %2% recommended. Node was unable to change it.") % file_descriptor_limit % OPEN_FILE_DESCRIPTORS_LIMIT); + } + else + { + logger.always_log (boost::format ("Open file descriptors limit is %1%") % file_descriptor_limit); + } auto node (std::make_shared (io_ctx, data_path, config.node, opencl_work, flags)); if (!node->init_error ()) From aec8d805edbc9a8054370bdfda1094d50127e498 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Thu, 27 May 2021 14:35:22 +0100 Subject: [PATCH 027/346] Fix compilation failure on OSX. (#3309) --- nano/lib/utility.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nano/lib/utility.cpp b/nano/lib/utility.cpp index 5c26a772f6..53d9bbaf20 100644 --- a/nano/lib/utility.cpp +++ b/nano/lib/utility.cpp @@ -63,7 +63,7 @@ void nano::set_file_descriptor_limit (std::size_t limit) return; } - fd_limit.rlim_cur = std::min (limit, fd_limit.rlim_max); + fd_limit.rlim_cur = std::min (static_cast (limit), fd_limit.rlim_max); if (-1 == setrlimit (RLIMIT_NOFILE, &fd_limit)) { std::cerr << "Unable to set limits for the number of open file descriptors: " << std::strerror (errno); From eca91849e62fa694bd40c24c7afe9aa83c78fc38 Mon Sep 17 00:00:00 2001 From: Sergey Kroshnin Date: Fri, 28 May 2021 01:41:12 +0300 Subject: [PATCH 028/346] Remove election blocks () debug assert (#3311) --- nano/node/election.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/nano/node/election.cpp b/nano/node/election.cpp index 96cc674da0..e730f15796 100644 --- a/nano/node/election.cpp +++ b/nano/node/election.cpp @@ -612,7 +612,6 @@ void nano::election::force_confirm (nano::election_status_type type_a) std::unordered_map> nano::election::blocks () const { - debug_assert (node.network_params.network.is_dev_network ()); nano::lock_guard guard (mutex); return last_blocks; } From ebde1c8bcb0253c9521f07238798e6edbd39cb4d Mon Sep 17 00:00:00 2001 From: MajorChump Date: Fri, 28 May 2021 13:53:32 +0100 Subject: [PATCH 029/346] Split election drop stats to be either overflow or expired (#3297) At the moment it's not clear if elections are simply expiring after 5 minutes or being dropped due to the container overflowing. This should give us a better insight and allow us to monitor the situation. --- nano/core_test/active_transactions.cpp | 6 ++++-- nano/lib/stats.cpp | 10 ++++++++-- nano/lib/stats.hpp | 4 +++- nano/node/active_transactions.cpp | 8 +++++++- 4 files changed, 22 insertions(+), 6 deletions(-) diff --git a/nano/core_test/active_transactions.cpp b/nano/core_test/active_transactions.cpp index f09117c6e8..8646ab4a25 100644 --- a/nano/core_test/active_transactions.cpp +++ b/nano/core_test/active_transactions.cpp @@ -613,7 +613,7 @@ TEST (active_transactions, dropped_cleanup) ASSERT_FALSE (node.network.publish_filter.apply (block_bytes.data (), block_bytes.size ())); // An election was recently dropped - ASSERT_EQ (1, node.stats.count (nano::stat::type::election, nano::stat::detail::election_drop)); + ASSERT_EQ (1, node.stats.count (nano::stat::type::election, nano::stat::detail::election_drop_all)); // Block cleared from active ASSERT_EQ (0, node.active.blocks.count (block->hash ())); @@ -632,7 +632,7 @@ TEST (active_transactions, dropped_cleanup) ASSERT_TRUE (node.network.publish_filter.apply (block_bytes.data (), block_bytes.size ())); // Not dropped - ASSERT_EQ (1, node.stats.count (nano::stat::type::election, nano::stat::detail::election_drop)); + ASSERT_EQ (1, node.stats.count (nano::stat::type::election, nano::stat::detail::election_drop_all)); // Block cleared from active ASSERT_EQ (0, node.active.blocks.count (block->hash ())); @@ -1525,6 +1525,8 @@ TEST (active_transactions, fifo) ASSERT_TIMELY (1s, node.active.election (receive1->qualified_root ()) != nullptr); // Ensure excess transactions get trimmed ASSERT_TIMELY (1s, node.active.size () == 1); + // Ensure overflow stats have been incremented + ASSERT_EQ (1, node.stats.count (nano::stat::type::election, nano::stat::detail::election_drop_overflow)); // Ensure the surviving transaction is the least recently inserted ASSERT_TIMELY (1s, node.active.election (receive1->qualified_root ()) != nullptr); } diff --git a/nano/lib/stats.cpp b/nano/lib/stats.cpp index f1db603667..0b02dec981 100644 --- a/nano/lib/stats.cpp +++ b/nano/lib/stats.cpp @@ -739,8 +739,14 @@ std::string nano::stat::detail_to_string (uint32_t key) case nano::stat::detail::election_difficulty_update: res = "election_difficulty_update"; break; - case nano::stat::detail::election_drop: - res = "election_drop"; + case nano::stat::detail::election_drop_expired: + res = "election_drop_expired"; + break; + case nano::stat::detail::election_drop_overflow: + res = "election_drop_overflow"; + break; + case nano::stat::detail::election_drop_all: + res = "election_drop_all"; break; case nano::stat::detail::election_restart: res = "election_restart"; diff --git a/nano/lib/stats.hpp b/nano/lib/stats.hpp index 1d28bc6085..9a72089e66 100644 --- a/nano/lib/stats.hpp +++ b/nano/lib/stats.hpp @@ -318,7 +318,9 @@ class stat final election_start, election_block_conflict, election_difficulty_update, - election_drop, + election_drop_expired, + election_drop_overflow, + election_drop_all, election_restart, // udp diff --git a/nano/node/active_transactions.cpp b/nano/node/active_transactions.cpp index 39d95dcb7c..248b659778 100644 --- a/nano/node/active_transactions.cpp +++ b/nano/node/active_transactions.cpp @@ -316,6 +316,7 @@ void nano::active_transactions::request_confirm (nano::unique_lock for (auto const & election_l : elections_l) { bool const confirmed_l (election_l->confirmed ()); + unconfirmed_count_l += !confirmed_l; if (election_l->transition_time (solicitor)) { @@ -330,6 +331,10 @@ void nano::active_transactions::request_confirm (nano::unique_lock } // Locks active mutex, cleans up the election and erases it from the main container + if (!confirmed_l) + { + node.stats.inc (nano::stat::type::election, nano::stat::detail::election_drop_expired); + } erase (election_l->qualified_root); } } @@ -349,7 +354,7 @@ void nano::active_transactions::cleanup_election (nano::unique_lock { if (!election.confirmed ()) { - node.stats.inc (nano::stat::type::election, nano::stat::detail::election_drop); + node.stats.inc (nano::stat::type::election, nano::stat::detail::election_drop_all); } auto blocks_l = election.blocks (); @@ -1049,6 +1054,7 @@ void nano::active_transactions::erase_oldest () nano::unique_lock lock (mutex); if (!roots.empty ()) { + node.stats.inc (nano::stat::type::election, nano::stat::detail::election_drop_overflow); auto item = roots.get ().front (); cleanup_election (lock, *item.election); } From 1a3857fd4ea38fee26607a9b788965e05b3488aa Mon Sep 17 00:00:00 2001 From: Thiago Silva <82097354+thsfs@users.noreply.github.com> Date: Wed, 2 Jun 2021 10:37:25 -0300 Subject: [PATCH 030/346] Online weight store break up (#3316) * Moves online weight store out of block store class * Renames the function names --- nano/core_test/block_store.cpp | 34 +++++------ nano/core_test/ledger.cpp | 6 +- nano/nano_node/entry.cpp | 2 +- nano/node/cli.cpp | 4 +- nano/node/lmdb/lmdb.cpp | 4 +- nano/node/lmdb/lmdb.hpp | 2 +- nano/node/node.cpp | 12 ++-- nano/node/online_reps.cpp | 12 ++-- nano/node/rocksdb/rocksdb.cpp | 2 +- nano/secure/CMakeLists.txt | 3 +- nano/secure/blockstore.cpp | 5 +- nano/secure/blockstore.hpp | 25 +++++--- nano/secure/blockstore_partial.hpp | 49 ++-------------- nano/secure/ledger.cpp | 6 +- nano/secure/store/online_weight_partial.hpp | 65 +++++++++++++++++++++ 15 files changed, 135 insertions(+), 96 deletions(-) create mode 100644 nano/secure/store/online_weight_partial.hpp diff --git a/nano/core_test/block_store.cpp b/nano/core_test/block_store.cpp index f21771636e..c409aec64b 100644 --- a/nano/core_test/block_store.cpp +++ b/nano/core_test/block_store.cpp @@ -1171,32 +1171,32 @@ TEST (block_store, online_weight) ASSERT_FALSE (store->init_error ()); { auto transaction (store->tx_begin_write ()); - ASSERT_EQ (0, store->online_weight_count (transaction)); - ASSERT_EQ (store->online_weight_end (), store->online_weight_begin (transaction)); - ASSERT_EQ (store->online_weight_end (), store->online_weight_rbegin (transaction)); - store->online_weight_put (transaction, 1, 2); - store->online_weight_put (transaction, 3, 4); + ASSERT_EQ (0, store->online_weight.count (transaction)); + ASSERT_EQ (store->online_weight.end (), store->online_weight.begin (transaction)); + ASSERT_EQ (store->online_weight.end (), store->online_weight.rbegin (transaction)); + store->online_weight.put (transaction, 1, 2); + store->online_weight.put (transaction, 3, 4); } { auto transaction (store->tx_begin_write ()); - ASSERT_EQ (2, store->online_weight_count (transaction)); - auto item (store->online_weight_begin (transaction)); - ASSERT_NE (store->online_weight_end (), item); + ASSERT_EQ (2, store->online_weight.count (transaction)); + auto item (store->online_weight.begin (transaction)); + ASSERT_NE (store->online_weight.end (), item); ASSERT_EQ (1, item->first); ASSERT_EQ (2, item->second.number ()); - auto item_last (store->online_weight_rbegin (transaction)); - ASSERT_NE (store->online_weight_end (), item_last); + auto item_last (store->online_weight.rbegin (transaction)); + ASSERT_NE (store->online_weight.end (), item_last); ASSERT_EQ (3, item_last->first); ASSERT_EQ (4, item_last->second.number ()); - store->online_weight_del (transaction, 1); - ASSERT_EQ (1, store->online_weight_count (transaction)); - ASSERT_EQ (store->online_weight_begin (transaction), store->online_weight_rbegin (transaction)); - store->online_weight_del (transaction, 3); + store->online_weight.del (transaction, 1); + ASSERT_EQ (1, store->online_weight.count (transaction)); + ASSERT_EQ (store->online_weight.begin (transaction), store->online_weight.rbegin (transaction)); + store->online_weight.del (transaction, 3); } auto transaction (store->tx_begin_read ()); - ASSERT_EQ (0, store->online_weight_count (transaction)); - ASSERT_EQ (store->online_weight_end (), store->online_weight_begin (transaction)); - ASSERT_EQ (store->online_weight_end (), store->online_weight_rbegin (transaction)); + ASSERT_EQ (0, store->online_weight.count (transaction)); + ASSERT_EQ (store->online_weight.end (), store->online_weight.begin (transaction)); + ASSERT_EQ (store->online_weight.end (), store->online_weight.rbegin (transaction)); } TEST (block_store, pruned_blocks) diff --git a/nano/core_test/ledger.cpp b/nano/core_test/ledger.cpp index bf5e6591ae..7e9a0f29b4 100644 --- a/nano/core_test/ledger.cpp +++ b/nano/core_test/ledger.cpp @@ -3862,7 +3862,7 @@ TEST (ledger, migrate_lmdb_to_rocksdb) // Lower the database to the max version unsupported for upgrades store.confirmation_height_put (transaction, nano::genesis_account, { 2, send->hash () }); - store.online_weight_put (transaction, 100, nano::amount (2)); + store.online_weight.put (transaction, 100, nano::amount (2)); store.frontier.put (transaction, nano::block_hash (2), nano::account (5)); store.peer_put (transaction, endpoint_key); @@ -3884,13 +3884,13 @@ TEST (ledger, migrate_lmdb_to_rocksdb) nano::pending_info pending_info; ASSERT_FALSE (rocksdb_store.pending.get (rocksdb_transaction, nano::pending_key (nano::genesis_account, send->hash ()), pending_info)); - for (auto i = rocksdb_store.online_weight_begin (rocksdb_transaction); i != rocksdb_store.online_weight_end (); ++i) + for (auto i = rocksdb_store.online_weight.begin (rocksdb_transaction); i != rocksdb_store.online_weight.end (); ++i) { ASSERT_EQ (i->first, 100); ASSERT_EQ (i->second, 2); } - ASSERT_EQ (rocksdb_store.online_weight_count (rocksdb_transaction), 1); + ASSERT_EQ (rocksdb_store.online_weight.count (rocksdb_transaction), 1); auto block1 = rocksdb_store.block_get (rocksdb_transaction, send->hash ()); diff --git a/nano/nano_node/entry.cpp b/nano/nano_node/entry.cpp index 87c4820950..607ed8a352 100644 --- a/nano/nano_node/entry.cpp +++ b/nano/nano_node/entry.cpp @@ -379,7 +379,7 @@ int main (int argc, char * const * argv) auto current (node->online_reps.trended ()); std::cout << boost::str (boost::format ("Trended Weight %1%\n") % current); auto transaction (node->store.tx_begin_read ()); - for (auto i (node->store.online_weight_begin (transaction)), n (node->store.online_weight_end ()); i != n; ++i) + for (auto i (node->store.online_weight.begin (transaction)), n (node->store.online_weight.end ()); i != n; ++i) { using time_point = std::chrono::system_clock::time_point; time_point ts (std::chrono::duration_cast (std::chrono::nanoseconds (i->first))); diff --git a/nano/node/cli.cpp b/nano/node/cli.cpp index 5524a73633..c58c04e75e 100644 --- a/nano/node/cli.cpp +++ b/nano/node/cli.cpp @@ -228,7 +228,7 @@ bool copy_database (boost::filesystem::path const & data_path, boost::program_op } if (vm.count ("online_weight_clear")) { - node.node->store.online_weight_clear (store.tx_begin_write ()); + node.node->store.online_weight.clear (store.tx_begin_write ()); } if (vm.count ("peer_clear")) { @@ -527,7 +527,7 @@ std::error_code nano::handle_node_options (boost::program_options::variables_map if (!node.node->init_error ()) { auto transaction (node.node->store.tx_begin_write ()); - node.node->store.online_weight_clear (transaction); + node.node->store.online_weight.clear (transaction); std::cout << "Onine weight records are removed" << std::endl; } else diff --git a/nano/node/lmdb/lmdb.cpp b/nano/node/lmdb/lmdb.cpp index a4ca78956b..0068025312 100644 --- a/nano/node/lmdb/lmdb.cpp +++ b/nano/node/lmdb/lmdb.cpp @@ -190,7 +190,7 @@ void nano::mdb_store::open_databases (bool & error_a, nano::transaction const & { error_a |= mdb_dbi_open (env.tx (transaction_a), "frontiers", flags, &frontiers) != 0; error_a |= mdb_dbi_open (env.tx (transaction_a), "unchecked", flags, &unchecked) != 0; - error_a |= mdb_dbi_open (env.tx (transaction_a), "online_weight", flags, &online_weight) != 0; + error_a |= mdb_dbi_open (env.tx (transaction_a), "online_weight", flags, &online_weight_handle) != 0; error_a |= mdb_dbi_open (env.tx (transaction_a), "meta", flags, &meta) != 0; error_a |= mdb_dbi_open (env.tx (transaction_a), "peers", flags, &peers) != 0; error_a |= mdb_dbi_open (env.tx (transaction_a), "pruned", flags, &pruned) != 0; @@ -868,7 +868,7 @@ MDB_dbi nano::mdb_store::table_to_dbi (tables table_a) const case tables::unchecked: return unchecked; case tables::online_weight: - return online_weight; + return online_weight_handle; case tables::meta: return meta; case tables::peers: diff --git a/nano/node/lmdb/lmdb.hpp b/nano/node/lmdb/lmdb.hpp index d61b8ae196..fbdf015e30 100644 --- a/nano/node/lmdb/lmdb.hpp +++ b/nano/node/lmdb/lmdb.hpp @@ -160,7 +160,7 @@ class mdb_store : public block_store_partial * Samples of online vote weight * uint64_t -> nano::amount */ - MDB_dbi online_weight{ 0 }; + MDB_dbi online_weight_handle{ 0 }; /** * Meta information about block store, such as versions. diff --git a/nano/node/node.cpp b/nano/node/node.cpp index 85443218f6..4a68587ca3 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -754,17 +754,17 @@ void nano::node::long_inactivity_cleanup () { bool perform_cleanup = false; auto transaction (store.tx_begin_write ({ tables::online_weight, tables::peers })); - if (store.online_weight_count (transaction) > 0) + if (store.online_weight.count (transaction) > 0) { - auto sample (store.online_weight_rbegin (transaction)); - auto n (store.online_weight_end ()); + auto sample (store.online_weight.rbegin (transaction)); + auto n (store.online_weight.end ()); debug_assert (sample != n); auto const one_week_ago = static_cast ((std::chrono::system_clock::now () - std::chrono::hours (7 * 24)).time_since_epoch ().count ()); perform_cleanup = sample->first < one_week_ago; } if (perform_cleanup) { - store.online_weight_clear (transaction); + store.online_weight.clear (transaction); store.peer_clear (transaction); logger.always_log ("Removed records of peers and online weight after a long period of inactivity"); } @@ -816,8 +816,8 @@ void nano::node::ongoing_bootstrap () { // Find last online weight sample (last active time for node) uint64_t last_sample_time (0); - auto last_record = store.online_weight_rbegin (store.tx_begin_read ()); - if (last_record != store.online_weight_end ()) + auto last_record = store.online_weight.rbegin (store.tx_begin_read ()); + if (last_record != store.online_weight.end ()) { last_sample_time = last_record->first; } diff --git a/nano/node/online_reps.cpp b/nano/node/online_reps.cpp index 774b81dfb4..89b6d98646 100644 --- a/nano/node/online_reps.cpp +++ b/nano/node/online_reps.cpp @@ -41,13 +41,13 @@ void nano::online_reps::sample () { auto transaction (ledger.store.tx_begin_write ({ tables::online_weight })); // Discard oldest entries - while (ledger.store.online_weight_count (transaction) >= config.network_params.node.max_weight_samples) + while (ledger.store.online_weight.count (transaction) >= config.network_params.node.max_weight_samples) { - auto oldest (ledger.store.online_weight_begin (transaction)); - debug_assert (oldest != ledger.store.online_weight_end ()); - ledger.store.online_weight_del (transaction, oldest->first); + auto oldest (ledger.store.online_weight.begin (transaction)); + debug_assert (oldest != ledger.store.online_weight.end ()); + ledger.store.online_weight.del (transaction, oldest->first); } - ledger.store.online_weight_put (transaction, std::chrono::system_clock::now ().time_since_epoch ().count (), online_l); + ledger.store.online_weight.put (transaction, std::chrono::system_clock::now ().time_since_epoch ().count (), online_l); trend_l = calculate_trend (transaction); } lock.lock (); @@ -69,7 +69,7 @@ nano::uint128_t nano::online_reps::calculate_trend (nano::transaction & transact std::vector items; items.reserve (config.network_params.node.max_weight_samples + 1); items.push_back (config.online_weight_minimum.number ()); - for (auto i (ledger.store.online_weight_begin (transaction_a)), n (ledger.store.online_weight_end ()); i != n; ++i) + for (auto i (ledger.store.online_weight.begin (transaction_a)), n (ledger.store.online_weight.end ()); i != n; ++i) { items.push_back (i->second.number ()); } diff --git a/nano/node/rocksdb/rocksdb.cpp b/nano/node/rocksdb/rocksdb.cpp index a46bb3551c..384d4302df 100644 --- a/nano/node/rocksdb/rocksdb.cpp +++ b/nano/node/rocksdb/rocksdb.cpp @@ -490,7 +490,7 @@ uint64_t nano::rocksdb_store::count (nano::transaction const & transaction_a, ta } else if (table_a == tables::online_weight) { - for (auto i (online_weight_begin (transaction_a)), n (online_weight_end ()); i != n; ++i) + for (auto i (online_weight.begin (transaction_a)), n (online_weight.end ()); i != n; ++i) { ++sum; } diff --git a/nano/secure/CMakeLists.txt b/nano/secure/CMakeLists.txt index b2d8ec5a2a..26a4502e2c 100644 --- a/nano/secure/CMakeLists.txt +++ b/nano/secure/CMakeLists.txt @@ -55,7 +55,8 @@ add_library( versioning.cpp working.hpp store/frontier_store_partial.hpp - store/pending_store_partial.hpp) + store/pending_store_partial.hpp + store/online_weight_partial.hpp) target_link_libraries( secure diff --git a/nano/secure/blockstore.cpp b/nano/secure/blockstore.cpp index 44e517ead3..219cadfc31 100644 --- a/nano/secure/blockstore.cpp +++ b/nano/secure/blockstore.cpp @@ -105,8 +105,9 @@ bool nano::write_transaction::contains (nano::tables table_a) const return impl->contains (table_a); } -nano::block_store::block_store (nano::frontier_store & frontier_store_a, nano::pending_store & pending_store_a) : +nano::block_store::block_store (nano::frontier_store & frontier_store_a, nano::pending_store & pending_store_a, nano::online_weight_store & online_weight_store_a) : frontier (frontier_store_a), - pending (pending_store_a) + pending (pending_store_a), + online_weight (online_weight_store_a) { } diff --git a/nano/secure/blockstore.hpp b/nano/secure/blockstore.hpp index 18be9bec82..c950ed8abc 100644 --- a/nano/secure/blockstore.hpp +++ b/nano/secure/blockstore.hpp @@ -652,13 +652,28 @@ class pending_store virtual void for_each_par (std::function, nano::store_iterator)> const & action_a) const = 0; }; +/** + * Manages online weight storage and iteration + */ +class online_weight_store +{ +public: + virtual void put (nano::write_transaction const &, uint64_t, nano::amount const &) = 0; + virtual void del (nano::write_transaction const &, uint64_t) = 0; + virtual nano::store_iterator begin (nano::transaction const &) const = 0; + virtual nano::store_iterator rbegin (nano::transaction const &) const = 0; + virtual nano::store_iterator end () const = 0; + virtual size_t count (nano::transaction const &) const = 0; + virtual void clear (nano::write_transaction const &) = 0; +}; + /** * Manages block storage and iteration */ class block_store { public: - explicit block_store (nano::frontier_store &, nano::pending_store &); + explicit block_store (nano::frontier_store &, nano::pending_store &, nano::online_weight_store &); virtual ~block_store () = default; virtual void initialize (nano::write_transaction const &, nano::genesis const &, nano::ledger_cache &) = 0; virtual void block_put (nano::write_transaction const &, nano::block_hash const &, nano::block const &) = 0; @@ -707,13 +722,7 @@ class block_store virtual nano::store_iterator unchecked_end () const = 0; virtual size_t unchecked_count (nano::transaction const &) = 0; - virtual void online_weight_put (nano::write_transaction const &, uint64_t, nano::amount const &) = 0; - virtual void online_weight_del (nano::write_transaction const &, uint64_t) = 0; - virtual nano::store_iterator online_weight_begin (nano::transaction const &) const = 0; - virtual nano::store_iterator online_weight_rbegin (nano::transaction const &) const = 0; - virtual nano::store_iterator online_weight_end () const = 0; - virtual size_t online_weight_count (nano::transaction const &) const = 0; - virtual void online_weight_clear (nano::write_transaction const &) = 0; + online_weight_store & online_weight; virtual void version_put (nano::write_transaction const &, int) = 0; virtual int version_get (nano::transaction const &) const = 0; diff --git a/nano/secure/blockstore_partial.hpp b/nano/secure/blockstore_partial.hpp index c82ac0e172..203a4cd30d 100644 --- a/nano/secure/blockstore_partial.hpp +++ b/nano/secure/blockstore_partial.hpp @@ -7,6 +7,7 @@ #include #include #include +#include #include #include @@ -38,8 +39,8 @@ template class block_store_partial : public block_store { nano::frontier_store_partial frontier_store_partial; - nano::pending_store_partial pending_store_partial; + nano::online_weight_store_partial online_weight_store_partial; friend void release_assert_success (block_store_partial const & block_store, const int status); @@ -49,13 +50,14 @@ class block_store_partial : public block_store friend class nano::block_predecessor_set; friend class nano::frontier_store_partial; - friend class nano::pending_store_partial; + friend class nano::online_weight_store_partial; block_store_partial () : - block_store{ frontier_store_partial, pending_store_partial }, + block_store{ frontier_store_partial, pending_store_partial, online_weight_store_partial }, frontier_store_partial{ *this }, - pending_store_partial{ *this } + pending_store_partial{ *this }, + online_weight_store_partial{ *this } { } @@ -236,11 +238,6 @@ class block_store_partial : public block_store return nano::store_iterator (nullptr); } - nano::store_iterator online_weight_end () const override - { - return nano::store_iterator (nullptr); - } - nano::store_iterator accounts_end () const override { return nano::store_iterator (nullptr); @@ -374,30 +371,6 @@ class block_store_partial : public block_store return iterator != accounts_end () && nano::account (iterator->first) == account_a; } - void online_weight_put (nano::write_transaction const & transaction_a, uint64_t time_a, nano::amount const & amount_a) override - { - nano::db_val value (amount_a); - auto status (put (transaction_a, tables::online_weight, time_a, value)); - release_assert_success (*this, status); - } - - void online_weight_del (nano::write_transaction const & transaction_a, uint64_t time_a) override - { - auto status (del (transaction_a, tables::online_weight, time_a)); - release_assert_success (*this, status); - } - - size_t online_weight_count (nano::transaction const & transaction_a) const override - { - return count (transaction_a, tables::online_weight); - } - - void online_weight_clear (nano::write_transaction const & transaction_a) override - { - auto status (drop (transaction_a, tables::online_weight)); - release_assert_success (*this, status); - } - void pruned_put (nano::write_transaction const & transaction_a, nano::block_hash const & hash_a) override { auto status = put_key (transaction_a, tables::pruned, hash_a); @@ -638,11 +611,6 @@ class block_store_partial : public block_store return make_iterator (transaction_a, tables::unchecked, nano::db_val (key_a)); } - nano::store_iterator online_weight_begin (nano::transaction const & transaction_a) const override - { - return make_iterator (transaction_a, tables::online_weight); - } - nano::store_iterator peers_begin (nano::transaction const & transaction_a) const override { return make_iterator (transaction_a, tables::peers); @@ -683,11 +651,6 @@ class block_store_partial : public block_store return make_iterator (transaction_a, tables::accounts, false); } - nano::store_iterator online_weight_rbegin (nano::transaction const & transaction_a) const override - { - return make_iterator (transaction_a, tables::online_weight, false); - } - size_t unchecked_count (nano::transaction const & transaction_a) override { return count (transaction_a, tables::unchecked); diff --git a/nano/secure/ledger.cpp b/nano/secure/ledger.cpp index 19e0a465b5..d82df99463 100644 --- a/nano/secure/ledger.cpp +++ b/nano/secure/ledger.cpp @@ -1504,9 +1504,9 @@ bool nano::ledger::migrate_lmdb_to_rocksdb (boost::filesystem::path const & data auto rocksdb_transaction (rocksdb_store->tx_begin_write ()); rocksdb_store->version_put (rocksdb_transaction, version); - for (auto i (store.online_weight_begin (lmdb_transaction)), n (store.online_weight_end ()); i != n; ++i) + for (auto i (store.online_weight.begin (lmdb_transaction)), n (store.online_weight.end ()); i != n; ++i) { - rocksdb_store->online_weight_put (rocksdb_transaction, i->first, i->second); + rocksdb_store->online_weight.put (rocksdb_transaction, i->first, i->second); } for (auto i (store.peers_begin (lmdb_transaction)), n (store.peers_end ()); i != n; ++i) @@ -1519,7 +1519,7 @@ bool nano::ledger::migrate_lmdb_to_rocksdb (boost::filesystem::path const & data error |= store.peer_count (lmdb_transaction) != rocksdb_store->peer_count (rocksdb_transaction); error |= store.pruned_count (lmdb_transaction) != rocksdb_store->pruned_count (rocksdb_transaction); error |= store.final_vote_count (lmdb_transaction) != rocksdb_store->final_vote_count (rocksdb_transaction); - error |= store.online_weight_count (lmdb_transaction) != rocksdb_store->online_weight_count (rocksdb_transaction); + error |= store.online_weight.count (lmdb_transaction) != rocksdb_store->online_weight.count (rocksdb_transaction); error |= store.version_get (lmdb_transaction) != rocksdb_store->version_get (rocksdb_transaction); // For large tables a random key is used instead and makes sure it exists diff --git a/nano/secure/store/online_weight_partial.hpp b/nano/secure/store/online_weight_partial.hpp new file mode 100644 index 0000000000..0e2895ba4c --- /dev/null +++ b/nano/secure/store/online_weight_partial.hpp @@ -0,0 +1,65 @@ +#pragma once + +#include + +namespace nano +{ +template +class block_store_partial; + +template +void release_assert_success (block_store_partial const & block_store, const int status); + +template +class online_weight_store_partial : public online_weight_store +{ +private: + nano::block_store_partial & block_store; + + friend void release_assert_success (block_store_partial const & block_store, const int status); + +public: + explicit online_weight_store_partial (nano::block_store_partial & block_store_a) : + block_store (block_store_a){}; + + void put (nano::write_transaction const & transaction_a, uint64_t time_a, nano::amount const & amount_a) override + { + nano::db_val value (amount_a); + auto status (block_store.put (transaction_a, tables::online_weight, time_a, value)); + release_assert_success (block_store, status); + } + + void del (nano::write_transaction const & transaction_a, uint64_t time_a) override + { + auto status (block_store.del (transaction_a, tables::online_weight, time_a)); + release_assert_success (block_store, status); + } + + nano::store_iterator begin (nano::transaction const & transaction_a) const override + { + return block_store.template make_iterator (transaction_a, tables::online_weight); + } + + nano::store_iterator rbegin (nano::transaction const & transaction_a) const override + { + return block_store.template make_iterator (transaction_a, tables::online_weight, false); + } + + nano::store_iterator end () const override + { + return nano::store_iterator (nullptr); + } + + size_t count (nano::transaction const & transaction_a) const override + { + return block_store.count (transaction_a, tables::online_weight); + } + + void clear (nano::write_transaction const & transaction_a) override + { + auto status (block_store.drop (transaction_a, tables::online_weight)); + release_assert_success (block_store, status); + } +}; + +} From 17e7687033f0c57bb25e2dc6c6808dbba2945250 Mon Sep 17 00:00:00 2001 From: dsiganos Date: Wed, 2 Jun 2021 14:45:20 +0100 Subject: [PATCH 031/346] Fix TCP accept handling when max incoming connection limit is reached (#3315) This fixes the problem where we stop accepting TCP sockets permanently due to reaching the max incoming sockets limit. The symptom of this problem is a large number of CLOSE_WAIT TCP sockets. The approach of this solution is to never refuse to accept. We accept all connections but if the limit is reached, the connection is dropped immediately after being accepted. --- nano/node/bootstrap/bootstrap_server.cpp | 12 +-- nano/node/socket.cpp | 122 +++++++++++++++-------- nano/node/socket.hpp | 2 + 3 files changed, 84 insertions(+), 52 deletions(-) diff --git a/nano/node/bootstrap/bootstrap_server.cpp b/nano/node/bootstrap/bootstrap_server.cpp index 9e244a69f9..4af458105e 100644 --- a/nano/node/bootstrap/bootstrap_server.cpp +++ b/nano/node/bootstrap/bootstrap_server.cpp @@ -22,22 +22,16 @@ void nano::bootstrap_listener::start () listening_socket->start (ec); if (ec) { - node.logger.try_log (boost::str (boost::format ("Error while binding for incoming TCP/bootstrap on port %1%: %2%") % listening_socket->listening_port () % ec.message ())); + node.logger.always_log (boost::str (boost::format ("Network: Error while binding for incoming TCP/bootstrap on port %1%: %2%") % listening_socket->listening_port () % ec.message ())); throw std::runtime_error (ec.message ()); } debug_assert (node.network.endpoint ().port () == listening_socket->listening_port ()); listening_socket->on_connection ([this] (std::shared_ptr const & new_connection, boost::system::error_code const & ec_a) { - bool keep_accepting = true; - if (ec_a) - { - keep_accepting = false; - this->node.logger.try_log (boost::str (boost::format ("Error while accepting incoming TCP/bootstrap connections: %1%") % ec_a.message ())); - } - else + if (!ec_a) { accept_action (ec_a, new_connection); } - return keep_accepting; + return true; }); } diff --git a/nano/node/socket.cpp b/nano/node/socket.cpp index ec43f0003a..2b7da42656 100644 --- a/nano/node/socket.cpp +++ b/nano/node/socket.cpp @@ -243,55 +243,91 @@ void nano::server_socket::on_connection (std::function (shared_from_this ())); boost::asio::post (strand, boost::asio::bind_executor (strand, [this_l, callback_a] () { - if (this_l->acceptor.is_open ()) + if (!this_l->acceptor.is_open ()) { - if (this_l->connections.size () < this_l->max_inbound_connections) + this_l->node.logger.always_log ("Network: Acceptor is not open"); + return; + } + + // Prepare new connection + auto new_connection = std::make_shared (this_l->node, boost::none); + this_l->acceptor.async_accept (new_connection->tcp_socket, new_connection->remote, + boost::asio::bind_executor (this_l->strand, + [this_l, new_connection, callback_a] (boost::system::error_code const & ec_a) { + this_l->evict_dead_connections (); + + if (this_l->connections.size () >= this_l->max_inbound_connections) { - // Prepare new connection - auto new_connection = std::make_shared (this_l->node, boost::none); - this_l->acceptor.async_accept (new_connection->tcp_socket, new_connection->remote, - boost::asio::bind_executor (this_l->strand, - [this_l, new_connection, callback_a] (boost::system::error_code const & ec_a) { - this_l->evict_dead_connections (); - if (this_l->connections.size () < this_l->max_inbound_connections) - { - if (!ec_a) - { - // Make sure the new connection doesn't idle. Note that in most cases, the callback is going to start - // an IO operation immediately, which will start a timer. - new_connection->checkup (); - new_connection->start_timer (this_l->node.network_params.network.is_dev_network () ? std::chrono::seconds (2) : this_l->node.network_params.node.idle_timeout); - this_l->node.stats.inc (nano::stat::type::tcp, nano::stat::detail::tcp_accept_success, nano::stat::dir::in); - this_l->connections.push_back (new_connection); - } - else - { - this_l->node.logger.try_log ("Unable to accept connection: ", ec_a.message ()); - } - - // If the callback returns true, keep accepting new connections - if (callback_a (new_connection, ec_a)) - { - this_l->on_connection (callback_a); - } - else - { - this_l->node.logger.try_log ("Stopping to accept connections"); - } - } - else - { - this_l->node.stats.inc (nano::stat::type::tcp, nano::stat::detail::tcp_accept_failure, nano::stat::dir::in); - boost::asio::post (this_l->strand, boost::asio::bind_executor (this_l->strand, [this_l, callback_a] () { - this_l->on_connection (callback_a); - })); - } - })); + this_l->node.logger.always_log ("Network: max_inbound_connections reached, unable to open new connection"); + this_l->node.stats.inc (nano::stat::type::tcp, nano::stat::detail::tcp_accept_failure, nano::stat::dir::in); + this_l->on_connection_requeue_delayed (callback_a); + return; } - } + + if (!ec_a) + { + // Make sure the new connection doesn't idle. Note that in most cases, the callback is going to start + // an IO operation immediately, which will start a timer. + new_connection->checkup (); + new_connection->start_timer (this_l->node.network_params.network.is_dev_network () ? std::chrono::seconds (2) : this_l->node.network_params.node.idle_timeout); + this_l->node.stats.inc (nano::stat::type::tcp, nano::stat::detail::tcp_accept_success, nano::stat::dir::in); + this_l->connections.push_back (new_connection); + if (callback_a (new_connection, ec_a)) + { + this_l->on_connection (callback_a); + return; + } + this_l->node.logger.always_log ("Network: Stopping to accept connections"); + return; + } + + // accept error + this_l->node.logger.try_log ("Network: Unable to accept connection: ", ec_a.message ()); + this_l->node.stats.inc (nano::stat::type::tcp, nano::stat::detail::tcp_accept_failure, nano::stat::dir::in); + + if (this_l->is_temporary_error (ec_a)) + { + // if it is a temporary error, just retry it + this_l->on_connection_requeue_delayed (callback_a); + return; + } + + // if it is not a temporary error, check how the listener wants to handle this error + if (callback_a (new_connection, ec_a)) + { + this_l->on_connection_requeue_delayed (callback_a); + return; + } + + // No requeue if we reach here, no incoming socket connections will be handled + this_l->node.logger.always_log ("Network: Stopping to accept connections"); + })); })); } +void nano::server_socket::on_connection_requeue_delayed (std::function const &, boost::system::error_code const &)> callback_a) +{ + auto this_l (std::static_pointer_cast (shared_from_this ())); + node.workers.add_timed_task (std::chrono::steady_clock::now () + std::chrono::milliseconds (1), [this_l, callback_a] () { + this_l->on_connection (callback_a); + }); +} + +bool nano::server_socket::is_temporary_error (boost::system::error_code const ec_a) +{ + switch (ec_a.value ()) + { +#if EAGAIN != EWOULDBLOCK + case EAGAIN: +#endif + case EWOULDBLOCK: + case EINTR: + return true; + default: + return false; + } +} + // This must be called from a strand void nano::server_socket::evict_dead_connections () { diff --git a/nano/node/socket.hpp b/nano/node/socket.hpp index 70c002b179..95fd68b576 100644 --- a/nano/node/socket.hpp +++ b/nano/node/socket.hpp @@ -125,5 +125,7 @@ class server_socket final : public socket boost::asio::ip::tcp::endpoint local; size_t max_inbound_connections; void evict_dead_connections (); + bool is_temporary_error (boost::system::error_code const ec_a); + void on_connection_requeue_delayed (std::function const & new_connection, boost::system::error_code const &)>); }; } From fbb9c7922f020179bd384daa008b623a1d7749ce Mon Sep 17 00:00:00 2001 From: Thiago Silva <82097354+thsfs@users.noreply.github.com> Date: Wed, 2 Jun 2021 14:08:52 -0300 Subject: [PATCH 032/346] Account store break up (#3306) * Moves account store related methods out of block_store class * Renames 'account' word from the method names * Adds a comment to the class --- nano/core_test/block_store.cpp | 60 +++++----- nano/core_test/confirmation_height.cpp | 20 ++-- nano/core_test/ledger.cpp | 122 ++++++++++---------- nano/core_test/processor_service.cpp | 6 +- nano/core_test/wallet.cpp | 6 +- nano/nano_node/entry.cpp | 8 +- nano/node/active_transactions.cpp | 14 +-- nano/node/bootstrap/bootstrap_bulk_pull.cpp | 2 +- nano/node/bootstrap/bootstrap_frontier.cpp | 4 +- nano/node/confirmation_height_bounded.cpp | 2 +- nano/node/election_scheduler.cpp | 2 +- nano/node/json_handler.cpp | 26 ++--- nano/node/lmdb/lmdb.cpp | 4 +- nano/node/node.cpp | 14 +-- nano/node/request_aggregator.cpp | 2 +- nano/node/rocksdb/rocksdb.cpp | 2 +- nano/node/testing.cpp | 10 +- nano/node/wallet.cpp | 6 +- nano/qt/qt.cpp | 12 +- nano/rpc_test/rpc.cpp | 94 +++++++-------- nano/secure/CMakeLists.txt | 1 + nano/secure/blockstore.cpp | 3 +- nano/secure/blockstore.hpp | 33 +++--- nano/secure/blockstore_partial.hpp | 81 ++----------- nano/secure/ledger.cpp | 56 ++++----- nano/secure/store/account_store_partial.hpp | 101 ++++++++++++++++ nano/slow_test/node.cpp | 14 +-- 27 files changed, 375 insertions(+), 330 deletions(-) create mode 100644 nano/secure/store/account_store_partial.hpp diff --git a/nano/core_test/block_store.cpp b/nano/core_test/block_store.cpp index c409aec64b..487484e5c4 100644 --- a/nano/core_test/block_store.cpp +++ b/nano/core_test/block_store.cpp @@ -330,7 +330,7 @@ TEST (block_store, genesis) auto transaction (store->tx_begin_write ()); store->initialize (transaction, genesis, ledger_cache); nano::account_info info; - ASSERT_FALSE (store->account_get (transaction, nano::genesis_account, info)); + ASSERT_FALSE (store->account.get (transaction, nano::genesis_account, info)); ASSERT_EQ (hash, info.head); auto block1 (store->block_get (transaction, info.head)); ASSERT_NE (nullptr, block1); @@ -461,8 +461,8 @@ TEST (block_store, empty_accounts) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); auto transaction (store->tx_begin_read ()); - auto begin (store->accounts_begin (transaction)); - auto end (store->accounts_end ()); + auto begin (store->account.begin (transaction)); + auto end (store->account.end ()); ASSERT_EQ (end, begin); } @@ -529,9 +529,9 @@ TEST (block_store, frontier_retrieval) nano::account_info info1 (0, 0, 0, 0, 0, 0, nano::epoch::epoch_0); auto transaction (store->tx_begin_write ()); store->confirmation_height_put (transaction, account1, { 0, nano::block_hash (0) }); - store->account_put (transaction, account1, info1); + store->account.put (transaction, account1, info1); nano::account_info info2; - store->account_get (transaction, account1, info2); + store->account.get (transaction, account1, info2); ASSERT_EQ (info1, info2); } @@ -544,9 +544,9 @@ TEST (block_store, one_account) nano::block_hash hash (0); auto transaction (store->tx_begin_write ()); store->confirmation_height_put (transaction, account, { 20, nano::block_hash (15) }); - store->account_put (transaction, account, { hash, account, hash, 42, 100, 200, nano::epoch::epoch_0 }); - auto begin (store->accounts_begin (transaction)); - auto end (store->accounts_end ()); + store->account.put (transaction, account, { hash, account, hash, 42, 100, 200, nano::epoch::epoch_0 }); + auto begin (store->account.begin (transaction)); + auto end (store->account.end ()); ASSERT_NE (end, begin); ASSERT_EQ (account, nano::account (begin->first)); nano::account_info info (begin->second); @@ -596,11 +596,11 @@ TEST (block_store, two_account) nano::block_hash hash2 (4); auto transaction (store->tx_begin_write ()); store->confirmation_height_put (transaction, account1, { 20, nano::block_hash (10) }); - store->account_put (transaction, account1, { hash1, account1, hash1, 42, 100, 300, nano::epoch::epoch_0 }); + store->account.put (transaction, account1, { hash1, account1, hash1, 42, 100, 300, nano::epoch::epoch_0 }); store->confirmation_height_put (transaction, account2, { 30, nano::block_hash (20) }); - store->account_put (transaction, account2, { hash2, account2, hash2, 84, 200, 400, nano::epoch::epoch_0 }); - auto begin (store->accounts_begin (transaction)); - auto end (store->accounts_end ()); + store->account.put (transaction, account2, { hash2, account2, hash2, 84, 200, 400, nano::epoch::epoch_0 }); + auto begin (store->account.begin (transaction)); + auto end (store->account.end ()); ASSERT_NE (end, begin); ASSERT_EQ (account1, nano::account (begin->first)); nano::account_info info1 (begin->second); @@ -638,17 +638,17 @@ TEST (block_store, latest_find) nano::block_hash hash2 (4); auto transaction (store->tx_begin_write ()); store->confirmation_height_put (transaction, account1, { 0, nano::block_hash (0) }); - store->account_put (transaction, account1, { hash1, account1, hash1, 100, 0, 300, nano::epoch::epoch_0 }); + store->account.put (transaction, account1, { hash1, account1, hash1, 100, 0, 300, nano::epoch::epoch_0 }); store->confirmation_height_put (transaction, account2, { 0, nano::block_hash (0) }); - store->account_put (transaction, account2, { hash2, account2, hash2, 200, 0, 400, nano::epoch::epoch_0 }); - auto first (store->accounts_begin (transaction)); - auto second (store->accounts_begin (transaction)); + store->account.put (transaction, account2, { hash2, account2, hash2, 200, 0, 400, nano::epoch::epoch_0 }); + auto first (store->account.begin (transaction)); + auto second (store->account.begin (transaction)); ++second; - auto find1 (store->accounts_begin (transaction, 1)); + auto find1 (store->account.begin (transaction, 1)); ASSERT_EQ (first, find1); - auto find2 (store->accounts_begin (transaction, 3)); + auto find2 (store->account.begin (transaction, 3)); ASSERT_EQ (second, find2); - auto find3 (store->accounts_begin (transaction, 2)); + auto find3 (store->account.begin (transaction, 2)); ASSERT_EQ (second, find3); } @@ -765,9 +765,9 @@ TEST (block_store, latest_exists) nano::account_info info; auto transaction (store->tx_begin_write ()); store->confirmation_height_put (transaction, two, { 0, nano::block_hash (0) }); - store->account_put (transaction, two, info); + store->account.put (transaction, two, info); nano::account one (1); - ASSERT_FALSE (store->account_exists (transaction, one)); + ASSERT_FALSE (store->account.exists (transaction, one)); } TEST (block_store, large_iteration) @@ -783,12 +783,12 @@ TEST (block_store, large_iteration) nano::random_pool::generate_block (account.bytes.data (), account.bytes.size ()); accounts1.insert (account); store->confirmation_height_put (transaction, account, { 0, nano::block_hash (0) }); - store->account_put (transaction, account, nano::account_info ()); + store->account.put (transaction, account, nano::account_info ()); } std::unordered_set accounts2; nano::account previous (0); auto transaction (store->tx_begin_read ()); - for (auto i (store->accounts_begin (transaction, 0)), n (store->accounts_end ()); i != n; ++i) + for (auto i (store->account.begin (transaction, 0)), n (store->account.end ()); i != n; ++i) { nano::account current (i->first); ASSERT_GT (current.number (), previous.number ()); @@ -799,7 +799,7 @@ TEST (block_store, large_iteration) // Reverse iteration std::unordered_set accounts3; previous = std::numeric_limits::max (); - for (auto i (store->accounts_rbegin (transaction)), n (store->accounts_end ()); i != n; --i) + for (auto i (store->account.rbegin (transaction)), n (store->account.end ()); i != n; --i) { nano::account current (i->first); ASSERT_LT (current.number (), previous.number ()); @@ -865,13 +865,13 @@ TEST (block_store, account_count) ASSERT_TRUE (!store->init_error ()); { auto transaction (store->tx_begin_write ()); - ASSERT_EQ (0, store->account_count (transaction)); + ASSERT_EQ (0, store->account.count (transaction)); nano::account account (200); store->confirmation_height_put (transaction, account, { 0, nano::block_hash (0) }); - store->account_put (transaction, account, nano::account_info ()); + store->account.put (transaction, account, nano::account_info ()); } auto transaction (store->tx_begin_read ()); - ASSERT_EQ (1, store->account_count (transaction)); + ASSERT_EQ (1, store->account.count (transaction)); } TEST (block_store, cemented_count_cache) @@ -1285,7 +1285,7 @@ TEST (mdb_block_store, upgrade_v14_v15) auto transaction (store.tx_begin_write ()); store.initialize (transaction, genesis, ledger.cache); nano::account_info account_info; - ASSERT_FALSE (store.account_get (transaction, nano::genesis_account, account_info)); + ASSERT_FALSE (store.account.get (transaction, nano::genesis_account, account_info)); nano::confirmation_height_info confirmation_height_info; ASSERT_FALSE (store.confirmation_height_get (transaction, nano::genesis_account, confirmation_height_info)); ASSERT_EQ (confirmation_height_info.height, 1); @@ -1325,7 +1325,7 @@ TEST (mdb_block_store, upgrade_v14_v15) ASSERT_FALSE (mdb_get (store.env.tx (transaction), store.accounts_v1, nano::mdb_val (nano::genesis_account), value)); nano::account_info info; ASSERT_NE (value.size (), info.db_size ()); - store.account_del (transaction, nano::genesis_account); + store.account.del (transaction, nano::genesis_account); // Confirmation height for the account should be deleted ASSERT_TRUE (mdb_get (store.env.tx (transaction), store.confirmation_height, nano::mdb_val (nano::genesis_account), value)); @@ -2116,7 +2116,7 @@ void write_block_w_sideband_v18 (nano::mdb_store & store_a, MDB_dbi database, na void modify_account_info_to_v14 (nano::mdb_store & store, nano::transaction const & transaction, nano::account const & account, uint64_t confirmation_height, nano::block_hash const & rep_block) { nano::account_info info; - ASSERT_FALSE (store.account_get (transaction, account, info)); + ASSERT_FALSE (store.account.get (transaction, account, info)); nano::account_info_v14 account_info_v14 (info.head, rep_block, info.open_block, info.balance, info.modified, info.block_count, confirmation_height, info.epoch ()); auto status (mdb_put (store.env.tx (transaction), info.epoch () == nano::epoch::epoch_0 ? store.accounts_v0 : store.accounts_v1, nano::mdb_val (account), nano::mdb_val (account_info_v14), 0)); ASSERT_EQ (status, 0); diff --git a/nano/core_test/confirmation_height.cpp b/nano/core_test/confirmation_height.cpp index 56dd5aa698..e1c44071b2 100644 --- a/nano/core_test/confirmation_height.cpp +++ b/nano/core_test/confirmation_height.cpp @@ -162,22 +162,22 @@ TEST (confirmation_height, multiple_accounts) auto & store = node->store; auto transaction = node->store.tx_begin_read (); ASSERT_TRUE (node->ledger.block_confirmed (transaction, receive3->hash ())); - ASSERT_FALSE (store.account_get (transaction, nano::dev_genesis_key.pub, account_info)); + ASSERT_FALSE (store.account.get (transaction, nano::dev_genesis_key.pub, account_info)); ASSERT_FALSE (node->store.confirmation_height_get (transaction, nano::dev_genesis_key.pub, confirmation_height_info)); ASSERT_EQ (4, confirmation_height_info.height); ASSERT_EQ (send3.hash (), confirmation_height_info.frontier); ASSERT_EQ (4, account_info.block_count); - ASSERT_FALSE (store.account_get (transaction, key1.pub, account_info)); + ASSERT_FALSE (store.account.get (transaction, key1.pub, account_info)); ASSERT_FALSE (node->store.confirmation_height_get (transaction, key1.pub, confirmation_height_info)); ASSERT_EQ (2, confirmation_height_info.height); ASSERT_EQ (send4.hash (), confirmation_height_info.frontier); ASSERT_EQ (3, account_info.block_count); - ASSERT_FALSE (store.account_get (transaction, key2.pub, account_info)); + ASSERT_FALSE (store.account.get (transaction, key2.pub, account_info)); ASSERT_FALSE (node->store.confirmation_height_get (transaction, key2.pub, confirmation_height_info)); ASSERT_EQ (3, confirmation_height_info.height); ASSERT_EQ (send6.hash (), confirmation_height_info.frontier); ASSERT_EQ (4, account_info.block_count); - ASSERT_FALSE (store.account_get (transaction, key3.pub, account_info)); + ASSERT_FALSE (store.account.get (transaction, key3.pub, account_info)); ASSERT_FALSE (node->store.confirmation_height_get (transaction, key3.pub, confirmation_height_info)); ASSERT_EQ (2, confirmation_height_info.height); ASSERT_EQ (receive3->hash (), confirmation_height_info.frontier); @@ -443,13 +443,13 @@ TEST (confirmation_height, send_receive_between_2_accounts) ASSERT_TRUE (node->ledger.block_confirmed (transaction, receive4->hash ())); nano::account_info account_info; nano::confirmation_height_info confirmation_height_info; - ASSERT_FALSE (node->store.account_get (transaction, nano::dev_genesis_key.pub, account_info)); + ASSERT_FALSE (node->store.account.get (transaction, nano::dev_genesis_key.pub, account_info)); ASSERT_FALSE (node->store.confirmation_height_get (transaction, nano::dev_genesis_key.pub, confirmation_height_info)); ASSERT_EQ (6, confirmation_height_info.height); ASSERT_EQ (send5.hash (), confirmation_height_info.frontier); ASSERT_EQ (7, account_info.block_count); - ASSERT_FALSE (node->store.account_get (transaction, key1.pub, account_info)); + ASSERT_FALSE (node->store.account.get (transaction, key1.pub, account_info)); ASSERT_FALSE (node->store.confirmation_height_get (transaction, key1.pub, confirmation_height_info)); ASSERT_EQ (5, confirmation_height_info.height); ASSERT_EQ (receive4->hash (), confirmation_height_info.frontier); @@ -513,7 +513,7 @@ TEST (confirmation_height, send_receive_self) auto transaction (node->store.tx_begin_read ()); ASSERT_TRUE (node->ledger.block_confirmed (transaction, receive3->hash ())); nano::account_info account_info; - ASSERT_FALSE (node->store.account_get (transaction, nano::dev_genesis_key.pub, account_info)); + ASSERT_FALSE (node->store.account.get (transaction, nano::dev_genesis_key.pub, account_info)); nano::confirmation_height_info confirmation_height_info; ASSERT_FALSE (node->store.confirmation_height_get (transaction, nano::dev_genesis_key.pub, confirmation_height_info)); ASSERT_EQ (7, confirmation_height_info.height); @@ -611,19 +611,19 @@ TEST (confirmation_height, all_block_types) ASSERT_TRUE (node->ledger.block_confirmed (transaction, state_send2->hash ())); nano::account_info account_info; nano::confirmation_height_info confirmation_height_info; - ASSERT_FALSE (node->store.account_get (transaction, nano::dev_genesis_key.pub, account_info)); + ASSERT_FALSE (node->store.account.get (transaction, nano::dev_genesis_key.pub, account_info)); ASSERT_FALSE (node->store.confirmation_height_get (transaction, nano::dev_genesis_key.pub, confirmation_height_info)); ASSERT_EQ (3, confirmation_height_info.height); ASSERT_EQ (send1.hash (), confirmation_height_info.frontier); ASSERT_LE (4, account_info.block_count); - ASSERT_FALSE (node->store.account_get (transaction, key1.pub, account_info)); + ASSERT_FALSE (node->store.account.get (transaction, key1.pub, account_info)); ASSERT_FALSE (node->store.confirmation_height_get (transaction, key1.pub, confirmation_height_info)); ASSERT_EQ (state_send1.hash (), confirmation_height_info.frontier); ASSERT_EQ (6, confirmation_height_info.height); ASSERT_LE (7, account_info.block_count); - ASSERT_FALSE (node->store.account_get (transaction, key2.pub, account_info)); + ASSERT_FALSE (node->store.account.get (transaction, key2.pub, account_info)); ASSERT_FALSE (node->store.confirmation_height_get (transaction, key2.pub, confirmation_height_info)); ASSERT_EQ (7, confirmation_height_info.height); ASSERT_EQ (state_send2->hash (), confirmation_height_info.frontier); diff --git a/nano/core_test/ledger.cpp b/nano/core_test/ledger.cpp index 7e9a0f29b4..2dbdff25ea 100644 --- a/nano/core_test/ledger.cpp +++ b/nano/core_test/ledger.cpp @@ -54,7 +54,7 @@ TEST (ledger, genesis_balance) auto amount (ledger.amount (transaction, nano::genesis_account)); ASSERT_EQ (nano::genesis_amount, amount); nano::account_info info; - ASSERT_FALSE (store->account_get (transaction, nano::genesis_account, info)); + ASSERT_FALSE (store->account.get (transaction, nano::genesis_account, info)); ASSERT_EQ (1, ledger.cache.account_count); // Frontier time should have been updated when genesis balance was added ASSERT_GE (nano::seconds_since_epoch (), info.modified); @@ -105,7 +105,7 @@ TEST (ledger, process_send) store->initialize (transaction, genesis, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::account_info info1; - ASSERT_FALSE (store->account_get (transaction, nano::dev_genesis_key.pub, info1)); + ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info1)); nano::keypair key2; nano::send_block send (info1.head, key2.pub, 50, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (info1.head)); nano::block_hash hash1 (send.hash ()); @@ -123,7 +123,7 @@ TEST (ledger, process_send) ASSERT_EQ (50, ledger.account_balance (transaction, nano::dev_genesis_key.pub)); ASSERT_EQ (nano::genesis_amount - 50, ledger.account_pending (transaction, key2.pub)); nano::account_info info2; - ASSERT_FALSE (store->account_get (transaction, nano::dev_genesis_key.pub, info2)); + ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info2)); ASSERT_EQ (2, info2.block_count); auto latest6 (store->block_get (transaction, info2.head)); ASSERT_NE (nullptr, latest6); @@ -149,14 +149,14 @@ TEST (ledger, process_send) ASSERT_EQ (50, ledger.weight (nano::dev_genesis_key.pub)); ASSERT_EQ (nano::genesis_amount - 50, ledger.weight (key2.pub)); nano::account_info info3; - ASSERT_FALSE (store->account_get (transaction, nano::dev_genesis_key.pub, info3)); + ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info3)); auto latest2 (store->block_get (transaction, info3.head)); ASSERT_NE (nullptr, latest2); auto latest3 (dynamic_cast (latest2.get ())); ASSERT_NE (nullptr, latest3); ASSERT_EQ (send, *latest3); nano::account_info info4; - ASSERT_FALSE (store->account_get (transaction, key2.pub, info4)); + ASSERT_FALSE (store->account.get (transaction, key2.pub, info4)); auto latest4 (store->block_get (transaction, info4.head)); ASSERT_NE (nullptr, latest4); auto latest5 (dynamic_cast (latest4.get ())); @@ -165,7 +165,7 @@ TEST (ledger, process_send) ASSERT_FALSE (ledger.rollback (transaction, hash2)); ASSERT_TRUE (store->frontier.get (transaction, hash2).is_zero ()); nano::account_info info5; - ASSERT_TRUE (ledger.store.account_get (transaction, key2.pub, info5)); + ASSERT_TRUE (ledger.store.account.get (transaction, key2.pub, info5)); nano::pending_info pending1; ASSERT_FALSE (ledger.store.pending.get (transaction, nano::pending_key (key2.pub, hash1), pending1)); ASSERT_EQ (nano::dev_genesis_key.pub, pending1.source); @@ -176,21 +176,21 @@ TEST (ledger, process_send) ASSERT_EQ (50, ledger.weight (nano::dev_genesis_key.pub)); ASSERT_EQ (0, ledger.weight (key2.pub)); nano::account_info info6; - ASSERT_FALSE (ledger.store.account_get (transaction, nano::dev_genesis_key.pub, info6)); + ASSERT_FALSE (ledger.store.account.get (transaction, nano::dev_genesis_key.pub, info6)); ASSERT_EQ (hash1, info6.head); ASSERT_FALSE (ledger.rollback (transaction, info6.head)); ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::dev_genesis_key.pub)); ASSERT_EQ (nano::dev_genesis_key.pub, store->frontier.get (transaction, info1.head)); ASSERT_TRUE (store->frontier.get (transaction, hash1).is_zero ()); nano::account_info info7; - ASSERT_FALSE (ledger.store.account_get (transaction, nano::dev_genesis_key.pub, info7)); + ASSERT_FALSE (ledger.store.account.get (transaction, nano::dev_genesis_key.pub, info7)); ASSERT_EQ (1, info7.block_count); ASSERT_EQ (info1.head, info7.head); nano::pending_info pending2; ASSERT_TRUE (ledger.store.pending.get (transaction, nano::pending_key (key2.pub, hash1), pending2)); ASSERT_EQ (nano::genesis_amount, ledger.account_balance (transaction, nano::dev_genesis_key.pub)); ASSERT_EQ (0, ledger.account_pending (transaction, key2.pub)); - ASSERT_EQ (store->account_count (transaction), ledger.cache.account_count); + ASSERT_EQ (store->account.count (transaction), ledger.cache.account_count); } TEST (ledger, process_receive) @@ -205,7 +205,7 @@ TEST (ledger, process_receive) store->initialize (transaction, genesis, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::account_info info1; - ASSERT_FALSE (store->account_get (transaction, nano::dev_genesis_key.pub, info1)); + ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info1)); nano::keypair key2; nano::send_block send (info1.head, key2.pub, 50, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (info1.head)); nano::block_hash hash1 (send.hash ()); @@ -254,7 +254,7 @@ TEST (ledger, process_receive) ASSERT_FALSE (ledger.store.pending.get (transaction, nano::pending_key (key2.pub, hash3), pending1)); ASSERT_EQ (nano::dev_genesis_key.pub, pending1.source); ASSERT_EQ (25, pending1.amount.number ()); - ASSERT_EQ (store->account_count (transaction), ledger.cache.account_count); + ASSERT_EQ (store->account.count (transaction), ledger.cache.account_count); } TEST (ledger, rollback_receiver) @@ -269,7 +269,7 @@ TEST (ledger, rollback_receiver) store->initialize (transaction, genesis, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::account_info info1; - ASSERT_FALSE (store->account_get (transaction, nano::dev_genesis_key.pub, info1)); + ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info1)); nano::keypair key2; nano::send_block send (info1.head, key2.pub, 50, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (info1.head)); nano::block_hash hash1 (send.hash ()); @@ -291,8 +291,8 @@ TEST (ledger, rollback_receiver) ASSERT_EQ (0, ledger.weight (key2.pub)); ASSERT_EQ (0, ledger.weight (key3.pub)); nano::account_info info2; - ASSERT_TRUE (ledger.store.account_get (transaction, key2.pub, info2)); - ASSERT_EQ (store->account_count (transaction), ledger.cache.account_count); + ASSERT_TRUE (ledger.store.account.get (transaction, key2.pub, info2)); + ASSERT_EQ (store->account.count (transaction), ledger.cache.account_count); nano::pending_info pending1; ASSERT_TRUE (ledger.store.pending.get (transaction, nano::pending_key (key2.pub, info2.head), pending1)); } @@ -327,11 +327,11 @@ TEST (ledger, rollback_representation) ASSERT_EQ (1, ledger.weight (key3.pub)); ASSERT_EQ (nano::genesis_amount - 1, ledger.weight (key4.pub)); nano::account_info info1; - ASSERT_FALSE (store->account_get (transaction, key2.pub, info1)); + ASSERT_FALSE (store->account.get (transaction, key2.pub, info1)); ASSERT_EQ (key4.pub, info1.representative); ASSERT_FALSE (ledger.rollback (transaction, receive1.hash ())); nano::account_info info2; - ASSERT_FALSE (store->account_get (transaction, key2.pub, info2)); + ASSERT_FALSE (store->account.get (transaction, key2.pub, info2)); ASSERT_EQ (key4.pub, info2.representative); ASSERT_EQ (0, ledger.weight (key2.pub)); ASSERT_EQ (nano::genesis_amount - 50, ledger.weight (key4.pub)); @@ -341,11 +341,11 @@ TEST (ledger, rollback_representation) ledger.rollback (transaction, send1.hash ()); ASSERT_EQ (nano::genesis_amount, ledger.weight (key3.pub)); nano::account_info info3; - ASSERT_FALSE (store->account_get (transaction, nano::dev_genesis_key.pub, info3)); + ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info3)); ASSERT_EQ (key3.pub, info3.representative); ASSERT_FALSE (ledger.rollback (transaction, change2.hash ())); nano::account_info info4; - ASSERT_FALSE (store->account_get (transaction, nano::dev_genesis_key.pub, info4)); + ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info4)); ASSERT_EQ (key5.pub, info4.representative); ASSERT_EQ (nano::genesis_amount, ledger.weight (key5.pub)); ASSERT_EQ (0, ledger.weight (key3.pub)); @@ -381,7 +381,7 @@ TEST (ledger, process_duplicate) store->initialize (transaction, genesis, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::account_info info1; - ASSERT_FALSE (store->account_get (transaction, nano::dev_genesis_key.pub, info1)); + ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info1)); nano::keypair key2; nano::send_block send (info1.head, key2.pub, 50, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (info1.head)); nano::block_hash hash1 (send.hash ()); @@ -435,7 +435,7 @@ TEST (ledger, representative_change) ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::dev_genesis_key.pub)); ASSERT_EQ (0, ledger.weight (key2.pub)); nano::account_info info1; - ASSERT_FALSE (store->account_get (transaction, nano::dev_genesis_key.pub, info1)); + ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info1)); nano::change_block block (info1.head, key2.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (info1.head)); ASSERT_EQ (nano::dev_genesis_key.pub, store->frontier.get (transaction, info1.head)); auto return1 (ledger.process (transaction, block)); @@ -447,13 +447,13 @@ TEST (ledger, representative_change) ASSERT_EQ (0, ledger.weight (nano::dev_genesis_key.pub)); ASSERT_EQ (nano::genesis_amount, ledger.weight (key2.pub)); nano::account_info info2; - ASSERT_FALSE (store->account_get (transaction, nano::dev_genesis_key.pub, info2)); + ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info2)); ASSERT_EQ (block.hash (), info2.head); ASSERT_FALSE (ledger.rollback (transaction, info2.head)); ASSERT_EQ (nano::dev_genesis_key.pub, store->frontier.get (transaction, info1.head)); ASSERT_TRUE (store->frontier.get (transaction, block.hash ()).is_zero ()); nano::account_info info3; - ASSERT_FALSE (store->account_get (transaction, nano::dev_genesis_key.pub, info3)); + ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info3)); ASSERT_EQ (info1.head, info3.head); ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::dev_genesis_key.pub)); ASSERT_EQ (0, ledger.weight (key2.pub)); @@ -473,7 +473,7 @@ TEST (ledger, send_fork) store->initialize (transaction, genesis, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::account_info info1; - ASSERT_FALSE (store->account_get (transaction, nano::dev_genesis_key.pub, info1)); + ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info1)); nano::send_block block (info1.head, key2.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (info1.head)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block).code); nano::send_block block2 (info1.head, key3.pub, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (info1.head)); @@ -494,7 +494,7 @@ TEST (ledger, receive_fork) store->initialize (transaction, genesis, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::account_info info1; - ASSERT_FALSE (store->account_get (transaction, nano::dev_genesis_key.pub, info1)); + ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info1)); nano::send_block block (info1.head, key2.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (info1.head)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block).code); nano::open_block block2 (block.hash (), key2.pub, key2.pub, key2.prv, key2.pub, *pool.generate (key2.pub)); @@ -521,7 +521,7 @@ TEST (ledger, open_fork) store->initialize (transaction, genesis, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::account_info info1; - ASSERT_FALSE (store->account_get (transaction, nano::dev_genesis_key.pub, info1)); + ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info1)); nano::send_block block (info1.head, key2.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (info1.head)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block).code); nano::open_block block2 (block.hash (), key2.pub, key2.pub, key2.prv, key2.pub, *pool.generate (key2.pub)); @@ -541,7 +541,7 @@ TEST (system, DISABLED_generate_send_existing) nano::account_info info1; { auto transaction (node1.store.tx_begin_read ()); - ASSERT_FALSE (node1.store.account_get (transaction, nano::dev_genesis_key.pub, info1)); + ASSERT_FALSE (node1.store.account.get (transaction, nano::dev_genesis_key.pub, info1)); } std::vector accounts; accounts.push_back (nano::dev_genesis_key.pub); @@ -557,7 +557,7 @@ TEST (system, DISABLED_generate_send_existing) nano::account_info info2; { auto transaction (node1.store.tx_begin_read ()); - ASSERT_FALSE (node1.store.account_get (transaction, nano::dev_genesis_key.pub, info2)); + ASSERT_FALSE (node1.store.account.get (transaction, nano::dev_genesis_key.pub, info2)); } ASSERT_NE (info1.head, info2.head); system.deadline_set (15s); @@ -565,7 +565,7 @@ TEST (system, DISABLED_generate_send_existing) { ASSERT_NO_ERROR (system.poll ()); auto transaction (node1.store.tx_begin_read ()); - ASSERT_FALSE (node1.store.account_get (transaction, nano::dev_genesis_key.pub, info2)); + ASSERT_FALSE (node1.store.account.get (transaction, nano::dev_genesis_key.pub, info2)); } ASSERT_EQ (info1.block_count + 2, info2.block_count); ASSERT_EQ (info2.balance, nano::genesis_amount / 3); @@ -585,10 +585,10 @@ TEST (system, DISABLED_generate_send_new) system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); { auto transaction (node1.store.tx_begin_read ()); - auto iterator1 (node1.store.accounts_begin (transaction)); - ASSERT_NE (node1.store.accounts_end (), iterator1); + auto iterator1 (node1.store.account.begin (transaction)); + ASSERT_NE (node1.store.account.end (), iterator1); ++iterator1; - ASSERT_EQ (node1.store.accounts_end (), iterator1); + ASSERT_EQ (node1.store.account.end (), iterator1); } nano::keypair stake_preserver; auto send_block (system.wallet (0)->send_action (nano::genesis_account, stake_preserver.pub, nano::genesis_amount / 3 * 2, true)); @@ -1259,7 +1259,7 @@ TEST (ledger, fail_open_fork_previous) ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block3).code); nano::open_block block4 (block2.hash (), 1, key1.pub, key1.prv, key1.pub, *pool.generate (key1.pub)); ASSERT_EQ (nano::process_result::fork, ledger.process (transaction, block4).code); - ASSERT_EQ (store->account_count (transaction), ledger.cache.account_count); + ASSERT_EQ (store->account.count (transaction), ledger.cache.account_count); } TEST (ledger, fail_open_account_mismatch) @@ -1279,7 +1279,7 @@ TEST (ledger, fail_open_account_mismatch) nano::keypair badkey; nano::open_block block2 (block1.hash (), 1, badkey.pub, badkey.prv, badkey.pub, *pool.generate (badkey.pub)); ASSERT_NE (nano::process_result::progress, ledger.process (transaction, block2).code); - ASSERT_EQ (store->account_count (transaction), ledger.cache.account_count); + ASSERT_EQ (store->account.count (transaction), ledger.cache.account_count); } TEST (ledger, fail_receive_old) @@ -1565,7 +1565,7 @@ TEST (ledger, send_open_receive_rollback) store->initialize (transaction, genesis, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::account_info info1; - ASSERT_FALSE (store->account_get (transaction, nano::dev_genesis_key.pub, info1)); + ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info1)); nano::keypair key1; nano::send_block send1 (info1.head, key1.pub, nano::genesis_amount - 50, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (info1.head)); auto return1 (ledger.process (transaction, send1)); @@ -1626,7 +1626,7 @@ TEST (ledger, bootstrap_rep_weight) { auto transaction (store->tx_begin_write ()); store->initialize (transaction, genesis, ledger.cache); - ASSERT_FALSE (store->account_get (transaction, nano::dev_genesis_key.pub, info1)); + ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info1)); nano::send_block send (info1.head, key2.pub, std::numeric_limits::max () - 50, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (info1.head)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); } @@ -1638,7 +1638,7 @@ TEST (ledger, bootstrap_rep_weight) } { auto transaction (store->tx_begin_write ()); - ASSERT_FALSE (store->account_get (transaction, nano::dev_genesis_key.pub, info1)); + ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info1)); nano::send_block send (info1.head, key2.pub, std::numeric_limits::max () - 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (info1.head)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); } @@ -1746,7 +1746,7 @@ TEST (ledger, state_send_receive) ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, receive1.hash ())); ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::genesis_account)); ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); - ASSERT_EQ (store->account_count (transaction), ledger.cache.account_count); + ASSERT_EQ (store->account.count (transaction), ledger.cache.account_count); ASSERT_EQ (3, receive2->sideband ().height); ASSERT_FALSE (receive2->sideband ().details.is_send); ASSERT_TRUE (receive2->sideband ().details.is_receive); @@ -1848,7 +1848,7 @@ TEST (ledger, state_open) ASSERT_EQ (nano::Gxrb_ratio, ledger.balance (transaction, open1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, open1.hash ())); ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::genesis_account)); - ASSERT_EQ (ledger.cache.account_count, store->account_count (transaction)); + ASSERT_EQ (ledger.cache.account_count, store->account.count (transaction)); ASSERT_EQ (1, open2->sideband ().height); ASSERT_FALSE (open2->sideband ().details.is_send); ASSERT_TRUE (open2->sideband ().details.is_receive); @@ -2041,7 +2041,7 @@ TEST (ledger, state_state_open_fork) nano::state_block open2 (destination.pub, 0, nano::genesis_account, nano::Gxrb_ratio, send1.hash (), destination.prv, destination.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::fork, ledger.process (transaction, open2).code); ASSERT_EQ (open1.root (), open2.root ()); - ASSERT_EQ (store->account_count (transaction), ledger.cache.account_count); + ASSERT_EQ (store->account.count (transaction), ledger.cache.account_count); } TEST (ledger, state_open_previous_fail) @@ -2220,7 +2220,7 @@ TEST (ledger, state_rollback_send) ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::genesis_account)); ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); ASSERT_TRUE (store->block_successor (transaction, genesis.hash ()).is_zero ()); - ASSERT_EQ (store->account_count (transaction), ledger.cache.account_count); + ASSERT_EQ (store->account.count (transaction), ledger.cache.account_count); } TEST (ledger, state_rollback_receive) @@ -2247,7 +2247,7 @@ TEST (ledger, state_rollback_receive) ASSERT_FALSE (store->block_exists (transaction, receive1.hash ())); ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.account_balance (transaction, nano::genesis_account)); ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::genesis_account)); - ASSERT_EQ (store->account_count (transaction), ledger.cache.account_count); + ASSERT_EQ (store->account.count (transaction), ledger.cache.account_count); } TEST (ledger, state_rollback_received_send) @@ -2275,7 +2275,7 @@ TEST (ledger, state_rollback_received_send) ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::genesis_account)); ASSERT_EQ (0, ledger.account_balance (transaction, key.pub)); ASSERT_EQ (0, ledger.weight (key.pub)); - ASSERT_EQ (store->account_count (transaction), ledger.cache.account_count); + ASSERT_EQ (store->account.count (transaction), ledger.cache.account_count); } TEST (ledger, state_rep_change_rollback) @@ -2323,7 +2323,7 @@ TEST (ledger, state_open_rollback) ASSERT_FALSE (store->pending.get (transaction, nano::pending_key (destination.pub, send1.hash ()), info)); ASSERT_EQ (nano::genesis_account, info.source); ASSERT_EQ (nano::Gxrb_ratio, info.amount.number ()); - ASSERT_EQ (store->account_count (transaction), ledger.cache.account_count); + ASSERT_EQ (store->account.count (transaction), ledger.cache.account_count); } TEST (ledger, state_send_change_rollback) @@ -2345,7 +2345,7 @@ TEST (ledger, state_send_change_rollback) ASSERT_EQ (nano::genesis_amount, ledger.account_balance (transaction, nano::genesis_account)); ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::genesis_account)); ASSERT_EQ (0, ledger.weight (rep.pub)); - ASSERT_EQ (store->account_count (transaction), ledger.cache.account_count); + ASSERT_EQ (store->account.count (transaction), ledger.cache.account_count); } TEST (ledger, state_receive_change_rollback) @@ -2369,7 +2369,7 @@ TEST (ledger, state_receive_change_rollback) ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.account_balance (transaction, nano::genesis_account)); ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::genesis_account)); ASSERT_EQ (0, ledger.weight (rep.pub)); - ASSERT_EQ (store->account_count (transaction), ledger.cache.account_count); + ASSERT_EQ (store->account.count (transaction), ledger.cache.account_count); } TEST (ledger, epoch_blocks_v1_general) @@ -2394,13 +2394,13 @@ TEST (ledger, epoch_blocks_v1_general) nano::state_block epoch2 (nano::genesis_account, epoch1.hash (), nano::genesis_account, nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (epoch1.hash ())); ASSERT_EQ (nano::process_result::block_position, ledger.process (transaction, epoch2).code); nano::account_info genesis_info; - ASSERT_FALSE (ledger.store.account_get (transaction, nano::genesis_account, genesis_info)); + ASSERT_FALSE (ledger.store.account.get (transaction, nano::genesis_account, genesis_info)); ASSERT_EQ (genesis_info.epoch (), nano::epoch::epoch_1); ASSERT_FALSE (ledger.rollback (transaction, epoch1.hash ())); - ASSERT_FALSE (ledger.store.account_get (transaction, nano::genesis_account, genesis_info)); + ASSERT_FALSE (ledger.store.account.get (transaction, nano::genesis_account, genesis_info)); ASSERT_EQ (genesis_info.epoch (), nano::epoch::epoch_0); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch1).code); - ASSERT_FALSE (ledger.store.account_get (transaction, nano::genesis_account, genesis_info)); + ASSERT_FALSE (ledger.store.account.get (transaction, nano::genesis_account, genesis_info)); ASSERT_EQ (genesis_info.epoch (), nano::epoch::epoch_1); ASSERT_FALSE (epoch1.sideband ().details.is_send); ASSERT_FALSE (epoch1.sideband ().details.is_receive); @@ -2470,13 +2470,13 @@ TEST (ledger, epoch_blocks_v2_general) nano::state_block epoch3 (nano::genesis_account, epoch2.hash (), nano::genesis_account, nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (epoch2.hash ())); ASSERT_EQ (nano::process_result::block_position, ledger.process (transaction, epoch3).code); nano::account_info genesis_info; - ASSERT_FALSE (ledger.store.account_get (transaction, nano::genesis_account, genesis_info)); + ASSERT_FALSE (ledger.store.account.get (transaction, nano::genesis_account, genesis_info)); ASSERT_EQ (genesis_info.epoch (), nano::epoch::epoch_2); ASSERT_FALSE (ledger.rollback (transaction, epoch1.hash ())); - ASSERT_FALSE (ledger.store.account_get (transaction, nano::genesis_account, genesis_info)); + ASSERT_FALSE (ledger.store.account.get (transaction, nano::genesis_account, genesis_info)); ASSERT_EQ (genesis_info.epoch (), nano::epoch::epoch_0); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch1).code); - ASSERT_FALSE (ledger.store.account_get (transaction, nano::genesis_account, genesis_info)); + ASSERT_FALSE (ledger.store.account.get (transaction, nano::genesis_account, genesis_info)); ASSERT_EQ (genesis_info.epoch (), nano::epoch::epoch_1); nano::change_block change1 (epoch1.hash (), nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (epoch1.hash ())); ASSERT_EQ (nano::process_result::block_position, ledger.process (transaction, change1).code); @@ -2540,10 +2540,10 @@ TEST (ledger, epoch_blocks_receive_upgrade) ASSERT_EQ (nano::epoch::epoch_1, receive2.sideband ().details.epoch); ASSERT_EQ (nano::epoch::epoch_1, receive2.sideband ().source_epoch); nano::account_info destination_info; - ASSERT_FALSE (ledger.store.account_get (transaction, destination.pub, destination_info)); + ASSERT_FALSE (ledger.store.account.get (transaction, destination.pub, destination_info)); ASSERT_EQ (destination_info.epoch (), nano::epoch::epoch_1); ASSERT_FALSE (ledger.rollback (transaction, receive2.hash ())); - ASSERT_FALSE (ledger.store.account_get (transaction, destination.pub, destination_info)); + ASSERT_FALSE (ledger.store.account.get (transaction, destination.pub, destination_info)); ASSERT_EQ (destination_info.epoch (), nano::epoch::epoch_0); nano::pending_info pending_send2; ASSERT_FALSE (ledger.store.pending.get (transaction, nano::pending_key (destination.pub, send2.hash ()), pending_send2)); @@ -2553,7 +2553,7 @@ TEST (ledger, epoch_blocks_receive_upgrade) ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive2).code); ASSERT_EQ (nano::epoch::epoch_1, receive2.sideband ().details.epoch); ASSERT_EQ (nano::epoch::epoch_1, receive2.sideband ().source_epoch); - ASSERT_FALSE (ledger.store.account_get (transaction, destination.pub, destination_info)); + ASSERT_FALSE (ledger.store.account.get (transaction, destination.pub, destination_info)); ASSERT_EQ (destination_info.epoch (), nano::epoch::epoch_1); nano::keypair destination2; nano::state_block send3 (destination.pub, receive2.hash (), destination.pub, nano::Gxrb_ratio, destination2.pub, destination.prv, destination.pub, *pool.generate (receive2.hash ())); @@ -2571,13 +2571,13 @@ TEST (ledger, epoch_blocks_receive_upgrade) // Send it to an epoch 1 account nano::state_block send5 (nano::genesis_account, send4.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio * 4, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send4.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send5).code); - ASSERT_FALSE (ledger.store.account_get (transaction, destination.pub, destination_info)); + ASSERT_FALSE (ledger.store.account.get (transaction, destination.pub, destination_info)); ASSERT_EQ (destination_info.epoch (), nano::epoch::epoch_1); nano::state_block receive3 (destination.pub, send3.hash (), destination.pub, nano::Gxrb_ratio * 2, send5.hash (), destination.prv, destination.pub, *pool.generate (send3.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive3).code); ASSERT_EQ (nano::epoch::epoch_2, receive3.sideband ().details.epoch); ASSERT_EQ (nano::epoch::epoch_2, receive3.sideband ().source_epoch); - ASSERT_FALSE (ledger.store.account_get (transaction, destination.pub, destination_info)); + ASSERT_FALSE (ledger.store.account.get (transaction, destination.pub, destination_info)); ASSERT_EQ (destination_info.epoch (), nano::epoch::epoch_2); // Upgrade an unopened account straight to epoch 2 nano::keypair destination4; @@ -2587,7 +2587,7 @@ TEST (ledger, epoch_blocks_receive_upgrade) ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch4).code); ASSERT_EQ (nano::epoch::epoch_2, epoch4.sideband ().details.epoch); ASSERT_EQ (nano::epoch::epoch_0, epoch4.sideband ().source_epoch); // Not used for epoch blocks - ASSERT_EQ (store->account_count (transaction), ledger.cache.account_count); + ASSERT_EQ (store->account.count (transaction), ledger.cache.account_count); } TEST (ledger, epoch_blocks_fork) @@ -2869,7 +2869,7 @@ TEST (ledger, unchecked_epoch) ASSERT_EQ (unchecked_count, 0); ASSERT_EQ (unchecked_count, node1.store.unchecked_count (transaction)); nano::account_info info; - ASSERT_FALSE (node1.store.account_get (transaction, destination.pub, info)); + ASSERT_FALSE (node1.store.account.get (transaction, destination.pub, info)); ASSERT_EQ (info.epoch (), nano::epoch::epoch_1); } } @@ -2917,7 +2917,7 @@ TEST (ledger, unchecked_epoch_invalid) ASSERT_EQ (unchecked_count, 0); ASSERT_EQ (unchecked_count, node1.store.unchecked_count (transaction)); nano::account_info info; - ASSERT_FALSE (node1.store.account_get (transaction, destination.pub, info)); + ASSERT_FALSE (node1.store.account.get (transaction, destination.pub, info)); ASSERT_NE (info.epoch (), nano::epoch::epoch_1); auto epoch2_store (node1.store.block_get (transaction, epoch2->hash ())); ASSERT_NE (nullptr, epoch2_store); @@ -3027,7 +3027,7 @@ TEST (ledger, confirmation_height_not_updated) store->initialize (transaction, genesis, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::account_info account_info; - ASSERT_FALSE (store->account_get (transaction, nano::dev_genesis_key.pub, account_info)); + ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, account_info)); nano::keypair key; nano::send_block send1 (account_info.head, key.pub, 50, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (account_info.head)); nano::confirmation_height_info confirmation_height_info; @@ -3494,7 +3494,7 @@ TEST (ledger, pruning_action) ASSERT_EQ (1, ledger.pruning_action (transaction, send2.hash (), 1)); ASSERT_TRUE (store->pruned_exists (transaction, send2.hash ())); ASSERT_FALSE (store->block_exists (transaction, send2.hash ())); - ASSERT_EQ (store->account_count (transaction), ledger.cache.account_count); + ASSERT_EQ (store->account.count (transaction), ledger.cache.account_count); ASSERT_EQ (store->pruned_count (transaction), ledger.cache.pruned_count); ASSERT_EQ (store->block_count (transaction), ledger.cache.block_count - ledger.cache.pruned_count); } diff --git a/nano/core_test/processor_service.cpp b/nano/core_test/processor_service.cpp index 913eba5b03..146712e7ab 100644 --- a/nano/core_test/processor_service.cpp +++ b/nano/core_test/processor_service.cpp @@ -19,7 +19,7 @@ TEST (processor_service, bad_send_signature) store->initialize (transaction, genesis, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::account_info info1; - ASSERT_FALSE (store->account_get (transaction, nano::dev_genesis_key.pub, info1)); + ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info1)); nano::keypair key2; nano::send_block send (info1.head, nano::dev_genesis_key.pub, 50, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (info1.head)); send.signature.bytes[32] ^= 0x1; @@ -38,12 +38,12 @@ TEST (processor_service, bad_receive_signature) store->initialize (transaction, genesis, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::account_info info1; - ASSERT_FALSE (store->account_get (transaction, nano::dev_genesis_key.pub, info1)); + ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info1)); nano::send_block send (info1.head, nano::dev_genesis_key.pub, 50, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (info1.head)); nano::block_hash hash1 (send.hash ()); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); nano::account_info info2; - ASSERT_FALSE (store->account_get (transaction, nano::dev_genesis_key.pub, info2)); + ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info2)); nano::receive_block receive (hash1, hash1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (hash1)); receive.signature.bytes[32] ^= 0x1; ASSERT_EQ (nano::process_result::bad_signature, ledger.process (transaction, receive).code); diff --git a/nano/core_test/wallet.cpp b/nano/core_test/wallet.cpp index 3aca7cccde..dc98ff0536 100644 --- a/nano/core_test/wallet.cpp +++ b/nano/core_test/wallet.cpp @@ -183,7 +183,7 @@ TEST (wallet, spend_all_one) nano::account_info info2; { auto transaction (node1.store.tx_begin_read ()); - node1.store.account_get (transaction, nano::dev_genesis_key.pub, info2); + node1.store.account.get (transaction, nano::dev_genesis_key.pub, info2); ASSERT_NE (latest1, info2.head); auto block (node1.store.block_get (transaction, info2.head)); ASSERT_NE (nullptr, block); @@ -220,7 +220,7 @@ TEST (wallet, spend) nano::account_info info2; { auto transaction (node1.store.tx_begin_read ()); - node1.store.account_get (transaction, nano::dev_genesis_key.pub, info2); + node1.store.account.get (transaction, nano::dev_genesis_key.pub, info2); ASSERT_NE (latest1, info2.head); auto block (node1.store.block_get (transaction, info2.head)); ASSERT_NE (nullptr, block); @@ -259,7 +259,7 @@ TEST (wallet, spend_no_previous) system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); auto transaction (system.nodes[0]->store.tx_begin_read ()); nano::account_info info1; - ASSERT_FALSE (system.nodes[0]->store.account_get (transaction, nano::dev_genesis_key.pub, info1)); + ASSERT_FALSE (system.nodes[0]->store.account.get (transaction, nano::dev_genesis_key.pub, info1)); for (auto i (0); i < 50; ++i) { nano::keypair key; diff --git a/nano/nano_node/entry.cpp b/nano/nano_node/entry.cpp index 607ed8a352..579ecb3790 100644 --- a/nano/nano_node/entry.cpp +++ b/nano/nano_node/entry.cpp @@ -415,7 +415,7 @@ int main (int argc, char * const * argv) // Cache the account heads to make searching quicker against unchecked keys. auto transaction (node->store.tx_begin_read ()); std::unordered_set frontier_hashes; - for (auto i (node->store.accounts_begin (transaction)), n (node->store.accounts_end ()); i != n; ++i) + for (auto i (node->store.account.begin (transaction)), n (node->store.account.end ()); i != n; ++i) { frontier_hashes.insert (i->second.head); } @@ -1631,7 +1631,7 @@ int main (int argc, char * const * argv) } size_t const accounts_deque_overflow (32 * 1024); auto transaction (node->store.tx_begin_read ()); - for (auto i (node->store.accounts_begin (transaction)), n (node->store.accounts_end ()); i != n; ++i) + for (auto i (node->store.account.begin (transaction)), n (node->store.account.end ()); i != n; ++i) { { nano::unique_lock lock (mutex); @@ -1800,7 +1800,7 @@ int main (int argc, char * const * argv) auto transaction (source_node->store.tx_begin_read ()); block_count = source_node->ledger.cache.block_count; std::cout << boost::str (boost::format ("Performing bootstrap emulation, %1% blocks in ledger...") % block_count) << std::endl; - for (auto i (source_node->store.accounts_begin (transaction)), n (source_node->store.accounts_end ()); i != n; ++i) + for (auto i (source_node->store.account.begin (transaction)), n (source_node->store.account.end ()); i != n; ++i) { nano::account const & account (i->first); nano::account_info const & info (i->second); @@ -1911,7 +1911,7 @@ int main (int argc, char * const * argv) // Cache the accounts in a collection to make searching quicker against unchecked keys. Group by epoch nano::locked>> opened_account_versions_shared (epoch_count); using opened_account_versions_t = decltype (opened_account_versions_shared)::value_type; - node->store.accounts_for_each_par ( + node->store.account.for_each_par ( [&opened_account_versions_shared, epoch_count] (nano::read_transaction const & /*unused*/, nano::store_iterator i, nano::store_iterator n) { // First cache locally opened_account_versions_t opened_account_versions_l (epoch_count); diff --git a/nano/node/active_transactions.cpp b/nano/node/active_transactions.cpp index 248b659778..1b1988d08c 100644 --- a/nano/node/active_transactions.cpp +++ b/nano/node/active_transactions.cpp @@ -132,7 +132,7 @@ void nano::active_transactions::confirm_prioritized_frontiers (nano::transaction { lk.unlock (); nano::account_info info; - auto error = this->node.store.account_get (transaction_a, cementable_account.account, info); + auto error = this->node.store.account.get (transaction_a, cementable_account.account, info); if (!error) { if (!this->confirmation_height_processor.is_processing_block (info.head)) @@ -473,8 +473,8 @@ void nano::active_transactions::frontiers_confirmation (nano::unique_lock timer (nano::timer_state::started); nano::confirmation_height_info confirmation_height_info; @@ -490,7 +490,7 @@ void nano::active_transactions::confirm_expired_frontiers_pessimistically (nano: auto const & account{ i->account }; nano::account_info account_info; bool should_delete{ true }; - if (!node.store.account_get (transaction_a, account, account_info)) + if (!node.store.account.get (transaction_a, account, account_info)) { node.store.confirmation_height_get (transaction_a, account, confirmation_height_info); if (account_info.block_count > confirmation_height_info.height) @@ -692,7 +692,7 @@ void nano::active_transactions::prioritize_frontiers_for_confirmation (nano::tra for (; i != n && should_iterate (); ++i) { auto const & account (i->first); - if (expired_optimistic_election_infos.get ().count (account) == 0 && !node.store.account_get (transaction_a, account, info)) + if (expired_optimistic_election_infos.get ().count (account) == 0 && !node.store.account.get (transaction_a, account, info)) { nano::confirmation_height_info confirmation_height_info; node.store.confirmation_height_get (transaction_a, account, confirmation_height_info); @@ -736,8 +736,8 @@ void nano::active_transactions::prioritize_frontiers_for_confirmation (nano::tra } nano::timer timer (nano::timer_state::started); - auto i (node.store.accounts_begin (transaction_a, next_frontier_account)); - auto n (node.store.accounts_end ()); + auto i (node.store.account.begin (transaction_a, next_frontier_account)); + auto n (node.store.account.end ()); for (; i != n && should_iterate (); ++i) { auto const & account (i->first); diff --git a/nano/node/bootstrap/bootstrap_bulk_pull.cpp b/nano/node/bootstrap/bootstrap_bulk_pull.cpp index f496ae3fce..6f9a4d19cb 100644 --- a/nano/node/bootstrap/bootstrap_bulk_pull.cpp +++ b/nano/node/bootstrap/bootstrap_bulk_pull.cpp @@ -441,7 +441,7 @@ void nano::bulk_pull_server::set_current_end () else { nano::account_info info; - auto no_address (connection->node->store.account_get (transaction, request->start.as_account (), info)); + auto no_address (connection->node->store.account.get (transaction, request->start.as_account (), info)); if (no_address) { if (connection->node->config.logging.bulk_pull_logging ()) diff --git a/nano/node/bootstrap/bootstrap_frontier.cpp b/nano/node/bootstrap/bootstrap_frontier.cpp index b197b5cc26..48b20d982a 100644 --- a/nano/node/bootstrap/bootstrap_frontier.cpp +++ b/nano/node/bootstrap/bootstrap_frontier.cpp @@ -218,7 +218,7 @@ void nano::frontier_req_client::next () { size_t max_size (128); auto transaction (connection->node->store.tx_begin_read ()); - for (auto i (connection->node->store.accounts_begin (transaction, current.number () + 1)), n (connection->node->store.accounts_end ()); i != n && accounts.size () != max_size; ++i) + for (auto i (connection->node->store.account.begin (transaction, current.number () + 1)), n (connection->node->store.account.end ()); i != n && accounts.size () != max_size; ++i) { nano::account_info const & info (i->second); nano::account const & account (i->first); @@ -337,7 +337,7 @@ void nano::frontier_req_server::next () auto transaction (connection->node->store.tx_begin_read ()); if (!send_confirmed ()) { - for (auto i (connection->node->store.accounts_begin (transaction, current.number () + 1)), n (connection->node->store.accounts_end ()); i != n && accounts.size () != max_size; ++i) + for (auto i (connection->node->store.account.begin (transaction, current.number () + 1)), n (connection->node->store.account.end ()); i != n && accounts.size () != max_size; ++i) { nano::account_info const & info (i->second); if (disable_age_filter || (now - info.modified) <= request->age) diff --git a/nano/node/confirmation_height_bounded.cpp b/nano/node/confirmation_height_bounded.cpp index e6803f14c5..55c36d7369 100644 --- a/nano/node/confirmation_height_bounded.cpp +++ b/nano/node/confirmation_height_bounded.cpp @@ -239,7 +239,7 @@ nano::block_hash nano::confirmation_height_bounded::get_least_unconfirmed_hash_f { // No blocks have been confirmed, so the first block will be the open block nano::account_info account_info; - release_assert (!ledger.store.account_get (transaction_a, account_a, account_info)); + release_assert (!ledger.store.account.get (transaction_a, account_a, account_info)); least_unconfirmed_hash = account_info.open_block; block_height_a = 1; } diff --git a/nano/node/election_scheduler.cpp b/nano/node/election_scheduler.cpp index b7fc5f1fac..9047438740 100644 --- a/nano/node/election_scheduler.cpp +++ b/nano/node/election_scheduler.cpp @@ -25,7 +25,7 @@ void nano::election_scheduler::activate (nano::account const & account_a, nano:: { debug_assert (!account_a.is_zero ()); nano::account_info account_info; - if (!node.store.account_get (transaction, account_a, account_info)) + if (!node.store.account.get (transaction, account_a, account_info)) { nano::confirmation_height_info conf_info; node.store.confirmation_height_get (transaction, account_a, conf_info); diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index 47703d6628..e9e3706ce6 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -251,7 +251,7 @@ nano::account_info nano::json_handler::account_info_impl (nano::transaction cons nano::account_info result; if (!ec) { - if (node.store.account_get (transaction_a, account_a, result)) + if (node.store.account.get (transaction_a, account_a, result)) { ec = nano::error_common::account_not_found; node.bootstrap_initiator.bootstrap_lazy (account_a, false, false, account_a.to_account ()); @@ -2073,7 +2073,7 @@ void nano::json_handler::delegators () { boost::property_tree::ptree delegators; auto transaction (node.store.tx_begin_read ()); - for (auto i (node.store.accounts_begin (transaction)), n (node.store.accounts_end ()); i != n; ++i) + for (auto i (node.store.account.begin (transaction)), n (node.store.account.end ()); i != n; ++i) { nano::account_info const & info (i->second); if (info.representative == account) @@ -2096,7 +2096,7 @@ void nano::json_handler::delegators_count () { uint64_t count (0); auto transaction (node.store.tx_begin_read ()); - for (auto i (node.store.accounts_begin (transaction)), n (node.store.accounts_end ()); i != n; ++i) + for (auto i (node.store.account.begin (transaction)), n (node.store.account.end ()); i != n; ++i) { nano::account_info const & info (i->second); if (info.representative == account) @@ -2207,7 +2207,7 @@ void nano::json_handler::frontiers () { boost::property_tree::ptree frontiers; auto transaction (node.store.tx_begin_read ()); - for (auto i (node.store.accounts_begin (transaction, start)), n (node.store.accounts_end ()); i != n && frontiers.size () < count; ++i) + for (auto i (node.store.account.begin (transaction, start)), n (node.store.account.end ()); i != n && frontiers.size () < count; ++i) { frontiers.put (i->first.to_account (), i->second.head.to_string ()); } @@ -2610,7 +2610,7 @@ void nano::json_handler::ledger () auto transaction (node.store.tx_begin_read ()); if (!ec && !sorting) // Simple { - for (auto i (node.store.accounts_begin (transaction, start)), n (node.store.accounts_end ()); i != n && accounts.size () < count; ++i) + for (auto i (node.store.account.begin (transaction, start)), n (node.store.account.end ()); i != n && accounts.size () < count; ++i) { nano::account_info const & info (i->second); if (info.modified >= modified_since && (pending || info.balance.number () >= threshold.number ())) @@ -2650,7 +2650,7 @@ void nano::json_handler::ledger () else if (!ec) // Sorting { std::vector> ledger_l; - for (auto i (node.store.accounts_begin (transaction, start)), n (node.store.accounts_end ()); i != n; ++i) + for (auto i (node.store.account.begin (transaction, start)), n (node.store.account.end ()); i != n; ++i) { nano::account_info const & info (i->second); nano::uint128_union balance (info.balance); @@ -2664,7 +2664,7 @@ void nano::json_handler::ledger () nano::account_info info; for (auto i (ledger_l.begin ()), n (ledger_l.end ()); i != n && accounts.size () < count; ++i) { - node.store.account_get (transaction, i->second, info); + node.store.account.get (transaction, i->second, info); if (pending || info.balance.number () >= threshold.number ()) { nano::account const & account (i->second); @@ -3208,7 +3208,7 @@ void nano::json_handler::receive () nano::account_info info; nano::root head; nano::epoch epoch = pending_info.epoch; - if (!node.store.account_get (block_transaction, account, info)) + if (!node.store.account.get (block_transaction, account, info)) { head = info.head; // When receiving, epoch version is the higher between the previous and the source blocks @@ -4071,7 +4071,7 @@ void nano::json_handler::unopened () nano::pending_key key (iterator->first); nano::account account (key.account); nano::pending_info info (iterator->second); - if (node.store.account_exists (transaction, account)) + if (node.store.account.exists (transaction, account)) { if (account.number () == std::numeric_limits::max ()) { @@ -4220,7 +4220,7 @@ void nano::json_handler::wallet_info () nano::account const & account (i->first); nano::account_info account_info{}; - if (!node.store.account_get (block_transaction, account, account_info)) + if (!node.store.account.get (block_transaction, account, account_info)) { block_count += account_info.block_count; } @@ -4455,7 +4455,7 @@ void nano::json_handler::wallet_history () { nano::account const & account (i->first); nano::account_info info; - if (!node.store.account_get (block_transaction, account, info)) + if (!node.store.account.get (block_transaction, account, info)) { auto timestamp (info.modified); auto hash (info.head); @@ -4528,7 +4528,7 @@ void nano::json_handler::wallet_ledger () { nano::account const & account (i->first); nano::account_info info; - if (!node.store.account_get (block_transaction, account, info)) + if (!node.store.account.get (block_transaction, account, info)) { if (info.modified >= modified_since) { @@ -4687,7 +4687,7 @@ void nano::json_handler::wallet_representative_set () { nano::account const & account (i->first); nano::account_info info; - if (!rpc_l->node.store.account_get (block_transaction, account, info)) + if (!rpc_l->node.store.account.get (block_transaction, account, info)) { if (info.representative != representative) { diff --git a/nano/node/lmdb/lmdb.cpp b/nano/node/lmdb/lmdb.cpp index 0068025312..fd1d621edb 100644 --- a/nano/node/lmdb/lmdb.cpp +++ b/nano/node/lmdb/lmdb.cpp @@ -428,8 +428,8 @@ void nano::mdb_store::upgrade_v16_to_v17 (nano::write_transaction const & transa { logger.always_log ("Preparing v16 to v17 database upgrade..."); - auto account_info_i = accounts_begin (transaction_a); - auto account_info_n = accounts_end (); + auto account_info_i = account.begin (transaction_a); + auto account_info_n = account.end (); // Set the confirmed frontier for each account in the confirmation height table std::vector> confirmation_height_infos; diff --git a/nano/node/node.cpp b/nano/node/node.cpp index 4a68587ca3..dfac17d59c 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -341,7 +341,7 @@ nano::node::node (boost::asio::io_context & io_ctx_a, boost::filesystem::path co auto is_initialized (false); { auto transaction (store.tx_begin_read ()); - is_initialized = (store.accounts_begin (transaction) != store.accounts_end ()); + is_initialized = (store.account.begin (transaction) != store.account.end ()); } nano::genesis genesis; @@ -733,7 +733,7 @@ nano::block_hash nano::node::rep_block (nano::account const & account_a) auto transaction (store.tx_begin_read ()); nano::account_info info; nano::block_hash result (0); - if (!store.account_get (transaction, account_a, info)) + if (!store.account.get (transaction, account_a, info)) { result = ledger.representative (transaction, info.head); } @@ -1515,7 +1515,7 @@ void nano::node::epoch_upgrader_impl (nano::raw_key const & prv_a, nano::epoch e { auto transaction (store.tx_begin_read ()); // Collect accounts to upgrade - for (auto i (store.accounts_begin (transaction)), n (store.accounts_end ()); i != n && accounts_list.size () < count_limit; ++i) + for (auto i (store.account.begin (transaction)), n (store.account.end ()); i != n && accounts_list.size () < count_limit; ++i) { nano::account const & account (i->first); nano::account_info const & info (i->second); @@ -1537,7 +1537,7 @@ void nano::node::epoch_upgrader_impl (nano::raw_key const & prv_a, nano::epoch e auto transaction (store.tx_begin_read ()); nano::account_info info; nano::account const & account (i->account); - if (!store.account_get (transaction, account, info) && info.epoch () < epoch_a) + if (!store.account.get (transaction, account, info) && info.epoch () < epoch_a) { ++attempts; auto difficulty (nano::work_threshold (nano::work_version::work_1, nano::block_details (epoch_a, false, false, true))); @@ -1611,7 +1611,7 @@ void nano::node::epoch_upgrader_impl (nano::raw_key const & prv_a, nano::epoch e { bool to_next_account (false); nano::pending_key const & key (i->first); - if (!store.account_exists (transaction, key.account)) + if (!store.account.exists (transaction, key.account)) { nano::pending_info const & info (i->second); if (info.epoch < epoch_a) @@ -1745,13 +1745,13 @@ void nano::node::populate_backlog () { auto transaction = store.tx_begin_read (); auto count = 0; - for (auto i = store.accounts_begin (transaction, next), n = store.accounts_end (); !stopped && i != n && count < chunk_size; ++i, ++count, ++total) + for (auto i = store.account.begin (transaction, next), n = store.account.end (); !stopped && i != n && count < chunk_size; ++i, ++count, ++total) { auto const & account = i->first; scheduler.activate (account, transaction); next = account.number () + 1; } - done = store.accounts_begin (transaction, next) == store.accounts_end (); + done = store.account.begin (transaction, next) == store.account.end (); } } diff --git a/nano/node/request_aggregator.cpp b/nano/node/request_aggregator.cpp index b3f2ee7697..faefc50cfe 100644 --- a/nano/node/request_aggregator.cpp +++ b/nano/node/request_aggregator.cpp @@ -231,7 +231,7 @@ std::pair>, std::vector (accounts_a.size () - 1))); auto account (accounts_a[index]); nano::account_info info; - auto error (node_a.store.account_get (transaction, account, info)); + auto error (node_a.store.account.get (transaction, account, info)); if (!error) { auto hash (info.open_block); @@ -421,12 +421,12 @@ void nano::system::generate_send_existing (nano::node & node_a, std::vector entry (node_a.store.accounts_begin (transaction, account)); - if (entry == node_a.store.accounts_end ()) + nano::store_iterator entry (node_a.store.account.begin (transaction, account)); + if (entry == node_a.store.account.end ()) { - entry = node_a.store.accounts_begin (transaction); + entry = node_a.store.account.begin (transaction); } - debug_assert (entry != node_a.store.accounts_end ()); + debug_assert (entry != node_a.store.account.end ()); destination = nano::account (entry->first); source = get_random_account (accounts_a); amount = get_random_amount (transaction, node_a, source); diff --git a/nano/node/wallet.cpp b/nano/node/wallet.cpp index 08a7594b54..7196b24ddf 100644 --- a/nano/node/wallet.cpp +++ b/nano/node/wallet.cpp @@ -851,7 +851,7 @@ std::shared_ptr nano::wallet::receive_action (nano::block_hash cons store.work_get (transaction, account_a, work_a); } nano::account_info info; - auto new_account (wallets.node.ledger.store.account_get (block_transaction, account_a, info)); + auto new_account (wallets.node.ledger.store.account.get (block_transaction, account_a, info)); if (!new_account) { block = std::make_shared (account_a, info.head, info.representative, info.balance.number () + pending_info.amount.number (), send_hash_a, prv, account_a, work_a); @@ -907,7 +907,7 @@ std::shared_ptr nano::wallet::change_action (nano::account const & if (existing != store.end () && !wallets.node.ledger.latest (block_transaction, source_a).is_zero ()) { nano::account_info info; - auto error1 (wallets.node.ledger.store.account_get (block_transaction, source_a, info)); + auto error1 (wallets.node.ledger.store.account.get (block_transaction, source_a, info)); (void)error1; debug_assert (!error1); nano::raw_key prv; @@ -979,7 +979,7 @@ std::shared_ptr nano::wallet::send_action (nano::account const & so if (!balance.is_zero () && balance >= amount_a) { nano::account_info info; - auto error1 (wallets.node.ledger.store.account_get (block_transaction, source_a, info)); + auto error1 (wallets.node.ledger.store.account.get (block_transaction, source_a, info)); (void)error1; debug_assert (!error1); nano::raw_key prv; diff --git a/nano/qt/qt.cpp b/nano/qt/qt.cpp index c7ff3a1e44..6029dfcf90 100644 --- a/nano/qt/qt.cpp +++ b/nano/qt/qt.cpp @@ -1697,7 +1697,7 @@ void nano_qt::settings::refresh_representative () { auto transaction (this->wallet.wallet_m->wallets.node.store.tx_begin_read ()); nano::account_info info; - auto error (wallet.node.store.account_get (transaction, this->wallet.account, info)); + auto error (wallet.node.store.account.get (transaction, this->wallet.account, info)); if (!error) { current_representative->setText (QString (info.representative.to_account ().c_str ())); @@ -1982,7 +1982,7 @@ void nano_qt::advanced_actions::refresh_ledger () { ledger_model->removeRows (0, ledger_model->rowCount ()); auto transaction (wallet.node.store.tx_begin_read ()); - for (auto i (wallet.node.ledger.store.accounts_begin (transaction)), j (wallet.node.ledger.store.accounts_end ()); i != j; ++i) + for (auto i (wallet.node.ledger.store.account.begin (transaction)), j (wallet.node.ledger.store.account.end ()); i != j; ++i) { QList items; items.push_back (new QStandardItem (QString (i->first.to_account ().c_str ()))); @@ -2259,7 +2259,7 @@ void nano_qt::block_creation::create_send () if (amount_l.number () <= balance) { nano::account_info info; - auto error (wallet.node.store.account_get (block_transaction, account_l, info)); + auto error (wallet.node.store.account.get (block_transaction, account_l, info)); (void)error; debug_assert (!error); nano::state_block send (account_l, info.head, info.representative, balance - amount_l.number (), destination_l, key, account_l, 0); @@ -2339,7 +2339,7 @@ void nano_qt::block_creation::create_receive () if (!wallet.node.store.pending.get (block_transaction, pending_key, pending)) { nano::account_info info; - auto error (wallet.node.store.account_get (block_transaction, pending_key.account, info)); + auto error (wallet.node.store.account.get (block_transaction, pending_key.account, info)); if (!error) { nano::raw_key key; @@ -2423,7 +2423,7 @@ void nano_qt::block_creation::create_change () auto transaction (wallet.node.wallets.tx_begin_read ()); auto block_transaction (wallet.node.store.tx_begin_read ()); nano::account_info info; - auto error (wallet.node.store.account_get (block_transaction, account_l, info)); + auto error (wallet.node.store.account.get (block_transaction, account_l, info)); if (!error) { nano::raw_key key; @@ -2504,7 +2504,7 @@ void nano_qt::block_creation::create_open () if (!wallet.node.store.pending.get (block_transaction, pending_key, pending)) { nano::account_info info; - auto error (wallet.node.store.account_get (block_transaction, pending_key.account, info)); + auto error (wallet.node.store.account.get (block_transaction, pending_key.account, info)); if (error) { nano::raw_key key; diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index 8c5c20e3e9..f6f3fcd8e8 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -881,7 +881,7 @@ TEST (rpc, wallet_representative_set_force) { auto transaction (node->store.tx_begin_read ()); nano::account_info info; - if (!node->store.account_get (transaction, nano::dev_genesis_key.pub, info)) + if (!node->store.account.get (transaction, nano::dev_genesis_key.pub, info)) { representative = info.representative; } @@ -1275,7 +1275,7 @@ TEST (rpc, frontier) nano::random_pool::generate_block (hash.bytes.data (), hash.bytes.size ()); source[key.pub] = hash; node->store.confirmation_height_put (transaction, key.pub, { 0, nano::block_hash (0) }); - node->store.account_put (transaction, key.pub, nano::account_info (hash, 0, 0, 0, 0, 0, nano::epoch::epoch_0)); + node->store.account.put (transaction, key.pub, nano::account_info (hash, 0, 0, 0, 0, 0, nano::epoch::epoch_0)); } } scoped_io_thread_name_change scoped_thread_name_io; @@ -1322,7 +1322,7 @@ TEST (rpc, frontier_limited) nano::random_pool::generate_block (hash.bytes.data (), hash.bytes.size ()); source[key.pub] = hash; node->store.confirmation_height_put (transaction, key.pub, { 0, nano::block_hash (0) }); - node->store.account_put (transaction, key.pub, nano::account_info (hash, 0, 0, 0, 0, 0, nano::epoch::epoch_0)); + node->store.account.put (transaction, key.pub, nano::account_info (hash, 0, 0, 0, 0, 0, nano::epoch::epoch_0)); } } @@ -1360,7 +1360,7 @@ TEST (rpc, frontier_startpoint) nano::random_pool::generate_block (hash.bytes.data (), hash.bytes.size ()); source[key.pub] = hash; node->store.confirmation_height_put (transaction, key.pub, { 0, nano::block_hash (0) }); - node->store.account_put (transaction, key.pub, nano::account_info (hash, 0, 0, 0, 0, 0, nano::epoch::epoch_0)); + node->store.account.put (transaction, key.pub, nano::account_info (hash, 0, 0, 0, 0, 0, nano::epoch::epoch_0)); } } scoped_io_thread_name_change scoped_thread_name_io; @@ -7177,8 +7177,8 @@ TEST (rpc, epoch_upgrade) // Check accounts epochs { auto transaction (node->store.tx_begin_read ()); - ASSERT_EQ (2, node->store.account_count (transaction)); - for (auto i (node->store.accounts_begin (transaction)); i != node->store.accounts_end (); ++i) + ASSERT_EQ (2, node->store.account.count (transaction)); + for (auto i (node->store.account.begin (transaction)); i != node->store.account.end (); ++i) { nano::account_info info (i->second); ASSERT_EQ (info.epoch (), nano::epoch::epoch_0); @@ -7203,20 +7203,20 @@ TEST (rpc, epoch_upgrade) ASSERT_TIMELY (5s, response_fail.status != 0); ASSERT_EQ (200, response_fail.status); ASSERT_EQ ("0", response_fail.json.get ("started")); - ASSERT_TIMELY (10s, 4 == node->store.account_count (node->store.tx_begin_read ())); + ASSERT_TIMELY (10s, 4 == node->store.account.count (node->store.tx_begin_read ())); // Check upgrade { auto transaction (node->store.tx_begin_read ()); - ASSERT_EQ (4, node->store.account_count (transaction)); - for (auto i (node->store.accounts_begin (transaction)); i != node->store.accounts_end (); ++i) + ASSERT_EQ (4, node->store.account.count (transaction)); + for (auto i (node->store.account.begin (transaction)); i != node->store.account.end (); ++i) { nano::account_info info (i->second); ASSERT_EQ (info.epoch (), nano::epoch::epoch_1); } - ASSERT_TRUE (node->store.account_exists (transaction, key1.pub)); - ASSERT_TRUE (node->store.account_exists (transaction, key2.pub)); - ASSERT_TRUE (node->store.account_exists (transaction, std::numeric_limits::max ())); - ASSERT_FALSE (node->store.account_exists (transaction, 0)); + ASSERT_TRUE (node->store.account.exists (transaction, key1.pub)); + ASSERT_TRUE (node->store.account.exists (transaction, key2.pub)); + ASSERT_TRUE (node->store.account.exists (transaction, std::numeric_limits::max ())); + ASSERT_FALSE (node->store.account.exists (transaction, 0)); } // Epoch 2 upgrade @@ -7241,21 +7241,21 @@ TEST (rpc, epoch_upgrade) ASSERT_TIMELY (5s, response2.status != 0); ASSERT_EQ (200, response2.status); ASSERT_EQ ("1", response2.json.get ("started")); - ASSERT_TIMELY (10s, 5 == node->store.account_count (node->store.tx_begin_read ())); + ASSERT_TIMELY (10s, 5 == node->store.account.count (node->store.tx_begin_read ())); // Check upgrade { auto transaction (node->store.tx_begin_read ()); - ASSERT_EQ (5, node->store.account_count (transaction)); - for (auto i (node->store.accounts_begin (transaction)); i != node->store.accounts_end (); ++i) + ASSERT_EQ (5, node->store.account.count (transaction)); + for (auto i (node->store.account.begin (transaction)); i != node->store.account.end (); ++i) { nano::account_info info (i->second); ASSERT_EQ (info.epoch (), nano::epoch::epoch_2); } - ASSERT_TRUE (node->store.account_exists (transaction, key1.pub)); - ASSERT_TRUE (node->store.account_exists (transaction, key2.pub)); - ASSERT_TRUE (node->store.account_exists (transaction, key3.pub)); - ASSERT_TRUE (node->store.account_exists (transaction, std::numeric_limits::max ())); - ASSERT_FALSE (node->store.account_exists (transaction, 0)); + ASSERT_TRUE (node->store.account.exists (transaction, key1.pub)); + ASSERT_TRUE (node->store.account.exists (transaction, key2.pub)); + ASSERT_TRUE (node->store.account.exists (transaction, key3.pub)); + ASSERT_TRUE (node->store.account.exists (transaction, std::numeric_limits::max ())); + ASSERT_FALSE (node->store.account.exists (transaction, 0)); } } @@ -7281,8 +7281,8 @@ TEST (rpc, epoch_upgrade_multithreaded) // Check accounts epochs { auto transaction (node->store.tx_begin_read ()); - ASSERT_EQ (2, node->store.account_count (transaction)); - for (auto i (node->store.accounts_begin (transaction)); i != node->store.accounts_end (); ++i) + ASSERT_EQ (2, node->store.account.count (transaction)); + for (auto i (node->store.account.begin (transaction)); i != node->store.account.end (); ++i) { nano::account_info info (i->second); ASSERT_EQ (info.epoch (), nano::epoch::epoch_0); @@ -7304,20 +7304,20 @@ TEST (rpc, epoch_upgrade_multithreaded) ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_EQ ("1", response.json.get ("started")); - ASSERT_TIMELY (5s, 4 == node->store.account_count (node->store.tx_begin_read ())); + ASSERT_TIMELY (5s, 4 == node->store.account.count (node->store.tx_begin_read ())); // Check upgrade { auto transaction (node->store.tx_begin_read ()); - ASSERT_EQ (4, node->store.account_count (transaction)); - for (auto i (node->store.accounts_begin (transaction)); i != node->store.accounts_end (); ++i) + ASSERT_EQ (4, node->store.account.count (transaction)); + for (auto i (node->store.account.begin (transaction)); i != node->store.account.end (); ++i) { nano::account_info info (i->second); ASSERT_EQ (info.epoch (), nano::epoch::epoch_1); } - ASSERT_TRUE (node->store.account_exists (transaction, key1.pub)); - ASSERT_TRUE (node->store.account_exists (transaction, key2.pub)); - ASSERT_TRUE (node->store.account_exists (transaction, std::numeric_limits::max ())); - ASSERT_FALSE (node->store.account_exists (transaction, 0)); + ASSERT_TRUE (node->store.account.exists (transaction, key1.pub)); + ASSERT_TRUE (node->store.account.exists (transaction, key2.pub)); + ASSERT_TRUE (node->store.account.exists (transaction, std::numeric_limits::max ())); + ASSERT_FALSE (node->store.account.exists (transaction, 0)); } // Epoch 2 upgrade @@ -7342,21 +7342,21 @@ TEST (rpc, epoch_upgrade_multithreaded) ASSERT_TIMELY (5s, response2.status != 0); ASSERT_EQ (200, response2.status); ASSERT_EQ ("1", response2.json.get ("started")); - ASSERT_TIMELY (5s, 5 == node->store.account_count (node->store.tx_begin_read ())); + ASSERT_TIMELY (5s, 5 == node->store.account.count (node->store.tx_begin_read ())); // Check upgrade { auto transaction (node->store.tx_begin_read ()); - ASSERT_EQ (5, node->store.account_count (transaction)); - for (auto i (node->store.accounts_begin (transaction)); i != node->store.accounts_end (); ++i) + ASSERT_EQ (5, node->store.account.count (transaction)); + for (auto i (node->store.account.begin (transaction)); i != node->store.account.end (); ++i) { nano::account_info info (i->second); ASSERT_EQ (info.epoch (), nano::epoch::epoch_2); } - ASSERT_TRUE (node->store.account_exists (transaction, key1.pub)); - ASSERT_TRUE (node->store.account_exists (transaction, key2.pub)); - ASSERT_TRUE (node->store.account_exists (transaction, key3.pub)); - ASSERT_TRUE (node->store.account_exists (transaction, std::numeric_limits::max ())); - ASSERT_FALSE (node->store.account_exists (transaction, 0)); + ASSERT_TRUE (node->store.account.exists (transaction, key1.pub)); + ASSERT_TRUE (node->store.account.exists (transaction, key2.pub)); + ASSERT_TRUE (node->store.account.exists (transaction, key3.pub)); + ASSERT_TRUE (node->store.account.exists (transaction, std::numeric_limits::max ())); + ASSERT_FALSE (node->store.account.exists (transaction, 0)); } } @@ -7414,7 +7414,7 @@ TEST (rpc, receive) wallet->insert_adhoc (key1.prv); auto send1 (wallet->send_action (nano::dev_genesis_key.pub, key1.pub, node.config.receive_minimum.number (), *node.work_generate_blocking (nano::genesis_hash))); ASSERT_TIMELY (5s, node.balance (nano::dev_genesis_key.pub) != nano::genesis_amount); - ASSERT_TIMELY (10s, !node.store.account_exists (node.store.tx_begin_read (), key1.pub)); + ASSERT_TIMELY (10s, !node.store.account.exists (node.store.tx_begin_read (), key1.pub)); // Send below minimum receive amount auto send2 (wallet->send_action (nano::dev_genesis_key.pub, key1.pub, node.config.receive_minimum.number () - 1, *node.work_generate_blocking (send1->hash ()))); scoped_io_thread_name_change scoped_thread_name_io; @@ -7436,7 +7436,7 @@ TEST (rpc, receive) ASSERT_EQ (200, response.status); auto receive_text (response.json.get ("block")); nano::account_info info; - ASSERT_FALSE (node.store.account_get (node.store.tx_begin_read (), key1.pub, info)); + ASSERT_FALSE (node.store.account.get (node.store.tx_begin_read (), key1.pub, info)); ASSERT_EQ (info.head, receive_text); } // Trying to receive the same block should fail with unreceivable @@ -7468,7 +7468,7 @@ TEST (rpc, receive_unopened) nano::keypair key1; auto send1 (wallet->send_action (nano::dev_genesis_key.pub, key1.pub, node.config.receive_minimum.number () - 1, *node.work_generate_blocking (nano::genesis_hash))); ASSERT_TIMELY (5s, !node.balance (nano::dev_genesis_key.pub) != nano::genesis_amount); - ASSERT_FALSE (node.store.account_exists (node.store.tx_begin_read (), key1.pub)); + ASSERT_FALSE (node.store.account.exists (node.store.tx_begin_read (), key1.pub)); ASSERT_TRUE (node.store.block_exists (node.store.tx_begin_read (), send1->hash ())); wallet->insert_adhoc (key1.prv); // should not auto receive, amount sent was lower than minimum scoped_io_thread_name_change scoped_thread_name_io; @@ -7490,7 +7490,7 @@ TEST (rpc, receive_unopened) ASSERT_EQ (200, response.status); auto receive_text (response.json.get ("block")); nano::account_info info; - ASSERT_FALSE (node.store.account_get (node.store.tx_begin_read (), key1.pub, info)); + ASSERT_FALSE (node.store.account.get (node.store.tx_begin_read (), key1.pub, info)); ASSERT_EQ (info.head, info.open_block); ASSERT_EQ (info.head.to_string (), receive_text); ASSERT_EQ (info.representative, nano::dev_genesis_key.pub); @@ -7502,7 +7502,7 @@ TEST (rpc, receive_unopened) auto prev_amount (node.balance (nano::dev_genesis_key.pub)); auto send2 (wallet->send_action (nano::dev_genesis_key.pub, key2.pub, node.config.receive_minimum.number () - 1, *node.work_generate_blocking (send1->hash ()))); ASSERT_TIMELY (5s, !node.balance (nano::dev_genesis_key.pub) != prev_amount); - ASSERT_FALSE (node.store.account_exists (node.store.tx_begin_read (), key2.pub)); + ASSERT_FALSE (node.store.account.exists (node.store.tx_begin_read (), key2.pub)); ASSERT_TRUE (node.store.block_exists (node.store.tx_begin_read (), send2->hash ())); nano::public_key rep; wallet->store.representative_set (node.wallets.tx_begin_write (), rep); @@ -7516,7 +7516,7 @@ TEST (rpc, receive_unopened) ASSERT_EQ (200, response.status); auto receive_text (response.json.get ("block")); nano::account_info info; - ASSERT_FALSE (node.store.account_get (node.store.tx_begin_read (), key2.pub, info)); + ASSERT_FALSE (node.store.account.get (node.store.tx_begin_read (), key2.pub, info)); ASSERT_EQ (info.head, info.open_block); ASSERT_EQ (info.head.to_string (), receive_text); ASSERT_EQ (info.representative, rep); @@ -7541,7 +7541,7 @@ TEST (rpc, receive_work_disabled) auto send1 (wallet->send_action (nano::dev_genesis_key.pub, key1.pub, node.config.receive_minimum.number () - 1, *worker_node.work_generate_blocking (genesis.hash ()), false)); ASSERT_TRUE (send1 != nullptr); ASSERT_TIMELY (5s, node.balance (nano::dev_genesis_key.pub) != nano::genesis_amount); - ASSERT_FALSE (node.store.account_exists (node.store.tx_begin_read (), key1.pub)); + ASSERT_FALSE (node.store.account.exists (node.store.tx_begin_read (), key1.pub)); ASSERT_TRUE (node.store.block_exists (node.store.tx_begin_read (), send1->hash ())); wallet->insert_adhoc (key1.prv); scoped_io_thread_name_change scoped_thread_name_io; @@ -7583,7 +7583,7 @@ TEST (rpc, receive_pruned) wallet2->insert_adhoc (key1.prv); auto send1 (wallet1->send_action (nano::dev_genesis_key.pub, key1.pub, node2.config.receive_minimum.number (), *node2.work_generate_blocking (nano::genesis_hash))); ASSERT_TIMELY (5s, node2.balance (nano::dev_genesis_key.pub) != nano::genesis_amount); - ASSERT_TIMELY (10s, !node2.store.account_exists (node2.store.tx_begin_read (), key1.pub)); + ASSERT_TIMELY (10s, !node2.store.account.exists (node2.store.tx_begin_read (), key1.pub)); // Send below minimum receive amount auto send2 (wallet1->send_action (nano::dev_genesis_key.pub, key1.pub, node2.config.receive_minimum.number () - 1, *node2.work_generate_blocking (send1->hash ()))); // Extra send frontier @@ -7620,7 +7620,7 @@ TEST (rpc, receive_pruned) ASSERT_EQ (200, response.status); auto receive_text (response.json.get ("block")); nano::account_info info; - ASSERT_FALSE (node2.store.account_get (node2.store.tx_begin_read (), key1.pub, info)); + ASSERT_FALSE (node2.store.account.get (node2.store.tx_begin_read (), key1.pub, info)); ASSERT_EQ (info.head, receive_text); } // Trying to receive the same block should fail with unreceivable diff --git a/nano/secure/CMakeLists.txt b/nano/secure/CMakeLists.txt index 26a4502e2c..a4e0899cd5 100644 --- a/nano/secure/CMakeLists.txt +++ b/nano/secure/CMakeLists.txt @@ -55,6 +55,7 @@ add_library( versioning.cpp working.hpp store/frontier_store_partial.hpp + store/account_store_partial.hpp store/pending_store_partial.hpp store/online_weight_partial.hpp) diff --git a/nano/secure/blockstore.cpp b/nano/secure/blockstore.cpp index 219cadfc31..89a7a3edcc 100644 --- a/nano/secure/blockstore.cpp +++ b/nano/secure/blockstore.cpp @@ -105,8 +105,9 @@ bool nano::write_transaction::contains (nano::tables table_a) const return impl->contains (table_a); } -nano::block_store::block_store (nano::frontier_store & frontier_store_a, nano::pending_store & pending_store_a, nano::online_weight_store & online_weight_store_a) : +nano::block_store::block_store (nano::frontier_store & frontier_store_a, nano::account_store & account_store_a, nano::pending_store & pending_store_a, nano::online_weight_store & online_weight_store_a) : frontier (frontier_store_a), + account (account_store_a), pending (pending_store_a), online_weight (online_weight_store_a) { diff --git a/nano/secure/blockstore.hpp b/nano/secure/blockstore.hpp index c950ed8abc..dd8c261616 100644 --- a/nano/secure/blockstore.hpp +++ b/nano/secure/blockstore.hpp @@ -635,6 +635,24 @@ class frontier_store virtual void for_each_par (std::function, nano::store_iterator)> const & action_a) const = 0; }; +/** + * Manages account storage and iteration + */ +class account_store +{ +public: + virtual void put (nano::write_transaction const &, nano::account const &, nano::account_info const &) = 0; + virtual bool get (nano::transaction const &, nano::account const &, nano::account_info &) = 0; + virtual void del (nano::write_transaction const &, nano::account const &) = 0; + virtual bool exists (nano::transaction const &, nano::account const &) = 0; + virtual size_t count (nano::transaction const &) = 0; + virtual nano::store_iterator begin (nano::transaction const &, nano::account const &) const = 0; + virtual nano::store_iterator begin (nano::transaction const &) const = 0; + virtual nano::store_iterator rbegin (nano::transaction const &) const = 0; + virtual nano::store_iterator end () const = 0; + virtual void for_each_par (std::function, nano::store_iterator)> const &) const = 0; +}; + /** * Manages pending storage and iteration */ @@ -673,7 +691,7 @@ class online_weight_store class block_store { public: - explicit block_store (nano::frontier_store &, nano::pending_store &, nano::online_weight_store &); + explicit block_store (nano::frontier_store &, nano::account_store &, nano::pending_store &, nano::online_weight_store &); virtual ~block_store () = default; virtual void initialize (nano::write_transaction const &, nano::genesis const &, nano::ledger_cache &) = 0; virtual void block_put (nano::write_transaction const &, nano::block_hash const &, nano::block const &) = 0; @@ -694,17 +712,7 @@ class block_store virtual nano::store_iterator blocks_end () const = 0; frontier_store & frontier; - - virtual void account_put (nano::write_transaction const &, nano::account const &, nano::account_info const &) = 0; - virtual bool account_get (nano::transaction const &, nano::account const &, nano::account_info &) = 0; - virtual void account_del (nano::write_transaction const &, nano::account const &) = 0; - virtual bool account_exists (nano::transaction const &, nano::account const &) = 0; - virtual size_t account_count (nano::transaction const &) = 0; - virtual nano::store_iterator accounts_begin (nano::transaction const &, nano::account const &) const = 0; - virtual nano::store_iterator accounts_begin (nano::transaction const &) const = 0; - virtual nano::store_iterator accounts_rbegin (nano::transaction const &) const = 0; - virtual nano::store_iterator accounts_end () const = 0; - + account_store & account; pending_store & pending; virtual nano::uint128_t block_balance (nano::transaction const &, nano::block_hash const &) = 0; @@ -756,7 +764,6 @@ class block_store virtual nano::store_iterator confirmation_height_begin (nano::transaction const & transaction_a) const = 0; virtual nano::store_iterator confirmation_height_end () const = 0; - virtual void accounts_for_each_par (std::function, nano::store_iterator)> const &) const = 0; virtual void confirmation_height_for_each_par (std::function, nano::store_iterator)> const &) const = 0; virtual void unchecked_for_each_par (std::function, nano::store_iterator)> const & action_a) const = 0; virtual void pruned_for_each_par (std::function, nano::store_iterator)> const & action_a) const = 0; diff --git a/nano/secure/blockstore_partial.hpp b/nano/secure/blockstore_partial.hpp index 203a4cd30d..cd085dd06f 100644 --- a/nano/secure/blockstore_partial.hpp +++ b/nano/secure/blockstore_partial.hpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #include #include @@ -39,6 +40,7 @@ template class block_store_partial : public block_store { nano::frontier_store_partial frontier_store_partial; + nano::account_store_partial account_store_partial; nano::pending_store_partial pending_store_partial; nano::online_weight_store_partial online_weight_store_partial; @@ -50,12 +52,14 @@ class block_store_partial : public block_store friend class nano::block_predecessor_set; friend class nano::frontier_store_partial; + friend class nano::account_store_partial; friend class nano::pending_store_partial; friend class nano::online_weight_store_partial; block_store_partial () : - block_store{ frontier_store_partial, pending_store_partial, online_weight_store_partial }, + block_store{ frontier_store_partial, account_store_partial, pending_store_partial, online_weight_store_partial }, frontier_store_partial{ *this }, + account_store_partial{ *this }, pending_store_partial{ *this }, online_weight_store_partial{ *this } { @@ -68,14 +72,14 @@ class block_store_partial : public block_store void initialize (nano::write_transaction const & transaction_a, nano::genesis const & genesis_a, nano::ledger_cache & ledger_cache_a) override { auto hash_l (genesis_a.hash ()); - debug_assert (accounts_begin (transaction_a) == accounts_end ()); + debug_assert (account.begin (transaction_a) == account.end ()); genesis_a.open->sideband_set (nano::block_sideband (network_params.ledger.genesis_account, 0, network_params.ledger.genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); block_put (transaction_a, hash_l, *genesis_a.open); ++ledger_cache_a.block_count; confirmation_height_put (transaction_a, network_params.ledger.genesis_account, nano::confirmation_height_info{ 1, genesis_a.hash () }); ++ledger_cache_a.cemented_count; ledger_cache_a.final_votes_confirmation_canary = (network_params.ledger.final_votes_canary_account == network_params.ledger.genesis_account && 1 >= network_params.ledger.final_votes_canary_height); - account_put (transaction_a, network_params.ledger.genesis_account, { hash_l, network_params.ledger.genesis_account, genesis_a.open->hash (), std::numeric_limits::max (), nano::seconds_since_epoch (), 1, nano::epoch::epoch_0 }); + account.put (transaction_a, network_params.ledger.genesis_account, { hash_l, network_params.ledger.genesis_account, genesis_a.open->hash (), std::numeric_limits::max (), nano::seconds_since_epoch (), 1, nano::epoch::epoch_0 }); ++ledger_cache_a.account_count; ledger_cache_a.rep_weights.representation_put (network_params.ledger.genesis_account, std::numeric_limits::max ()); frontier.put (transaction_a, hash_l, network_params.ledger.genesis_account); @@ -152,7 +156,7 @@ class block_store_partial : public block_store bool root_exists (nano::transaction const & transaction_a, nano::root const & root_a) override { - return block_exists (transaction_a, root_a.as_block_hash ()) || account_exists (transaction_a, root_a.as_account ()); + return block_exists (transaction_a, root_a.as_block_hash ()) || account.exists (transaction_a, root_a.as_account ()); } nano::account block_account (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const override @@ -238,11 +242,6 @@ class block_store_partial : public block_store return nano::store_iterator (nullptr); } - nano::store_iterator accounts_end () const override - { - return nano::store_iterator (nullptr); - } - nano::store_iterator blocks_end () const override { return nano::store_iterator (nullptr); @@ -336,41 +335,6 @@ class block_store_partial : public block_store release_assert_success (*this, status); } - void account_put (nano::write_transaction const & transaction_a, nano::account const & account_a, nano::account_info const & info_a) override - { - // Check we are still in sync with other tables - nano::db_val info (info_a); - auto status = put (transaction_a, tables::accounts, account_a, info); - release_assert_success (*this, status); - } - - void account_del (nano::write_transaction const & transaction_a, nano::account const & account_a) override - { - auto status = del (transaction_a, tables::accounts, account_a); - release_assert_success (*this, status); - } - - bool account_get (nano::transaction const & transaction_a, nano::account const & account_a, nano::account_info & info_a) override - { - nano::db_val value; - nano::db_val account (account_a); - auto status1 (get (transaction_a, tables::accounts, account, value)); - release_assert (success (status1) || not_found (status1)); - bool result (true); - if (success (status1)) - { - nano::bufferstream stream (reinterpret_cast (value.data ()), value.size ()); - result = info_a.deserialize (stream); - } - return result; - } - - bool account_exists (nano::transaction const & transaction_a, nano::account const & account_a) override - { - auto iterator (accounts_begin (transaction_a, account_a)); - return iterator != accounts_end () && nano::account (iterator->first) == account_a; - } - void pruned_put (nano::write_transaction const & transaction_a, nano::block_hash const & hash_a) override { auto status = put_key (transaction_a, tables::pruned, hash_a); @@ -437,11 +401,6 @@ class block_store_partial : public block_store return count (transaction_a, tables::blocks); } - size_t account_count (nano::transaction const & transaction_a) override - { - return count (transaction_a, tables::accounts); - } - std::shared_ptr block_random (nano::transaction const & transaction_a) override { nano::block_hash hash; @@ -581,16 +540,6 @@ class block_store_partial : public block_store drop (transaction_a, nano::tables::confirmation_height); } - nano::store_iterator accounts_begin (nano::transaction const & transaction_a, nano::account const & account_a) const override - { - return make_iterator (transaction_a, tables::accounts, nano::db_val (account_a)); - } - - nano::store_iterator accounts_begin (nano::transaction const & transaction_a) const override - { - return make_iterator (transaction_a, tables::accounts); - } - nano::store_iterator blocks_begin (nano::transaction const & transaction_a) const override { return make_iterator (transaction_a, tables::blocks); @@ -646,25 +595,11 @@ class block_store_partial : public block_store return make_iterator (transaction_a, tables::final_votes); } - nano::store_iterator accounts_rbegin (nano::transaction const & transaction_a) const override - { - return make_iterator (transaction_a, tables::accounts, false); - } - size_t unchecked_count (nano::transaction const & transaction_a) override { return count (transaction_a, tables::unchecked); } - void accounts_for_each_par (std::function, nano::store_iterator)> const & action_a) const override - { - parallel_traversal ( - [&action_a, this] (nano::uint256_t const & start, nano::uint256_t const & end, bool const is_last) { - auto transaction (this->tx_begin_read ()); - action_a (transaction, this->accounts_begin (transaction, start), !is_last ? this->accounts_begin (transaction, end) : this->accounts_end ()); - }); - } - void confirmation_height_for_each_par (std::function, nano::store_iterator)> const & action_a) const override { parallel_traversal ( diff --git a/nano/secure/ledger.cpp b/nano/secure/ledger.cpp index d82df99463..ce9dcdb6ae 100644 --- a/nano/secure/ledger.cpp +++ b/nano/secure/ledger.cpp @@ -35,7 +35,7 @@ class rollback_visitor : public nano::block_visitor if (!error) { nano::account_info info; - [[maybe_unused]] auto error (ledger.store.account_get (transaction, pending.source, info)); + [[maybe_unused]] auto error (ledger.store.account.get (transaction, pending.source, info)); debug_assert (!error); ledger.store.pending.del (transaction, key); ledger.cache.rep_weights.representation_add (info.representative, pending.amount.number ()); @@ -57,7 +57,7 @@ class rollback_visitor : public nano::block_visitor [[maybe_unused]] bool is_pruned (false); auto source_account (ledger.account_safe (transaction, block_a.hashables.source, is_pruned)); nano::account_info info; - [[maybe_unused]] auto error (ledger.store.account_get (transaction, destination_account, info)); + [[maybe_unused]] auto error (ledger.store.account.get (transaction, destination_account, info)); debug_assert (!error); ledger.cache.rep_weights.representation_add (info.representative, 0 - amount); nano::account_info new_info (block_a.hashables.previous, info.representative, info.open_block, ledger.balance (transaction, block_a.hashables.previous), nano::seconds_since_epoch (), info.block_count - 1, nano::epoch::epoch_0); @@ -91,7 +91,7 @@ class rollback_visitor : public nano::block_visitor auto rep_block (ledger.representative (transaction, block_a.hashables.previous)); auto account (ledger.account (transaction, block_a.hashables.previous)); nano::account_info info; - [[maybe_unused]] auto error (ledger.store.account_get (transaction, account, info)); + [[maybe_unused]] auto error (ledger.store.account.get (transaction, account, info)); debug_assert (!error); auto balance (ledger.balance (transaction, block_a.hashables.previous)); auto block = ledger.store.block_get (transaction, rep_block); @@ -132,7 +132,7 @@ class rollback_visitor : public nano::block_visitor } nano::account_info info; - auto error (ledger.store.account_get (transaction, block_a.hashables.account, info)); + auto error (ledger.store.account.get (transaction, block_a.hashables.account, info)); if (is_send) { @@ -286,7 +286,7 @@ void ledger_processor::state_block_impl (nano::state_block & block_a) nano::amount amount (block_a.hashables.balance); auto is_send (false); auto is_receive (false); - auto account_error (ledger.store.account_get (transaction, block_a.hashables.account, info)); + auto account_error (ledger.store.account.get (transaction, block_a.hashables.account, info)); if (!account_error) { // Account already exists @@ -408,7 +408,7 @@ void ledger_processor::epoch_block_impl (nano::state_block & block_a) if (result.code == nano::process_result::progress) { nano::account_info info; - auto account_error (ledger.store.account_get (transaction, block_a.hashables.account, info)); + auto account_error (ledger.store.account.get (transaction, block_a.hashables.account, info)); if (!account_error) { // Account already exists @@ -486,7 +486,7 @@ void ledger_processor::change_block (nano::change_block & block_a) if (result.code == nano::process_result::progress) { nano::account_info info; - auto latest_error (ledger.store.account_get (transaction, account, info)); + auto latest_error (ledger.store.account.get (transaction, account, info)); (void)latest_error; debug_assert (!latest_error); debug_assert (info.head == block_a.hashables.previous); @@ -553,7 +553,7 @@ void ledger_processor::send_block (nano::send_block & block_a) debug_assert (!validate_message (account, hash, block_a.signature)); result.verified = nano::signature_verification::valid; nano::account_info info; - auto latest_error (ledger.store.account_get (transaction, account, info)); + auto latest_error (ledger.store.account.get (transaction, account, info)); (void)latest_error; debug_assert (!latest_error); debug_assert (info.head == block_a.hashables.previous); @@ -611,7 +611,7 @@ void ledger_processor::receive_block (nano::receive_block & block_a) if (result.code == nano::process_result::progress) { nano::account_info info; - ledger.store.account_get (transaction, account, info); + ledger.store.account.get (transaction, account, info); result.code = info.head == block_a.hashables.previous ? nano::process_result::progress : nano::process_result::gap_previous; // Block doesn't immediately follow latest block (Harmless) if (result.code == nano::process_result::progress) { @@ -632,7 +632,7 @@ void ledger_processor::receive_block (nano::receive_block & block_a) if (ledger.store.block_exists (transaction, block_a.hashables.source)) { nano::account_info source_info; - [[maybe_unused]] auto error (ledger.store.account_get (transaction, pending.source, source_info)); + [[maybe_unused]] auto error (ledger.store.account.account_get (transaction, pending.source, source_info)); debug_assert (!error); } #endif @@ -682,7 +682,7 @@ void ledger_processor::open_block (nano::open_block & block_a) if (result.code == nano::process_result::progress) { nano::account_info info; - result.code = ledger.store.account_get (transaction, block_a.hashables.account, info) ? nano::process_result::progress : nano::process_result::fork; // Has this account already been opened? (Malicious) + result.code = ledger.store.account.get (transaction, block_a.hashables.account, info) ? nano::process_result::progress : nano::process_result::fork; // Has this account already been opened? (Malicious) if (result.code == nano::process_result::progress) { nano::pending_key key (block_a.hashables.account, block_a.hashables.source); @@ -704,7 +704,7 @@ void ledger_processor::open_block (nano::open_block & block_a) if (ledger.store.block_exists (transaction, block_a.hashables.source)) { nano::account_info source_info; - [[maybe_unused]] auto error (ledger.store.account_get (transaction, pending.source, source_info)); + [[maybe_unused]] auto error (ledger.store.account.account_get (transaction, pending.source, source_info)); debug_assert (!error); } #endif @@ -751,7 +751,7 @@ void nano::ledger::initialize (nano::generate_cache const & generate_cache_a) { if (generate_cache_a.reps || generate_cache_a.account_count || generate_cache_a.block_count) { - store.accounts_for_each_par ( + store.account.for_each_par ( [this] (nano::read_transaction const & /*unused*/, nano::store_iterator i, nano::store_iterator n) { uint64_t block_count_l{ 0 }; uint64_t account_count_l{ 0 }; @@ -829,7 +829,7 @@ nano::uint128_t nano::ledger::account_balance (nano::transaction const & transac else { nano::account_info info; - auto none (store.account_get (transaction_a, account_a, info)); + auto none (store.account.get (transaction_a, account_a, info)); if (!none) { result = info.balance.number (); @@ -1047,7 +1047,7 @@ bool nano::ledger::rollback (nano::write_transaction const & transaction_a, nano store.confirmation_height_get (transaction_a, account_l, confirmation_height_info); if (block_account_height > confirmation_height_info.height) { - auto latest_error = store.account_get (transaction_a, account_l, account_info); + auto latest_error = store.account.get (transaction_a, account_l, account_info); debug_assert (!latest_error); auto block (store.block_get (transaction_a, account_info.head)); list_a.push_back (block); @@ -1127,7 +1127,7 @@ nano::uint128_t nano::ledger::amount_safe (nano::transaction const & transaction nano::block_hash nano::ledger::latest (nano::transaction const & transaction_a, nano::account const & account_a) { nano::account_info info; - auto latest_error (store.account_get (transaction_a, account_a, info)); + auto latest_error (store.account.get (transaction_a, account_a, info)); return latest_error ? 0 : info.head; } @@ -1135,7 +1135,7 @@ nano::block_hash nano::ledger::latest (nano::transaction const & transaction_a, nano::root nano::ledger::latest_root (nano::transaction const & transaction_a, nano::account const & account_a) { nano::account_info info; - if (store.account_get (transaction_a, account_a, info)) + if (store.account.get (transaction_a, account_a, info)) { return account_a; } @@ -1255,15 +1255,15 @@ void nano::ledger::update_account (nano::write_transaction const & transaction_a } if (!old_a.head.is_zero () && old_a.epoch () != new_a.epoch ()) { - // store.account_put won't erase existing entries if they're in different tables - store.account_del (transaction_a, account_a); + // store.account.put won't erase existing entries if they're in different tables + store.account.del (transaction_a, account_a); } - store.account_put (transaction_a, account_a, new_a); + store.account.put (transaction_a, account_a, new_a); } else { debug_assert (!store.confirmation_height_exists (transaction_a, account_a)); - store.account_del (transaction_a, account_a); + store.account.del (transaction_a, account_a); debug_assert (cache.account_count > 0); --cache.account_count; } @@ -1276,7 +1276,7 @@ std::shared_ptr nano::ledger::successor (nano::transaction const & if (root_a.previous ().is_zero ()) { nano::account_info info; - if (!store.account_get (transaction_a, root_a.root ().as_account (), info)) + if (!store.account.get (transaction_a, root_a.root ().as_account (), info)) { successor = info.open_block; } @@ -1307,12 +1307,12 @@ std::shared_ptr nano::ledger::forked_block (nano::transaction const { debug_assert (!store.block_exists (transaction_a, block_a.hash ())); auto root (block_a.root ()); - debug_assert (store.block_exists (transaction_a, root.as_block_hash ()) || store.account_exists (transaction_a, root.as_account ())); + debug_assert (store.block_exists (transaction_a, root.as_block_hash ()) || store.account.exists (transaction_a, root.as_account ())); auto result (store.block_get (transaction_a, store.block_successor (transaction_a, root.as_block_hash ()))); if (result == nullptr) { nano::account_info info; - auto error (store.account_get (transaction_a, root.as_account (), info)); + auto error (store.account.get (transaction_a, root.as_account (), info)); (void)error; debug_assert (!error); result = store.block_get (transaction_a, info.open_block); @@ -1376,7 +1376,7 @@ std::multimap> nano::ledger::unc nano::locked>> result; using result_t = decltype (result)::value_type; - store.accounts_for_each_par ([this, &result] (nano::read_transaction const & transaction_a, nano::store_iterator i, nano::store_iterator n) { + store.account.for_each_par ([this, &result] (nano::read_transaction const & transaction_a, nano::store_iterator i, nano::store_iterator n) { result_t unconfirmed_frontiers_l; for (; i != n; ++i) { @@ -1463,12 +1463,12 @@ bool nano::ledger::migrate_lmdb_to_rocksdb (boost::filesystem::path const & data } }); - store.accounts_for_each_par ( + store.account.for_each_par ( [&rocksdb_store] (nano::read_transaction const & /*unused*/, auto i, auto n) { for (; i != n; ++i) { auto rocksdb_transaction (rocksdb_store->tx_begin_write ({}, { nano::tables::accounts })); - rocksdb_store->account_put (rocksdb_transaction, i->first, i->second); + rocksdb_store->account.put (rocksdb_transaction, i->first, i->second); } }); @@ -1528,7 +1528,7 @@ bool nano::ledger::migrate_lmdb_to_rocksdb (boost::filesystem::path const & data auto account = random_block->account ().is_zero () ? random_block->sideband ().account : random_block->account (); nano::account_info account_info; - error |= rocksdb_store->account_get (rocksdb_transaction, account, account_info); + error |= rocksdb_store->account.get (rocksdb_transaction, account, account_info); // If confirmation height exists in the lmdb ledger for this account it should exist in the rocksdb ledger nano::confirmation_height_info confirmation_height_info; diff --git a/nano/secure/store/account_store_partial.hpp b/nano/secure/store/account_store_partial.hpp new file mode 100644 index 0000000000..cd285eaa77 --- /dev/null +++ b/nano/secure/store/account_store_partial.hpp @@ -0,0 +1,101 @@ +#pragma once + +#include + +namespace +{ +template +void parallel_traversal (std::function const & action); +} + +namespace nano +{ +template +class block_store_partial; + +template +void release_assert_success (block_store_partial const & block_store, const int status); + +template +class account_store_partial : public account_store +{ +private: + nano::block_store_partial & block_store; + + friend void release_assert_success (block_store_partial const & block_store, const int status); + +public: + explicit account_store_partial (nano::block_store_partial & block_store_a) : + block_store (block_store_a){}; + + void put (nano::write_transaction const & transaction_a, nano::account const & account_a, nano::account_info const & info_a) override + { + // Check we are still in sync with other tables + nano::db_val info (info_a); + auto status = block_store.put (transaction_a, tables::accounts, account_a, info); + release_assert_success (block_store, status); + } + + bool get (nano::transaction const & transaction_a, nano::account const & account_a, nano::account_info & info_a) override + { + nano::db_val value; + nano::db_val account (account_a); + auto status1 (block_store.get (transaction_a, tables::accounts, account, value)); + release_assert (block_store.success (status1) || block_store.not_found (status1)); + bool result (true); + if (block_store.success (status1)) + { + nano::bufferstream stream (reinterpret_cast (value.data ()), value.size ()); + result = info_a.deserialize (stream); + } + return result; + } + + void del (nano::write_transaction const & transaction_a, nano::account const & account_a) override + { + auto status = block_store.del (transaction_a, tables::accounts, account_a); + release_assert_success (block_store, status); + } + + bool exists (nano::transaction const & transaction_a, nano::account const & account_a) override + { + auto iterator (begin (transaction_a, account_a)); + return iterator != end () && nano::account (iterator->first) == account_a; + } + + size_t count (nano::transaction const & transaction_a) override + { + return block_store.count (transaction_a, tables::accounts); + } + + nano::store_iterator begin (nano::transaction const & transaction_a, nano::account const & account_a) const override + { + return block_store.template make_iterator (transaction_a, tables::accounts, nano::db_val (account_a)); + } + + nano::store_iterator begin (nano::transaction const & transaction_a) const override + { + return block_store.template make_iterator (transaction_a, tables::accounts); + } + + nano::store_iterator rbegin (nano::transaction const & transaction_a) const override + { + return block_store.template make_iterator (transaction_a, tables::accounts, false); + } + + nano::store_iterator end () const override + { + return nano::store_iterator (nullptr); + } + + void for_each_par (std::function, nano::store_iterator)> const & action_a) const override + { + parallel_traversal ( + [&action_a, this] (nano::uint256_t const & start, nano::uint256_t const & end, bool const is_last) { + auto transaction (this->block_store.tx_begin_read ()); + action_a (transaction, this->begin (transaction, start), !is_last ? this->begin (transaction, end) : this->end ()); + }); + } +}; + +} diff --git a/nano/slow_test/node.cpp b/nano/slow_test/node.cpp index 7ad25a278f..31008e5f7b 100644 --- a/nano/slow_test/node.cpp +++ b/nano/slow_test/node.cpp @@ -26,7 +26,7 @@ TEST (system, generate_mass_activity) uint32_t count (20); system.generate_mass_activity (count, *system.nodes[0]); auto transaction (system.nodes[0]->store.tx_begin_read ()); - for (auto i (system.nodes[0]->store.accounts_begin (transaction)), n (system.nodes[0]->store.accounts_end ()); i != n; ++i) + for (auto i (system.nodes[0]->store.account.begin (transaction)), n (system.nodes[0]->store.account.end ()); i != n; ++i) { } } @@ -42,7 +42,7 @@ TEST (system, generate_mass_activity_long) uint32_t count (1000000000); system.generate_mass_activity (count, *system.nodes[0]); auto transaction (system.nodes[0]->store.tx_begin_read ()); - for (auto i (system.nodes[0]->store.accounts_begin (transaction)), n (system.nodes[0]->store.accounts_end ()); i != n; ++i) + for (auto i (system.nodes[0]->store.account.begin (transaction)), n (system.nodes[0]->store.account.end ()); i != n; ++i) { } system.stop (); @@ -169,7 +169,7 @@ TEST (store, load) nano::account account; nano::random_pool::generate_block (account.bytes.data (), account.bytes.size ()); system.nodes[0]->store.confirmation_height_put (transaction, account, { 0, nano::block_hash (0) }); - system.nodes[0]->store.account_put (transaction, account, nano::account_info ()); + system.nodes[0]->store.account.put (transaction, account, nano::account_info ()); } } })); @@ -544,7 +544,7 @@ TEST (confirmation_height, many_accounts_single_confirmation) // All frontiers (except last) should have 2 blocks and both should be confirmed auto transaction = node->store.tx_begin_read (); - for (auto i (node->store.accounts_begin (transaction)), n (node->store.accounts_end ()); i != n; ++i) + for (auto i (node->store.account.begin (transaction)), n (node->store.account.end ()); i != n; ++i) { auto & account = i->first; auto & account_info = i->second; @@ -699,13 +699,13 @@ TEST (confirmation_height, long_chains) auto transaction (node->store.tx_begin_read ()); nano::account_info account_info; - ASSERT_FALSE (node->store.account_get (transaction, nano::dev_genesis_key.pub, account_info)); + ASSERT_FALSE (node->store.account.get (transaction, nano::dev_genesis_key.pub, account_info)); nano::confirmation_height_info confirmation_height_info; ASSERT_FALSE (node->store.confirmation_height_get (transaction, nano::dev_genesis_key.pub, confirmation_height_info)); ASSERT_EQ (num_blocks + 2, confirmation_height_info.height); ASSERT_EQ (num_blocks + 3, account_info.block_count); // Includes the unpocketed send - ASSERT_FALSE (node->store.account_get (transaction, key1.pub, account_info)); + ASSERT_FALSE (node->store.account.get (transaction, key1.pub, account_info)); ASSERT_FALSE (node->store.confirmation_height_get (transaction, key1.pub, confirmation_height_info)); ASSERT_EQ (num_blocks + 1, confirmation_height_info.height); ASSERT_EQ (num_blocks + 1, account_info.block_count); @@ -1674,7 +1674,7 @@ TEST (node, mass_epoch_upgrader) { auto transaction (node.store.tx_begin_read ()); size_t block_count_sum = 0; - for (auto i (node.store.accounts_begin (transaction)); i != node.store.accounts_end (); ++i) + for (auto i (node.store.account.begin (transaction)); i != node.store.account.end (); ++i) { nano::account_info info (i->second); ASSERT_EQ (info.epoch (), nano::epoch::epoch_1); From 1f41f570b16c0dd356cab21edcfee6a7ec658baf Mon Sep 17 00:00:00 2001 From: Thiago Silva <82097354+thsfs@users.noreply.github.com> Date: Wed, 2 Jun 2021 15:33:56 -0300 Subject: [PATCH 033/346] Moves out final vote methods from block store class (#3320) * Moves out final vote methods from block store class --- nano/core_test/block_store.cpp | 24 ++-- nano/core_test/ledger.cpp | 6 +- nano/node/cli.cpp | 6 +- nano/node/lmdb/lmdb.cpp | 6 +- nano/node/lmdb/lmdb.hpp | 2 +- nano/node/request_aggregator.cpp | 2 +- nano/node/voting.cpp | 2 +- nano/secure/CMakeLists.txt | 3 +- nano/secure/blockstore.cpp | 6 +- nano/secure/blockstore.hpp | 31 +++-- nano/secure/blockstore_partial.hpp | 91 +------------- nano/secure/ledger.cpp | 10 +- .../secure/store/final_vote_store_partial.hpp | 115 ++++++++++++++++++ 13 files changed, 176 insertions(+), 128 deletions(-) create mode 100644 nano/secure/store/final_vote_store_partial.hpp diff --git a/nano/core_test/block_store.cpp b/nano/core_test/block_store.cpp index 487484e5c4..a420b53417 100644 --- a/nano/core_test/block_store.cpp +++ b/nano/core_test/block_store.cpp @@ -1829,13 +1829,13 @@ TEST (mdb_block_store, upgrade_v20_v21) auto transaction (store.tx_begin_write ()); store.initialize (transaction, genesis, ledger.cache); // Delete pruned table - ASSERT_FALSE (mdb_drop (store.env.tx (transaction), store.final_votes, 1)); + ASSERT_FALSE (mdb_drop (store.env.tx (transaction), store.final_vote_handle, 1)); store.version_put (transaction, 20); } // Upgrading should create the table nano::mdb_store store (logger, path); ASSERT_FALSE (store.init_error ()); - ASSERT_NE (store.final_votes, 0); + ASSERT_NE (store.final_vote_handle, 0); // Version should be correct auto transaction (store.tx_begin_read ()); @@ -1944,18 +1944,18 @@ TEST (block_store, final_vote) { auto qualified_root = nano::genesis ().open->qualified_root (); auto transaction (store->tx_begin_write ()); - store->final_vote_put (transaction, qualified_root, nano::block_hash (2)); - ASSERT_EQ (store->final_vote_count (transaction), 1); - store->final_vote_clear (transaction); - ASSERT_EQ (store->final_vote_count (transaction), 0); - store->final_vote_put (transaction, qualified_root, nano::block_hash (2)); - ASSERT_EQ (store->final_vote_count (transaction), 1); + store->final_vote.put (transaction, qualified_root, nano::block_hash (2)); + ASSERT_EQ (store->final_vote.count (transaction), 1); + store->final_vote.clear (transaction); + ASSERT_EQ (store->final_vote.count (transaction), 0); + store->final_vote.put (transaction, qualified_root, nano::block_hash (2)); + ASSERT_EQ (store->final_vote.count (transaction), 1); // Clearing with incorrect root shouldn't remove - store->final_vote_clear (transaction, qualified_root.previous ()); - ASSERT_EQ (store->final_vote_count (transaction), 1); + store->final_vote.clear (transaction, qualified_root.previous ()); + ASSERT_EQ (store->final_vote.count (transaction), 1); // Clearing with correct root should remove - store->final_vote_clear (transaction, qualified_root.root ()); - ASSERT_EQ (store->final_vote_count (transaction), 0); + store->final_vote.clear (transaction, qualified_root.root ()); + ASSERT_EQ (store->final_vote.count (transaction), 0); } } diff --git a/nano/core_test/ledger.cpp b/nano/core_test/ledger.cpp index 2dbdff25ea..95f48e437b 100644 --- a/nano/core_test/ledger.cpp +++ b/nano/core_test/ledger.cpp @@ -3872,7 +3872,7 @@ TEST (ledger, migrate_lmdb_to_rocksdb) store.version_put (transaction, version); send->sideband_set ({}); store.block_put (transaction, send->hash (), *send); - store.final_vote_put (transaction, send->qualified_root (), nano::block_hash (2)); + store.final_vote.put (transaction, send->qualified_root (), nano::block_hash (2)); } auto error = ledger.migrate_lmdb_to_rocksdb (path); @@ -3902,8 +3902,8 @@ TEST (ledger, migrate_lmdb_to_rocksdb) ASSERT_FALSE (rocksdb_store.confirmation_height_get (rocksdb_transaction, nano::genesis_account, confirmation_height_info)); ASSERT_EQ (confirmation_height_info.height, 2); ASSERT_EQ (confirmation_height_info.frontier, send->hash ()); - ASSERT_TRUE (rocksdb_store.final_vote_get (rocksdb_transaction, nano::root (send->previous ())).size () == 1); - ASSERT_EQ (rocksdb_store.final_vote_get (rocksdb_transaction, nano::root (send->previous ()))[0], nano::block_hash (2)); + ASSERT_TRUE (rocksdb_store.final_vote.get (rocksdb_transaction, nano::root (send->previous ())).size () == 1); + ASSERT_EQ (rocksdb_store.final_vote.get (rocksdb_transaction, nano::root (send->previous ()))[0], nano::block_hash (2)); auto unchecked_infos = rocksdb_store.unchecked_get (rocksdb_transaction, nano::genesis_hash); ASSERT_EQ (unchecked_infos.size (), 1); diff --git a/nano/node/cli.cpp b/nano/node/cli.cpp index c58c04e75e..b92528b006 100644 --- a/nano/node/cli.cpp +++ b/nano/node/cli.cpp @@ -240,7 +240,7 @@ bool copy_database (boost::filesystem::path const & data_path, boost::program_op } if (vm.count ("final_vote_clear")) { - node.node->store.final_vote_clear (store.tx_begin_write ()); + node.node->store.final_vote.clear (store.tx_begin_write ()); } if (vm.count ("rebuild_database")) { @@ -626,7 +626,7 @@ std::error_code nano::handle_node_options (boost::program_options::variables_map nano::root root; if (!root.decode_hex (root_str)) { - node.node->store.final_vote_clear (transaction, root); + node.node->store.final_vote.clear (transaction, root); std::cout << "Successfully cleared final votes" << std::endl; } else @@ -637,7 +637,7 @@ std::error_code nano::handle_node_options (boost::program_options::variables_map } else if (vm.count ("all")) { - node.node->store.final_vote_clear (node.node->store.tx_begin_write ()); + node.node->store.final_vote.clear (node.node->store.tx_begin_write ()); std::cout << "All final votes are cleared" << std::endl; } else diff --git a/nano/node/lmdb/lmdb.cpp b/nano/node/lmdb/lmdb.cpp index fd1d621edb..aec2d79fb9 100644 --- a/nano/node/lmdb/lmdb.cpp +++ b/nano/node/lmdb/lmdb.cpp @@ -199,7 +199,7 @@ void nano::mdb_store::open_databases (bool & error_a, nano::transaction const & accounts = accounts_v0; error_a |= mdb_dbi_open (env.tx (transaction_a), "pending", flags, &pending_v0) != 0; lmdb_pending = pending_v0; - error_a |= mdb_dbi_open (env.tx (transaction_a), "final_votes", flags, &final_votes) != 0; + error_a |= mdb_dbi_open (env.tx (transaction_a), "final_votes", flags, &final_vote_handle) != 0; auto version_l = version_get (transaction_a); if (version_l < 19) @@ -752,7 +752,7 @@ void nano::mdb_store::upgrade_v19_to_v20 (nano::write_transaction const & transa void nano::mdb_store::upgrade_v20_to_v21 (nano::write_transaction const & transaction_a) { logger.always_log ("Preparing v20 to v21 database upgrade..."); - mdb_dbi_open (env.tx (transaction_a), "final_votes", MDB_CREATE, &final_votes); + mdb_dbi_open (env.tx (transaction_a), "final_votes", MDB_CREATE, &final_vote_handle); version_put (transaction_a, 21); logger.always_log ("Finished creating new final_vote table"); } @@ -878,7 +878,7 @@ MDB_dbi nano::mdb_store::table_to_dbi (tables table_a) const case tables::confirmation_height: return confirmation_height; case tables::final_votes: - return final_votes; + return final_vote_handle; default: release_assert (false); return peers; diff --git a/nano/node/lmdb/lmdb.hpp b/nano/node/lmdb/lmdb.hpp index fbdf015e30..0d778ed495 100644 --- a/nano/node/lmdb/lmdb.hpp +++ b/nano/node/lmdb/lmdb.hpp @@ -196,7 +196,7 @@ class mdb_store : public block_store_partial * Maps root to block hash for generated final votes. * nano::qualified_root -> nano::block_hash */ - MDB_dbi final_votes{ 0 }; + MDB_dbi final_vote_handle{ 0 }; bool exists (nano::transaction const & transaction_a, tables table_a, nano::mdb_val const & key_a) const; std::vector unchecked_get (nano::transaction const & transaction_a, nano::block_hash const & hash_a) override; diff --git a/nano/node/request_aggregator.cpp b/nano/node/request_aggregator.cpp index faefc50cfe..04e608c14d 100644 --- a/nano/node/request_aggregator.cpp +++ b/nano/node/request_aggregator.cpp @@ -188,7 +188,7 @@ std::pair>, std::vector block; //2. Final votes - auto final_vote_hashes (ledger.store.final_vote_get (transaction, root)); + auto final_vote_hashes (ledger.store.final_vote.get (transaction, root)); if (!final_vote_hashes.empty ()) { generate_final_vote = true; diff --git a/nano/node/voting.cpp b/nano/node/voting.cpp index 520e02d0c4..1df8d3472e 100644 --- a/nano/node/voting.cpp +++ b/nano/node/voting.cpp @@ -194,7 +194,7 @@ void nano::vote_generator::add (nano::root const & root_a, nano::block_hash cons { auto transaction (ledger.store.tx_begin_write ({ tables::final_votes })); auto block (ledger.store.block_get (transaction, hash_a)); - should_vote = block != nullptr && ledger.dependents_confirmed (transaction, *block) && ledger.store.final_vote_put (transaction, block->qualified_root (), hash_a); + should_vote = block != nullptr && ledger.dependents_confirmed (transaction, *block) && ledger.store.final_vote.put (transaction, block->qualified_root (), hash_a); debug_assert (block == nullptr || root_a == block->root ()); } else diff --git a/nano/secure/CMakeLists.txt b/nano/secure/CMakeLists.txt index a4e0899cd5..fc661cb73e 100644 --- a/nano/secure/CMakeLists.txt +++ b/nano/secure/CMakeLists.txt @@ -57,7 +57,8 @@ add_library( store/frontier_store_partial.hpp store/account_store_partial.hpp store/pending_store_partial.hpp - store/online_weight_partial.hpp) + store/online_weight_partial.hpp + store/final_vote_store_partial.hpp) target_link_libraries( secure diff --git a/nano/secure/blockstore.cpp b/nano/secure/blockstore.cpp index 89a7a3edcc..e8fa4206f9 100644 --- a/nano/secure/blockstore.cpp +++ b/nano/secure/blockstore.cpp @@ -105,10 +105,12 @@ bool nano::write_transaction::contains (nano::tables table_a) const return impl->contains (table_a); } -nano::block_store::block_store (nano::frontier_store & frontier_store_a, nano::account_store & account_store_a, nano::pending_store & pending_store_a, nano::online_weight_store & online_weight_store_a) : +nano::block_store::block_store (nano::frontier_store & frontier_store_a, nano::account_store & account_store_a, nano::pending_store & pending_store_a, nano::online_weight_store & online_weight_store_a, nano::final_vote_store & final_vote_store_a) : frontier (frontier_store_a), account (account_store_a), pending (pending_store_a), - online_weight (online_weight_store_a) + online_weight (online_weight_store_a), + final_vote (final_vote_store_a) + { } diff --git a/nano/secure/blockstore.hpp b/nano/secure/blockstore.hpp index dd8c261616..a7c3287b71 100644 --- a/nano/secure/blockstore.hpp +++ b/nano/secure/blockstore.hpp @@ -685,13 +685,31 @@ class online_weight_store virtual void clear (nano::write_transaction const &) = 0; }; +/** + * Manages final vote storage and iteration + */ +class final_vote_store +{ +public: + virtual bool put (nano::write_transaction const & transaction_a, nano::qualified_root const & root_a, nano::block_hash const & hash_a) = 0; + virtual std::vector get (nano::transaction const & transaction_a, nano::root const & root_a) = 0; + virtual void del (nano::write_transaction const & transaction_a, nano::root const & root_a) = 0; + virtual size_t count (nano::transaction const & transaction_a) const = 0; + virtual void clear (nano::write_transaction const &, nano::root const &) = 0; + virtual void clear (nano::write_transaction const &) = 0; + virtual nano::store_iterator begin (nano::transaction const & transaction_a, nano::qualified_root const & root_a) const = 0; + virtual nano::store_iterator begin (nano::transaction const & transaction_a) const = 0; + virtual nano::store_iterator end () const = 0; + virtual void for_each_par (std::function, nano::store_iterator)> const & action_a) const = 0; +}; + /** * Manages block storage and iteration */ class block_store { public: - explicit block_store (nano::frontier_store &, nano::account_store &, nano::pending_store &, nano::online_weight_store &); + explicit block_store (nano::frontier_store &, nano::account_store &, nano::pending_store &, nano::online_weight_store &, nano::final_vote_store &); virtual ~block_store () = default; virtual void initialize (nano::write_transaction const &, nano::genesis const &, nano::ledger_cache &) = 0; virtual void block_put (nano::write_transaction const &, nano::block_hash const &, nano::block const &) = 0; @@ -768,19 +786,10 @@ class block_store virtual void unchecked_for_each_par (std::function, nano::store_iterator)> const & action_a) const = 0; virtual void pruned_for_each_par (std::function, nano::store_iterator)> const & action_a) const = 0; virtual void blocks_for_each_par (std::function, nano::store_iterator)> const & action_a) const = 0; - virtual void final_vote_for_each_par (std::function, nano::store_iterator)> const & action_a) const = 0; virtual uint64_t block_account_height (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const = 0; - virtual bool final_vote_put (nano::write_transaction const & transaction_a, nano::qualified_root const & root_a, nano::block_hash const & hash_a) = 0; - virtual std::vector final_vote_get (nano::transaction const & transaction_a, nano::root const & root_a) = 0; - virtual void final_vote_del (nano::write_transaction const & transaction_a, nano::root const & root_a) = 0; - virtual size_t final_vote_count (nano::transaction const & transaction_a) const = 0; - virtual void final_vote_clear (nano::write_transaction const &, nano::root const &) = 0; - virtual void final_vote_clear (nano::write_transaction const &) = 0; - virtual nano::store_iterator final_vote_begin (nano::transaction const & transaction_a, nano::qualified_root const & root_a) const = 0; - virtual nano::store_iterator final_vote_begin (nano::transaction const & transaction_a) const = 0; - virtual nano::store_iterator final_vote_end () const = 0; + final_vote_store & final_vote; virtual unsigned max_block_write_batch_num () const = 0; diff --git a/nano/secure/blockstore_partial.hpp b/nano/secure/blockstore_partial.hpp index cd085dd06f..d402dc4db8 100644 --- a/nano/secure/blockstore_partial.hpp +++ b/nano/secure/blockstore_partial.hpp @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -43,6 +44,7 @@ class block_store_partial : public block_store nano::account_store_partial account_store_partial; nano::pending_store_partial pending_store_partial; nano::online_weight_store_partial online_weight_store_partial; + nano::final_vote_store_partial final_vote_store_partial; friend void release_assert_success (block_store_partial const & block_store, const int status); @@ -55,13 +57,15 @@ class block_store_partial : public block_store friend class nano::account_store_partial; friend class nano::pending_store_partial; friend class nano::online_weight_store_partial; + friend class nano::final_vote_store_partial; block_store_partial () : - block_store{ frontier_store_partial, account_store_partial, pending_store_partial, online_weight_store_partial }, + block_store{ frontier_store_partial, account_store_partial, pending_store_partial, online_weight_store_partial, final_vote_store_partial }, frontier_store_partial{ *this }, account_store_partial{ *this }, pending_store_partial{ *this }, - online_weight_store_partial{ *this } + online_weight_store_partial{ *this }, + final_vote_store_partial{ *this } { } @@ -257,11 +261,6 @@ class block_store_partial : public block_store return nano::store_iterator (nullptr); } - nano::store_iterator final_vote_end () const override - { - return nano::store_iterator (nullptr); - } - int version_get (nano::transaction const & transaction_a) const override { nano::uint256_union version_key (1); @@ -471,65 +470,6 @@ class block_store_partial : public block_store return exists (transaction_a, tables::confirmation_height, nano::db_val (account_a)); } - bool final_vote_put (nano::write_transaction const & transaction_a, nano::qualified_root const & root_a, nano::block_hash const & hash_a) override - { - nano::db_val value; - auto status = get (transaction_a, tables::final_votes, nano::db_val (root_a), value); - release_assert (success (status) || not_found (status)); - bool result (true); - if (success (status)) - { - result = static_cast (value) == hash_a; - } - else - { - status = put (transaction_a, tables::final_votes, root_a, hash_a); - release_assert_success (*this, status); - } - return result; - } - - std::vector final_vote_get (nano::transaction const & transaction_a, nano::root const & root_a) override - { - std::vector result; - nano::qualified_root key_start (root_a.raw, 0); - for (auto i (final_vote_begin (transaction_a, key_start)), n (final_vote_end ()); i != n && nano::qualified_root (i->first).root () == root_a; ++i) - { - result.push_back (i->second); - } - return result; - } - - size_t final_vote_count (nano::transaction const & transaction_a) const override - { - return count (transaction_a, tables::final_votes); - } - - void final_vote_del (nano::write_transaction const & transaction_a, nano::root const & root_a) override - { - std::vector final_vote_qualified_roots; - for (auto i (final_vote_begin (transaction_a, nano::qualified_root (root_a.raw, 0))), n (final_vote_end ()); i != n && nano::qualified_root (i->first).root () == root_a; ++i) - { - final_vote_qualified_roots.push_back (i->first); - } - - for (auto & final_vote_qualified_root : final_vote_qualified_roots) - { - auto status (del (transaction_a, tables::final_votes, nano::db_val (final_vote_qualified_root))); - release_assert_success (*this, status); - } - } - - void final_vote_clear (nano::write_transaction const & transaction_a, nano::root const & root_a) override - { - final_vote_del (transaction_a, root_a); - } - - void final_vote_clear (nano::write_transaction const & transaction_a) override - { - drop (transaction_a, nano::tables::final_votes); - } - void confirmation_height_clear (nano::write_transaction const & transaction_a, nano::account const & account_a) override { confirmation_height_del (transaction_a, account_a); @@ -585,16 +525,6 @@ class block_store_partial : public block_store return make_iterator (transaction_a, tables::pruned); } - nano::store_iterator final_vote_begin (nano::transaction const & transaction_a, nano::qualified_root const & root_a) const override - { - return make_iterator (transaction_a, tables::final_votes, nano::db_val (root_a)); - } - - nano::store_iterator final_vote_begin (nano::transaction const & transaction_a) const override - { - return make_iterator (transaction_a, tables::final_votes); - } - size_t unchecked_count (nano::transaction const & transaction_a) override { return count (transaction_a, tables::unchecked); @@ -638,15 +568,6 @@ class block_store_partial : public block_store }); } - void final_vote_for_each_par (std::function, nano::store_iterator)> const & action_a) const override - { - parallel_traversal ( - [&action_a, this] (nano::uint512_t const & start, nano::uint512_t const & end, bool const is_last) { - auto transaction (this->tx_begin_read ()); - action_a (transaction, this->final_vote_begin (transaction, start), !is_last ? this->final_vote_begin (transaction, end) : this->final_vote_end ()); - }); - } - int const minimum_version{ 14 }; protected: diff --git a/nano/secure/ledger.cpp b/nano/secure/ledger.cpp index ce9dcdb6ae..82e780a58a 100644 --- a/nano/secure/ledger.cpp +++ b/nano/secure/ledger.cpp @@ -632,7 +632,7 @@ void ledger_processor::receive_block (nano::receive_block & block_a) if (ledger.store.block_exists (transaction, block_a.hashables.source)) { nano::account_info source_info; - [[maybe_unused]] auto error (ledger.store.account.account_get (transaction, pending.source, source_info)); + [[maybe_unused]] auto error (ledger.store.account.get (transaction, pending.source, source_info)); debug_assert (!error); } #endif @@ -704,7 +704,7 @@ void ledger_processor::open_block (nano::open_block & block_a) if (ledger.store.block_exists (transaction, block_a.hashables.source)) { nano::account_info source_info; - [[maybe_unused]] auto error (ledger.store.account.account_get (transaction, pending.source, source_info)); + [[maybe_unused]] auto error (ledger.store.account.get (transaction, pending.source, source_info)); debug_assert (!error); } #endif @@ -1490,12 +1490,12 @@ bool nano::ledger::migrate_lmdb_to_rocksdb (boost::filesystem::path const & data } }); - store.final_vote_for_each_par ( + store.final_vote.for_each_par ( [&rocksdb_store] (nano::read_transaction const & /*unused*/, auto i, auto n) { for (; i != n; ++i) { auto rocksdb_transaction (rocksdb_store->tx_begin_write ({}, { nano::tables::final_votes })); - rocksdb_store->final_vote_put (rocksdb_transaction, i->first, i->second); + rocksdb_store->final_vote.put (rocksdb_transaction, i->first, i->second); } }); @@ -1518,7 +1518,7 @@ bool nano::ledger::migrate_lmdb_to_rocksdb (boost::filesystem::path const & data error |= store.unchecked_count (lmdb_transaction) != rocksdb_store->unchecked_count (rocksdb_transaction); error |= store.peer_count (lmdb_transaction) != rocksdb_store->peer_count (rocksdb_transaction); error |= store.pruned_count (lmdb_transaction) != rocksdb_store->pruned_count (rocksdb_transaction); - error |= store.final_vote_count (lmdb_transaction) != rocksdb_store->final_vote_count (rocksdb_transaction); + error |= store.final_vote.count (lmdb_transaction) != rocksdb_store->final_vote.count (rocksdb_transaction); error |= store.online_weight.count (lmdb_transaction) != rocksdb_store->online_weight.count (rocksdb_transaction); error |= store.version_get (lmdb_transaction) != rocksdb_store->version_get (rocksdb_transaction); diff --git a/nano/secure/store/final_vote_store_partial.hpp b/nano/secure/store/final_vote_store_partial.hpp new file mode 100644 index 0000000000..e02c17b0d5 --- /dev/null +++ b/nano/secure/store/final_vote_store_partial.hpp @@ -0,0 +1,115 @@ +#pragma once + +#include + +namespace +{ +template +void parallel_traversal (std::function const & action); +} + +namespace nano +{ +template +class block_store_partial; + +template +void release_assert_success (block_store_partial const & block_store, const int status); + +template +class final_vote_store_partial : public final_vote_store +{ +private: + nano::block_store_partial & block_store; + + friend void release_assert_success (block_store_partial const & block_store, const int status); + +public: + explicit final_vote_store_partial (nano::block_store_partial & block_store_a) : + block_store (block_store_a){}; + + bool put (nano::write_transaction const & transaction_a, nano::qualified_root const & root_a, nano::block_hash const & hash_a) override + { + nano::db_val value; + auto status = block_store.get (transaction_a, tables::final_votes, nano::db_val (root_a), value); + release_assert (block_store.success (status) || block_store.not_found (status)); + bool result (true); + if (block_store.success (status)) + { + result = static_cast (value) == hash_a; + } + else + { + status = block_store.put (transaction_a, tables::final_votes, root_a, hash_a); + release_assert_success (block_store, status); + } + return result; + } + + std::vector get (nano::transaction const & transaction_a, nano::root const & root_a) override + { + std::vector result; + nano::qualified_root key_start (root_a.raw, 0); + for (auto i (begin (transaction_a, key_start)), n (end ()); i != n && nano::qualified_root (i->first).root () == root_a; ++i) + { + result.push_back (i->second); + } + return result; + } + + void del (nano::write_transaction const & transaction_a, nano::root const & root_a) override + { + std::vector final_vote_qualified_roots; + for (auto i (begin (transaction_a, nano::qualified_root (root_a.raw, 0))), n (end ()); i != n && nano::qualified_root (i->first).root () == root_a; ++i) + { + final_vote_qualified_roots.push_back (i->first); + } + + for (auto & final_vote_qualified_root : final_vote_qualified_roots) + { + auto status (block_store.del (transaction_a, tables::final_votes, nano::db_val (final_vote_qualified_root))); + release_assert_success (block_store, status); + } + } + + size_t count (nano::transaction const & transaction_a) const override + { + return block_store.count (transaction_a, tables::final_votes); + } + + void clear (nano::write_transaction const & transaction_a, nano::root const & root_a) override + { + del (transaction_a, root_a); + } + + void clear (nano::write_transaction const & transaction_a) override + { + block_store.drop (transaction_a, nano::tables::final_votes); + } + + nano::store_iterator begin (nano::transaction const & transaction_a, nano::qualified_root const & root_a) const override + { + return block_store.template make_iterator (transaction_a, tables::final_votes, nano::db_val (root_a)); + } + + nano::store_iterator begin (nano::transaction const & transaction_a) const override + { + return block_store.template make_iterator (transaction_a, tables::final_votes); + } + + nano::store_iterator end () const override + { + return nano::store_iterator (nullptr); + } + + void for_each_par (std::function, nano::store_iterator)> const & action_a) const override + { + parallel_traversal ( + [&action_a, this] (nano::uint512_t const & start, nano::uint512_t const & end, bool const is_last) { + auto transaction (this->block_store.tx_begin_read ()); + action_a (transaction, this->begin (transaction, start), !is_last ? this->begin (transaction, end) : this->end ()); + }); + } +}; + +} From db8b4caa0270f67531ccbceb1b1cb4244c5e674e Mon Sep 17 00:00:00 2001 From: Thiago Silva <82097354+thsfs@users.noreply.github.com> Date: Wed, 2 Jun 2021 16:40:25 -0300 Subject: [PATCH 034/346] Moves out confirmation height methods from block store class (#3319) --- nano/core_test/active_transactions.cpp | 12 +- nano/core_test/block_store.cpp | 64 +++++----- nano/core_test/confirmation_height.cpp | 56 ++++----- nano/core_test/ledger.cpp | 40 +++---- nano/nano_node/entry.cpp | 2 +- nano/node/active_transactions.cpp | 8 +- nano/node/bootstrap/bootstrap_frontier.cpp | 2 +- nano/node/cli.cpp | 10 +- nano/node/confirmation_height_bounded.cpp | 8 +- nano/node/confirmation_height_unbounded.cpp | 6 +- nano/node/election_scheduler.cpp | 2 +- nano/node/json_handler.cpp | 4 +- nano/node/lmdb/lmdb.cpp | 14 +-- nano/node/lmdb/lmdb.hpp | 2 +- nano/node/node.cpp | 2 +- nano/node/request_aggregator.cpp | 4 +- nano/node/rocksdb/rocksdb.cpp | 2 +- nano/rpc_test/rpc.cpp | 14 +-- nano/secure/CMakeLists.txt | 1 + nano/secure/blockstore.cpp | 4 +- nano/secure/blockstore.hpp | 35 +++--- nano/secure/blockstore_partial.hpp | 85 +------------- nano/secure/ledger.cpp | 22 ++-- .../confirmation_height_store_partial.hpp | 109 ++++++++++++++++++ nano/slow_test/node.cpp | 20 ++-- 25 files changed, 287 insertions(+), 241 deletions(-) create mode 100644 nano/secure/store/confirmation_height_store_partial.hpp diff --git a/nano/core_test/active_transactions.cpp b/nano/core_test/active_transactions.cpp index 8646ab4a25..51395967b1 100644 --- a/nano/core_test/active_transactions.cpp +++ b/nano/core_test/active_transactions.cpp @@ -1311,9 +1311,9 @@ TEST (active_transactions, pessimistic_elections) nano::confirmation_height_info key1_confirmation_height_info; { auto transaction = node.store.tx_begin_read (); - node.store.confirmation_height_get (transaction, nano::genesis_account, genesis_confirmation_height_info); + node.store.confirmation_height.get (transaction, nano::genesis_account, genesis_confirmation_height_info); ASSERT_EQ (2, genesis_confirmation_height_info.height); - node.store.confirmation_height_get (transaction, key.pub, key1_confirmation_height_info); + node.store.confirmation_height.get (transaction, key.pub, key1_confirmation_height_info); ASSERT_EQ (0, key1_confirmation_height_info.height); } @@ -1333,9 +1333,9 @@ TEST (active_transactions, pessimistic_elections) { auto transaction = node.store.tx_begin_read (); - node.store.confirmation_height_get (transaction, nano::genesis_account, genesis_confirmation_height_info); + node.store.confirmation_height.get (transaction, nano::genesis_account, genesis_confirmation_height_info); ASSERT_EQ (3, genesis_confirmation_height_info.height); - node.store.confirmation_height_get (transaction, key.pub, key1_confirmation_height_info); + node.store.confirmation_height.get (transaction, key.pub, key1_confirmation_height_info); ASSERT_EQ (0, key1_confirmation_height_info.height); } @@ -1357,9 +1357,9 @@ TEST (active_transactions, pessimistic_elections) { auto transaction = node.store.tx_begin_read (); - node.store.confirmation_height_get (transaction, nano::genesis_account, genesis_confirmation_height_info); + node.store.confirmation_height.get (transaction, nano::genesis_account, genesis_confirmation_height_info); ASSERT_EQ (3, genesis_confirmation_height_info.height); - node.store.confirmation_height_get (transaction, key.pub, key1_confirmation_height_info); + node.store.confirmation_height.get (transaction, key.pub, key1_confirmation_height_info); ASSERT_EQ (1, key1_confirmation_height_info.height); } diff --git a/nano/core_test/block_store.cpp b/nano/core_test/block_store.cpp index a420b53417..468e2340e4 100644 --- a/nano/core_test/block_store.cpp +++ b/nano/core_test/block_store.cpp @@ -340,7 +340,7 @@ TEST (block_store, genesis) ASSERT_EQ (info.block_count, 1); // Genesis block should be confirmed by default nano::confirmation_height_info confirmation_height_info; - ASSERT_FALSE (store->confirmation_height_get (transaction, nano::genesis_account, confirmation_height_info)); + ASSERT_FALSE (store->confirmation_height.get (transaction, nano::genesis_account, confirmation_height_info)); ASSERT_EQ (confirmation_height_info.height, 1); ASSERT_EQ (confirmation_height_info.frontier, hash); auto dev_pub_text (nano::dev_genesis_key.pub.to_string ()); @@ -528,7 +528,7 @@ TEST (block_store, frontier_retrieval) nano::account account1 (0); nano::account_info info1 (0, 0, 0, 0, 0, 0, nano::epoch::epoch_0); auto transaction (store->tx_begin_write ()); - store->confirmation_height_put (transaction, account1, { 0, nano::block_hash (0) }); + store->confirmation_height.put (transaction, account1, { 0, nano::block_hash (0) }); store->account.put (transaction, account1, info1); nano::account_info info2; store->account.get (transaction, account1, info2); @@ -543,7 +543,7 @@ TEST (block_store, one_account) nano::account account (0); nano::block_hash hash (0); auto transaction (store->tx_begin_write ()); - store->confirmation_height_put (transaction, account, { 20, nano::block_hash (15) }); + store->confirmation_height.put (transaction, account, { 20, nano::block_hash (15) }); store->account.put (transaction, account, { hash, account, hash, 42, 100, 200, nano::epoch::epoch_0 }); auto begin (store->account.begin (transaction)); auto end (store->account.end ()); @@ -555,7 +555,7 @@ TEST (block_store, one_account) ASSERT_EQ (100, info.modified); ASSERT_EQ (200, info.block_count); nano::confirmation_height_info confirmation_height_info; - ASSERT_FALSE (store->confirmation_height_get (transaction, account, confirmation_height_info)); + ASSERT_FALSE (store->confirmation_height.get (transaction, account, confirmation_height_info)); ASSERT_EQ (20, confirmation_height_info.height); ASSERT_EQ (nano::block_hash (15), confirmation_height_info.frontier); ++begin; @@ -595,9 +595,9 @@ TEST (block_store, two_account) nano::account account2 (3); nano::block_hash hash2 (4); auto transaction (store->tx_begin_write ()); - store->confirmation_height_put (transaction, account1, { 20, nano::block_hash (10) }); + store->confirmation_height.put (transaction, account1, { 20, nano::block_hash (10) }); store->account.put (transaction, account1, { hash1, account1, hash1, 42, 100, 300, nano::epoch::epoch_0 }); - store->confirmation_height_put (transaction, account2, { 30, nano::block_hash (20) }); + store->confirmation_height.put (transaction, account2, { 30, nano::block_hash (20) }); store->account.put (transaction, account2, { hash2, account2, hash2, 84, 200, 400, nano::epoch::epoch_0 }); auto begin (store->account.begin (transaction)); auto end (store->account.end ()); @@ -609,7 +609,7 @@ TEST (block_store, two_account) ASSERT_EQ (100, info1.modified); ASSERT_EQ (300, info1.block_count); nano::confirmation_height_info confirmation_height_info; - ASSERT_FALSE (store->confirmation_height_get (transaction, account1, confirmation_height_info)); + ASSERT_FALSE (store->confirmation_height.get (transaction, account1, confirmation_height_info)); ASSERT_EQ (20, confirmation_height_info.height); ASSERT_EQ (nano::block_hash (10), confirmation_height_info.frontier); ++begin; @@ -620,7 +620,7 @@ TEST (block_store, two_account) ASSERT_EQ (84, info2.balance.number ()); ASSERT_EQ (200, info2.modified); ASSERT_EQ (400, info2.block_count); - ASSERT_FALSE (store->confirmation_height_get (transaction, account2, confirmation_height_info)); + ASSERT_FALSE (store->confirmation_height.get (transaction, account2, confirmation_height_info)); ASSERT_EQ (30, confirmation_height_info.height); ASSERT_EQ (nano::block_hash (20), confirmation_height_info.frontier); ++begin; @@ -637,9 +637,9 @@ TEST (block_store, latest_find) nano::account account2 (3); nano::block_hash hash2 (4); auto transaction (store->tx_begin_write ()); - store->confirmation_height_put (transaction, account1, { 0, nano::block_hash (0) }); + store->confirmation_height.put (transaction, account1, { 0, nano::block_hash (0) }); store->account.put (transaction, account1, { hash1, account1, hash1, 100, 0, 300, nano::epoch::epoch_0 }); - store->confirmation_height_put (transaction, account2, { 0, nano::block_hash (0) }); + store->confirmation_height.put (transaction, account2, { 0, nano::block_hash (0) }); store->account.put (transaction, account2, { hash2, account2, hash2, 200, 0, 400, nano::epoch::epoch_0 }); auto first (store->account.begin (transaction)); auto second (store->account.begin (transaction)); @@ -689,7 +689,7 @@ TEST (mdb_block_store, supported_version_upgrades) store.initialize (transaction, genesis, ledger.cache); // Lower the database version to the minimum version supported for upgrade. store.version_put (transaction, store.minimum_version); - store.confirmation_height_del (transaction, nano::genesis_account); + store.confirmation_height.del (transaction, nano::genesis_account); ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "accounts_v1", MDB_CREATE, &store.accounts_v1)); ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "open", MDB_CREATE, &store.open_blocks)); modify_account_info_to_v14 (store, transaction, nano::genesis_account, 1, nano::genesis_hash); @@ -764,7 +764,7 @@ TEST (block_store, latest_exists) nano::account two (2); nano::account_info info; auto transaction (store->tx_begin_write ()); - store->confirmation_height_put (transaction, two, { 0, nano::block_hash (0) }); + store->confirmation_height.put (transaction, two, { 0, nano::block_hash (0) }); store->account.put (transaction, two, info); nano::account one (1); ASSERT_FALSE (store->account.exists (transaction, one)); @@ -782,7 +782,7 @@ TEST (block_store, large_iteration) nano::account account; nano::random_pool::generate_block (account.bytes.data (), account.bytes.size ()); accounts1.insert (account); - store->confirmation_height_put (transaction, account, { 0, nano::block_hash (0) }); + store->confirmation_height.put (transaction, account, { 0, nano::block_hash (0) }); store->account.put (transaction, account, nano::account_info ()); } std::unordered_set accounts2; @@ -867,7 +867,7 @@ TEST (block_store, account_count) auto transaction (store->tx_begin_write ()); ASSERT_EQ (0, store->account.count (transaction)); nano::account account (200); - store->confirmation_height_put (transaction, account, { 0, nano::block_hash (0) }); + store->confirmation_height.put (transaction, account, { 0, nano::block_hash (0) }); store->account.put (transaction, account, nano::account_info ()); } auto transaction (store->tx_begin_read ()); @@ -1287,7 +1287,7 @@ TEST (mdb_block_store, upgrade_v14_v15) nano::account_info account_info; ASSERT_FALSE (store.account.get (transaction, nano::genesis_account, account_info)); nano::confirmation_height_info confirmation_height_info; - ASSERT_FALSE (store.confirmation_height_get (transaction, nano::genesis_account, confirmation_height_info)); + ASSERT_FALSE (store.confirmation_height.get (transaction, nano::genesis_account, confirmation_height_info)); ASSERT_EQ (confirmation_height_info.height, 1); ASSERT_EQ (confirmation_height_info.frontier, genesis.hash ()); // These databases get removed after an upgrade, so readd them @@ -1302,7 +1302,7 @@ TEST (mdb_block_store, upgrade_v14_v15) ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, state_send).code); // Lower the database to the previous version store.version_put (transaction, 14); - store.confirmation_height_del (transaction, nano::genesis_account); + store.confirmation_height.del (transaction, nano::genesis_account); modify_account_info_to_v14 (store, transaction, nano::genesis_account, confirmation_height_info.height, state_send.hash ()); store.pending.del (transaction, nano::pending_key (nano::genesis_account, state_send.hash ())); @@ -1328,7 +1328,7 @@ TEST (mdb_block_store, upgrade_v14_v15) store.account.del (transaction, nano::genesis_account); // Confirmation height for the account should be deleted - ASSERT_TRUE (mdb_get (store.env.tx (transaction), store.confirmation_height, nano::mdb_val (nano::genesis_account), value)); + ASSERT_TRUE (mdb_get (store.env.tx (transaction), store.confirmation_height_handle, nano::mdb_val (nano::genesis_account), value)); } // Now do the upgrade @@ -1345,7 +1345,7 @@ TEST (mdb_block_store, upgrade_v14_v15) // Confirmation height should exist nano::confirmation_height_info confirmation_height_info; - ASSERT_FALSE (store.confirmation_height_get (transaction, nano::genesis_account, confirmation_height_info)); + ASSERT_FALSE (store.confirmation_height.get (transaction, nano::genesis_account, confirmation_height_info)); ASSERT_EQ (confirmation_height_info.height, 1); ASSERT_EQ (confirmation_height_info.frontier, genesis.hash ()); @@ -1403,7 +1403,7 @@ TEST (mdb_block_store, upgrade_v15_v16) store.version_put (transaction, 15); // Confirm the rep weight exists in the database ASSERT_EQ (MDB_SUCCESS, mdb_get (store.env.tx (transaction), store.representation, nano::mdb_val (nano::genesis_account), value)); - store.confirmation_height_del (transaction, nano::genesis_account); + store.confirmation_height.del (transaction, nano::genesis_account); } // Now do the upgrade @@ -1468,7 +1468,7 @@ TEST (mdb_block_store, upgrade_v16_v17) auto transaction (store.tx_begin_read ()); nano::confirmation_height_info confirmation_height_info; - ASSERT_FALSE (store.confirmation_height_get (transaction, nano::genesis_account, confirmation_height_info)); + ASSERT_FALSE (store.confirmation_height.get (transaction, nano::genesis_account, confirmation_height_info)); ASSERT_EQ (confirmation_height_info.height, confirmation_height); // Check confirmation height frontier is correct @@ -1903,30 +1903,30 @@ TEST (block_store, confirmation_height) nano::block_hash cemented_frontier3 (5); { auto transaction (store->tx_begin_write ()); - store->confirmation_height_put (transaction, account1, { 500, cemented_frontier1 }); - store->confirmation_height_put (transaction, account2, { std::numeric_limits::max (), cemented_frontier2 }); - store->confirmation_height_put (transaction, account3, { 10, cemented_frontier3 }); + store->confirmation_height.put (transaction, account1, { 500, cemented_frontier1 }); + store->confirmation_height.put (transaction, account2, { std::numeric_limits::max (), cemented_frontier2 }); + store->confirmation_height.put (transaction, account3, { 10, cemented_frontier3 }); nano::confirmation_height_info confirmation_height_info; - ASSERT_FALSE (store->confirmation_height_get (transaction, account1, confirmation_height_info)); + ASSERT_FALSE (store->confirmation_height.get (transaction, account1, confirmation_height_info)); ASSERT_EQ (confirmation_height_info.height, 500); ASSERT_EQ (confirmation_height_info.frontier, cemented_frontier1); - ASSERT_FALSE (store->confirmation_height_get (transaction, account2, confirmation_height_info)); + ASSERT_FALSE (store->confirmation_height.get (transaction, account2, confirmation_height_info)); ASSERT_EQ (confirmation_height_info.height, std::numeric_limits::max ()); ASSERT_EQ (confirmation_height_info.frontier, cemented_frontier2); - ASSERT_FALSE (store->confirmation_height_get (transaction, account3, confirmation_height_info)); + ASSERT_FALSE (store->confirmation_height.get (transaction, account3, confirmation_height_info)); ASSERT_EQ (confirmation_height_info.height, 10); ASSERT_EQ (confirmation_height_info.frontier, cemented_frontier3); // Check clearing of confirmation heights - store->confirmation_height_clear (transaction); + store->confirmation_height.clear (transaction); } auto transaction (store->tx_begin_read ()); - ASSERT_EQ (store->confirmation_height_count (transaction), 0); + ASSERT_EQ (store->confirmation_height.count (transaction), 0); nano::confirmation_height_info confirmation_height_info; - ASSERT_TRUE (store->confirmation_height_get (transaction, account1, confirmation_height_info)); - ASSERT_TRUE (store->confirmation_height_get (transaction, account2, confirmation_height_info)); - ASSERT_TRUE (store->confirmation_height_get (transaction, account3, confirmation_height_info)); + ASSERT_TRUE (store->confirmation_height.get (transaction, account1, confirmation_height_info)); + ASSERT_TRUE (store->confirmation_height.get (transaction, account2, confirmation_height_info)); + ASSERT_TRUE (store->confirmation_height.get (transaction, account3, confirmation_height_info)); } // Test various confirmation height values as well as clearing them @@ -2124,7 +2124,7 @@ void modify_account_info_to_v14 (nano::mdb_store & store, nano::transaction cons void modify_confirmation_height_to_v15 (nano::mdb_store & store, nano::transaction const & transaction, nano::account const & account, uint64_t confirmation_height) { - auto status (mdb_put (store.env.tx (transaction), store.confirmation_height, nano::mdb_val (account), nano::mdb_val (confirmation_height), 0)); + auto status (mdb_put (store.env.tx (transaction), store.confirmation_height_handle, nano::mdb_val (account), nano::mdb_val (confirmation_height), 0)); ASSERT_EQ (status, 0); } } diff --git a/nano/core_test/confirmation_height.cpp b/nano/core_test/confirmation_height.cpp index e1c44071b2..04be4cc070 100644 --- a/nano/core_test/confirmation_height.cpp +++ b/nano/core_test/confirmation_height.cpp @@ -46,7 +46,7 @@ TEST (confirmation_height, single) nano::confirmation_height_info confirmation_height_info; add_callback_stats (*node); auto transaction = node->store.tx_begin_read (); - ASSERT_FALSE (node->store.confirmation_height_get (transaction, nano::dev_genesis_key.pub, confirmation_height_info)); + ASSERT_FALSE (node->store.confirmation_height.get (transaction, nano::dev_genesis_key.pub, confirmation_height_info)); ASSERT_EQ (1, confirmation_height_info.height); ASSERT_EQ (nano::genesis_hash, confirmation_height_info.frontier); @@ -58,7 +58,7 @@ TEST (confirmation_height, single) { auto transaction = node->store.tx_begin_write (); ASSERT_TRUE (node->ledger.block_confirmed (transaction, send1->hash ())); - ASSERT_FALSE (node->store.confirmation_height_get (transaction, nano::dev_genesis_key.pub, confirmation_height_info)); + ASSERT_FALSE (node->store.confirmation_height.get (transaction, nano::dev_genesis_key.pub, confirmation_height_info)); ASSERT_EQ (2, confirmation_height_info.height); ASSERT_EQ (send1->hash (), confirmation_height_info.frontier); @@ -132,16 +132,16 @@ TEST (confirmation_height, multiple_accounts) // Check confirmation heights of all the accounts (except genesis) are uninitialized (0), // as we have any just added them to the ledger and not processed any live transactions yet. nano::confirmation_height_info confirmation_height_info; - ASSERT_FALSE (node->store.confirmation_height_get (transaction, nano::dev_genesis_key.pub, confirmation_height_info)); + ASSERT_FALSE (node->store.confirmation_height.get (transaction, nano::dev_genesis_key.pub, confirmation_height_info)); ASSERT_EQ (1, confirmation_height_info.height); ASSERT_EQ (nano::genesis_hash, confirmation_height_info.frontier); - ASSERT_TRUE (node->store.confirmation_height_get (transaction, key1.pub, confirmation_height_info)); + ASSERT_TRUE (node->store.confirmation_height.get (transaction, key1.pub, confirmation_height_info)); ASSERT_EQ (0, confirmation_height_info.height); ASSERT_EQ (nano::block_hash (0), confirmation_height_info.frontier); - ASSERT_TRUE (node->store.confirmation_height_get (transaction, key2.pub, confirmation_height_info)); + ASSERT_TRUE (node->store.confirmation_height.get (transaction, key2.pub, confirmation_height_info)); ASSERT_EQ (0, confirmation_height_info.height); ASSERT_EQ (nano::block_hash (0), confirmation_height_info.frontier); - ASSERT_TRUE (node->store.confirmation_height_get (transaction, key3.pub, confirmation_height_info)); + ASSERT_TRUE (node->store.confirmation_height.get (transaction, key3.pub, confirmation_height_info)); ASSERT_EQ (0, confirmation_height_info.height); ASSERT_EQ (nano::block_hash (0), confirmation_height_info.frontier); } @@ -163,22 +163,22 @@ TEST (confirmation_height, multiple_accounts) auto transaction = node->store.tx_begin_read (); ASSERT_TRUE (node->ledger.block_confirmed (transaction, receive3->hash ())); ASSERT_FALSE (store.account.get (transaction, nano::dev_genesis_key.pub, account_info)); - ASSERT_FALSE (node->store.confirmation_height_get (transaction, nano::dev_genesis_key.pub, confirmation_height_info)); + ASSERT_FALSE (node->store.confirmation_height.get (transaction, nano::dev_genesis_key.pub, confirmation_height_info)); ASSERT_EQ (4, confirmation_height_info.height); ASSERT_EQ (send3.hash (), confirmation_height_info.frontier); ASSERT_EQ (4, account_info.block_count); ASSERT_FALSE (store.account.get (transaction, key1.pub, account_info)); - ASSERT_FALSE (node->store.confirmation_height_get (transaction, key1.pub, confirmation_height_info)); + ASSERT_FALSE (node->store.confirmation_height.get (transaction, key1.pub, confirmation_height_info)); ASSERT_EQ (2, confirmation_height_info.height); ASSERT_EQ (send4.hash (), confirmation_height_info.frontier); ASSERT_EQ (3, account_info.block_count); ASSERT_FALSE (store.account.get (transaction, key2.pub, account_info)); - ASSERT_FALSE (node->store.confirmation_height_get (transaction, key2.pub, confirmation_height_info)); + ASSERT_FALSE (node->store.confirmation_height.get (transaction, key2.pub, confirmation_height_info)); ASSERT_EQ (3, confirmation_height_info.height); ASSERT_EQ (send6.hash (), confirmation_height_info.frontier); ASSERT_EQ (4, account_info.block_count); ASSERT_FALSE (store.account.get (transaction, key3.pub, account_info)); - ASSERT_FALSE (node->store.confirmation_height_get (transaction, key3.pub, confirmation_height_info)); + ASSERT_FALSE (node->store.confirmation_height.get (transaction, key3.pub, confirmation_height_info)); ASSERT_EQ (2, confirmation_height_info.height); ASSERT_EQ (receive3->hash (), confirmation_height_info.frontier); ASSERT_EQ (2, account_info.block_count); @@ -259,7 +259,7 @@ TEST (confirmation_height, gap_bootstrap) ASSERT_EQ (unchecked_count, 2); nano::confirmation_height_info confirmation_height_info; - ASSERT_FALSE (node1.store.confirmation_height_get (transaction, nano::dev_genesis_key.pub, confirmation_height_info)); + ASSERT_FALSE (node1.store.confirmation_height.get (transaction, nano::dev_genesis_key.pub, confirmation_height_info)); ASSERT_EQ (1, confirmation_height_info.height); ASSERT_EQ (genesis.hash (), confirmation_height_info.frontier); } @@ -275,10 +275,10 @@ TEST (confirmation_height, gap_bootstrap) ASSERT_EQ (unchecked_count, 0); nano::confirmation_height_info confirmation_height_info; - ASSERT_FALSE (node1.store.confirmation_height_get (transaction, nano::dev_genesis_key.pub, confirmation_height_info)); + ASSERT_FALSE (node1.store.confirmation_height.get (transaction, nano::dev_genesis_key.pub, confirmation_height_info)); ASSERT_EQ (1, confirmation_height_info.height); ASSERT_EQ (genesis.hash (), confirmation_height_info.frontier); - ASSERT_TRUE (node1.store.confirmation_height_get (transaction, destination.pub, confirmation_height_info)); + ASSERT_TRUE (node1.store.confirmation_height.get (transaction, destination.pub, confirmation_height_info)); ASSERT_EQ (0, confirmation_height_info.height); ASSERT_EQ (nano::block_hash (0), confirmation_height_info.frontier); } @@ -341,7 +341,7 @@ TEST (confirmation_height, gap_live) { auto transaction = node->store.tx_begin_read (); nano::confirmation_height_info confirmation_height_info; - ASSERT_FALSE (node->store.confirmation_height_get (transaction, nano::dev_genesis_key.pub, confirmation_height_info)); + ASSERT_FALSE (node->store.confirmation_height.get (transaction, nano::dev_genesis_key.pub, confirmation_height_info)); ASSERT_EQ (1, confirmation_height_info.height); ASSERT_EQ (nano::genesis_hash, confirmation_height_info.frontier); } @@ -363,10 +363,10 @@ TEST (confirmation_height, gap_live) nano::confirmation_height_info confirmation_height_info; ASSERT_TRUE (node->ledger.block_confirmed (transaction, receive2->hash ())); - ASSERT_FALSE (node->store.confirmation_height_get (transaction, nano::dev_genesis_key.pub, confirmation_height_info)); + ASSERT_FALSE (node->store.confirmation_height.get (transaction, nano::dev_genesis_key.pub, confirmation_height_info)); ASSERT_EQ (4, confirmation_height_info.height); ASSERT_EQ (send3->hash (), confirmation_height_info.frontier); - ASSERT_FALSE (node->store.confirmation_height_get (transaction, destination.pub, confirmation_height_info)); + ASSERT_FALSE (node->store.confirmation_height.get (transaction, destination.pub, confirmation_height_info)); ASSERT_EQ (3, confirmation_height_info.height); ASSERT_EQ (receive2->hash (), confirmation_height_info.frontier); @@ -444,13 +444,13 @@ TEST (confirmation_height, send_receive_between_2_accounts) nano::account_info account_info; nano::confirmation_height_info confirmation_height_info; ASSERT_FALSE (node->store.account.get (transaction, nano::dev_genesis_key.pub, account_info)); - ASSERT_FALSE (node->store.confirmation_height_get (transaction, nano::dev_genesis_key.pub, confirmation_height_info)); + ASSERT_FALSE (node->store.confirmation_height.get (transaction, nano::dev_genesis_key.pub, confirmation_height_info)); ASSERT_EQ (6, confirmation_height_info.height); ASSERT_EQ (send5.hash (), confirmation_height_info.frontier); ASSERT_EQ (7, account_info.block_count); ASSERT_FALSE (node->store.account.get (transaction, key1.pub, account_info)); - ASSERT_FALSE (node->store.confirmation_height_get (transaction, key1.pub, confirmation_height_info)); + ASSERT_FALSE (node->store.confirmation_height.get (transaction, key1.pub, confirmation_height_info)); ASSERT_EQ (5, confirmation_height_info.height); ASSERT_EQ (receive4->hash (), confirmation_height_info.frontier); ASSERT_EQ (5, account_info.block_count); @@ -515,7 +515,7 @@ TEST (confirmation_height, send_receive_self) nano::account_info account_info; ASSERT_FALSE (node->store.account.get (transaction, nano::dev_genesis_key.pub, account_info)); nano::confirmation_height_info confirmation_height_info; - ASSERT_FALSE (node->store.confirmation_height_get (transaction, nano::dev_genesis_key.pub, confirmation_height_info)); + ASSERT_FALSE (node->store.confirmation_height.get (transaction, nano::dev_genesis_key.pub, confirmation_height_info)); ASSERT_EQ (7, confirmation_height_info.height); ASSERT_EQ (receive3->hash (), confirmation_height_info.frontier); ASSERT_EQ (8, account_info.block_count); @@ -612,19 +612,19 @@ TEST (confirmation_height, all_block_types) nano::account_info account_info; nano::confirmation_height_info confirmation_height_info; ASSERT_FALSE (node->store.account.get (transaction, nano::dev_genesis_key.pub, account_info)); - ASSERT_FALSE (node->store.confirmation_height_get (transaction, nano::dev_genesis_key.pub, confirmation_height_info)); + ASSERT_FALSE (node->store.confirmation_height.get (transaction, nano::dev_genesis_key.pub, confirmation_height_info)); ASSERT_EQ (3, confirmation_height_info.height); ASSERT_EQ (send1.hash (), confirmation_height_info.frontier); ASSERT_LE (4, account_info.block_count); ASSERT_FALSE (node->store.account.get (transaction, key1.pub, account_info)); - ASSERT_FALSE (node->store.confirmation_height_get (transaction, key1.pub, confirmation_height_info)); + ASSERT_FALSE (node->store.confirmation_height.get (transaction, key1.pub, confirmation_height_info)); ASSERT_EQ (state_send1.hash (), confirmation_height_info.frontier); ASSERT_EQ (6, confirmation_height_info.height); ASSERT_LE (7, account_info.block_count); ASSERT_FALSE (node->store.account.get (transaction, key2.pub, account_info)); - ASSERT_FALSE (node->store.confirmation_height_get (transaction, key2.pub, confirmation_height_info)); + ASSERT_FALSE (node->store.confirmation_height.get (transaction, key2.pub, confirmation_height_info)); ASSERT_EQ (7, confirmation_height_info.height); ASSERT_EQ (state_send2->hash (), confirmation_height_info.frontier); ASSERT_LE (8, account_info.block_count); @@ -683,12 +683,12 @@ TEST (confirmation_height, conflict_rollback_cemented) { auto transaction (node1->store.tx_begin_write ()); ASSERT_TRUE (node1->store.block_exists (transaction, publish1.block->hash ())); - node1->store.confirmation_height_put (transaction, nano::genesis_account, nano::confirmation_height_info{ 2, send2->hash () }); + node1->store.confirmation_height.put (transaction, nano::genesis_account, nano::confirmation_height_info{ 2, send2->hash () }); } { auto transaction (node2->store.tx_begin_write ()); ASSERT_TRUE (node2->store.block_exists (transaction, publish2.block->hash ())); - node2->store.confirmation_height_put (transaction, nano::genesis_account, nano::confirmation_height_info{ 2, send2->hash () }); + node2->store.confirmation_height.put (transaction, nano::genesis_account, nano::confirmation_height_info{ 2, send2->hash () }); } auto rollback_log_entry = boost::str (boost::format ("Failed to roll back %1%") % send2->hash ().to_string ()); @@ -832,7 +832,7 @@ TEST (confirmation_heightDeathTest, modified_chain) } ASSERT_EQ (nano::process_result::progress, ledger.process (store->tx_begin_write (), *send).code); - store->confirmation_height_put (store->tx_begin_write (), nano::genesis_account, { 1, nano::genesis_hash }); + store->confirmation_height.put (store->tx_begin_write (), nano::genesis_account, { 1, nano::genesis_hash }); nano::confirmation_height_unbounded unbounded_processor ( ledger, write_database_queue, 10ms, logging, logger, stopped, batch_write_size, [] (auto const &) {}, [] (auto const &) {}, [] () { return 0; }); @@ -906,7 +906,7 @@ TEST (confirmation_heightDeathTest, modified_chain_account_removed) // Reset conditions and test with the bounded processor ASSERT_EQ (nano::process_result::progress, ledger.process (store->tx_begin_write (), *open).code); - store->confirmation_height_put (store->tx_begin_write (), nano::genesis_account, { 1, nano::genesis_hash }); + store->confirmation_height.put (store->tx_begin_write (), nano::genesis_account, { 1, nano::genesis_hash }); nano::confirmation_height_bounded bounded_processor ( ledger, write_database_queue, 10ms, logging, logger, stopped, batch_write_size, [] (auto const &) {}, [] (auto const &) {}, [] () { return 0; }); @@ -1241,8 +1241,8 @@ TEST (confirmation_height, cemented_gap_below_no_cache) // Force some blocks to be cemented so that the cached confirmed info variable is empty { auto transaction (node->store.tx_begin_write ()); - node->store.confirmation_height_put (transaction, nano::genesis_account, nano::confirmation_height_info{ 3, send1.hash () }); - node->store.confirmation_height_put (transaction, key1.pub, nano::confirmation_height_info{ 2, receive1.hash () }); + node->store.confirmation_height.put (transaction, nano::genesis_account, nano::confirmation_height_info{ 3, send1.hash () }); + node->store.confirmation_height.put (transaction, key1.pub, nano::confirmation_height_info{ 2, receive1.hash () }); } add_callback_stats (*node); diff --git a/nano/core_test/ledger.cpp b/nano/core_test/ledger.cpp index 95f48e437b..5692b66f3d 100644 --- a/nano/core_test/ledger.cpp +++ b/nano/core_test/ledger.cpp @@ -61,7 +61,7 @@ TEST (ledger, genesis_balance) ASSERT_LT (nano::seconds_since_epoch () - info.modified, 10); // Genesis block should be confirmed by default nano::confirmation_height_info confirmation_height_info; - ASSERT_FALSE (store->confirmation_height_get (transaction, nano::genesis_account, confirmation_height_info)); + ASSERT_FALSE (store->confirmation_height.get (transaction, nano::genesis_account, confirmation_height_info)); ASSERT_EQ (confirmation_height_info.height, 1); ASSERT_EQ (confirmation_height_info.frontier, genesis.hash ()); } @@ -3031,16 +3031,16 @@ TEST (ledger, confirmation_height_not_updated) nano::keypair key; nano::send_block send1 (account_info.head, key.pub, 50, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (account_info.head)); nano::confirmation_height_info confirmation_height_info; - ASSERT_FALSE (store->confirmation_height_get (transaction, nano::genesis_account, confirmation_height_info)); + ASSERT_FALSE (store->confirmation_height.get (transaction, nano::genesis_account, confirmation_height_info)); ASSERT_EQ (1, confirmation_height_info.height); ASSERT_EQ (genesis.hash (), confirmation_height_info.frontier); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - ASSERT_FALSE (store->confirmation_height_get (transaction, nano::genesis_account, confirmation_height_info)); + ASSERT_FALSE (store->confirmation_height.get (transaction, nano::genesis_account, confirmation_height_info)); ASSERT_EQ (1, confirmation_height_info.height); ASSERT_EQ (genesis.hash (), confirmation_height_info.frontier); nano::open_block open1 (send1.hash (), nano::genesis_account, key.pub, key.prv, key.pub, *pool.generate (key.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open1).code); - ASSERT_TRUE (store->confirmation_height_get (transaction, key.pub, confirmation_height_info)); + ASSERT_TRUE (store->confirmation_height.get (transaction, key.pub, confirmation_height_info)); ASSERT_EQ (0, confirmation_height_info.height); ASSERT_EQ (nano::block_hash (0), confirmation_height_info.frontier); } @@ -3219,9 +3219,9 @@ TEST (ledger, dependents_confirmed) ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, *receive1).code); ASSERT_FALSE (ledger.dependents_confirmed (transaction, *receive1)); nano::confirmation_height_info height; - ASSERT_FALSE (ledger.store.confirmation_height_get (transaction, nano::genesis_account, height)); + ASSERT_FALSE (ledger.store.confirmation_height.get (transaction, nano::genesis_account, height)); height.height += 1; - ledger.store.confirmation_height_put (transaction, nano::genesis_account, height); + ledger.store.confirmation_height.put (transaction, nano::genesis_account, height); ASSERT_TRUE (ledger.dependents_confirmed (transaction, *receive1)); auto receive2 = builder.state () .account (key1.pub) @@ -3234,13 +3234,13 @@ TEST (ledger, dependents_confirmed) .build_shared (); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, *receive2).code); ASSERT_FALSE (ledger.dependents_confirmed (transaction, *receive2)); - ASSERT_TRUE (ledger.store.confirmation_height_get (transaction, key1.pub, height)); + ASSERT_TRUE (ledger.store.confirmation_height.get (transaction, key1.pub, height)); height.height += 1; - ledger.store.confirmation_height_put (transaction, key1.pub, height); + ledger.store.confirmation_height.put (transaction, key1.pub, height); ASSERT_FALSE (ledger.dependents_confirmed (transaction, *receive2)); - ASSERT_FALSE (ledger.store.confirmation_height_get (transaction, nano::genesis_account, height)); + ASSERT_FALSE (ledger.store.confirmation_height.get (transaction, nano::genesis_account, height)); height.height += 1; - ledger.store.confirmation_height_put (transaction, nano::genesis_account, height); + ledger.store.confirmation_height.put (transaction, nano::genesis_account, height); ASSERT_TRUE (ledger.dependents_confirmed (transaction, *receive2)); } @@ -3279,9 +3279,9 @@ TEST (ledger, dependents_confirmed_pruning) .build_shared (); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, *send2).code); nano::confirmation_height_info height; - ASSERT_FALSE (ledger.store.confirmation_height_get (transaction, nano::genesis_account, height)); + ASSERT_FALSE (ledger.store.confirmation_height.get (transaction, nano::genesis_account, height)); height.height = 3; - ledger.store.confirmation_height_put (transaction, nano::genesis_account, height); + ledger.store.confirmation_height.put (transaction, nano::genesis_account, height); ASSERT_TRUE (ledger.block_confirmed (transaction, send1->hash ())); ASSERT_EQ (2, ledger.pruning_action (transaction, send2->hash (), 1)); auto receive1 = builder.state () @@ -3324,9 +3324,9 @@ TEST (ledger, block_confirmed) ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, *send1).code); ASSERT_FALSE (ledger.block_confirmed (transaction, send1->hash ())); nano::confirmation_height_info height; - ASSERT_FALSE (ledger.store.confirmation_height_get (transaction, nano::genesis_account, height)); + ASSERT_FALSE (ledger.store.confirmation_height.get (transaction, nano::genesis_account, height)); ++height.height; - ledger.store.confirmation_height_put (transaction, nano::genesis_account, height); + ledger.store.confirmation_height.put (transaction, nano::genesis_account, height); ASSERT_TRUE (ledger.block_confirmed (transaction, send1->hash ())); } @@ -3404,10 +3404,10 @@ TEST (ledger, cache) { auto transaction (store->tx_begin_write ()); nano::confirmation_height_info height; - ASSERT_FALSE (ledger.store.confirmation_height_get (transaction, nano::genesis_account, height)); + ASSERT_FALSE (ledger.store.confirmation_height.get (transaction, nano::genesis_account, height)); ++height.height; height.frontier = send->hash (); - ledger.store.confirmation_height_put (transaction, nano::genesis_account, height); + ledger.store.confirmation_height.put (transaction, nano::genesis_account, height); ASSERT_TRUE (ledger.block_confirmed (transaction, send->hash ())); ++ledger.cache.cemented_count; } @@ -3419,10 +3419,10 @@ TEST (ledger, cache) { auto transaction (store->tx_begin_write ()); nano::confirmation_height_info height; - ledger.store.confirmation_height_get (transaction, key.pub, height); + ledger.store.confirmation_height.get (transaction, key.pub, height); height.height += 1; height.frontier = open->hash (); - ledger.store.confirmation_height_put (transaction, key.pub, height); + ledger.store.confirmation_height.put (transaction, key.pub, height); ASSERT_TRUE (ledger.block_confirmed (transaction, open->hash ())); ++ledger.cache.cemented_count; } @@ -3860,7 +3860,7 @@ TEST (ledger, migrate_lmdb_to_rocksdb) ASSERT_FALSE (store.init_error ()); // Lower the database to the max version unsupported for upgrades - store.confirmation_height_put (transaction, nano::genesis_account, { 2, send->hash () }); + store.confirmation_height.put (transaction, nano::genesis_account, { 2, send->hash () }); store.online_weight.put (transaction, 100, nano::amount (2)); store.frontier.put (transaction, nano::block_hash (2), nano::account (5)); @@ -3899,7 +3899,7 @@ TEST (ledger, migrate_lmdb_to_rocksdb) ASSERT_EQ (rocksdb_store.version_get (rocksdb_transaction), version); ASSERT_EQ (rocksdb_store.frontier.get (rocksdb_transaction, 2), 5); nano::confirmation_height_info confirmation_height_info; - ASSERT_FALSE (rocksdb_store.confirmation_height_get (rocksdb_transaction, nano::genesis_account, confirmation_height_info)); + ASSERT_FALSE (rocksdb_store.confirmation_height.get (rocksdb_transaction, nano::genesis_account, confirmation_height_info)); ASSERT_EQ (confirmation_height_info.height, 2); ASSERT_EQ (confirmation_height_info.frontier, send->hash ()); ASSERT_TRUE (rocksdb_store.final_vote.get (rocksdb_transaction, nano::root (send->previous ())).size () == 1); diff --git a/nano/nano_node/entry.cpp b/nano/nano_node/entry.cpp index 579ecb3790..eba60533f3 100644 --- a/nano/nano_node/entry.cpp +++ b/nano/nano_node/entry.cpp @@ -1409,7 +1409,7 @@ int main (int argc, char * const * argv) std::cout << boost::str (boost::format ("%1% accounts validated\n") % count); } nano::confirmation_height_info confirmation_height_info; - node->store.confirmation_height_get (transaction, account, confirmation_height_info); + node->store.confirmation_height.get (transaction, account, confirmation_height_info); if (confirmation_height_info.height > info.block_count) { diff --git a/nano/node/active_transactions.cpp b/nano/node/active_transactions.cpp index 1b1988d08c..782b249fe2 100644 --- a/nano/node/active_transactions.cpp +++ b/nano/node/active_transactions.cpp @@ -138,7 +138,7 @@ void nano::active_transactions::confirm_prioritized_frontiers (nano::transaction if (!this->confirmation_height_processor.is_processing_block (info.head)) { nano::confirmation_height_info confirmation_height_info; - this->node.store.confirmation_height_get (transaction_a, cementable_account.account, confirmation_height_info); + this->node.store.confirmation_height.get (transaction_a, cementable_account.account, confirmation_height_info); if (info.block_count > confirmation_height_info.height) { @@ -492,7 +492,7 @@ void nano::active_transactions::confirm_expired_frontiers_pessimistically (nano: bool should_delete{ true }; if (!node.store.account.get (transaction_a, account, account_info)) { - node.store.confirmation_height_get (transaction_a, account, confirmation_height_info); + node.store.confirmation_height.get (transaction_a, account, confirmation_height_info); if (account_info.block_count > confirmation_height_info.height) { should_delete = false; @@ -695,7 +695,7 @@ void nano::active_transactions::prioritize_frontiers_for_confirmation (nano::tra if (expired_optimistic_election_infos.get ().count (account) == 0 && !node.store.account.get (transaction_a, account, info)) { nano::confirmation_height_info confirmation_height_info; - node.store.confirmation_height_get (transaction_a, account, confirmation_height_info); + node.store.confirmation_height.get (transaction_a, account, confirmation_height_info); // If it exists in normal priority collection delete from there. auto it = priority_cementable_frontiers.find (account); if (it != priority_cementable_frontiers.end ()) @@ -747,7 +747,7 @@ void nano::active_transactions::prioritize_frontiers_for_confirmation (nano::tra if (expired_optimistic_election_infos.get ().count (account) == 0) { nano::confirmation_height_info confirmation_height_info; - node.store.confirmation_height_get (transaction_a, account, confirmation_height_info); + node.store.confirmation_height.get (transaction_a, account, confirmation_height_info); auto insert_newed = prioritize_account_for_confirmation (priority_cementable_frontiers, priority_cementable_frontiers_size, account, info, confirmation_height_info.height); if (insert_newed) { diff --git a/nano/node/bootstrap/bootstrap_frontier.cpp b/nano/node/bootstrap/bootstrap_frontier.cpp index 48b20d982a..4fad5f6674 100644 --- a/nano/node/bootstrap/bootstrap_frontier.cpp +++ b/nano/node/bootstrap/bootstrap_frontier.cpp @@ -349,7 +349,7 @@ void nano::frontier_req_server::next () } else { - for (auto i (connection->node->store.confirmation_height_begin (transaction, current.number () + 1)), n (connection->node->store.confirmation_height_end ()); i != n && accounts.size () != max_size; ++i) + for (auto i (connection->node->store.confirmation_height.begin (transaction, current.number () + 1)), n (connection->node->store.confirmation_height.end ()); i != n && accounts.size () != max_size; ++i) { nano::confirmation_height_info const & info (i->second); nano::block_hash const & confirmed_frontier (info.frontier); diff --git a/nano/node/cli.cpp b/nano/node/cli.cpp index b92528b006..cf5fd7ee2b 100644 --- a/nano/node/cli.cpp +++ b/nano/node/cli.cpp @@ -570,18 +570,18 @@ std::error_code nano::handle_node_options (boost::program_options::variables_map if (!account.decode_account (account_str)) { nano::confirmation_height_info confirmation_height_info; - if (!node.node->store.confirmation_height_get (node.node->store.tx_begin_read (), account, confirmation_height_info)) + if (!node.node->store.confirmation_height.get (node.node->store.tx_begin_read (), account, confirmation_height_info)) { auto transaction (node.node->store.tx_begin_write ()); auto conf_height_reset_num = 0; if (account == node.node->network_params.ledger.genesis_account) { conf_height_reset_num = 1; - node.node->store.confirmation_height_put (transaction, account, { confirmation_height_info.height, node.node->network_params.ledger.genesis_block }); + node.node->store.confirmation_height.put (transaction, account, { confirmation_height_info.height, node.node->network_params.ledger.genesis_block }); } else { - node.node->store.confirmation_height_clear (transaction, account); + node.node->store.confirmation_height.clear (transaction, account); } std::cout << "Confirmation height of account " << account_str << " is set to " << conf_height_reset_num << std::endl; @@ -1303,11 +1303,11 @@ namespace void reset_confirmation_heights (nano::write_transaction const & transaction, nano::block_store & store) { // First do a clean sweep - store.confirmation_height_clear (transaction); + store.confirmation_height.clear (transaction); // Then make sure the confirmation height of the genesis account open block is 1 nano::network_params network_params; - store.confirmation_height_put (transaction, network_params.ledger.genesis_account, { 1, network_params.ledger.genesis_hash }); + store.confirmation_height.put (transaction, network_params.ledger.genesis_account, { 1, network_params.ledger.genesis_hash }); } bool is_using_rocksdb (boost::filesystem::path const & data_path, boost::program_options::variables_map const & vm, std::error_code & ec) diff --git a/nano/node/confirmation_height_bounded.cpp b/nano/node/confirmation_height_bounded.cpp index 55c36d7369..f7237c1838 100644 --- a/nano/node/confirmation_height_bounded.cpp +++ b/nano/node/confirmation_height_bounded.cpp @@ -121,7 +121,7 @@ void nano::confirmation_height_bounded::process (std::shared_ptr or } else { - ledger.store.confirmation_height_get (transaction, account, confirmation_height_info); + ledger.store.confirmation_height.get (transaction, account, confirmation_height_info); // This block was added to the confirmation height processor but is already confirmed if (first_iter && confirmation_height_info.height >= block->sideband ().height && current == original_block->hash ()) { @@ -385,19 +385,19 @@ void nano::confirmation_height_bounded::cement_blocks (nano::write_guard & scope #ifndef NDEBUG // Extra debug checks nano::confirmation_height_info confirmation_height_info; - ledger.store.confirmation_height_get (transaction, account, confirmation_height_info); + ledger.store.confirmation_height.get (transaction, account, confirmation_height_info); auto block (ledger.store.block_get (transaction, confirmed_frontier)); debug_assert (block != nullptr); debug_assert (block->sideband ().height == confirmation_height_info.height + num_blocks_cemented); #endif - ledger.store.confirmation_height_put (transaction, account, nano::confirmation_height_info{ confirmation_height, confirmed_frontier }); + ledger.store.confirmation_height.put (transaction, account, nano::confirmation_height_info{ confirmation_height, confirmed_frontier }); ledger.cache.cemented_count += num_blocks_cemented; ledger.stats.add (nano::stat::type::confirmation_height, nano::stat::detail::blocks_confirmed, nano::stat::dir::in, num_blocks_cemented); ledger.stats.add (nano::stat::type::confirmation_height, nano::stat::detail::blocks_confirmed_bounded, nano::stat::dir::in, num_blocks_cemented); }; nano::confirmation_height_info confirmation_height_info; - ledger.store.confirmation_height_get (transaction, pending.account, confirmation_height_info); + ledger.store.confirmation_height.get (transaction, pending.account, confirmation_height_info); // Some blocks need to be cemented at least if (pending.top_height > confirmation_height_info.height) diff --git a/nano/node/confirmation_height_unbounded.cpp b/nano/node/confirmation_height_unbounded.cpp index 38b835ac02..63bd7bc963 100644 --- a/nano/node/confirmation_height_unbounded.cpp +++ b/nano/node/confirmation_height_unbounded.cpp @@ -95,7 +95,7 @@ void nano::confirmation_height_unbounded::process (std::shared_ptr else { nano::confirmation_height_info confirmation_height_info; - ledger.store.confirmation_height_get (read_transaction, account, confirmation_height_info); + ledger.store.confirmation_height.get (read_transaction, account, confirmation_height_info); confirmation_height = confirmation_height_info.height; // This block was added to the confirmation height processor but is already confirmed @@ -376,7 +376,7 @@ void nano::confirmation_height_unbounded::cement_blocks (nano::write_guard & sco { auto & pending = pending_writes.front (); nano::confirmation_height_info confirmation_height_info; - ledger.store.confirmation_height_get (transaction, pending.account, confirmation_height_info); + ledger.store.confirmation_height.get (transaction, pending.account, confirmation_height_info); auto confirmation_height = confirmation_height_info.height; if (pending.height > confirmation_height) { @@ -406,7 +406,7 @@ void nano::confirmation_height_unbounded::cement_blocks (nano::write_guard & sco debug_assert (pending.num_blocks_confirmed == pending.height - confirmation_height); confirmation_height = pending.height; ledger.cache.cemented_count += pending.num_blocks_confirmed; - ledger.store.confirmation_height_put (transaction, pending.account, { confirmation_height, pending.hash }); + ledger.store.confirmation_height.put (transaction, pending.account, { confirmation_height, pending.hash }); // Reverse it so that the callbacks start from the lowest newly cemented block and move upwards std::reverse (pending.block_callback_data.begin (), pending.block_callback_data.end ()); diff --git a/nano/node/election_scheduler.cpp b/nano/node/election_scheduler.cpp index 9047438740..398784e196 100644 --- a/nano/node/election_scheduler.cpp +++ b/nano/node/election_scheduler.cpp @@ -28,7 +28,7 @@ void nano::election_scheduler::activate (nano::account const & account_a, nano:: if (!node.store.account.get (transaction, account_a, account_info)) { nano::confirmation_height_info conf_info; - node.store.confirmation_height_get (transaction, account_a, conf_info); + node.store.confirmation_height.get (transaction, account_a, conf_info); if (conf_info.height < account_info.block_count) { debug_assert (conf_info.frontier != account_info.head); diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index e9e3706ce6..b11893db77 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -606,7 +606,7 @@ void nano::json_handler::account_info () auto transaction (node.store.tx_begin_read ()); auto info (account_info_impl (transaction, account)); nano::confirmation_height_info confirmation_height_info; - node.store.confirmation_height_get (transaction, account, confirmation_height_info); + node.store.confirmation_height.get (transaction, account, confirmation_height_info); if (!ec) { response_l.put ("frontier", info.head.to_string ()); @@ -4226,7 +4226,7 @@ void nano::json_handler::wallet_info () } nano::confirmation_height_info confirmation_info{}; - if (!node.store.confirmation_height_get (block_transaction, account, confirmation_info)) + if (!node.store.confirmation_height.get (block_transaction, account, confirmation_info)) { cemented_block_count += confirmation_info.height; } diff --git a/nano/node/lmdb/lmdb.cpp b/nano/node/lmdb/lmdb.cpp index aec2d79fb9..2c6829224f 100644 --- a/nano/node/lmdb/lmdb.cpp +++ b/nano/node/lmdb/lmdb.cpp @@ -194,7 +194,7 @@ void nano::mdb_store::open_databases (bool & error_a, nano::transaction const & error_a |= mdb_dbi_open (env.tx (transaction_a), "meta", flags, &meta) != 0; error_a |= mdb_dbi_open (env.tx (transaction_a), "peers", flags, &peers) != 0; error_a |= mdb_dbi_open (env.tx (transaction_a), "pruned", flags, &pruned) != 0; - error_a |= mdb_dbi_open (env.tx (transaction_a), "confirmation_height", flags, &confirmation_height) != 0; + error_a |= mdb_dbi_open (env.tx (transaction_a), "confirmation_height", flags, &confirmation_height_handle) != 0; error_a |= mdb_dbi_open (env.tx (transaction_a), "accounts", flags, &accounts_v0) != 0; accounts = accounts_v0; error_a |= mdb_dbi_open (env.tx (transaction_a), "pending", flags, &pending_v0) != 0; @@ -313,7 +313,7 @@ void nano::mdb_store::upgrade_v14_to_v15 (nano::write_transaction & transaction_ release_assert (rep_block != nullptr); account_infos.emplace_back (account, nano::account_info{ account_info_v14.head, rep_block->representative (), account_info_v14.open_block, account_info_v14.balance, account_info_v14.modified, account_info_v14.block_count, i_account.from_first_database ? nano::epoch::epoch_0 : nano::epoch::epoch_1 }); // Move confirmation height from account_info database to its own table - mdb_put (env.tx (transaction_a), confirmation_height, nano::mdb_val (account), nano::mdb_val (account_info_v14.confirmation_height), MDB_APPEND); + mdb_put (env.tx (transaction_a), confirmation_height_handle, nano::mdb_val (account), nano::mdb_val (account_info_v14.confirmation_height), MDB_APPEND); i_account.from_first_database ? ++account_counters.after_v0 : ++account_counters.after_v1; } @@ -434,7 +434,7 @@ void nano::mdb_store::upgrade_v16_to_v17 (nano::write_transaction const & transa // Set the confirmed frontier for each account in the confirmation height table std::vector> confirmation_height_infos; auto num = 0u; - for (nano::mdb_iterator i (transaction_a, confirmation_height), n (nano::mdb_iterator{}); i != n; ++i, ++account_info_i, ++num) + for (nano::mdb_iterator i (transaction_a, confirmation_height_handle), n (nano::mdb_iterator{}); i != n; ++i, ++account_info_i, ++num) { nano::account account (i->first); uint64_t confirmation_height (i->second); @@ -491,12 +491,12 @@ void nano::mdb_store::upgrade_v16_to_v17 (nano::write_transaction const & transa } // Clear it then append - auto status (mdb_drop (env.tx (transaction_a), confirmation_height, 0)); + auto status (mdb_drop (env.tx (transaction_a), confirmation_height_handle, 0)); release_assert_success (*this, status); for (auto const & confirmation_height_info_pair : confirmation_height_infos) { - mdb_put (env.tx (transaction_a), confirmation_height, nano::mdb_val (confirmation_height_info_pair.first), nano::mdb_val (confirmation_height_info_pair.second), MDB_APPEND); + mdb_put (env.tx (transaction_a), confirmation_height_handle, nano::mdb_val (confirmation_height_info_pair.first), nano::mdb_val (confirmation_height_info_pair.second), MDB_APPEND); } version_put (transaction_a, 17); @@ -876,7 +876,7 @@ MDB_dbi nano::mdb_store::table_to_dbi (tables table_a) const case tables::pruned: return pruned; case tables::confirmation_height: - return confirmation_height; + return confirmation_height_handle; case tables::final_votes: return final_vote_handle; default: @@ -913,7 +913,7 @@ bool nano::mdb_store::copy_db (boost::filesystem::path const & destination_file) void nano::mdb_store::rebuild_db (nano::write_transaction const & transaction_a) { // Tables with uint256_union key - std::vector tables = { accounts, blocks, pruned, confirmation_height }; + std::vector tables = { accounts, blocks, pruned, confirmation_height_handle }; for (auto const & table : tables) { MDB_dbi temp; diff --git a/nano/node/lmdb/lmdb.hpp b/nano/node/lmdb/lmdb.hpp index 0d778ed495..f05e6d65f5 100644 --- a/nano/node/lmdb/lmdb.hpp +++ b/nano/node/lmdb/lmdb.hpp @@ -184,7 +184,7 @@ class mdb_store : public block_store_partial * Confirmation height of an account, and the hash for the block at that height * nano::account -> uint64_t, nano::block_hash */ - MDB_dbi confirmation_height{ 0 }; + MDB_dbi confirmation_height_handle{ 0 }; /* * Contains block_sideband and block for all block types (legacy send/change/open/receive & state blocks) diff --git a/nano/node/node.cpp b/nano/node/node.cpp index dfac17d59c..d82683f674 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -977,7 +977,7 @@ bool nano::node::collect_ledger_pruning_targets (std::deque & uint64_t read_operations (0); bool finish_transaction (false); auto transaction (store.tx_begin_read ()); - for (auto i (store.confirmation_height_begin (transaction, last_account_a)), n (store.confirmation_height_end ()); i != n && !finish_transaction;) + for (auto i (store.confirmation_height.begin (transaction, last_account_a)), n (store.confirmation_height.end ()); i != n && !finish_transaction;) { ++read_operations; auto const & account (i->first); diff --git a/nano/node/request_aggregator.cpp b/nano/node/request_aggregator.cpp index 04e608c14d..882ea03070 100644 --- a/nano/node/request_aggregator.cpp +++ b/nano/node/request_aggregator.cpp @@ -216,7 +216,7 @@ std::pair>, std::vectoraccount ().is_zero () ? block->sideband ().account : block->account (), confirmation_height_info); + ledger.store.confirmation_height.get (transaction, block->account ().is_zero () ? block->sideband ().account : block->account (), confirmation_height_info); generate_final_vote = (confirmation_height_info.height >= block->sideband ().height); } } @@ -253,7 +253,7 @@ std::pair>, std::vectoraccount ().is_zero () ? block->sideband ().account : block->account (), confirmation_height_info); + ledger.store.confirmation_height.get (transaction, block->account ().is_zero () ? block->sideband ().account : block->account (), confirmation_height_info); generate_final_vote = (confirmation_height_info.height >= block->sideband ().height); } } diff --git a/nano/node/rocksdb/rocksdb.cpp b/nano/node/rocksdb/rocksdb.cpp index 0f77cd96fd..03f8b85b40 100644 --- a/nano/node/rocksdb/rocksdb.cpp +++ b/nano/node/rocksdb/rocksdb.cpp @@ -531,7 +531,7 @@ uint64_t nano::rocksdb_store::count (nano::transaction const & transaction_a, ta else if (table_a == tables::confirmation_height) { debug_assert (network_constants ().is_dev_network ()); - for (auto i (confirmation_height_begin (transaction_a)), n (confirmation_height_end ()); i != n; ++i) + for (auto i (confirmation_height.begin (transaction_a)), n (confirmation_height.end ()); i != n; ++i) { ++sum; } diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index f6f3fcd8e8..a761f002f7 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -117,9 +117,9 @@ void reset_confirmation_height (nano::block_store & store, nano::account const & { auto transaction = store.tx_begin_write (); nano::confirmation_height_info confirmation_height_info; - if (!store.confirmation_height_get (transaction, account, confirmation_height_info)) + if (!store.confirmation_height.get (transaction, account, confirmation_height_info)) { - store.confirmation_height_clear (transaction, account); + store.confirmation_height.clear (transaction, account); } } @@ -1274,7 +1274,7 @@ TEST (rpc, frontier) nano::block_hash hash; nano::random_pool::generate_block (hash.bytes.data (), hash.bytes.size ()); source[key.pub] = hash; - node->store.confirmation_height_put (transaction, key.pub, { 0, nano::block_hash (0) }); + node->store.confirmation_height.put (transaction, key.pub, { 0, nano::block_hash (0) }); node->store.account.put (transaction, key.pub, nano::account_info (hash, 0, 0, 0, 0, 0, nano::epoch::epoch_0)); } } @@ -1321,7 +1321,7 @@ TEST (rpc, frontier_limited) nano::block_hash hash; nano::random_pool::generate_block (hash.bytes.data (), hash.bytes.size ()); source[key.pub] = hash; - node->store.confirmation_height_put (transaction, key.pub, { 0, nano::block_hash (0) }); + node->store.confirmation_height.put (transaction, key.pub, { 0, nano::block_hash (0) }); node->store.account.put (transaction, key.pub, nano::account_info (hash, 0, 0, 0, 0, 0, nano::epoch::epoch_0)); } } @@ -1359,7 +1359,7 @@ TEST (rpc, frontier_startpoint) nano::block_hash hash; nano::random_pool::generate_block (hash.bytes.data (), hash.bytes.size ()); source[key.pub] = hash; - node->store.confirmation_height_put (transaction, key.pub, { 0, nano::block_hash (0) }); + node->store.confirmation_height.put (transaction, key.pub, { 0, nano::block_hash (0) }); node->store.account.put (transaction, key.pub, nano::account_info (hash, 0, 0, 0, 0, 0, nano::epoch::epoch_0)); } } @@ -2320,7 +2320,7 @@ TEST (rpc, pending) // Sorting with a smaller count than total should give absolute sorted amounts scoped_thread_name_io.reset (); - node->store.confirmation_height_put (node->store.tx_begin_write (), nano::dev_genesis_key.pub, { 2, block1->hash () }); + node->store.confirmation_height.put (node->store.tx_begin_write (), nano::dev_genesis_key.pub, { 2, block1->hash () }); auto block2 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key1.pub, 200)); auto block3 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key1.pub, 300)); auto block4 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key1.pub, 400)); @@ -4702,7 +4702,7 @@ TEST (rpc, account_info) auto time (nano::seconds_since_epoch ()); { auto transaction = node1.store.tx_begin_write (); - node1.store.confirmation_height_put (transaction, nano::dev_genesis_key.pub, { 1, genesis.hash () }); + node1.store.confirmation_height.put (transaction, nano::dev_genesis_key.pub, { 1, genesis.hash () }); } scoped_thread_name_io.renew (); diff --git a/nano/secure/CMakeLists.txt b/nano/secure/CMakeLists.txt index fc661cb73e..241a8929ef 100644 --- a/nano/secure/CMakeLists.txt +++ b/nano/secure/CMakeLists.txt @@ -58,6 +58,7 @@ add_library( store/account_store_partial.hpp store/pending_store_partial.hpp store/online_weight_partial.hpp + store/confirmation_height_store_partial.hpp store/final_vote_store_partial.hpp) target_link_libraries( diff --git a/nano/secure/blockstore.cpp b/nano/secure/blockstore.cpp index e8fa4206f9..92f3d4b42c 100644 --- a/nano/secure/blockstore.cpp +++ b/nano/secure/blockstore.cpp @@ -105,12 +105,12 @@ bool nano::write_transaction::contains (nano::tables table_a) const return impl->contains (table_a); } -nano::block_store::block_store (nano::frontier_store & frontier_store_a, nano::account_store & account_store_a, nano::pending_store & pending_store_a, nano::online_weight_store & online_weight_store_a, nano::final_vote_store & final_vote_store_a) : +nano::block_store::block_store (nano::frontier_store & frontier_store_a, nano::account_store & account_store_a, nano::pending_store & pending_store_a, nano::online_weight_store & online_weight_store_a, nano::confirmation_height_store & confirmation_height_store_a, nano::final_vote_store & final_vote_store_a) : frontier (frontier_store_a), account (account_store_a), pending (pending_store_a), online_weight (online_weight_store_a), + confirmation_height (confirmation_height_store_a), final_vote (final_vote_store_a) - { } diff --git a/nano/secure/blockstore.hpp b/nano/secure/blockstore.hpp index a7c3287b71..4dff63060d 100644 --- a/nano/secure/blockstore.hpp +++ b/nano/secure/blockstore.hpp @@ -685,6 +685,25 @@ class online_weight_store virtual void clear (nano::write_transaction const &) = 0; }; +/** + * Manages confirmation height storage and iteration + */ +class confirmation_height_store +{ +public: + virtual void put (nano::write_transaction const & transaction_a, nano::account const & account_a, nano::confirmation_height_info const & confirmation_height_info_a) = 0; + virtual bool get (nano::transaction const & transaction_a, nano::account const & account_a, nano::confirmation_height_info & confirmation_height_info_a) = 0; + virtual bool exists (nano::transaction const & transaction_a, nano::account const & account_a) const = 0; + virtual void del (nano::write_transaction const & transaction_a, nano::account const & account_a) = 0; + virtual uint64_t count (nano::transaction const & transaction_a) = 0; + virtual void clear (nano::write_transaction const &, nano::account const &) = 0; + virtual void clear (nano::write_transaction const &) = 0; + virtual nano::store_iterator begin (nano::transaction const & transaction_a, nano::account const & account_a) const = 0; + virtual nano::store_iterator begin (nano::transaction const & transaction_a) const = 0; + virtual nano::store_iterator end () const = 0; + virtual void for_each_par (std::function, nano::store_iterator)> const &) const = 0; +}; + /** * Manages final vote storage and iteration */ @@ -709,7 +728,7 @@ class final_vote_store class block_store { public: - explicit block_store (nano::frontier_store &, nano::account_store &, nano::pending_store &, nano::online_weight_store &, nano::final_vote_store &); + explicit block_store (nano::frontier_store &, nano::account_store &, nano::pending_store &, nano::online_weight_store &, nano::confirmation_height_store &, nano::final_vote_store &); virtual ~block_store () = default; virtual void initialize (nano::write_transaction const &, nano::genesis const &, nano::ledger_cache &) = 0; virtual void block_put (nano::write_transaction const &, nano::block_hash const &, nano::block const &) = 0; @@ -771,18 +790,8 @@ class block_store virtual nano::store_iterator peers_begin (nano::transaction const & transaction_a) const = 0; virtual nano::store_iterator peers_end () const = 0; - virtual void confirmation_height_put (nano::write_transaction const & transaction_a, nano::account const & account_a, nano::confirmation_height_info const & confirmation_height_info_a) = 0; - virtual bool confirmation_height_get (nano::transaction const & transaction_a, nano::account const & account_a, nano::confirmation_height_info & confirmation_height_info_a) = 0; - virtual bool confirmation_height_exists (nano::transaction const & transaction_a, nano::account const & account_a) const = 0; - virtual void confirmation_height_del (nano::write_transaction const & transaction_a, nano::account const & account_a) = 0; - virtual uint64_t confirmation_height_count (nano::transaction const & transaction_a) = 0; - virtual void confirmation_height_clear (nano::write_transaction const &, nano::account const &) = 0; - virtual void confirmation_height_clear (nano::write_transaction const &) = 0; - virtual nano::store_iterator confirmation_height_begin (nano::transaction const & transaction_a, nano::account const & account_a) const = 0; - virtual nano::store_iterator confirmation_height_begin (nano::transaction const & transaction_a) const = 0; - virtual nano::store_iterator confirmation_height_end () const = 0; - - virtual void confirmation_height_for_each_par (std::function, nano::store_iterator)> const &) const = 0; + confirmation_height_store & confirmation_height; + virtual void unchecked_for_each_par (std::function, nano::store_iterator)> const & action_a) const = 0; virtual void pruned_for_each_par (std::function, nano::store_iterator)> const & action_a) const = 0; virtual void blocks_for_each_par (std::function, nano::store_iterator)> const & action_a) const = 0; diff --git a/nano/secure/blockstore_partial.hpp b/nano/secure/blockstore_partial.hpp index d402dc4db8..4694469ef5 100644 --- a/nano/secure/blockstore_partial.hpp +++ b/nano/secure/blockstore_partial.hpp @@ -7,6 +7,7 @@ #include #include #include +#include #include #include #include @@ -44,6 +45,7 @@ class block_store_partial : public block_store nano::account_store_partial account_store_partial; nano::pending_store_partial pending_store_partial; nano::online_weight_store_partial online_weight_store_partial; + nano::confirmation_height_store_partial confirmation_height_store_partial; nano::final_vote_store_partial final_vote_store_partial; friend void release_assert_success (block_store_partial const & block_store, const int status); @@ -57,14 +59,16 @@ class block_store_partial : public block_store friend class nano::account_store_partial; friend class nano::pending_store_partial; friend class nano::online_weight_store_partial; + friend class nano::confirmation_height_store_partial; friend class nano::final_vote_store_partial; block_store_partial () : - block_store{ frontier_store_partial, account_store_partial, pending_store_partial, online_weight_store_partial, final_vote_store_partial }, + block_store{ frontier_store_partial, account_store_partial, pending_store_partial, online_weight_store_partial, confirmation_height_store_partial, final_vote_store_partial }, frontier_store_partial{ *this }, account_store_partial{ *this }, pending_store_partial{ *this }, online_weight_store_partial{ *this }, + confirmation_height_store_partial{ *this }, final_vote_store_partial{ *this } { } @@ -80,7 +84,7 @@ class block_store_partial : public block_store genesis_a.open->sideband_set (nano::block_sideband (network_params.ledger.genesis_account, 0, network_params.ledger.genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); block_put (transaction_a, hash_l, *genesis_a.open); ++ledger_cache_a.block_count; - confirmation_height_put (transaction_a, network_params.ledger.genesis_account, nano::confirmation_height_info{ 1, genesis_a.hash () }); + confirmation_height.put (transaction_a, network_params.ledger.genesis_account, nano::confirmation_height_info{ 1, genesis_a.hash () }); ++ledger_cache_a.cemented_count; ledger_cache_a.final_votes_confirmation_canary = (network_params.ledger.final_votes_canary_account == network_params.ledger.genesis_account && 1 >= network_params.ledger.final_votes_canary_height); account.put (transaction_a, network_params.ledger.genesis_account, { hash_l, network_params.ledger.genesis_account, genesis_a.open->hash (), std::numeric_limits::max (), nano::seconds_since_epoch (), 1, nano::epoch::epoch_0 }); @@ -251,11 +255,6 @@ class block_store_partial : public block_store return nano::store_iterator (nullptr); } - nano::store_iterator confirmation_height_end () const override - { - return nano::store_iterator (nullptr); - } - nano::store_iterator pruned_end () const override { return nano::store_iterator (nullptr); @@ -427,59 +426,6 @@ class block_store_partial : public block_store return existing != end ? existing->first : 0; } - uint64_t confirmation_height_count (nano::transaction const & transaction_a) override - { - return count (transaction_a, tables::confirmation_height); - } - - void confirmation_height_put (nano::write_transaction const & transaction_a, nano::account const & account_a, nano::confirmation_height_info const & confirmation_height_info_a) override - { - nano::db_val confirmation_height_info (confirmation_height_info_a); - auto status = put (transaction_a, tables::confirmation_height, account_a, confirmation_height_info); - release_assert_success (*this, status); - } - - bool confirmation_height_get (nano::transaction const & transaction_a, nano::account const & account_a, nano::confirmation_height_info & confirmation_height_info_a) override - { - nano::db_val value; - auto status = get (transaction_a, tables::confirmation_height, nano::db_val (account_a), value); - release_assert (success (status) || not_found (status)); - bool result (true); - if (success (status)) - { - nano::bufferstream stream (reinterpret_cast (value.data ()), value.size ()); - result = confirmation_height_info_a.deserialize (stream); - } - if (result) - { - confirmation_height_info_a.height = 0; - confirmation_height_info_a.frontier = 0; - } - - return result; - } - - void confirmation_height_del (nano::write_transaction const & transaction_a, nano::account const & account_a) override - { - auto status (del (transaction_a, tables::confirmation_height, nano::db_val (account_a))); - release_assert_success (*this, status); - } - - bool confirmation_height_exists (nano::transaction const & transaction_a, nano::account const & account_a) const override - { - return exists (transaction_a, tables::confirmation_height, nano::db_val (account_a)); - } - - void confirmation_height_clear (nano::write_transaction const & transaction_a, nano::account const & account_a) override - { - confirmation_height_del (transaction_a, account_a); - } - - void confirmation_height_clear (nano::write_transaction const & transaction_a) override - { - drop (transaction_a, nano::tables::confirmation_height); - } - nano::store_iterator blocks_begin (nano::transaction const & transaction_a) const override { return make_iterator (transaction_a, tables::blocks); @@ -505,16 +451,6 @@ class block_store_partial : public block_store return make_iterator (transaction_a, tables::peers); } - nano::store_iterator confirmation_height_begin (nano::transaction const & transaction_a, nano::account const & account_a) const override - { - return make_iterator (transaction_a, tables::confirmation_height, nano::db_val (account_a)); - } - - nano::store_iterator confirmation_height_begin (nano::transaction const & transaction_a) const override - { - return make_iterator (transaction_a, tables::confirmation_height); - } - nano::store_iterator pruned_begin (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const override { return make_iterator (transaction_a, tables::pruned, nano::db_val (hash_a)); @@ -530,15 +466,6 @@ class block_store_partial : public block_store return count (transaction_a, tables::unchecked); } - void confirmation_height_for_each_par (std::function, nano::store_iterator)> const & action_a) const override - { - parallel_traversal ( - [&action_a, this] (nano::uint256_t const & start, nano::uint256_t const & end, bool const is_last) { - auto transaction (this->tx_begin_read ()); - action_a (transaction, this->confirmation_height_begin (transaction, start), !is_last ? this->confirmation_height_begin (transaction, end) : this->confirmation_height_end ()); - }); - } - void unchecked_for_each_par (std::function, nano::store_iterator)> const & action_a) const override { parallel_traversal ( diff --git a/nano/secure/ledger.cpp b/nano/secure/ledger.cpp index 82e780a58a..3975a04fa2 100644 --- a/nano/secure/ledger.cpp +++ b/nano/secure/ledger.cpp @@ -771,7 +771,7 @@ void nano::ledger::initialize (nano::generate_cache const & generate_cache_a) if (generate_cache_a.cemented_count) { - store.confirmation_height_for_each_par ( + store.confirmation_height.for_each_par ( [this] (nano::read_transaction const & /*unused*/, nano::store_iterator i, nano::store_iterator n) { uint64_t cemented_count_l (0); for (; i != n; ++i) @@ -787,7 +787,7 @@ void nano::ledger::initialize (nano::generate_cache const & generate_cache_a) // Final votes requirement for confirmation canary block nano::confirmation_height_info confirmation_height_info; - if (!store.confirmation_height_get (transaction, network_params.ledger.final_votes_canary_account, confirmation_height_info)) + if (!store.confirmation_height.get (transaction, network_params.ledger.final_votes_canary_account, confirmation_height_info)) { cache.final_votes_confirmation_canary = (confirmation_height_info.height >= network_params.ledger.final_votes_canary_height); } @@ -821,7 +821,7 @@ nano::uint128_t nano::ledger::account_balance (nano::transaction const & transac if (only_confirmed_a) { nano::confirmation_height_info info; - if (!store.confirmation_height_get (transaction_a, account_a, info)) + if (!store.confirmation_height.get (transaction_a, account_a, info)) { result = balance (transaction_a, info.frontier); } @@ -1044,7 +1044,7 @@ bool nano::ledger::rollback (nano::write_transaction const & transaction_a, nano while (!error && store.block_exists (transaction_a, block_a)) { nano::confirmation_height_info confirmation_height_info; - store.confirmation_height_get (transaction_a, account_l, confirmation_height_info); + store.confirmation_height.get (transaction_a, account_l, confirmation_height_info); if (block_account_height > confirmation_height_info.height) { auto latest_error = store.account.get (transaction_a, account_l, account_info); @@ -1262,7 +1262,7 @@ void nano::ledger::update_account (nano::write_transaction const & transaction_a } else { - debug_assert (!store.confirmation_height_exists (transaction_a, account_a)); + debug_assert (!store.confirmation_height.exists (transaction_a, account_a)); store.account.del (transaction_a, account_a); debug_assert (cache.account_count > 0); --cache.account_count; @@ -1331,7 +1331,7 @@ bool nano::ledger::block_confirmed (nano::transaction const & transaction_a, nan if (block) { nano::confirmation_height_info confirmation_height_info; - store.confirmation_height_get (transaction_a, block->account ().is_zero () ? block->sideband ().account : block->account (), confirmation_height_info); + store.confirmation_height.get (transaction_a, block->account ().is_zero () ? block->sideband ().account : block->account (), confirmation_height_info); auto confirmed (confirmation_height_info.height >= block->sideband ().height); return confirmed; } @@ -1384,7 +1384,7 @@ std::multimap> nano::ledger::unc auto const & account_info (i->second); nano::confirmation_height_info conf_height_info; - this->store.confirmation_height_get (transaction_a, account, conf_height_info); + this->store.confirmation_height.get (transaction_a, account, conf_height_info); if (account_info.block_count != conf_height_info.height) { @@ -1454,12 +1454,12 @@ bool nano::ledger::migrate_lmdb_to_rocksdb (boost::filesystem::path const & data } }); - store.confirmation_height_for_each_par ( + store.confirmation_height.for_each_par ( [&rocksdb_store] (nano::read_transaction const & /*unused*/, auto i, auto n) { for (; i != n; ++i) { auto rocksdb_transaction (rocksdb_store->tx_begin_write ({}, { nano::tables::confirmation_height })); - rocksdb_store->confirmation_height_put (rocksdb_transaction, i->first, i->second); + rocksdb_store->confirmation_height.put (rocksdb_transaction, i->first, i->second); } }); @@ -1532,9 +1532,9 @@ bool nano::ledger::migrate_lmdb_to_rocksdb (boost::filesystem::path const & data // If confirmation height exists in the lmdb ledger for this account it should exist in the rocksdb ledger nano::confirmation_height_info confirmation_height_info; - if (!store.confirmation_height_get (lmdb_transaction, account, confirmation_height_info)) + if (!store.confirmation_height.get (lmdb_transaction, account, confirmation_height_info)) { - error |= rocksdb_store->confirmation_height_get (rocksdb_transaction, account, confirmation_height_info); + error |= rocksdb_store->confirmation_height.get (rocksdb_transaction, account, confirmation_height_info); } } else diff --git a/nano/secure/store/confirmation_height_store_partial.hpp b/nano/secure/store/confirmation_height_store_partial.hpp new file mode 100644 index 0000000000..d9df74065b --- /dev/null +++ b/nano/secure/store/confirmation_height_store_partial.hpp @@ -0,0 +1,109 @@ +#pragma once + +#include + +namespace +{ +template +void parallel_traversal (std::function const & action); +} + +namespace nano +{ +template +class block_store_partial; + +template +void release_assert_success (block_store_partial const & block_store, const int status); + +template +class confirmation_height_store_partial : public confirmation_height_store +{ +private: + nano::block_store_partial & block_store; + + friend void release_assert_success (block_store_partial const & block_store, const int status); + +public: + explicit confirmation_height_store_partial (nano::block_store_partial & block_store_a) : + block_store (block_store_a){}; + + void put (nano::write_transaction const & transaction_a, nano::account const & account_a, nano::confirmation_height_info const & confirmation_height_info_a) override + { + nano::db_val confirmation_height_info (confirmation_height_info_a); + auto status = block_store.put (transaction_a, tables::confirmation_height, account_a, confirmation_height_info); + release_assert_success (block_store, status); + } + + bool get (nano::transaction const & transaction_a, nano::account const & account_a, nano::confirmation_height_info & confirmation_height_info_a) override + { + nano::db_val value; + auto status = block_store.get (transaction_a, tables::confirmation_height, nano::db_val (account_a), value); + release_assert (block_store.success (status) || block_store.not_found (status)); + bool result (true); + if (block_store.success (status)) + { + nano::bufferstream stream (reinterpret_cast (value.data ()), value.size ()); + result = confirmation_height_info_a.deserialize (stream); + } + if (result) + { + confirmation_height_info_a.height = 0; + confirmation_height_info_a.frontier = 0; + } + + return result; + } + + bool exists (nano::transaction const & transaction_a, nano::account const & account_a) const override + { + return block_store.exists (transaction_a, tables::confirmation_height, nano::db_val (account_a)); + } + + void del (nano::write_transaction const & transaction_a, nano::account const & account_a) override + { + auto status (block_store.del (transaction_a, tables::confirmation_height, nano::db_val (account_a))); + release_assert_success (block_store, status); + } + + uint64_t count (nano::transaction const & transaction_a) override + { + return block_store.count (transaction_a, tables::confirmation_height); + } + + void clear (nano::write_transaction const & transaction_a, nano::account const & account_a) override + { + del (transaction_a, account_a); + } + + void clear (nano::write_transaction const & transaction_a) override + { + block_store.drop (transaction_a, nano::tables::confirmation_height); + } + + nano::store_iterator begin (nano::transaction const & transaction_a, nano::account const & account_a) const override + { + return block_store.template make_iterator (transaction_a, tables::confirmation_height, nano::db_val (account_a)); + } + + nano::store_iterator begin (nano::transaction const & transaction_a) const override + { + return block_store.template make_iterator (transaction_a, tables::confirmation_height); + } + + nano::store_iterator end () const override + { + return nano::store_iterator (nullptr); + } + + void for_each_par (std::function, nano::store_iterator)> const & action_a) const override + { + parallel_traversal ( + [&action_a, this] (nano::uint256_t const & start, nano::uint256_t const & end, bool const is_last) { + auto transaction (this->block_store.tx_begin_read ()); + action_a (transaction, this->begin (transaction, start), !is_last ? this->begin (transaction, end) : this->end ()); + }); + } +}; + +} diff --git a/nano/slow_test/node.cpp b/nano/slow_test/node.cpp index 31008e5f7b..468d8ca29b 100644 --- a/nano/slow_test/node.cpp +++ b/nano/slow_test/node.cpp @@ -168,7 +168,7 @@ TEST (store, load) { nano::account account; nano::random_pool::generate_block (account.bytes.data (), account.bytes.size ()); - system.nodes[0]->store.confirmation_height_put (transaction, account, { 0, nano::block_hash (0) }); + system.nodes[0]->store.confirmation_height.put (transaction, account, { 0, nano::block_hash (0) }); system.nodes[0]->store.account.put (transaction, account, nano::account_info ()); } } @@ -550,13 +550,13 @@ TEST (confirmation_height, many_accounts_single_confirmation) auto & account_info = i->second; auto count = (account != last_keypair.pub) ? 2 : 1; nano::confirmation_height_info confirmation_height_info; - ASSERT_FALSE (node->store.confirmation_height_get (transaction, account, confirmation_height_info)); + ASSERT_FALSE (node->store.confirmation_height.get (transaction, account, confirmation_height_info)); ASSERT_EQ (count, confirmation_height_info.height); ASSERT_EQ (count, account_info.block_count); } size_t cemented_count = 0; - for (auto i (node->ledger.store.confirmation_height_begin (transaction)), n (node->ledger.store.confirmation_height_end ()); i != n; ++i) + for (auto i (node->ledger.store.confirmation_height.begin (transaction)), n (node->ledger.store.confirmation_height.end ()); i != n; ++i) { cemented_count += i->second.height; } @@ -619,7 +619,7 @@ TEST (confirmation_height, many_accounts_many_confirmations) auto transaction = node->store.tx_begin_read (); size_t cemented_count = 0; - for (auto i (node->ledger.store.confirmation_height_begin (transaction)), n (node->ledger.store.confirmation_height_end ()); i != n; ++i) + for (auto i (node->ledger.store.confirmation_height.begin (transaction)), n (node->ledger.store.confirmation_height.end ()); i != n; ++i) { cemented_count += i->second.height; } @@ -701,17 +701,17 @@ TEST (confirmation_height, long_chains) nano::account_info account_info; ASSERT_FALSE (node->store.account.get (transaction, nano::dev_genesis_key.pub, account_info)); nano::confirmation_height_info confirmation_height_info; - ASSERT_FALSE (node->store.confirmation_height_get (transaction, nano::dev_genesis_key.pub, confirmation_height_info)); + ASSERT_FALSE (node->store.confirmation_height.get (transaction, nano::dev_genesis_key.pub, confirmation_height_info)); ASSERT_EQ (num_blocks + 2, confirmation_height_info.height); ASSERT_EQ (num_blocks + 3, account_info.block_count); // Includes the unpocketed send ASSERT_FALSE (node->store.account.get (transaction, key1.pub, account_info)); - ASSERT_FALSE (node->store.confirmation_height_get (transaction, key1.pub, confirmation_height_info)); + ASSERT_FALSE (node->store.confirmation_height.get (transaction, key1.pub, confirmation_height_info)); ASSERT_EQ (num_blocks + 1, confirmation_height_info.height); ASSERT_EQ (num_blocks + 1, account_info.block_count); size_t cemented_count = 0; - for (auto i (node->ledger.store.confirmation_height_begin (transaction)), n (node->ledger.store.confirmation_height_end ()); i != n; ++i) + for (auto i (node->ledger.store.confirmation_height.begin (transaction)), n (node->ledger.store.confirmation_height.end ()); i != n; ++i) { cemented_count += i->second.height; } @@ -931,7 +931,7 @@ TEST (confirmation_height, many_accounts_send_receive_self) auto transaction = node->store.tx_begin_read (); size_t cemented_count = 0; - for (auto i (node->ledger.store.confirmation_height_begin (transaction)), n (node->ledger.store.confirmation_height_end ()); i != n; ++i) + for (auto i (node->ledger.store.confirmation_height.begin (transaction)), n (node->ledger.store.confirmation_height.end ()); i != n; ++i) { cemented_count += i->second.height; } @@ -1061,7 +1061,7 @@ TEST (confirmation_height, many_accounts_send_receive_self_no_elections) auto transaction = store->tx_begin_read (); size_t cemented_count = 0; - for (auto i (store->confirmation_height_begin (transaction)), n (store->confirmation_height_end ()); i != n; ++i) + for (auto i (store->confirmation_height.begin (transaction)), n (store->confirmation_height.end ()); i != n; ++i) { cemented_count += i->second.height; } @@ -1085,7 +1085,7 @@ TEST (confirmation_height, prioritize_frontiers_overwrite) // Clear confirmation height so that the genesis account has the same amount of uncemented blocks as the other frontiers { auto transaction = node->store.tx_begin_write (); - node->store.confirmation_height_clear (transaction); + node->store.confirmation_height.clear (transaction); } { From cb4906c2bed9b62f21a6978dd853f9a00a81ca70 Mon Sep 17 00:00:00 2001 From: Thiago Silva <82097354+thsfs@users.noreply.github.com> Date: Wed, 2 Jun 2021 17:17:32 -0300 Subject: [PATCH 035/346] Moves out pruned methods from block store class (#3317) --- nano/core_test/block_store.cpp | 40 ++++----- nano/core_test/bootstrap.cpp | 4 +- nano/core_test/ledger.cpp | 42 ++++----- nano/core_test/node.cpp | 2 +- nano/nano_node/entry.cpp | 10 +-- nano/node/active_transactions.cpp | 2 +- nano/node/confirmation_height_bounded.cpp | 2 +- nano/node/confirmation_height_unbounded.cpp | 2 +- nano/node/json_handler.cpp | 2 +- nano/node/lmdb/lmdb.cpp | 8 +- nano/node/lmdb/lmdb.hpp | 2 +- nano/node/node.cpp | 2 +- nano/secure/CMakeLists.txt | 1 + nano/secure/blockstore.cpp | 3 +- nano/secure/blockstore.hpp | 31 ++++--- nano/secure/blockstore_partial.hpp | 71 ++------------- nano/secure/ledger.cpp | 18 ++-- nano/secure/store/pruned_store_partial.hpp | 97 +++++++++++++++++++++ nano/slow_test/node.cpp | 8 +- 19 files changed, 197 insertions(+), 150 deletions(-) create mode 100644 nano/secure/store/pruned_store_partial.hpp diff --git a/nano/core_test/block_store.cpp b/nano/core_test/block_store.cpp index 468e2340e4..8d6804a113 100644 --- a/nano/core_test/block_store.cpp +++ b/nano/core_test/block_store.cpp @@ -916,10 +916,10 @@ TEST (block_store, pruned_random) nano::ledger_cache ledger_cache; auto transaction (store->tx_begin_write ()); store->initialize (transaction, genesis, ledger_cache); - store->pruned_put (transaction, hash1); + store->pruned.put (transaction, hash1); } auto transaction (store->tx_begin_read ()); - auto random_hash (store->pruned_random (transaction)); + auto random_hash (store->pruned.random (transaction)); ASSERT_EQ (hash1, random_hash); } @@ -1212,16 +1212,16 @@ TEST (block_store, pruned_blocks) auto transaction (store->tx_begin_write ()); // Confirm that the store is empty - ASSERT_FALSE (store->pruned_exists (transaction, hash1)); - ASSERT_EQ (store->pruned_count (transaction), 0); + ASSERT_FALSE (store->pruned.exists (transaction, hash1)); + ASSERT_EQ (store->pruned.count (transaction), 0); // Add one - store->pruned_put (transaction, hash1); - ASSERT_TRUE (store->pruned_exists (transaction, hash1)); + store->pruned.put (transaction, hash1); + ASSERT_TRUE (store->pruned.exists (transaction, hash1)); } // Confirm that it can be found - ASSERT_EQ (store->pruned_count (store->tx_begin_read ()), 1); + ASSERT_EQ (store->pruned.count (store->tx_begin_read ()), 1); // Add another one and check that it (and the existing one) can be found nano::open_block block2 (1, 2, key1.pub, key1.prv, key1.pub, 0); @@ -1229,37 +1229,37 @@ TEST (block_store, pruned_blocks) auto hash2 (block2.hash ()); { auto transaction (store->tx_begin_write ()); - store->pruned_put (transaction, hash2); - ASSERT_TRUE (store->pruned_exists (transaction, hash2)); // Check new pruned hash is here + store->pruned.put (transaction, hash2); + ASSERT_TRUE (store->pruned.exists (transaction, hash2)); // Check new pruned hash is here ASSERT_FALSE (store->block_exists (transaction, hash2)); - ASSERT_TRUE (store->pruned_exists (transaction, hash1)); // Check first pruned hash is still here + ASSERT_TRUE (store->pruned.exists (transaction, hash1)); // Check first pruned hash is still here ASSERT_FALSE (store->block_exists (transaction, hash1)); } - ASSERT_EQ (store->pruned_count (store->tx_begin_read ()), 2); + ASSERT_EQ (store->pruned.count (store->tx_begin_read ()), 2); // Delete the first one { auto transaction (store->tx_begin_write ()); - store->pruned_del (transaction, hash2); - ASSERT_FALSE (store->pruned_exists (transaction, hash2)); // Confirm it no longer exists + store->pruned.del (transaction, hash2); + ASSERT_FALSE (store->pruned.exists (transaction, hash2)); // Confirm it no longer exists ASSERT_FALSE (store->block_exists (transaction, hash2)); // true for block_exists store->block_put (transaction, hash2, block2); // Add corresponding block ASSERT_TRUE (store->block_exists (transaction, hash2)); - ASSERT_TRUE (store->pruned_exists (transaction, hash1)); // Check first pruned hash is still here + ASSERT_TRUE (store->pruned.exists (transaction, hash1)); // Check first pruned hash is still here ASSERT_FALSE (store->block_exists (transaction, hash1)); } - ASSERT_EQ (store->pruned_count (store->tx_begin_read ()), 1); + ASSERT_EQ (store->pruned.count (store->tx_begin_read ()), 1); // Delete original one { auto transaction (store->tx_begin_write ()); - store->pruned_del (transaction, hash1); - ASSERT_FALSE (store->pruned_exists (transaction, hash1)); + store->pruned.del (transaction, hash1); + ASSERT_FALSE (store->pruned.exists (transaction, hash1)); } - ASSERT_EQ (store->pruned_count (store->tx_begin_read ()), 0); + ASSERT_EQ (store->pruned.count (store->tx_begin_read ()), 0); } TEST (mdb_block_store, upgrade_v14_v15) @@ -1799,13 +1799,13 @@ TEST (mdb_block_store, upgrade_v19_v20) auto transaction (store.tx_begin_write ()); store.initialize (transaction, genesis, ledger.cache); // Delete pruned table - ASSERT_FALSE (mdb_drop (store.env.tx (transaction), store.pruned, 1)); + ASSERT_FALSE (mdb_drop (store.env.tx (transaction), store.pruned_handle, 1)); store.version_put (transaction, 19); } // Upgrading should create the table nano::mdb_store store (logger, path); ASSERT_FALSE (store.init_error ()); - ASSERT_NE (store.pruned, 0); + ASSERT_NE (store.pruned_handle, 0); // Version should be correct auto transaction (store.tx_begin_read ()); diff --git a/nano/core_test/bootstrap.cpp b/nano/core_test/bootstrap.cpp index a7401cba8d..6433dad4d4 100644 --- a/nano/core_test/bootstrap.cpp +++ b/nano/core_test/bootstrap.cpp @@ -443,9 +443,9 @@ TEST (bootstrap_processor, push_diamond_pruning) ASSERT_EQ (1, node1->ledger.pruning_action (transaction, open->hash (), 1)); ASSERT_TRUE (node1->store.block_exists (transaction, latest)); ASSERT_FALSE (node1->store.block_exists (transaction, send1->hash ())); - ASSERT_TRUE (node1->store.pruned_exists (transaction, send1->hash ())); + ASSERT_TRUE (node1->store.pruned.exists (transaction, send1->hash ())); ASSERT_FALSE (node1->store.block_exists (transaction, open->hash ())); - ASSERT_TRUE (node1->store.pruned_exists (transaction, open->hash ())); + ASSERT_TRUE (node1->store.pruned.exists (transaction, open->hash ())); ASSERT_TRUE (node1->store.block_exists (transaction, send2->hash ())); ASSERT_TRUE (node1->store.block_exists (transaction, receive->hash ())); ASSERT_EQ (2, node1->ledger.cache.pruned_count); diff --git a/nano/core_test/ledger.cpp b/nano/core_test/ledger.cpp index 5692b66f3d..b8e4e15a4a 100644 --- a/nano/core_test/ledger.cpp +++ b/nano/core_test/ledger.cpp @@ -3433,7 +3433,7 @@ TEST (ledger, cache) { auto transaction (store->tx_begin_write ()); - ledger.store.pruned_put (transaction, open->hash ()); + ledger.store.pruned.put (transaction, open->hash ()); ++ledger.cache.pruned_count; } ++pruned_count; @@ -3474,7 +3474,7 @@ TEST (ledger, pruning_action) ledger.pruning = false; ASSERT_TRUE (ledger.block_or_pruned_exists (transaction, send1.hash ())); ledger.pruning = true; - ASSERT_TRUE (store->pruned_exists (transaction, send1.hash ())); + ASSERT_TRUE (store->pruned.exists (transaction, send1.hash ())); ASSERT_TRUE (store->block_exists (transaction, genesis.hash ())); ASSERT_TRUE (store->block_exists (transaction, send2.hash ())); // Receiving pruned block @@ -3492,10 +3492,10 @@ TEST (ledger, pruning_action) // Middle block pruning ASSERT_TRUE (store->block_exists (transaction, send2.hash ())); ASSERT_EQ (1, ledger.pruning_action (transaction, send2.hash (), 1)); - ASSERT_TRUE (store->pruned_exists (transaction, send2.hash ())); + ASSERT_TRUE (store->pruned.exists (transaction, send2.hash ())); ASSERT_FALSE (store->block_exists (transaction, send2.hash ())); ASSERT_EQ (store->account.count (transaction), ledger.cache.account_count); - ASSERT_EQ (store->pruned_count (transaction), ledger.cache.pruned_count); + ASSERT_EQ (store->pruned.count (transaction), ledger.cache.pruned_count); ASSERT_EQ (store->block_count (transaction), ledger.cache.block_count - ledger.cache.pruned_count); } @@ -3523,16 +3523,16 @@ TEST (ledger, pruning_large_chain) ASSERT_TRUE (store->block_exists (transaction, receive.hash ())); last_hash = receive.hash (); } - ASSERT_EQ (0, store->pruned_count (transaction)); + ASSERT_EQ (0, store->pruned.count (transaction)); ASSERT_EQ (send_receive_pairs * 2 + 1, store->block_count (transaction)); // Pruning action ASSERT_EQ (send_receive_pairs * 2, ledger.pruning_action (transaction, last_hash, 5)); - ASSERT_TRUE (store->pruned_exists (transaction, last_hash)); + ASSERT_TRUE (store->pruned.exists (transaction, last_hash)); ASSERT_TRUE (store->block_exists (transaction, genesis.hash ())); ASSERT_FALSE (store->block_exists (transaction, last_hash)); - ASSERT_EQ (store->pruned_count (transaction), ledger.cache.pruned_count); + ASSERT_EQ (store->pruned.count (transaction), ledger.cache.pruned_count); ASSERT_EQ (store->block_count (transaction), ledger.cache.block_count - ledger.cache.pruned_count); - ASSERT_EQ (send_receive_pairs * 2, store->pruned_count (transaction)); + ASSERT_EQ (send_receive_pairs * 2, store->pruned.count (transaction)); ASSERT_EQ (1, store->block_count (transaction)); // Genesis } @@ -3559,9 +3559,9 @@ TEST (ledger, pruning_source_rollback) // Pruning action ASSERT_EQ (2, ledger.pruning_action (transaction, send1.hash (), 1)); ASSERT_FALSE (store->block_exists (transaction, send1.hash ())); - ASSERT_TRUE (store->pruned_exists (transaction, send1.hash ())); + ASSERT_TRUE (store->pruned.exists (transaction, send1.hash ())); ASSERT_FALSE (store->block_exists (transaction, epoch1.hash ())); - ASSERT_TRUE (store->pruned_exists (transaction, epoch1.hash ())); + ASSERT_TRUE (store->pruned.exists (transaction, epoch1.hash ())); ASSERT_TRUE (store->block_exists (transaction, genesis.hash ())); nano::pending_info info; ASSERT_FALSE (store->pending.get (transaction, nano::pending_key (nano::genesis_account, send1.hash ()), info)); @@ -3615,9 +3615,9 @@ TEST (ledger, pruning_source_rollback_legacy) // Pruning action ASSERT_EQ (2, ledger.pruning_action (transaction, send2.hash (), 1)); ASSERT_FALSE (store->block_exists (transaction, send2.hash ())); - ASSERT_TRUE (store->pruned_exists (transaction, send2.hash ())); + ASSERT_TRUE (store->pruned.exists (transaction, send2.hash ())); ASSERT_FALSE (store->block_exists (transaction, send1.hash ())); - ASSERT_TRUE (store->pruned_exists (transaction, send1.hash ())); + ASSERT_TRUE (store->pruned.exists (transaction, send1.hash ())); ASSERT_TRUE (store->block_exists (transaction, genesis.hash ())); nano::pending_info info1; ASSERT_FALSE (store->pending.get (transaction, nano::pending_key (nano::genesis_account, send1.hash ()), info1)); @@ -3686,7 +3686,7 @@ TEST (ledger, pruning_process_error) // Pruning action for latest block (not valid action) ASSERT_EQ (1, ledger.pruning_action (transaction, send1.hash (), 1)); ASSERT_FALSE (store->block_exists (transaction, send1.hash ())); - ASSERT_TRUE (store->pruned_exists (transaction, send1.hash ())); + ASSERT_TRUE (store->pruned.exists (transaction, send1.hash ())); // Attempt to process pruned block again ASSERT_EQ (nano::process_result::old, ledger.process (transaction, send1).code); // Attept to process new block after pruned @@ -3727,18 +3727,18 @@ TEST (ledger, pruning_legacy_blocks) ASSERT_EQ (1, ledger.pruning_action (transaction, open1.hash (), 1)); ASSERT_TRUE (store->block_exists (transaction, genesis.hash ())); ASSERT_FALSE (store->block_exists (transaction, send1.hash ())); - ASSERT_TRUE (store->pruned_exists (transaction, send1.hash ())); + ASSERT_TRUE (store->pruned.exists (transaction, send1.hash ())); ASSERT_FALSE (store->block_exists (transaction, receive1.hash ())); - ASSERT_TRUE (store->pruned_exists (transaction, receive1.hash ())); + ASSERT_TRUE (store->pruned.exists (transaction, receive1.hash ())); ASSERT_FALSE (store->block_exists (transaction, change1.hash ())); - ASSERT_TRUE (store->pruned_exists (transaction, change1.hash ())); + ASSERT_TRUE (store->pruned.exists (transaction, change1.hash ())); ASSERT_TRUE (store->block_exists (transaction, send2.hash ())); ASSERT_FALSE (store->block_exists (transaction, open1.hash ())); - ASSERT_TRUE (store->pruned_exists (transaction, open1.hash ())); + ASSERT_TRUE (store->pruned.exists (transaction, open1.hash ())); ASSERT_TRUE (store->block_exists (transaction, send3.hash ())); ASSERT_EQ (4, ledger.cache.pruned_count); ASSERT_EQ (7, ledger.cache.block_count); - ASSERT_EQ (store->pruned_count (transaction), ledger.cache.pruned_count); + ASSERT_EQ (store->pruned.count (transaction), ledger.cache.pruned_count); ASSERT_EQ (store->block_count (transaction), ledger.cache.block_count - ledger.cache.pruned_count); } @@ -3764,7 +3764,7 @@ TEST (ledger, pruning_safe_functions) ASSERT_EQ (1, ledger.pruning_action (transaction, send1.hash (), 1)); ASSERT_FALSE (store->block_exists (transaction, send1.hash ())); ASSERT_TRUE (ledger.block_or_pruned_exists (transaction, send1.hash ())); // true for pruned - ASSERT_TRUE (store->pruned_exists (transaction, send1.hash ())); + ASSERT_TRUE (store->pruned.exists (transaction, send1.hash ())); ASSERT_TRUE (store->block_exists (transaction, genesis.hash ())); ASSERT_TRUE (store->block_exists (transaction, send2.hash ())); // Safe ledger actions @@ -3806,7 +3806,7 @@ TEST (ledger, hash_root_random) // Pruning action ASSERT_EQ (1, ledger.pruning_action (transaction, send1.hash (), 1)); ASSERT_FALSE (store->block_exists (transaction, send1.hash ())); - ASSERT_TRUE (store->pruned_exists (transaction, send1.hash ())); + ASSERT_TRUE (store->pruned.exists (transaction, send1.hash ())); ASSERT_TRUE (store->block_exists (transaction, genesis.hash ())); ASSERT_TRUE (store->block_exists (transaction, send2.hash ())); // Test random block including pruned @@ -3867,7 +3867,7 @@ TEST (ledger, migrate_lmdb_to_rocksdb) store.peer_put (transaction, endpoint_key); store.pending.put (transaction, nano::pending_key (nano::genesis_account, send->hash ()), nano::pending_info (nano::genesis_account, 100, nano::epoch::epoch_0)); - store.pruned_put (transaction, send->hash ()); + store.pruned.put (transaction, send->hash ()); store.unchecked_put (transaction, nano::genesis_hash, send); store.version_put (transaction, version); send->sideband_set ({}); diff --git a/nano/core_test/node.cpp b/nano/core_test/node.cpp index e1b0e9d714..40f251c0bc 100644 --- a/nano/core_test/node.cpp +++ b/nano/core_test/node.cpp @@ -4742,7 +4742,7 @@ TEST (node, pruning_automatic) ASSERT_TIMELY (2s, node1.active.empty () && node1.block_confirmed (send2->hash ())); // Check pruning result ASSERT_TIMELY (3s, node1.ledger.cache.pruned_count == 1); - ASSERT_TIMELY (2s, node1.store.pruned_count (node1.store.tx_begin_read ()) == 1); // Transaction commit + ASSERT_TIMELY (2s, node1.store.pruned.count (node1.store.tx_begin_read ()) == 1); // Transaction commit ASSERT_EQ (1, node1.ledger.cache.pruned_count); ASSERT_EQ (3, node1.ledger.cache.block_count); ASSERT_TRUE (node1.ledger.block_or_pruned_exists (genesis.hash ())); diff --git a/nano/nano_node/entry.cpp b/nano/nano_node/entry.cpp index eba60533f3..70e003659a 100644 --- a/nano/nano_node/entry.cpp +++ b/nano/nano_node/entry.cpp @@ -1437,7 +1437,7 @@ int main (int argc, char * const * argv) else { pruned_block = true; - if (!node->store.pruned_exists (transaction, block->previous ())) + if (!node->store.pruned.exists (transaction, block->previous ())) { print_error_message (boost::str (boost::format ("Pruned previous block does not exist %1%\n") % block->previous ().to_string ())); } @@ -1554,7 +1554,7 @@ int main (int argc, char * const * argv) } } } - else if (!node->store.pruned_exists (transaction, block->previous ())) + else if (!node->store.pruned.exists (transaction, block->previous ())) { print_error_message (boost::str (boost::format ("Previous pruned block does not exist %1%\n") % block->previous ().to_string ())); } @@ -1564,7 +1564,7 @@ int main (int argc, char * const * argv) print_error_message (boost::str (boost::format ("Incorrect sideband block details for block %1%\n") % hash.to_string ())); } // Check link epoch version - if (sideband.details.is_receive && (!node->ledger.pruning || !node->store.pruned_exists (transaction, block->link ().as_block_hash ()))) + if (sideband.details.is_receive && (!node->ledger.pruning || !node->store.pruned.exists (transaction, block->link ().as_block_hash ()))) { if (sideband.source_epoch != node->store.block_version (transaction, block->link ().as_block_hash ())) { @@ -1687,7 +1687,7 @@ int main (int argc, char * const * argv) bool pruned (false); if (block == nullptr) { - pruned = node->ledger.pruning && node->store.pruned_exists (transaction, key.hash); + pruned = node->ledger.pruning && node->store.pruned.exists (transaction, key.hash); if (!pruned) { print_error_message (boost::str (boost::format ("Pending block does not exist %1%\n") % key.hash.to_string ())); @@ -1697,7 +1697,7 @@ int main (int argc, char * const * argv) { // Check if pending destination is correct nano::account destination (0); - bool previous_pruned = node->ledger.pruning && node->store.pruned_exists (transaction, block->previous ()); + bool previous_pruned = node->ledger.pruning && node->store.pruned.exists (transaction, block->previous ()); if (previous_pruned) { block = node->store.block_get (transaction, key.hash); diff --git a/nano/node/active_transactions.cpp b/nano/node/active_transactions.cpp index 782b249fe2..3a1eaf1e01 100644 --- a/nano/node/active_transactions.cpp +++ b/nano/node/active_transactions.cpp @@ -1310,7 +1310,7 @@ nano::inactive_cache_status nano::active_transactions::inactive_votes_bootstrap_ lock_a.lock (); insert_impl (lock_a, block); } - else if (!block && status.bootstrap_started && !previously_a.bootstrap_started && (!node.ledger.pruning || !node.store.pruned_exists (transaction, hash_a))) + else if (!block && status.bootstrap_started && !previously_a.bootstrap_started && (!node.ledger.pruning || !node.store.pruned.exists (transaction, hash_a))) { node.gap_cache.bootstrap_start (hash_a); } diff --git a/nano/node/confirmation_height_bounded.cpp b/nano/node/confirmation_height_bounded.cpp index f7237c1838..530267d5e8 100644 --- a/nano/node/confirmation_height_bounded.cpp +++ b/nano/node/confirmation_height_bounded.cpp @@ -89,7 +89,7 @@ void nano::confirmation_height_bounded::process (std::shared_ptr or if (!block) { - if (ledger.pruning && ledger.store.pruned_exists (transaction, current)) + if (ledger.pruning && ledger.store.pruned.exists (transaction, current)) { if (!receive_source_pairs.empty ()) { diff --git a/nano/node/confirmation_height_unbounded.cpp b/nano/node/confirmation_height_unbounded.cpp index 63bd7bc963..98274256ee 100644 --- a/nano/node/confirmation_height_unbounded.cpp +++ b/nano/node/confirmation_height_unbounded.cpp @@ -386,7 +386,7 @@ void nano::confirmation_height_unbounded::cement_blocks (nano::write_guard & sco if (!block) { - if (ledger.pruning && ledger.store.pruned_exists (transaction, pending.hash)) + if (ledger.pruning && ledger.store.pruned.exists (transaction, pending.hash)) { pending_writes.erase (pending_writes.begin ()); --pending_writes_size; diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index b11893db77..3212d6c6f8 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -3173,7 +3173,7 @@ void nano::json_handler::pruned_exists () auto transaction (node.store.tx_begin_read ()); if (node.ledger.pruning) { - auto exists (node.store.pruned_exists (transaction, hash)); + auto exists (node.store.pruned.exists (transaction, hash)); response_l.put ("exists", exists ? "1" : "0"); } else diff --git a/nano/node/lmdb/lmdb.cpp b/nano/node/lmdb/lmdb.cpp index 2c6829224f..7ca124bd9e 100644 --- a/nano/node/lmdb/lmdb.cpp +++ b/nano/node/lmdb/lmdb.cpp @@ -193,7 +193,7 @@ void nano::mdb_store::open_databases (bool & error_a, nano::transaction const & error_a |= mdb_dbi_open (env.tx (transaction_a), "online_weight", flags, &online_weight_handle) != 0; error_a |= mdb_dbi_open (env.tx (transaction_a), "meta", flags, &meta) != 0; error_a |= mdb_dbi_open (env.tx (transaction_a), "peers", flags, &peers) != 0; - error_a |= mdb_dbi_open (env.tx (transaction_a), "pruned", flags, &pruned) != 0; + error_a |= mdb_dbi_open (env.tx (transaction_a), "pruned", flags, &pruned_handle) != 0; error_a |= mdb_dbi_open (env.tx (transaction_a), "confirmation_height", flags, &confirmation_height_handle) != 0; error_a |= mdb_dbi_open (env.tx (transaction_a), "accounts", flags, &accounts_v0) != 0; accounts = accounts_v0; @@ -744,7 +744,7 @@ void nano::mdb_store::upgrade_v18_to_v19 (nano::write_transaction const & transa void nano::mdb_store::upgrade_v19_to_v20 (nano::write_transaction const & transaction_a) { logger.always_log ("Preparing v19 to v20 database upgrade..."); - mdb_dbi_open (env.tx (transaction_a), "pruned", MDB_CREATE, &pruned); + mdb_dbi_open (env.tx (transaction_a), "pruned", MDB_CREATE, &pruned_handle); version_put (transaction_a, 20); logger.always_log ("Finished creating new pruned table"); } @@ -874,7 +874,7 @@ MDB_dbi nano::mdb_store::table_to_dbi (tables table_a) const case tables::peers: return peers; case tables::pruned: - return pruned; + return pruned_handle; case tables::confirmation_height: return confirmation_height_handle; case tables::final_votes: @@ -913,7 +913,7 @@ bool nano::mdb_store::copy_db (boost::filesystem::path const & destination_file) void nano::mdb_store::rebuild_db (nano::write_transaction const & transaction_a) { // Tables with uint256_union key - std::vector tables = { accounts, blocks, pruned, confirmation_height_handle }; + std::vector tables = { accounts, blocks, pruned_handle, confirmation_height_handle }; for (auto const & table : tables) { MDB_dbi temp; diff --git a/nano/node/lmdb/lmdb.hpp b/nano/node/lmdb/lmdb.hpp index f05e6d65f5..604dc0abf3 100644 --- a/nano/node/lmdb/lmdb.hpp +++ b/nano/node/lmdb/lmdb.hpp @@ -172,7 +172,7 @@ class mdb_store : public block_store_partial * Pruned blocks hashes * nano::block_hash -> none */ - MDB_dbi pruned{ 0 }; + MDB_dbi pruned_handle{ 0 }; /* * Endpoints for peers diff --git a/nano/node/node.cpp b/nano/node/node.cpp index d82683f674..05336c4692 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -411,7 +411,7 @@ nano::node::node (boost::asio::io_context & io_ctx_a, boost::filesystem::path co } } - ledger.pruning = flags.enable_pruning || store.pruned_count (store.tx_begin_read ()) > 0; + ledger.pruning = flags.enable_pruning || store.pruned.count (store.tx_begin_read ()) > 0; if (ledger.pruning) { diff --git a/nano/secure/CMakeLists.txt b/nano/secure/CMakeLists.txt index 241a8929ef..81ef22cada 100644 --- a/nano/secure/CMakeLists.txt +++ b/nano/secure/CMakeLists.txt @@ -58,6 +58,7 @@ add_library( store/account_store_partial.hpp store/pending_store_partial.hpp store/online_weight_partial.hpp + store/pruned_store_partial.hpp store/confirmation_height_store_partial.hpp store/final_vote_store_partial.hpp) diff --git a/nano/secure/blockstore.cpp b/nano/secure/blockstore.cpp index 92f3d4b42c..bf8fd8f78c 100644 --- a/nano/secure/blockstore.cpp +++ b/nano/secure/blockstore.cpp @@ -105,11 +105,12 @@ bool nano::write_transaction::contains (nano::tables table_a) const return impl->contains (table_a); } -nano::block_store::block_store (nano::frontier_store & frontier_store_a, nano::account_store & account_store_a, nano::pending_store & pending_store_a, nano::online_weight_store & online_weight_store_a, nano::confirmation_height_store & confirmation_height_store_a, nano::final_vote_store & final_vote_store_a) : +nano::block_store::block_store (nano::frontier_store & frontier_store_a, nano::account_store & account_store_a, nano::pending_store & pending_store_a, nano::online_weight_store & online_weight_store_a, nano::pruned_store & pruned_store_a, nano::confirmation_height_store & confirmation_height_store_a, nano::final_vote_store & final_vote_store_a) : frontier (frontier_store_a), account (account_store_a), pending (pending_store_a), online_weight (online_weight_store_a), + pruned (pruned_store_a), confirmation_height (confirmation_height_store_a), final_vote (final_vote_store_a) { diff --git a/nano/secure/blockstore.hpp b/nano/secure/blockstore.hpp index 4dff63060d..3207f380c1 100644 --- a/nano/secure/blockstore.hpp +++ b/nano/secure/blockstore.hpp @@ -685,6 +685,24 @@ class online_weight_store virtual void clear (nano::write_transaction const &) = 0; }; +/** + * Manages pruned storage and iteration + */ +class pruned_store +{ +public: + virtual void put (nano::write_transaction const & transaction_a, nano::block_hash const & hash_a) = 0; + virtual void del (nano::write_transaction const & transaction_a, nano::block_hash const & hash_a) = 0; + virtual bool exists (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const = 0; + virtual nano::block_hash random (nano::transaction const & transaction_a) = 0; + virtual size_t count (nano::transaction const & transaction_a) const = 0; + virtual void clear (nano::write_transaction const &) = 0; + virtual nano::store_iterator begin (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const = 0; + virtual nano::store_iterator begin (nano::transaction const & transaction_a) const = 0; + virtual nano::store_iterator end () const = 0; + virtual void for_each_par (std::function, nano::store_iterator)> const & action_a) const = 0; +}; + /** * Manages confirmation height storage and iteration */ @@ -728,7 +746,7 @@ class final_vote_store class block_store { public: - explicit block_store (nano::frontier_store &, nano::account_store &, nano::pending_store &, nano::online_weight_store &, nano::confirmation_height_store &, nano::final_vote_store &); + explicit block_store (nano::frontier_store &, nano::account_store &, nano::pending_store &, nano::online_weight_store &, nano::pruned_store &, nano::confirmation_height_store &, nano::final_vote_store &); virtual ~block_store () = default; virtual void initialize (nano::write_transaction const &, nano::genesis const &, nano::ledger_cache &) = 0; virtual void block_put (nano::write_transaction const &, nano::block_hash const &, nano::block const &) = 0; @@ -772,15 +790,7 @@ class block_store virtual void version_put (nano::write_transaction const &, int) = 0; virtual int version_get (nano::transaction const &) const = 0; - virtual void pruned_put (nano::write_transaction const & transaction_a, nano::block_hash const & hash_a) = 0; - virtual void pruned_del (nano::write_transaction const & transaction_a, nano::block_hash const & hash_a) = 0; - virtual bool pruned_exists (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const = 0; - virtual nano::block_hash pruned_random (nano::transaction const & transaction_a) = 0; - virtual size_t pruned_count (nano::transaction const & transaction_a) const = 0; - virtual void pruned_clear (nano::write_transaction const &) = 0; - virtual nano::store_iterator pruned_begin (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const = 0; - virtual nano::store_iterator pruned_begin (nano::transaction const & transaction_a) const = 0; - virtual nano::store_iterator pruned_end () const = 0; + pruned_store & pruned; virtual void peer_put (nano::write_transaction const & transaction_a, nano::endpoint_key const & endpoint_a) = 0; virtual void peer_del (nano::write_transaction const & transaction_a, nano::endpoint_key const & endpoint_a) = 0; @@ -793,7 +803,6 @@ class block_store confirmation_height_store & confirmation_height; virtual void unchecked_for_each_par (std::function, nano::store_iterator)> const & action_a) const = 0; - virtual void pruned_for_each_par (std::function, nano::store_iterator)> const & action_a) const = 0; virtual void blocks_for_each_par (std::function, nano::store_iterator)> const & action_a) const = 0; virtual uint64_t block_account_height (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const = 0; diff --git a/nano/secure/blockstore_partial.hpp b/nano/secure/blockstore_partial.hpp index 4694469ef5..921679461d 100644 --- a/nano/secure/blockstore_partial.hpp +++ b/nano/secure/blockstore_partial.hpp @@ -12,6 +12,7 @@ #include #include #include +#include #include @@ -45,6 +46,7 @@ class block_store_partial : public block_store nano::account_store_partial account_store_partial; nano::pending_store_partial pending_store_partial; nano::online_weight_store_partial online_weight_store_partial; + nano::pruned_store_partial pruned_store_partial; nano::confirmation_height_store_partial confirmation_height_store_partial; nano::final_vote_store_partial final_vote_store_partial; @@ -59,15 +61,17 @@ class block_store_partial : public block_store friend class nano::account_store_partial; friend class nano::pending_store_partial; friend class nano::online_weight_store_partial; + friend class nano::pruned_store_partial; friend class nano::confirmation_height_store_partial; friend class nano::final_vote_store_partial; block_store_partial () : - block_store{ frontier_store_partial, account_store_partial, pending_store_partial, online_weight_store_partial, confirmation_height_store_partial, final_vote_store_partial }, + block_store{ frontier_store_partial, account_store_partial, pending_store_partial, online_weight_store_partial, pruned_store_partial, confirmation_height_store_partial, final_vote_store_partial }, frontier_store_partial{ *this }, account_store_partial{ *this }, pending_store_partial{ *this }, online_weight_store_partial{ *this }, + pruned_store_partial{ *this }, confirmation_height_store_partial{ *this }, final_vote_store_partial{ *this } { @@ -255,11 +259,6 @@ class block_store_partial : public block_store return nano::store_iterator (nullptr); } - nano::store_iterator pruned_end () const override - { - return nano::store_iterator (nullptr); - } - int version_get (nano::transaction const & transaction_a) const override { nano::uint256_union version_key (1); @@ -333,34 +332,6 @@ class block_store_partial : public block_store release_assert_success (*this, status); } - void pruned_put (nano::write_transaction const & transaction_a, nano::block_hash const & hash_a) override - { - auto status = put_key (transaction_a, tables::pruned, hash_a); - release_assert_success (*this, status); - } - - void pruned_del (nano::write_transaction const & transaction_a, nano::block_hash const & hash_a) override - { - auto status = del (transaction_a, tables::pruned, hash_a); - release_assert_success (*this, status); - } - - bool pruned_exists (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const override - { - return exists (transaction_a, tables::pruned, nano::db_val (hash_a)); - } - - size_t pruned_count (nano::transaction const & transaction_a) const override - { - return count (transaction_a, tables::pruned); - } - - void pruned_clear (nano::write_transaction const & transaction_a) override - { - auto status = drop (transaction_a, tables::pruned); - release_assert_success (*this, status); - } - void peer_put (nano::write_transaction const & transaction_a, nano::endpoint_key const & endpoint_a) override { auto status = put_key (transaction_a, tables::peers, endpoint_a); @@ -413,19 +384,6 @@ class block_store_partial : public block_store return existing->second; } - nano::block_hash pruned_random (nano::transaction const & transaction_a) override - { - nano::block_hash random_hash; - nano::random_pool::generate_block (random_hash.bytes.data (), random_hash.bytes.size ()); - auto existing = make_iterator> (transaction_a, tables::pruned, nano::db_val (random_hash)); - auto end (nano::store_iterator> (nullptr)); - if (existing == end) - { - existing = make_iterator> (transaction_a, tables::pruned); - } - return existing != end ? existing->first : 0; - } - nano::store_iterator blocks_begin (nano::transaction const & transaction_a) const override { return make_iterator (transaction_a, tables::blocks); @@ -451,16 +409,6 @@ class block_store_partial : public block_store return make_iterator (transaction_a, tables::peers); } - nano::store_iterator pruned_begin (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const override - { - return make_iterator (transaction_a, tables::pruned, nano::db_val (hash_a)); - } - - nano::store_iterator pruned_begin (nano::transaction const & transaction_a) const override - { - return make_iterator (transaction_a, tables::pruned); - } - size_t unchecked_count (nano::transaction const & transaction_a) override { return count (transaction_a, tables::unchecked); @@ -486,15 +434,6 @@ class block_store_partial : public block_store }); } - void pruned_for_each_par (std::function, nano::store_iterator)> const & action_a) const override - { - parallel_traversal ( - [&action_a, this] (nano::uint256_t const & start, nano::uint256_t const & end, bool const is_last) { - auto transaction (this->tx_begin_read ()); - action_a (transaction, this->pruned_begin (transaction, start), !is_last ? this->pruned_begin (transaction, end) : this->pruned_end ()); - }); - } - int const minimum_version{ 14 }; protected: diff --git a/nano/secure/ledger.cpp b/nano/secure/ledger.cpp index 3975a04fa2..5d68de7bd0 100644 --- a/nano/secure/ledger.cpp +++ b/nano/secure/ledger.cpp @@ -783,7 +783,7 @@ void nano::ledger::initialize (nano::generate_cache const & generate_cache_a) } auto transaction (store.tx_begin_read ()); - cache.pruned_count = store.pruned_count (transaction); + cache.pruned_count = store.pruned.count (transaction); // Final votes requirement for confirmation canary block nano::confirmation_height_info confirmation_height_info; @@ -893,7 +893,7 @@ bool nano::ledger::block_or_pruned_exists (nano::block_hash const & hash_a) cons bool nano::ledger::block_or_pruned_exists (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const { - if (store.pruned_exists (transaction_a, hash_a)) + if (store.pruned.exists (transaction_a, hash_a)) { return true; } @@ -999,7 +999,7 @@ std::pair nano::ledger::hash_root_random (na // Pruned cache cannot guarantee that pruned blocks are already commited if (region < cache.pruned_count) { - hash = store.pruned_random (transaction_a); + hash = store.pruned.random (transaction_a); } if (hash.is_zero ()) { @@ -1323,7 +1323,7 @@ std::shared_ptr nano::ledger::forked_block (nano::transaction const bool nano::ledger::block_confirmed (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const { - if (store.pruned_exists (transaction_a, hash_a)) + if (store.pruned.exists (transaction_a, hash_a)) { return true; } @@ -1348,7 +1348,7 @@ uint64_t nano::ledger::pruning_action (nano::write_transaction & transaction_a, if (block != nullptr) { store.block_del (transaction_a, hash); - store.pruned_put (transaction_a, hash); + store.pruned.put (transaction_a, hash); hash = block->previous (); ++pruned_count; ++cache.pruned_count; @@ -1358,7 +1358,7 @@ uint64_t nano::ledger::pruning_action (nano::write_transaction & transaction_a, transaction_a.renew (); } } - else if (store.pruned_exists (transaction_a, hash)) + else if (store.pruned.exists (transaction_a, hash)) { hash = 0; } @@ -1481,12 +1481,12 @@ bool nano::ledger::migrate_lmdb_to_rocksdb (boost::filesystem::path const & data } }); - store.pruned_for_each_par ( + store.pruned.for_each_par ( [&rocksdb_store] (nano::read_transaction const & /*unused*/, auto i, auto n) { for (; i != n; ++i) { auto rocksdb_transaction (rocksdb_store->tx_begin_write ({}, { nano::tables::pruned })); - rocksdb_store->pruned_put (rocksdb_transaction, i->first); + rocksdb_store->pruned.put (rocksdb_transaction, i->first); } }); @@ -1517,7 +1517,7 @@ bool nano::ledger::migrate_lmdb_to_rocksdb (boost::filesystem::path const & data // Compare counts error |= store.unchecked_count (lmdb_transaction) != rocksdb_store->unchecked_count (rocksdb_transaction); error |= store.peer_count (lmdb_transaction) != rocksdb_store->peer_count (rocksdb_transaction); - error |= store.pruned_count (lmdb_transaction) != rocksdb_store->pruned_count (rocksdb_transaction); + error |= store.pruned.count (lmdb_transaction) != rocksdb_store->pruned.count (rocksdb_transaction); error |= store.final_vote.count (lmdb_transaction) != rocksdb_store->final_vote.count (rocksdb_transaction); error |= store.online_weight.count (lmdb_transaction) != rocksdb_store->online_weight.count (rocksdb_transaction); error |= store.version_get (lmdb_transaction) != rocksdb_store->version_get (rocksdb_transaction); diff --git a/nano/secure/store/pruned_store_partial.hpp b/nano/secure/store/pruned_store_partial.hpp new file mode 100644 index 0000000000..910a6c756b --- /dev/null +++ b/nano/secure/store/pruned_store_partial.hpp @@ -0,0 +1,97 @@ +#pragma once + +#include + +namespace +{ +template +void parallel_traversal (std::function const & action); +} + +namespace nano +{ +template +class block_store_partial; + +template +void release_assert_success (block_store_partial const & block_store, const int status); + +template +class pruned_store_partial : public pruned_store +{ +private: + nano::block_store_partial & block_store; + + friend void release_assert_success (block_store_partial const & block_store, const int status); + +public: + explicit pruned_store_partial (nano::block_store_partial & block_store_a) : + block_store (block_store_a){}; + + void put (nano::write_transaction const & transaction_a, nano::block_hash const & hash_a) override + { + auto status = block_store.put_key (transaction_a, tables::pruned, hash_a); + release_assert_success (block_store, status); + } + + void del (nano::write_transaction const & transaction_a, nano::block_hash const & hash_a) override + { + auto status = block_store.del (transaction_a, tables::pruned, hash_a); + release_assert_success (block_store, status); + } + + bool exists (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const override + { + return block_store.exists (transaction_a, tables::pruned, nano::db_val (hash_a)); + } + + nano::block_hash random (nano::transaction const & transaction_a) override + { + nano::block_hash random_hash; + nano::random_pool::generate_block (random_hash.bytes.data (), random_hash.bytes.size ()); + auto existing = block_store.template make_iterator> (transaction_a, tables::pruned, nano::db_val (random_hash)); + auto end (nano::store_iterator> (nullptr)); + if (existing == end) + { + existing = block_store.template make_iterator> (transaction_a, tables::pruned); + } + return existing != end ? existing->first : 0; + } + + size_t count (nano::transaction const & transaction_a) const override + { + return block_store.count (transaction_a, tables::pruned); + } + + void clear (nano::write_transaction const & transaction_a) override + { + auto status = block_store.drop (transaction_a, tables::pruned); + release_assert_success (block_store, status); + } + + nano::store_iterator begin (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const override + { + return block_store.template make_iterator (transaction_a, tables::pruned, nano::db_val (hash_a)); + } + + nano::store_iterator begin (nano::transaction const & transaction_a) const override + { + return block_store.template make_iterator (transaction_a, tables::pruned); + } + + nano::store_iterator end () const override + { + return nano::store_iterator (nullptr); + } + + void for_each_par (std::function, nano::store_iterator)> const & action_a) const override + { + parallel_traversal ( + [&action_a, this] (nano::uint256_t const & start, nano::uint256_t const & end, bool const is_last) { + auto transaction (this->block_store.tx_begin_read ()); + action_a (transaction, this->begin (transaction, start), !is_last ? this->begin (transaction, end) : this->end ()); + }); + } +}; + +} \ No newline at end of file diff --git a/nano/slow_test/node.cpp b/nano/slow_test/node.cpp index 468d8ca29b..51d91974ae 100644 --- a/nano/slow_test/node.cpp +++ b/nano/slow_test/node.cpp @@ -435,7 +435,7 @@ TEST (store, pruned_load) { nano::block_hash random_hash; nano::random_pool::generate_block (random_hash.bytes.data (), random_hash.bytes.size ()); - store->pruned_put (transaction, random_hash); + store->pruned.put (transaction, random_hash); } } if (!nano::using_rocksdb_in_tests ()) @@ -444,20 +444,20 @@ TEST (store, pruned_load) for (auto k (0); k < batch_size / 2; ++k) { auto hash (hashes.begin ()); - store->pruned_del (transaction, *hash); + store->pruned.del (transaction, *hash); hashes.erase (hash); } } } auto transaction (store->tx_begin_read ()); - ASSERT_EQ (expected_result, store->pruned_count (transaction)); + ASSERT_EQ (expected_result, store->pruned.count (transaction)); } // Reinitialize store { auto store = nano::make_store (logger, path); ASSERT_FALSE (store->init_error ()); auto transaction (store->tx_begin_read ()); - ASSERT_EQ (expected_result, store->pruned_count (transaction)); + ASSERT_EQ (expected_result, store->pruned.count (transaction)); } } From b172d4d62fb0a1e5578b4892c635c36f1123940c Mon Sep 17 00:00:00 2001 From: Thiago Silva <82097354+thsfs@users.noreply.github.com> Date: Fri, 4 Jun 2021 09:22:37 -0300 Subject: [PATCH 036/346] Moves out peer methods from the block store class (#3318) * Moves out peer methods from the block store class --- nano/core_test/block_store.cpp | 32 +++++------ nano/core_test/ledger.cpp | 4 +- nano/core_test/node.cpp | 14 ++--- nano/nano_node/entry.cpp | 2 +- nano/node/cli.cpp | 4 +- nano/node/lmdb/lmdb.cpp | 6 +- nano/node/lmdb/lmdb.hpp | 2 +- nano/node/node.cpp | 4 +- nano/node/rocksdb/rocksdb.cpp | 4 +- nano/node/transport/tcp.cpp | 4 +- nano/node/transport/udp.cpp | 4 +- nano/rpc_test/rpc.cpp | 4 +- nano/secure/CMakeLists.txt | 1 + nano/secure/blockstore.cpp | 3 +- nano/secure/blockstore.hpp | 25 ++++++--- nano/secure/blockstore_partial.hpp | 44 ++------------- nano/secure/ledger.cpp | 6 +- nano/secure/store/peer_store_partial.hpp | 70 ++++++++++++++++++++++++ nano/test_common/testutil.cpp | 2 +- 19 files changed, 141 insertions(+), 94 deletions(-) create mode 100644 nano/secure/store/peer_store_partial.hpp diff --git a/nano/core_test/block_store.cpp b/nano/core_test/block_store.cpp index 8d6804a113..0dbf306c52 100644 --- a/nano/core_test/block_store.cpp +++ b/nano/core_test/block_store.cpp @@ -1077,57 +1077,57 @@ TEST (block_store, peers) auto transaction (store->tx_begin_write ()); // Confirm that the store is empty - ASSERT_FALSE (store->peer_exists (transaction, endpoint)); - ASSERT_EQ (store->peer_count (transaction), 0); + ASSERT_FALSE (store->peer.exists (transaction, endpoint)); + ASSERT_EQ (store->peer.count (transaction), 0); // Add one - store->peer_put (transaction, endpoint); - ASSERT_TRUE (store->peer_exists (transaction, endpoint)); + store->peer.put (transaction, endpoint); + ASSERT_TRUE (store->peer.exists (transaction, endpoint)); } // Confirm that it can be found { auto transaction (store->tx_begin_read ()); - ASSERT_EQ (store->peer_count (transaction), 1); + ASSERT_EQ (store->peer.count (transaction), 1); } // Add another one and check that it (and the existing one) can be found nano::endpoint_key endpoint1 (boost::asio::ip::address_v6::any ().to_bytes (), 101); { auto transaction (store->tx_begin_write ()); - store->peer_put (transaction, endpoint1); - ASSERT_TRUE (store->peer_exists (transaction, endpoint1)); // Check new peer is here - ASSERT_TRUE (store->peer_exists (transaction, endpoint)); // Check first peer is still here + store->peer.put (transaction, endpoint1); + ASSERT_TRUE (store->peer.exists (transaction, endpoint1)); // Check new peer is here + ASSERT_TRUE (store->peer.exists (transaction, endpoint)); // Check first peer is still here } { auto transaction (store->tx_begin_read ()); - ASSERT_EQ (store->peer_count (transaction), 2); + ASSERT_EQ (store->peer.count (transaction), 2); } // Delete the first one { auto transaction (store->tx_begin_write ()); - store->peer_del (transaction, endpoint1); - ASSERT_FALSE (store->peer_exists (transaction, endpoint1)); // Confirm it no longer exists - ASSERT_TRUE (store->peer_exists (transaction, endpoint)); // Check first peer is still here + store->peer.del (transaction, endpoint1); + ASSERT_FALSE (store->peer.exists (transaction, endpoint1)); // Confirm it no longer exists + ASSERT_TRUE (store->peer.exists (transaction, endpoint)); // Check first peer is still here } { auto transaction (store->tx_begin_read ()); - ASSERT_EQ (store->peer_count (transaction), 1); + ASSERT_EQ (store->peer.count (transaction), 1); } // Delete original one { auto transaction (store->tx_begin_write ()); - store->peer_del (transaction, endpoint); - ASSERT_FALSE (store->peer_exists (transaction, endpoint)); + store->peer.del (transaction, endpoint); + ASSERT_FALSE (store->peer.exists (transaction, endpoint)); } { auto transaction (store->tx_begin_read ()); - ASSERT_EQ (store->peer_count (transaction), 0); + ASSERT_EQ (store->peer.count (transaction), 0); } } diff --git a/nano/core_test/ledger.cpp b/nano/core_test/ledger.cpp index b8e4e15a4a..9cda4e93f4 100644 --- a/nano/core_test/ledger.cpp +++ b/nano/core_test/ledger.cpp @@ -3864,7 +3864,7 @@ TEST (ledger, migrate_lmdb_to_rocksdb) store.online_weight.put (transaction, 100, nano::amount (2)); store.frontier.put (transaction, nano::block_hash (2), nano::account (5)); - store.peer_put (transaction, endpoint_key); + store.peer.put (transaction, endpoint_key); store.pending.put (transaction, nano::pending_key (nano::genesis_account, send->hash ()), nano::pending_info (nano::genesis_account, 100, nano::epoch::epoch_0)); store.pruned.put (transaction, send->hash ()); @@ -3895,7 +3895,7 @@ TEST (ledger, migrate_lmdb_to_rocksdb) auto block1 = rocksdb_store.block_get (rocksdb_transaction, send->hash ()); ASSERT_EQ (*send, *block1); - ASSERT_TRUE (rocksdb_store.peer_exists (rocksdb_transaction, endpoint_key)); + ASSERT_TRUE (rocksdb_store.peer.exists (rocksdb_transaction, endpoint_key)); ASSERT_EQ (rocksdb_store.version_get (rocksdb_transaction), version); ASSERT_EQ (rocksdb_store.frontier.get (rocksdb_transaction, 2), 5); nano::confirmation_height_info confirmation_height_info; diff --git a/nano/core_test/node.cpp b/nano/core_test/node.cpp index 40f251c0bc..a2591d30b6 100644 --- a/nano/core_test/node.cpp +++ b/nano/core_test/node.cpp @@ -3577,10 +3577,10 @@ TEST (node, peers) { // Add a peer to the database auto transaction (store.tx_begin_write ()); - store.peer_put (transaction, endpoint_key); + store.peer.put (transaction, endpoint_key); // Add a peer which is not contactable - store.peer_put (transaction, nano::endpoint_key{ boost::asio::ip::address_v6::any ().to_bytes (), 55555 }); + store.peer.put (transaction, nano::endpoint_key{ boost::asio::ip::address_v6::any ().to_bytes (), 55555 }); } node2->start (); @@ -3605,8 +3605,8 @@ TEST (node, peers) // Uncontactable peer should not be stored auto transaction (store.tx_begin_read ()); - ASSERT_EQ (store.peer_count (transaction), 1); - ASSERT_TRUE (store.peer_exists (transaction, endpoint_key)); + ASSERT_EQ (store.peer.count (transaction), 1); + ASSERT_TRUE (store.peer.exists (transaction, endpoint_key)); node2->stop (); } @@ -3626,7 +3626,7 @@ TEST (node, peer_cache_restart) { // Add a peer to the database auto transaction (store.tx_begin_write ()); - store.peer_put (transaction, endpoint_key); + store.peer.put (transaction, endpoint_key); } node2->start (); ASSERT_TIMELY (10s, !node2->network.empty ()); @@ -3649,8 +3649,8 @@ TEST (node, peer_cache_restart) auto & store = node3->store; { auto transaction (store.tx_begin_read ()); - ASSERT_EQ (store.peer_count (transaction), 1); - ASSERT_TRUE (store.peer_exists (transaction, endpoint_key)); + ASSERT_EQ (store.peer.count (transaction), 1); + ASSERT_TRUE (store.peer.exists (transaction, endpoint_key)); } ASSERT_TIMELY (10s, !node3->network.empty ()); // Confirm that the peers match with the endpoints we are expecting diff --git a/nano/nano_node/entry.cpp b/nano/nano_node/entry.cpp index 70e003659a..da55dce85d 100644 --- a/nano/nano_node/entry.cpp +++ b/nano/nano_node/entry.cpp @@ -1865,7 +1865,7 @@ int main (int argc, char * const * argv) auto node = inactive_node->node; auto transaction (node->store.tx_begin_read ()); - for (auto i (node->store.peers_begin (transaction)), n (node->store.peers_end ()); i != n; ++i) + for (auto i (node->store.peer.begin (transaction)), n (node->store.peer.end ()); i != n; ++i) { std::cout << boost::str (boost::format ("%1%\n") % nano::endpoint (boost::asio::ip::address_v6 (i->first.address_bytes ()), i->first.port ())); } diff --git a/nano/node/cli.cpp b/nano/node/cli.cpp index cf5fd7ee2b..2c27183df0 100644 --- a/nano/node/cli.cpp +++ b/nano/node/cli.cpp @@ -232,7 +232,7 @@ bool copy_database (boost::filesystem::path const & data_path, boost::program_op } if (vm.count ("peer_clear")) { - node.node->store.peer_clear (store.tx_begin_write ()); + node.node->store.peer.clear (store.tx_begin_write ()); } if (vm.count ("confirmation_height_clear")) { @@ -545,7 +545,7 @@ std::error_code nano::handle_node_options (boost::program_options::variables_map if (!node.node->init_error ()) { auto transaction (node.node->store.tx_begin_write ()); - node.node->store.peer_clear (transaction); + node.node->store.peer.clear (transaction); std::cout << "Database peers are removed" << std::endl; } else diff --git a/nano/node/lmdb/lmdb.cpp b/nano/node/lmdb/lmdb.cpp index 7ca124bd9e..a1427420f5 100644 --- a/nano/node/lmdb/lmdb.cpp +++ b/nano/node/lmdb/lmdb.cpp @@ -192,7 +192,7 @@ void nano::mdb_store::open_databases (bool & error_a, nano::transaction const & error_a |= mdb_dbi_open (env.tx (transaction_a), "unchecked", flags, &unchecked) != 0; error_a |= mdb_dbi_open (env.tx (transaction_a), "online_weight", flags, &online_weight_handle) != 0; error_a |= mdb_dbi_open (env.tx (transaction_a), "meta", flags, &meta) != 0; - error_a |= mdb_dbi_open (env.tx (transaction_a), "peers", flags, &peers) != 0; + error_a |= mdb_dbi_open (env.tx (transaction_a), "peers", flags, &peer_handle) != 0; error_a |= mdb_dbi_open (env.tx (transaction_a), "pruned", flags, &pruned_handle) != 0; error_a |= mdb_dbi_open (env.tx (transaction_a), "confirmation_height", flags, &confirmation_height_handle) != 0; error_a |= mdb_dbi_open (env.tx (transaction_a), "accounts", flags, &accounts_v0) != 0; @@ -872,7 +872,7 @@ MDB_dbi nano::mdb_store::table_to_dbi (tables table_a) const case tables::meta: return meta; case tables::peers: - return peers; + return peer_handle; case tables::pruned: return pruned_handle; case tables::confirmation_height: @@ -881,7 +881,7 @@ MDB_dbi nano::mdb_store::table_to_dbi (tables table_a) const return final_vote_handle; default: release_assert (false); - return peers; + return peer_handle; } } diff --git a/nano/node/lmdb/lmdb.hpp b/nano/node/lmdb/lmdb.hpp index 604dc0abf3..a586a36f26 100644 --- a/nano/node/lmdb/lmdb.hpp +++ b/nano/node/lmdb/lmdb.hpp @@ -178,7 +178,7 @@ class mdb_store : public block_store_partial * Endpoints for peers * nano::endpoint_key -> no_value */ - MDB_dbi peers{ 0 }; + MDB_dbi peer_handle{ 0 }; /* * Confirmation height of an account, and the hash for the block at that height diff --git a/nano/node/node.cpp b/nano/node/node.cpp index 05336c4692..e894880830 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -765,7 +765,7 @@ void nano::node::long_inactivity_cleanup () if (perform_cleanup) { store.online_weight.clear (transaction); - store.peer_clear (transaction); + store.peer.clear (transaction); logger.always_log ("Removed records of peers and online weight after a long period of inactivity"); } } @@ -1206,7 +1206,7 @@ boost::optional nano::node::work_generate_blocking (nano::root const & void nano::node::add_initial_peers () { auto transaction (store.tx_begin_read ()); - for (auto i (store.peers_begin (transaction)), n (store.peers_end ()); i != n; ++i) + for (auto i (store.peer.begin (transaction)), n (store.peer.end ()); i != n; ++i) { nano::endpoint endpoint (boost::asio::ip::address_v6 (i->first.address_bytes ()), i->first.port ()); if (!network.reachout (endpoint, config.allow_local_peers)) diff --git a/nano/node/rocksdb/rocksdb.cpp b/nano/node/rocksdb/rocksdb.cpp index 03f8b85b40..74b8578910 100644 --- a/nano/node/rocksdb/rocksdb.cpp +++ b/nano/node/rocksdb/rocksdb.cpp @@ -483,7 +483,7 @@ uint64_t nano::rocksdb_store::count (nano::transaction const & transaction_a, ta // Peers/online weight are small enough that they can just be iterated to get accurate counts. if (table_a == tables::peers) { - for (auto i (peers_begin (transaction_a)), n (peers_end ()); i != n; ++i) + for (auto i (peer.begin (transaction_a)), n (peer.end ()); i != n; ++i) { ++sum; } @@ -557,7 +557,7 @@ int nano::rocksdb_store::drop (nano::write_transaction const & transaction_a, ta if (table_a == tables::peers) { int status = 0; - for (auto i = peers_begin (transaction_a), n = peers_end (); i != n; ++i) + for (auto i = peer.begin (transaction_a), n = peer.end (); i != n; ++i) { status = del (transaction_a, tables::peers, nano::rocksdb_val (i->first)); release_assert (success (status)); diff --git a/nano/node/transport/tcp.cpp b/nano/node/transport/tcp.cpp index 68088052a9..47c45352a9 100644 --- a/nano/node/transport/tcp.cpp +++ b/nano/node/transport/tcp.cpp @@ -230,12 +230,12 @@ bool nano::transport::tcp_channels::store_all (bool clear_peers) auto transaction (node.store.tx_begin_write ({ tables::peers })); if (clear_peers) { - node.store.peer_clear (transaction); + node.store.peer.clear (transaction); } for (auto endpoint : endpoints) { nano::endpoint_key endpoint_key (endpoint.address ().to_v6 ().to_bytes (), endpoint.port ()); - node.store.peer_put (transaction, std::move (endpoint_key)); + node.store.peer.put (transaction, std::move (endpoint_key)); } result = true; } diff --git a/nano/node/transport/udp.cpp b/nano/node/transport/udp.cpp index 0c06ecc119..9007eff165 100644 --- a/nano/node/transport/udp.cpp +++ b/nano/node/transport/udp.cpp @@ -202,12 +202,12 @@ bool nano::transport::udp_channels::store_all (bool clear_peers) auto transaction (node.store.tx_begin_write ({ tables::peers })); if (clear_peers) { - node.store.peer_clear (transaction); + node.store.peer.clear (transaction); } for (auto endpoint : endpoints) { nano::endpoint_key endpoint_key (endpoint.address ().to_v6 ().to_bytes (), endpoint.port ()); - node.store.peer_put (transaction, std::move (endpoint_key)); + node.store.peer.put (transaction, std::move (endpoint_key)); } result = true; } diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index a761f002f7..da8fe13b27 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -7655,7 +7655,7 @@ TEST (rpc, telemetry_single) // Wait until peers are stored as they are done in the background auto peers_stored = false; - ASSERT_TIMELY (10s, node1.store.peer_count (node1.store.tx_begin_read ()) != 0); + ASSERT_TIMELY (10s, node1.store.peer.count (node1.store.tx_begin_read ()) != 0); // Missing port boost::property_tree::ptree request; @@ -7731,7 +7731,7 @@ TEST (rpc, telemetry_all) rpc.start (); // Wait until peers are stored as they are done in the background - ASSERT_TIMELY (10s, node1.store.peer_count (node1.store.tx_begin_read ()) != 0); + ASSERT_TIMELY (10s, node1.store.peer.count (node1.store.tx_begin_read ()) != 0); // First need to set up the cached data std::atomic done{ false }; diff --git a/nano/secure/CMakeLists.txt b/nano/secure/CMakeLists.txt index 81ef22cada..b8468d2295 100644 --- a/nano/secure/CMakeLists.txt +++ b/nano/secure/CMakeLists.txt @@ -59,6 +59,7 @@ add_library( store/pending_store_partial.hpp store/online_weight_partial.hpp store/pruned_store_partial.hpp + store/peer_store_partial.hpp store/confirmation_height_store_partial.hpp store/final_vote_store_partial.hpp) diff --git a/nano/secure/blockstore.cpp b/nano/secure/blockstore.cpp index bf8fd8f78c..f20edab11e 100644 --- a/nano/secure/blockstore.cpp +++ b/nano/secure/blockstore.cpp @@ -105,12 +105,13 @@ bool nano::write_transaction::contains (nano::tables table_a) const return impl->contains (table_a); } -nano::block_store::block_store (nano::frontier_store & frontier_store_a, nano::account_store & account_store_a, nano::pending_store & pending_store_a, nano::online_weight_store & online_weight_store_a, nano::pruned_store & pruned_store_a, nano::confirmation_height_store & confirmation_height_store_a, nano::final_vote_store & final_vote_store_a) : +nano::block_store::block_store (nano::frontier_store & frontier_store_a, nano::account_store & account_store_a, nano::pending_store & pending_store_a, nano::online_weight_store & online_weight_store_a, nano::pruned_store & pruned_store_a, nano::peer_store & peer_store_a, nano::confirmation_height_store & confirmation_height_store_a, nano::final_vote_store & final_vote_store_a) : frontier (frontier_store_a), account (account_store_a), pending (pending_store_a), online_weight (online_weight_store_a), pruned (pruned_store_a), + peer (peer_store_a), confirmation_height (confirmation_height_store_a), final_vote (final_vote_store_a) { diff --git a/nano/secure/blockstore.hpp b/nano/secure/blockstore.hpp index 3207f380c1..361c5f5fc5 100644 --- a/nano/secure/blockstore.hpp +++ b/nano/secure/blockstore.hpp @@ -670,6 +670,21 @@ class pending_store virtual void for_each_par (std::function, nano::store_iterator)> const & action_a) const = 0; }; +/** + * Manages peer storage and iteration + */ +class peer_store +{ +public: + virtual void put (nano::write_transaction const & transaction_a, nano::endpoint_key const & endpoint_a) = 0; + virtual void del (nano::write_transaction const & transaction_a, nano::endpoint_key const & endpoint_a) = 0; + virtual bool exists (nano::transaction const & transaction_a, nano::endpoint_key const & endpoint_a) const = 0; + virtual size_t count (nano::transaction const & transaction_a) const = 0; + virtual void clear (nano::write_transaction const & transaction_a) = 0; + virtual nano::store_iterator begin (nano::transaction const & transaction_a) const = 0; + virtual nano::store_iterator end () const = 0; +}; + /** * Manages online weight storage and iteration */ @@ -746,7 +761,7 @@ class final_vote_store class block_store { public: - explicit block_store (nano::frontier_store &, nano::account_store &, nano::pending_store &, nano::online_weight_store &, nano::pruned_store &, nano::confirmation_height_store &, nano::final_vote_store &); + explicit block_store (nano::frontier_store &, nano::account_store &, nano::pending_store &, nano::online_weight_store &, nano::pruned_store &, nano::peer_store &, nano::confirmation_height_store &, nano::final_vote_store &); virtual ~block_store () = default; virtual void initialize (nano::write_transaction const &, nano::genesis const &, nano::ledger_cache &) = 0; virtual void block_put (nano::write_transaction const &, nano::block_hash const &, nano::block const &) = 0; @@ -792,13 +807,7 @@ class block_store pruned_store & pruned; - virtual void peer_put (nano::write_transaction const & transaction_a, nano::endpoint_key const & endpoint_a) = 0; - virtual void peer_del (nano::write_transaction const & transaction_a, nano::endpoint_key const & endpoint_a) = 0; - virtual bool peer_exists (nano::transaction const & transaction_a, nano::endpoint_key const & endpoint_a) const = 0; - virtual size_t peer_count (nano::transaction const & transaction_a) const = 0; - virtual void peer_clear (nano::write_transaction const & transaction_a) = 0; - virtual nano::store_iterator peers_begin (nano::transaction const & transaction_a) const = 0; - virtual nano::store_iterator peers_end () const = 0; + peer_store & peer; confirmation_height_store & confirmation_height; diff --git a/nano/secure/blockstore_partial.hpp b/nano/secure/blockstore_partial.hpp index 921679461d..5243d50dd1 100644 --- a/nano/secure/blockstore_partial.hpp +++ b/nano/secure/blockstore_partial.hpp @@ -11,6 +11,7 @@ #include #include #include +#include #include #include @@ -47,6 +48,7 @@ class block_store_partial : public block_store nano::pending_store_partial pending_store_partial; nano::online_weight_store_partial online_weight_store_partial; nano::pruned_store_partial pruned_store_partial; + nano::peer_store_partial peer_store_partial; nano::confirmation_height_store_partial confirmation_height_store_partial; nano::final_vote_store_partial final_vote_store_partial; @@ -62,16 +64,18 @@ class block_store_partial : public block_store friend class nano::pending_store_partial; friend class nano::online_weight_store_partial; friend class nano::pruned_store_partial; + friend class nano::peer_store_partial; friend class nano::confirmation_height_store_partial; friend class nano::final_vote_store_partial; block_store_partial () : - block_store{ frontier_store_partial, account_store_partial, pending_store_partial, online_weight_store_partial, pruned_store_partial, confirmation_height_store_partial, final_vote_store_partial }, + block_store{ frontier_store_partial, account_store_partial, pending_store_partial, online_weight_store_partial, pruned_store_partial, peer_store_partial, confirmation_height_store_partial, final_vote_store_partial }, frontier_store_partial{ *this }, account_store_partial{ *this }, pending_store_partial{ *this }, online_weight_store_partial{ *this }, pruned_store_partial{ *this }, + peer_store_partial{ *this }, confirmation_height_store_partial{ *this }, final_vote_store_partial{ *this } { @@ -249,11 +253,6 @@ class block_store_partial : public block_store return nano::store_iterator (nullptr); } - nano::store_iterator peers_end () const override - { - return nano::store_iterator (nullptr); - } - nano::store_iterator blocks_end () const override { return nano::store_iterator (nullptr); @@ -332,34 +331,6 @@ class block_store_partial : public block_store release_assert_success (*this, status); } - void peer_put (nano::write_transaction const & transaction_a, nano::endpoint_key const & endpoint_a) override - { - auto status = put_key (transaction_a, tables::peers, endpoint_a); - release_assert_success (*this, status); - } - - void peer_del (nano::write_transaction const & transaction_a, nano::endpoint_key const & endpoint_a) override - { - auto status (del (transaction_a, tables::peers, endpoint_a)); - release_assert_success (*this, status); - } - - bool peer_exists (nano::transaction const & transaction_a, nano::endpoint_key const & endpoint_a) const override - { - return exists (transaction_a, tables::peers, nano::db_val (endpoint_a)); - } - - size_t peer_count (nano::transaction const & transaction_a) const override - { - return count (transaction_a, tables::peers); - } - - void peer_clear (nano::write_transaction const & transaction_a) override - { - auto status = drop (transaction_a, tables::peers); - release_assert_success (*this, status); - } - bool exists (nano::transaction const & transaction_a, tables table_a, nano::db_val const & key_a) const { return static_cast (*this).exists (transaction_a, table_a, key_a); @@ -404,11 +375,6 @@ class block_store_partial : public block_store return make_iterator (transaction_a, tables::unchecked, nano::db_val (key_a)); } - nano::store_iterator peers_begin (nano::transaction const & transaction_a) const override - { - return make_iterator (transaction_a, tables::peers); - } - size_t unchecked_count (nano::transaction const & transaction_a) override { return count (transaction_a, tables::unchecked); diff --git a/nano/secure/ledger.cpp b/nano/secure/ledger.cpp index 5d68de7bd0..419eb47246 100644 --- a/nano/secure/ledger.cpp +++ b/nano/secure/ledger.cpp @@ -1509,14 +1509,14 @@ bool nano::ledger::migrate_lmdb_to_rocksdb (boost::filesystem::path const & data rocksdb_store->online_weight.put (rocksdb_transaction, i->first, i->second); } - for (auto i (store.peers_begin (lmdb_transaction)), n (store.peers_end ()); i != n; ++i) + for (auto i (store.peer.begin (lmdb_transaction)), n (store.peer.end ()); i != n; ++i) { - rocksdb_store->peer_put (rocksdb_transaction, i->first); + rocksdb_store->peer.put (rocksdb_transaction, i->first); } // Compare counts error |= store.unchecked_count (lmdb_transaction) != rocksdb_store->unchecked_count (rocksdb_transaction); - error |= store.peer_count (lmdb_transaction) != rocksdb_store->peer_count (rocksdb_transaction); + error |= store.peer.count (lmdb_transaction) != rocksdb_store->peer.count (rocksdb_transaction); error |= store.pruned.count (lmdb_transaction) != rocksdb_store->pruned.count (rocksdb_transaction); error |= store.final_vote.count (lmdb_transaction) != rocksdb_store->final_vote.count (rocksdb_transaction); error |= store.online_weight.count (lmdb_transaction) != rocksdb_store->online_weight.count (rocksdb_transaction); diff --git a/nano/secure/store/peer_store_partial.hpp b/nano/secure/store/peer_store_partial.hpp new file mode 100644 index 0000000000..f17c1a9791 --- /dev/null +++ b/nano/secure/store/peer_store_partial.hpp @@ -0,0 +1,70 @@ +#pragma once + +#include + +namespace +{ +template +void parallel_traversal (std::function const & action); +} + +namespace nano +{ +template +class block_store_partial; + +template +void release_assert_success (block_store_partial const & block_store, const int status); + +template +class peer_store_partial : public peer_store +{ +private: + nano::block_store_partial & block_store; + + friend void release_assert_success (block_store_partial const & block_store, const int status); + +public: + explicit peer_store_partial (nano::block_store_partial & block_store_a) : + block_store (block_store_a){}; + + void put (nano::write_transaction const & transaction_a, nano::endpoint_key const & endpoint_a) override + { + auto status = block_store.put_key (transaction_a, tables::peers, endpoint_a); + release_assert_success (block_store, status); + } + + void del (nano::write_transaction const & transaction_a, nano::endpoint_key const & endpoint_a) override + { + auto status (block_store.del (transaction_a, tables::peers, endpoint_a)); + release_assert_success (block_store, status); + } + + bool exists (nano::transaction const & transaction_a, nano::endpoint_key const & endpoint_a) const override + { + return block_store.exists (transaction_a, tables::peers, nano::db_val (endpoint_a)); + } + + size_t count (nano::transaction const & transaction_a) const override + { + return block_store.count (transaction_a, tables::peers); + } + + void clear (nano::write_transaction const & transaction_a) override + { + auto status = block_store.drop (transaction_a, tables::peers); + release_assert_success (block_store, status); + } + + nano::store_iterator begin (nano::transaction const & transaction_a) const override + { + return block_store.template make_iterator (transaction_a, tables::peers); + } + + nano::store_iterator end () const override + { + return nano::store_iterator (nullptr); + } +}; + +} diff --git a/nano/test_common/testutil.cpp b/nano/test_common/testutil.cpp index e1298b1dd0..194a85adbd 100644 --- a/nano/test_common/testutil.cpp +++ b/nano/test_common/testutil.cpp @@ -41,7 +41,7 @@ void nano::wait_peer_connections (nano::system & system_a) else { auto transaction = node->store.tx_begin_read (); - return total += node->store.peer_count (transaction); + return total += node->store.peer.count (transaction); } }); } From 9b80a9bbd48a742c5513d0d7c0b5e10c8cfd29b3 Mon Sep 17 00:00:00 2001 From: Thiago Silva <82097354+thsfs@users.noreply.github.com> Date: Tue, 8 Jun 2021 09:16:12 -0300 Subject: [PATCH 037/346] Unchecked store break up (#3325) * Moving unchecked methods out of block store class * Define constructor in implementation file so it knows mdb_store is polymorphic with block_store_partial * Add _handle suffix to the handle vars of the lmdb tables Co-authored-by: clemahieu --- nano/core_test/block_store.cpp | 244 +++++++++--------- nano/core_test/bootstrap.cpp | 4 +- nano/core_test/confirmation_height.cpp | 6 +- nano/core_test/ledger.cpp | 52 ++-- nano/core_test/node.cpp | 14 +- nano/nano_node/entry.cpp | 6 +- nano/node/blockprocessor.cpp | 10 +- nano/node/cli.cpp | 4 +- nano/node/json_handler.cpp | 10 +- nano/node/lmdb/lmdb.cpp | 198 +++++++------- nano/node/lmdb/lmdb.hpp | 56 ++-- nano/node/node.cpp | 8 +- nano/node/rocksdb/rocksdb.cpp | 15 +- nano/node/rocksdb/rocksdb.hpp | 20 +- nano/node/telemetry.cpp | 2 +- nano/qt/qt.cpp | 2 +- nano/rpc_test/rpc.cpp | 4 +- nano/secure/CMakeLists.txt | 1 + nano/secure/blockstore.cpp | 3 +- nano/secure/blockstore.hpp | 33 ++- nano/secure/blockstore_partial.hpp | 77 +----- nano/secure/ledger.cpp | 6 +- nano/secure/store/unchecked_store_partial.hpp | 97 +++++++ nano/slow_test/node.cpp | 4 +- 24 files changed, 482 insertions(+), 394 deletions(-) create mode 100644 nano/secure/store/unchecked_store_partial.hpp diff --git a/nano/core_test/block_store.cpp b/nano/core_test/block_store.cpp index 0dbf306c52..3ecb38d064 100644 --- a/nano/core_test/block_store.cpp +++ b/nano/core_test/block_store.cpp @@ -356,14 +356,14 @@ TEST (bootstrap, simple) ASSERT_TRUE (!store->init_error ()); auto block1 (std::make_shared (0, 1, 2, nano::keypair ().prv, 4, 5)); auto transaction (store->tx_begin_write ()); - auto block2 (store->unchecked_get (transaction, block1->previous ())); + auto block2 (store->unchecked.get (transaction, block1->previous ())); ASSERT_TRUE (block2.empty ()); - store->unchecked_put (transaction, block1->previous (), block1); - auto block3 (store->unchecked_get (transaction, block1->previous ())); + store->unchecked.put (transaction, block1->previous (), block1); + auto block3 (store->unchecked.get (transaction, block1->previous ())); ASSERT_FALSE (block3.empty ()); ASSERT_EQ (*block1, *(block3[0].block)); - store->unchecked_del (transaction, nano::unchecked_key (block1->previous (), block1->hash ())); - auto block4 (store->unchecked_get (transaction, block1->previous ())); + store->unchecked.del (transaction, nano::unchecked_key (block1->previous (), block1->hash ())); + auto block4 (store->unchecked.get (transaction, block1->previous ())); ASSERT_TRUE (block4.empty ()); } @@ -379,13 +379,13 @@ TEST (unchecked, multiple) ASSERT_TRUE (!store->init_error ()); auto block1 (std::make_shared (4, 1, 2, nano::keypair ().prv, 4, 5)); auto transaction (store->tx_begin_write ()); - auto block2 (store->unchecked_get (transaction, block1->previous ())); + auto block2 (store->unchecked.get (transaction, block1->previous ())); ASSERT_TRUE (block2.empty ()); - store->unchecked_put (transaction, block1->previous (), block1); - store->unchecked_put (transaction, block1->source (), block1); - auto block3 (store->unchecked_get (transaction, block1->previous ())); + store->unchecked.put (transaction, block1->previous (), block1); + store->unchecked.put (transaction, block1->source (), block1); + auto block3 (store->unchecked.get (transaction, block1->previous ())); ASSERT_FALSE (block3.empty ()); - auto block4 (store->unchecked_get (transaction, block1->source ())); + auto block4 (store->unchecked.get (transaction, block1->source ())); ASSERT_FALSE (block4.empty ()); } @@ -396,11 +396,11 @@ TEST (unchecked, double_put) ASSERT_TRUE (!store->init_error ()); auto block1 (std::make_shared (4, 1, 2, nano::keypair ().prv, 4, 5)); auto transaction (store->tx_begin_write ()); - auto block2 (store->unchecked_get (transaction, block1->previous ())); + auto block2 (store->unchecked.get (transaction, block1->previous ())); ASSERT_TRUE (block2.empty ()); - store->unchecked_put (transaction, block1->previous (), block1); - store->unchecked_put (transaction, block1->previous (), block1); - auto block3 (store->unchecked_get (transaction, block1->previous ())); + store->unchecked.put (transaction, block1->previous (), block1); + store->unchecked.put (transaction, block1->previous (), block1); + auto block3 (store->unchecked.get (transaction, block1->previous ())); ASSERT_EQ (block3.size (), 1); } @@ -414,20 +414,20 @@ TEST (unchecked, multiple_get) auto block3 (std::make_shared (5, 1, 2, nano::keypair ().prv, 4, 5)); { auto transaction (store->tx_begin_write ()); - store->unchecked_put (transaction, block1->previous (), block1); // unchecked1 - store->unchecked_put (transaction, block1->hash (), block1); // unchecked2 - store->unchecked_put (transaction, block2->previous (), block2); // unchecked3 - store->unchecked_put (transaction, block1->previous (), block2); // unchecked1 - store->unchecked_put (transaction, block1->hash (), block2); // unchecked2 - store->unchecked_put (transaction, block3->previous (), block3); - store->unchecked_put (transaction, block3->hash (), block3); // unchecked4 - store->unchecked_put (transaction, block1->previous (), block3); // unchecked1 + store->unchecked.put (transaction, block1->previous (), block1); // unchecked1 + store->unchecked.put (transaction, block1->hash (), block1); // unchecked2 + store->unchecked.put (transaction, block2->previous (), block2); // unchecked3 + store->unchecked.put (transaction, block1->previous (), block2); // unchecked1 + store->unchecked.put (transaction, block1->hash (), block2); // unchecked2 + store->unchecked.put (transaction, block3->previous (), block3); + store->unchecked.put (transaction, block3->hash (), block3); // unchecked4 + store->unchecked.put (transaction, block1->previous (), block3); // unchecked1 } auto transaction (store->tx_begin_read ()); - auto unchecked_count (store->unchecked_count (transaction)); + auto unchecked_count (store->unchecked.count (transaction)); ASSERT_EQ (unchecked_count, 8); std::vector unchecked1; - auto unchecked1_blocks (store->unchecked_get (transaction, block1->previous ())); + auto unchecked1_blocks (store->unchecked.get (transaction, block1->previous ())); ASSERT_EQ (unchecked1_blocks.size (), 3); for (auto & i : unchecked1_blocks) { @@ -437,7 +437,7 @@ TEST (unchecked, multiple_get) ASSERT_TRUE (std::find (unchecked1.begin (), unchecked1.end (), block2->hash ()) != unchecked1.end ()); ASSERT_TRUE (std::find (unchecked1.begin (), unchecked1.end (), block3->hash ()) != unchecked1.end ()); std::vector unchecked2; - auto unchecked2_blocks (store->unchecked_get (transaction, block1->hash ())); + auto unchecked2_blocks (store->unchecked.get (transaction, block1->hash ())); ASSERT_EQ (unchecked2_blocks.size (), 2); for (auto & i : unchecked2_blocks) { @@ -445,13 +445,13 @@ TEST (unchecked, multiple_get) } ASSERT_TRUE (std::find (unchecked2.begin (), unchecked2.end (), block1->hash ()) != unchecked2.end ()); ASSERT_TRUE (std::find (unchecked2.begin (), unchecked2.end (), block2->hash ()) != unchecked2.end ()); - auto unchecked3 (store->unchecked_get (transaction, block2->previous ())); + auto unchecked3 (store->unchecked.get (transaction, block2->previous ())); ASSERT_EQ (unchecked3.size (), 1); ASSERT_EQ (unchecked3[0].block->hash (), block2->hash ()); - auto unchecked4 (store->unchecked_get (transaction, block3->hash ())); + auto unchecked4 (store->unchecked.get (transaction, block3->hash ())); ASSERT_EQ (unchecked4.size (), 1); ASSERT_EQ (unchecked4[0].block->hash (), block3->hash ()); - auto unchecked5 (store->unchecked_get (transaction, block2->hash ())); + auto unchecked5 (store->unchecked.get (transaction, block2->hash ())); ASSERT_EQ (unchecked5.size (), 0); } @@ -484,8 +484,8 @@ TEST (block_store, empty_bootstrap) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); auto transaction (store->tx_begin_read ()); - auto begin (store->unchecked_begin (transaction)); - auto end (store->unchecked_end ()); + auto begin (store->unchecked.begin (transaction)); + auto end (store->unchecked.end ()); ASSERT_EQ (end, begin); } @@ -496,13 +496,13 @@ TEST (block_store, one_bootstrap) ASSERT_TRUE (!store->init_error ()); auto block1 (std::make_shared (0, 1, 2, nano::keypair ().prv, 4, 5)); auto transaction (store->tx_begin_write ()); - store->unchecked_put (transaction, block1->hash (), block1); - auto begin (store->unchecked_begin (transaction)); - auto end (store->unchecked_end ()); + store->unchecked.put (transaction, block1->hash (), block1); + auto begin (store->unchecked.begin (transaction)); + auto end (store->unchecked.end ()); ASSERT_NE (end, begin); auto hash1 (begin->first.key ()); ASSERT_EQ (block1->hash (), hash1); - auto blocks (store->unchecked_get (transaction, hash1)); + auto blocks (store->unchecked.get (transaction, hash1)); ASSERT_EQ (1, blocks.size ()); auto block2 (blocks[0].block); ASSERT_EQ (*block1, *block2); @@ -690,10 +690,10 @@ TEST (mdb_block_store, supported_version_upgrades) // Lower the database version to the minimum version supported for upgrade. store.version_put (transaction, store.minimum_version); store.confirmation_height.del (transaction, nano::genesis_account); - ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "accounts_v1", MDB_CREATE, &store.accounts_v1)); - ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "open", MDB_CREATE, &store.open_blocks)); + ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "accounts_v1", MDB_CREATE, &store.accounts_v1_handle)); + ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "open", MDB_CREATE, &store.open_blocks_handle)); modify_account_info_to_v14 (store, transaction, nano::genesis_account, 1, nano::genesis_hash); - write_block_w_sideband_v18 (store, store.open_blocks, transaction, *nano::genesis ().open); + write_block_w_sideband_v18 (store, store.open_blocks_handle, transaction, *nano::genesis ().open); } // Upgrade should work @@ -930,38 +930,38 @@ TEST (block_store, DISABLED_change_dupsort) // Unchecked is no longer dupsort ta nano::logger_mt logger; nano::mdb_store store (logger, path); auto transaction (store.tx_begin_write ()); - ASSERT_EQ (0, mdb_drop (store.env.tx (transaction), store.unchecked, 1)); - ASSERT_EQ (0, mdb_dbi_open (store.env.tx (transaction), "unchecked", MDB_CREATE, &store.unchecked)); + ASSERT_EQ (0, mdb_drop (store.env.tx (transaction), store.unchecked_handle, 1)); + ASSERT_EQ (0, mdb_dbi_open (store.env.tx (transaction), "unchecked", MDB_CREATE, &store.unchecked_handle)); auto send1 (std::make_shared (0, 0, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); auto send2 (std::make_shared (1, 0, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); ASSERT_NE (send1->hash (), send2->hash ()); - store.unchecked_put (transaction, send1->hash (), send1); - store.unchecked_put (transaction, send1->hash (), send2); + store.unchecked.put (transaction, send1->hash (), send1); + store.unchecked.put (transaction, send1->hash (), send2); { - auto iterator1 (store.unchecked_begin (transaction)); + auto iterator1 (store.unchecked.begin (transaction)); ++iterator1; - ASSERT_EQ (store.unchecked_end (), iterator1); + ASSERT_EQ (store.unchecked.end (), iterator1); } - ASSERT_EQ (0, mdb_drop (store.env.tx (transaction), store.unchecked, 0)); - mdb_dbi_close (store.env, store.unchecked); - ASSERT_EQ (0, mdb_dbi_open (store.env.tx (transaction), "unchecked", MDB_CREATE | MDB_DUPSORT, &store.unchecked)); - store.unchecked_put (transaction, send1->hash (), send1); - store.unchecked_put (transaction, send1->hash (), send2); + ASSERT_EQ (0, mdb_drop (store.env.tx (transaction), store.unchecked_handle, 0)); + mdb_dbi_close (store.env, store.unchecked_handle); + ASSERT_EQ (0, mdb_dbi_open (store.env.tx (transaction), "unchecked", MDB_CREATE | MDB_DUPSORT, &store.unchecked_handle)); + store.unchecked.put (transaction, send1->hash (), send1); + store.unchecked.put (transaction, send1->hash (), send2); { - auto iterator1 (store.unchecked_begin (transaction)); + auto iterator1 (store.unchecked.begin (transaction)); ++iterator1; - ASSERT_EQ (store.unchecked_end (), iterator1); + ASSERT_EQ (store.unchecked.end (), iterator1); } - ASSERT_EQ (0, mdb_drop (store.env.tx (transaction), store.unchecked, 1)); - ASSERT_EQ (0, mdb_dbi_open (store.env.tx (transaction), "unchecked", MDB_CREATE | MDB_DUPSORT, &store.unchecked)); - store.unchecked_put (transaction, send1->hash (), send1); - store.unchecked_put (transaction, send1->hash (), send2); + ASSERT_EQ (0, mdb_drop (store.env.tx (transaction), store.unchecked_handle, 1)); + ASSERT_EQ (0, mdb_dbi_open (store.env.tx (transaction), "unchecked", MDB_CREATE | MDB_DUPSORT, &store.unchecked_handle)); + store.unchecked.put (transaction, send1->hash (), send1); + store.unchecked.put (transaction, send1->hash (), send2); { - auto iterator1 (store.unchecked_begin (transaction)); + auto iterator1 (store.unchecked.begin (transaction)); ++iterator1; - ASSERT_NE (store.unchecked_end (), iterator1); + ASSERT_NE (store.unchecked.end (), iterator1); ++iterator1; - ASSERT_EQ (store.unchecked_end (), iterator1); + ASSERT_EQ (store.unchecked.end (), iterator1); } } @@ -1291,12 +1291,12 @@ TEST (mdb_block_store, upgrade_v14_v15) ASSERT_EQ (confirmation_height_info.height, 1); ASSERT_EQ (confirmation_height_info.frontier, genesis.hash ()); // These databases get removed after an upgrade, so readd them - ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "state_v1", MDB_CREATE, &store.state_blocks_v1)); - ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "accounts_v1", MDB_CREATE, &store.accounts_v1)); - ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "pending_v1", MDB_CREATE, &store.pending_v1)); - ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "open", MDB_CREATE, &store.open_blocks)); - ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "send", MDB_CREATE, &store.send_blocks)); - ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "state_blocks", MDB_CREATE, &store.state_blocks)); + ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "state_v1", MDB_CREATE, &store.state_blocks_v1_handle)); + ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "accounts_v1", MDB_CREATE, &store.accounts_v1_handle)); + ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "pending_v1", MDB_CREATE, &store.pending_v1_handle)); + ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "open", MDB_CREATE, &store.open_blocks_handle)); + ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "send", MDB_CREATE, &store.send_blocks_handle)); + ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "state_blocks", MDB_CREATE, &store.state_blocks_handle)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch).code); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, state_send).code); @@ -1307,22 +1307,22 @@ TEST (mdb_block_store, upgrade_v14_v15) store.pending.del (transaction, nano::pending_key (nano::genesis_account, state_send.hash ())); - write_sideband_v14 (store, transaction, state_send, store.state_blocks_v1); - write_sideband_v14 (store, transaction, epoch, store.state_blocks_v1); - write_block_w_sideband_v18 (store, store.open_blocks, transaction, *genesis.open); - write_block_w_sideband_v18 (store, store.send_blocks, transaction, send); + write_sideband_v14 (store, transaction, state_send, store.state_blocks_v1_handle); + write_sideband_v14 (store, transaction, epoch, store.state_blocks_v1_handle); + write_block_w_sideband_v18 (store, store.open_blocks_handle, transaction, *genesis.open); + write_block_w_sideband_v18 (store, store.send_blocks_handle, transaction, send); // Remove from blocks table store.block_del (transaction, state_send.hash ()); store.block_del (transaction, epoch.hash ()); // Turn pending into v14 - ASSERT_FALSE (mdb_put (store.env.tx (transaction), store.pending_v0, nano::mdb_val (nano::pending_key (nano::dev_genesis_key.pub, send.hash ())), nano::mdb_val (nano::pending_info_v14 (nano::genesis_account, nano::Gxrb_ratio, nano::epoch::epoch_0)), 0)); - ASSERT_FALSE (mdb_put (store.env.tx (transaction), store.pending_v1, nano::mdb_val (nano::pending_key (nano::dev_genesis_key.pub, state_send.hash ())), nano::mdb_val (nano::pending_info_v14 (nano::genesis_account, nano::Gxrb_ratio, nano::epoch::epoch_1)), 0)); + ASSERT_FALSE (mdb_put (store.env.tx (transaction), store.pending_v0_handle, nano::mdb_val (nano::pending_key (nano::dev_genesis_key.pub, send.hash ())), nano::mdb_val (nano::pending_info_v14 (nano::genesis_account, nano::Gxrb_ratio, nano::epoch::epoch_0)), 0)); + ASSERT_FALSE (mdb_put (store.env.tx (transaction), store.pending_v1_handle, nano::mdb_val (nano::pending_key (nano::dev_genesis_key.pub, state_send.hash ())), nano::mdb_val (nano::pending_info_v14 (nano::genesis_account, nano::Gxrb_ratio, nano::epoch::epoch_1)), 0)); // This should fail as sizes are no longer correct for account_info nano::mdb_val value; - ASSERT_FALSE (mdb_get (store.env.tx (transaction), store.accounts_v1, nano::mdb_val (nano::genesis_account), value)); + ASSERT_FALSE (mdb_get (store.env.tx (transaction), store.accounts_v1_handle, nano::mdb_val (nano::genesis_account), value)); nano::account_info info; ASSERT_NE (value.size (), info.db_size ()); store.account.del (transaction, nano::genesis_account); @@ -1339,7 +1339,7 @@ TEST (mdb_block_store, upgrade_v14_v15) // Size of account_info should now equal that set in db nano::mdb_val value; - ASSERT_FALSE (mdb_get (store.env.tx (transaction), store.accounts, nano::mdb_val (nano::genesis_account), value)); + ASSERT_FALSE (mdb_get (store.env.tx (transaction), store.accounts_handle, nano::mdb_val (nano::genesis_account), value)); nano::account_info info (value); ASSERT_EQ (value.size (), info.db_size ()); @@ -1350,11 +1350,11 @@ TEST (mdb_block_store, upgrade_v14_v15) ASSERT_EQ (confirmation_height_info.frontier, genesis.hash ()); // accounts_v1, state_blocks_v1 & pending_v1 tables should be deleted - auto error_get_accounts_v1 (mdb_get (store.env.tx (transaction), store.accounts_v1, nano::mdb_val (nano::genesis_account), value)); + auto error_get_accounts_v1 (mdb_get (store.env.tx (transaction), store.accounts_v1_handle, nano::mdb_val (nano::genesis_account), value)); ASSERT_NE (error_get_accounts_v1, MDB_SUCCESS); - auto error_get_pending_v1 (mdb_get (store.env.tx (transaction), store.pending_v1, nano::mdb_val (nano::pending_key (nano::dev_genesis_key.pub, state_send.hash ())), value)); + auto error_get_pending_v1 (mdb_get (store.env.tx (transaction), store.pending_v1_handle, nano::mdb_val (nano::pending_key (nano::dev_genesis_key.pub, state_send.hash ())), value)); ASSERT_NE (error_get_pending_v1, MDB_SUCCESS); - auto error_get_state_v1 (mdb_get (store.env.tx (transaction), store.state_blocks_v1, nano::mdb_val (state_send.hash ()), value)); + auto error_get_state_v1 (mdb_get (store.env.tx (transaction), store.state_blocks_v1_handle, nano::mdb_val (state_send.hash ()), value)); ASSERT_NE (error_get_state_v1, MDB_SUCCESS); // Check that the epochs are set correctly for the sideband, accounts and pending entries @@ -1394,15 +1394,15 @@ TEST (mdb_block_store, upgrade_v15_v16) store.initialize (transaction, genesis, ledger.cache); // The representation table should get removed after, so readd it so that we can later confirm this actually happens auto txn = store.env.tx (transaction); - ASSERT_FALSE (mdb_dbi_open (txn, "representation", MDB_CREATE, &store.representation)); + ASSERT_FALSE (mdb_dbi_open (txn, "representation", MDB_CREATE, &store.representation_handle)); auto weight = ledger.cache.rep_weights.representation_get (nano::genesis_account); - ASSERT_EQ (MDB_SUCCESS, mdb_put (txn, store.representation, nano::mdb_val (nano::genesis_account), nano::mdb_val (nano::uint128_union (weight)), 0)); - ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "open", MDB_CREATE, &store.open_blocks)); - write_block_w_sideband_v18 (store, store.open_blocks, transaction, *genesis.open); + ASSERT_EQ (MDB_SUCCESS, mdb_put (txn, store.representation_handle, nano::mdb_val (nano::genesis_account), nano::mdb_val (nano::uint128_union (weight)), 0)); + ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "open", MDB_CREATE, &store.open_blocks_handle)); + write_block_w_sideband_v18 (store, store.open_blocks_handle, transaction, *genesis.open); // Lower the database to the previous version store.version_put (transaction, 15); // Confirm the rep weight exists in the database - ASSERT_EQ (MDB_SUCCESS, mdb_get (store.env.tx (transaction), store.representation, nano::mdb_val (nano::genesis_account), value)); + ASSERT_EQ (MDB_SUCCESS, mdb_get (store.env.tx (transaction), store.representation_handle, nano::mdb_val (nano::genesis_account), value)); store.confirmation_height.del (transaction, nano::genesis_account); } @@ -1413,9 +1413,9 @@ TEST (mdb_block_store, upgrade_v15_v16) auto transaction (store.tx_begin_read ()); // The representation table should now be deleted - auto error_get_representation (mdb_get (store.env.tx (transaction), store.representation, nano::mdb_val (nano::genesis_account), value)); + auto error_get_representation (mdb_get (store.env.tx (transaction), store.representation_handle, nano::mdb_val (nano::genesis_account), value)); ASSERT_NE (MDB_SUCCESS, error_get_representation); - ASSERT_EQ (store.representation, 0); + ASSERT_EQ (store.representation_handle, 0); // Version should be correct ASSERT_LT (15, store.version_get (transaction)); @@ -1450,12 +1450,12 @@ TEST (mdb_block_store, upgrade_v16_v17) ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block3).code); modify_confirmation_height_to_v15 (store, transaction, nano::genesis_account, confirmation_height); - ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "open", MDB_CREATE, &store.open_blocks)); - write_block_w_sideband_v18 (store, store.open_blocks, transaction, *genesis.open); - ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "state_blocks", MDB_CREATE, &store.state_blocks)); - write_block_w_sideband_v18 (store, store.state_blocks, transaction, block1); - write_block_w_sideband_v18 (store, store.state_blocks, transaction, block2); - write_block_w_sideband_v18 (store, store.state_blocks, transaction, block3); + ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "open", MDB_CREATE, &store.open_blocks_handle)); + write_block_w_sideband_v18 (store, store.open_blocks_handle, transaction, *genesis.open); + ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "state_blocks", MDB_CREATE, &store.state_blocks_handle)); + write_block_w_sideband_v18 (store, store.state_blocks_handle, transaction, block1); + write_block_w_sideband_v18 (store, store.state_blocks_handle, transaction, block2); + write_block_w_sideband_v18 (store, store.state_blocks_handle, transaction, block3); // Lower the database to the previous version store.version_put (transaction, 16); @@ -1531,19 +1531,19 @@ TEST (mdb_block_store, upgrade_v17_v18) ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, state_open).code); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, state_send_epoch_link).code); - ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "open", MDB_CREATE, &store.open_blocks)); - ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "send", MDB_CREATE, &store.send_blocks)); - ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "state_blocks", MDB_CREATE, &store.state_blocks)); + ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "open", MDB_CREATE, &store.open_blocks_handle)); + ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "send", MDB_CREATE, &store.send_blocks_handle)); + ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "state_blocks", MDB_CREATE, &store.state_blocks_handle)); // Downgrade the store store.version_put (transaction, 17); - write_block_w_sideband_v18 (store, store.state_blocks, transaction, state_receive); - write_block_w_sideband_v18 (store, store.state_blocks, transaction, epoch_first); - write_block_w_sideband_v18 (store, store.state_blocks, transaction, state_send2); - write_block_w_sideband_v18 (store, store.state_blocks, transaction, state_send_epoch_link); - write_block_w_sideband_v18 (store, store.open_blocks, transaction, *genesis.open); - write_block_w_sideband_v18 (store, store.send_blocks, transaction, send_zero); + write_block_w_sideband_v18 (store, store.state_blocks_handle, transaction, state_receive); + write_block_w_sideband_v18 (store, store.state_blocks_handle, transaction, epoch_first); + write_block_w_sideband_v18 (store, store.state_blocks_handle, transaction, state_send2); + write_block_w_sideband_v18 (store, store.state_blocks_handle, transaction, state_send_epoch_link); + write_block_w_sideband_v18 (store, store.open_blocks_handle, transaction, *genesis.open); + write_block_w_sideband_v18 (store, store.send_blocks_handle, transaction, send_zero); // Replace with the previous sideband version for state blocks // The upgrade can resume after upgrading some blocks, test this by only downgrading some of them @@ -1572,7 +1572,7 @@ TEST (mdb_block_store, upgrade_v17_v18) // Size of state block should equal that set in db (no change) nano::mdb_val value; - ASSERT_FALSE (mdb_get (store.env.tx (transaction), store.blocks, nano::mdb_val (state_send.hash ()), value)); + ASSERT_FALSE (mdb_get (store.env.tx (transaction), store.blocks_handle, nano::mdb_val (state_send.hash ()), value)); ASSERT_EQ (value.size (), sizeof (nano::block_type) + nano::state_block::size + nano::block_sideband::size (nano::block_type::state)); // Check that sidebands are correctly populated @@ -1725,20 +1725,20 @@ TEST (mdb_block_store, upgrade_v18_v19) // These tables need to be re-opened and populated so that an upgrade can be done auto txn = store.env.tx (transaction); - ASSERT_FALSE (mdb_dbi_open (txn, "open", MDB_CREATE, &store.open_blocks)); - ASSERT_FALSE (mdb_dbi_open (txn, "receive", MDB_CREATE, &store.receive_blocks)); - ASSERT_FALSE (mdb_dbi_open (txn, "send", MDB_CREATE, &store.send_blocks)); - ASSERT_FALSE (mdb_dbi_open (txn, "change", MDB_CREATE, &store.change_blocks)); - ASSERT_FALSE (mdb_dbi_open (txn, "state_blocks", MDB_CREATE, &store.state_blocks)); + ASSERT_FALSE (mdb_dbi_open (txn, "open", MDB_CREATE, &store.open_blocks_handle)); + ASSERT_FALSE (mdb_dbi_open (txn, "receive", MDB_CREATE, &store.receive_blocks_handle)); + ASSERT_FALSE (mdb_dbi_open (txn, "send", MDB_CREATE, &store.send_blocks_handle)); + ASSERT_FALSE (mdb_dbi_open (txn, "change", MDB_CREATE, &store.change_blocks_handle)); + ASSERT_FALSE (mdb_dbi_open (txn, "state_blocks", MDB_CREATE, &store.state_blocks_handle)); // Modify blocks back to the old tables - write_block_w_sideband_v18 (store, store.open_blocks, transaction, *genesis.open); - write_block_w_sideband_v18 (store, store.send_blocks, transaction, send); - write_block_w_sideband_v18 (store, store.receive_blocks, transaction, receive); - write_block_w_sideband_v18 (store, store.change_blocks, transaction, change); - write_block_w_sideband_v18 (store, store.state_blocks, transaction, state_epoch); - write_block_w_sideband_v18 (store, store.state_blocks, transaction, state_send); - write_block_w_sideband_v18 (store, store.state_blocks, transaction, state_open); + write_block_w_sideband_v18 (store, store.open_blocks_handle, transaction, *genesis.open); + write_block_w_sideband_v18 (store, store.send_blocks_handle, transaction, send); + write_block_w_sideband_v18 (store, store.receive_blocks_handle, transaction, receive); + write_block_w_sideband_v18 (store, store.change_blocks_handle, transaction, change); + write_block_w_sideband_v18 (store, store.state_blocks_handle, transaction, state_epoch); + write_block_w_sideband_v18 (store, store.state_blocks_handle, transaction, state_send); + write_block_w_sideband_v18 (store, store.state_blocks_handle, transaction, state_open); store.version_put (transaction, 18); } @@ -1750,11 +1750,11 @@ TEST (mdb_block_store, upgrade_v18_v19) auto transaction (store.tx_begin_read ()); // These tables should be deleted - ASSERT_EQ (store.send_blocks, 0); - ASSERT_EQ (store.receive_blocks, 0); - ASSERT_EQ (store.change_blocks, 0); - ASSERT_EQ (store.open_blocks, 0); - ASSERT_EQ (store.state_blocks, 0); + ASSERT_EQ (store.send_blocks_handle, 0); + ASSERT_EQ (store.receive_blocks_handle, 0); + ASSERT_EQ (store.change_blocks_handle, 0); + ASSERT_EQ (store.open_blocks_handle, 0); + ASSERT_EQ (store.state_blocks_handle, 0); // Confirm these blocks all exist after the upgrade ASSERT_TRUE (store.block_get (transaction, send.hash ())); @@ -1776,7 +1776,7 @@ TEST (mdb_block_store, upgrade_v18_v19) ASSERT_EQ (nano::epoch::epoch_1, state_open_disk->sideband ().details.epoch); ASSERT_EQ (nano::epoch::epoch_1, state_open_disk->sideband ().source_epoch); - ASSERT_EQ (7, store.count (transaction, store.blocks)); + ASSERT_EQ (7, store.count (transaction, store.blocks_handle)); // Version should be correct ASSERT_LT (18, store.version_get (transaction)); @@ -1829,13 +1829,13 @@ TEST (mdb_block_store, upgrade_v20_v21) auto transaction (store.tx_begin_write ()); store.initialize (transaction, genesis, ledger.cache); // Delete pruned table - ASSERT_FALSE (mdb_drop (store.env.tx (transaction), store.final_vote_handle, 1)); + ASSERT_FALSE (mdb_drop (store.env.tx (transaction), store.final_votes_handle, 1)); store.version_put (transaction, 20); } // Upgrading should create the table nano::mdb_store store (logger, path); ASSERT_FALSE (store.init_error ()); - ASSERT_NE (store.final_vote_handle, 0); + ASSERT_NE (store.final_votes_handle, 0); // Version should be correct auto transaction (store.tx_begin_read ()); @@ -2048,9 +2048,9 @@ TEST (rocksdb_block_store, tombstone_count) ASSERT_TRUE (!store->init_error ()); auto transaction = store->tx_begin_write (); auto block1 (std::make_shared (0, 1, 2, nano::keypair ().prv, 4, 5)); - store->unchecked_put (transaction, block1->previous (), block1); + store->unchecked.put (transaction, block1->previous (), block1); ASSERT_EQ (store->tombstone_map.at (nano::tables::unchecked).num_since_last_flush.load (), 0); - store->unchecked_del (transaction, nano::unchecked_key (block1->previous (), block1->hash ())); + store->unchecked.del (transaction, nano::unchecked_key (block1->previous (), block1->hash ())); ASSERT_EQ (store->tombstone_map.at (nano::tables::unchecked).num_since_last_flush.load (), 1); } } @@ -2072,7 +2072,7 @@ void write_sideband_v14 (nano::mdb_store & store_a, nano::transaction & transact } MDB_val val{ data.size (), data.data () }; - ASSERT_FALSE (mdb_put (store_a.env.tx (transaction_a), block->sideband ().details.epoch == nano::epoch::epoch_0 ? store_a.state_blocks_v0 : store_a.state_blocks_v1, nano::mdb_val (block_a.hash ()), &val, 0)); + ASSERT_FALSE (mdb_put (store_a.env.tx (transaction_a), block->sideband ().details.epoch == nano::epoch::epoch_0 ? store_a.state_blocks_v0_handle : store_a.state_blocks_v1_handle, nano::mdb_val (block_a.hash ()), &val, 0)); } void write_sideband_v15 (nano::mdb_store & store_a, nano::transaction & transaction_a, nano::block const & block_a) @@ -2091,7 +2091,7 @@ void write_sideband_v15 (nano::mdb_store & store_a, nano::transaction & transact } MDB_val val{ data.size (), data.data () }; - ASSERT_FALSE (mdb_put (store_a.env.tx (transaction_a), store_a.state_blocks, nano::mdb_val (block_a.hash ()), &val, 0)); + ASSERT_FALSE (mdb_put (store_a.env.tx (transaction_a), store_a.state_blocks_handle, nano::mdb_val (block_a.hash ()), &val, 0)); } void write_block_w_sideband_v18 (nano::mdb_store & store_a, MDB_dbi database, nano::write_transaction & transaction_a, nano::block const & block_a) @@ -2118,7 +2118,7 @@ void modify_account_info_to_v14 (nano::mdb_store & store, nano::transaction cons nano::account_info info; ASSERT_FALSE (store.account.get (transaction, account, info)); nano::account_info_v14 account_info_v14 (info.head, rep_block, info.open_block, info.balance, info.modified, info.block_count, confirmation_height, info.epoch ()); - auto status (mdb_put (store.env.tx (transaction), info.epoch () == nano::epoch::epoch_0 ? store.accounts_v0 : store.accounts_v1, nano::mdb_val (account), nano::mdb_val (account_info_v14), 0)); + auto status (mdb_put (store.env.tx (transaction), info.epoch () == nano::epoch::epoch_0 ? store.accounts_v0_handle : store.accounts_v1_handle, nano::mdb_val (account), nano::mdb_val (account_info_v14), 0)); ASSERT_EQ (status, 0); } diff --git a/nano/core_test/bootstrap.cpp b/nano/core_test/bootstrap.cpp index 6433dad4d4..60b6578663 100644 --- a/nano/core_test/bootstrap.cpp +++ b/nano/core_test/bootstrap.cpp @@ -1128,7 +1128,7 @@ TEST (bootstrap_processor, lazy_pruning_missing_block) ASSERT_FALSE (node2->ledger.block_or_pruned_exists (state_open->hash ())); { auto transaction (node2->store.tx_begin_read ()); - ASSERT_TRUE (node2->store.unchecked_exists (transaction, nano::unchecked_key (send2->root ().as_block_hash (), send2->hash ()))); + ASSERT_TRUE (node2->store.unchecked.exists (transaction, nano::unchecked_key (send2->root ().as_block_hash (), send2->hash ()))); } // Insert missing block node2->process_active (send1); @@ -1845,7 +1845,7 @@ TEST (bulk, genesis_pruning) ASSERT_EQ (1, node2->ledger.cache.block_count); { auto transaction (node2->store.tx_begin_write ()); - node2->store.unchecked_clear (transaction); + node2->store.unchecked.clear (transaction); } // Insert pruned blocks node2->process_active (send1); diff --git a/nano/core_test/confirmation_height.cpp b/nano/core_test/confirmation_height.cpp index 04be4cc070..b868da40e5 100644 --- a/nano/core_test/confirmation_height.cpp +++ b/nano/core_test/confirmation_height.cpp @@ -255,7 +255,7 @@ TEST (confirmation_height, gap_bootstrap) // Confirmation heights should not be updated { auto transaction (node1.store.tx_begin_read ()); - auto unchecked_count (node1.store.unchecked_count (transaction)); + auto unchecked_count (node1.store.unchecked.count (transaction)); ASSERT_EQ (unchecked_count, 2); nano::confirmation_height_info confirmation_height_info; @@ -271,7 +271,7 @@ TEST (confirmation_height, gap_bootstrap) // Confirmation height should be unchanged and unchecked should now be 0 { auto transaction (node1.store.tx_begin_read ()); - auto unchecked_count (node1.store.unchecked_count (transaction)); + auto unchecked_count (node1.store.unchecked.count (transaction)); ASSERT_EQ (unchecked_count, 0); nano::confirmation_height_info confirmation_height_info; @@ -358,7 +358,7 @@ TEST (confirmation_height, gap_live) // This should confirm the open block and the source of the receive blocks auto transaction (node->store.tx_begin_read ()); - auto unchecked_count (node->store.unchecked_count (transaction)); + auto unchecked_count (node->store.unchecked.count (transaction)); ASSERT_EQ (unchecked_count, 0); nano::confirmation_height_info confirmation_height_info; diff --git a/nano/core_test/ledger.cpp b/nano/core_test/ledger.cpp index 9cda4e93f4..a2e03cf749 100644 --- a/nano/core_test/ledger.cpp +++ b/nano/core_test/ledger.cpp @@ -2664,7 +2664,7 @@ TEST (ledger, epoch_open_pending) node1.block_processor.flush (); ASSERT_FALSE (node1.ledger.block_or_pruned_exists (epoch_open->hash ())); // Open block should be inserted into unchecked - auto blocks (node1.store.unchecked_get (node1.store.tx_begin_read (), nano::hash_or_account (epoch_open->account ()).hash)); + auto blocks (node1.store.unchecked.get (node1.store.tx_begin_read (), nano::hash_or_account (epoch_open->account ()).hash)); ASSERT_EQ (blocks.size (), 1); ASSERT_EQ (blocks[0].block->full_hash (), epoch_open->full_hash ()); ASSERT_EQ (blocks[0].verified, nano::signature_verification::valid_epoch); @@ -2852,10 +2852,10 @@ TEST (ledger, unchecked_epoch) node1.block_processor.flush (); { auto transaction (node1.store.tx_begin_read ()); - auto unchecked_count (node1.store.unchecked_count (transaction)); + auto unchecked_count (node1.store.unchecked.count (transaction)); ASSERT_EQ (unchecked_count, 1); - ASSERT_EQ (unchecked_count, node1.store.unchecked_count (transaction)); - auto blocks (node1.store.unchecked_get (transaction, epoch1->previous ())); + ASSERT_EQ (unchecked_count, node1.store.unchecked.count (transaction)); + auto blocks (node1.store.unchecked.get (transaction, epoch1->previous ())); ASSERT_EQ (blocks.size (), 1); ASSERT_EQ (blocks[0].verified, nano::signature_verification::valid_epoch); } @@ -2865,9 +2865,9 @@ TEST (ledger, unchecked_epoch) { auto transaction (node1.store.tx_begin_read ()); ASSERT_TRUE (node1.store.block_exists (transaction, epoch1->hash ())); - auto unchecked_count (node1.store.unchecked_count (transaction)); + auto unchecked_count (node1.store.unchecked.count (transaction)); ASSERT_EQ (unchecked_count, 0); - ASSERT_EQ (unchecked_count, node1.store.unchecked_count (transaction)); + ASSERT_EQ (unchecked_count, node1.store.unchecked.count (transaction)); nano::account_info info; ASSERT_FALSE (node1.store.account.get (transaction, destination.pub, info)); ASSERT_EQ (info.epoch (), nano::epoch::epoch_1); @@ -2897,10 +2897,10 @@ TEST (ledger, unchecked_epoch_invalid) node1.block_processor.flush (); { auto transaction (node1.store.tx_begin_read ()); - auto unchecked_count (node1.store.unchecked_count (transaction)); + auto unchecked_count (node1.store.unchecked.count (transaction)); ASSERT_EQ (unchecked_count, 2); - ASSERT_EQ (unchecked_count, node1.store.unchecked_count (transaction)); - auto blocks (node1.store.unchecked_get (transaction, epoch1->previous ())); + ASSERT_EQ (unchecked_count, node1.store.unchecked.count (transaction)); + auto blocks (node1.store.unchecked.get (transaction, epoch1->previous ())); ASSERT_EQ (blocks.size (), 2); ASSERT_EQ (blocks[0].verified, nano::signature_verification::valid); ASSERT_EQ (blocks[1].verified, nano::signature_verification::valid); @@ -2913,9 +2913,9 @@ TEST (ledger, unchecked_epoch_invalid) ASSERT_FALSE (node1.store.block_exists (transaction, epoch1->hash ())); ASSERT_TRUE (node1.store.block_exists (transaction, epoch2->hash ())); ASSERT_TRUE (node1.active.empty ()); - auto unchecked_count (node1.store.unchecked_count (transaction)); + auto unchecked_count (node1.store.unchecked.count (transaction)); ASSERT_EQ (unchecked_count, 0); - ASSERT_EQ (unchecked_count, node1.store.unchecked_count (transaction)); + ASSERT_EQ (unchecked_count, node1.store.unchecked.count (transaction)); nano::account_info info; ASSERT_FALSE (node1.store.account.get (transaction, destination.pub, info)); ASSERT_NE (info.epoch (), nano::epoch::epoch_1); @@ -2947,10 +2947,10 @@ TEST (ledger, unchecked_open) node1.block_processor.flush (); { auto transaction (node1.store.tx_begin_read ()); - auto unchecked_count (node1.store.unchecked_count (transaction)); + auto unchecked_count (node1.store.unchecked.count (transaction)); ASSERT_EQ (unchecked_count, 1); - ASSERT_EQ (unchecked_count, node1.store.unchecked_count (transaction)); - auto blocks (node1.store.unchecked_get (transaction, open1->source ())); + ASSERT_EQ (unchecked_count, node1.store.unchecked.count (transaction)); + auto blocks (node1.store.unchecked.get (transaction, open1->source ())); ASSERT_EQ (blocks.size (), 1); ASSERT_EQ (blocks[0].verified, nano::signature_verification::valid); } @@ -2959,9 +2959,9 @@ TEST (ledger, unchecked_open) { auto transaction (node1.store.tx_begin_read ()); ASSERT_TRUE (node1.store.block_exists (transaction, open1->hash ())); - auto unchecked_count (node1.store.unchecked_count (transaction)); + auto unchecked_count (node1.store.unchecked.count (transaction)); ASSERT_EQ (unchecked_count, 0); - ASSERT_EQ (unchecked_count, node1.store.unchecked_count (transaction)); + ASSERT_EQ (unchecked_count, node1.store.unchecked.count (transaction)); } } @@ -2985,10 +2985,10 @@ TEST (ledger, unchecked_receive) // Previous block for receive1 is unknown, signature cannot be validated { auto transaction (node1.store.tx_begin_read ()); - auto unchecked_count (node1.store.unchecked_count (transaction)); + auto unchecked_count (node1.store.unchecked.count (transaction)); ASSERT_EQ (unchecked_count, 1); - ASSERT_EQ (unchecked_count, node1.store.unchecked_count (transaction)); - auto blocks (node1.store.unchecked_get (transaction, receive1->previous ())); + ASSERT_EQ (unchecked_count, node1.store.unchecked.count (transaction)); + auto blocks (node1.store.unchecked.get (transaction, receive1->previous ())); ASSERT_EQ (blocks.size (), 1); ASSERT_EQ (blocks[0].verified, nano::signature_verification::unknown); } @@ -2997,10 +2997,10 @@ TEST (ledger, unchecked_receive) // Previous block for receive1 is known, signature was validated { auto transaction (node1.store.tx_begin_read ()); - auto unchecked_count (node1.store.unchecked_count (transaction)); + auto unchecked_count (node1.store.unchecked.count (transaction)); ASSERT_EQ (unchecked_count, 1); - ASSERT_EQ (unchecked_count, node1.store.unchecked_count (transaction)); - auto blocks (node1.store.unchecked_get (transaction, receive1->source ())); + ASSERT_EQ (unchecked_count, node1.store.unchecked.count (transaction)); + auto blocks (node1.store.unchecked.get (transaction, receive1->source ())); ASSERT_EQ (blocks.size (), 1); ASSERT_EQ (blocks[0].verified, nano::signature_verification::valid); } @@ -3009,9 +3009,9 @@ TEST (ledger, unchecked_receive) { auto transaction (node1.store.tx_begin_read ()); ASSERT_TRUE (node1.store.block_exists (transaction, receive1->hash ())); - auto unchecked_count (node1.store.unchecked_count (transaction)); + auto unchecked_count (node1.store.unchecked.count (transaction)); ASSERT_EQ (unchecked_count, 0); - ASSERT_EQ (unchecked_count, node1.store.unchecked_count (transaction)); + ASSERT_EQ (unchecked_count, node1.store.unchecked.count (transaction)); } } @@ -3868,7 +3868,7 @@ TEST (ledger, migrate_lmdb_to_rocksdb) store.pending.put (transaction, nano::pending_key (nano::genesis_account, send->hash ()), nano::pending_info (nano::genesis_account, 100, nano::epoch::epoch_0)); store.pruned.put (transaction, send->hash ()); - store.unchecked_put (transaction, nano::genesis_hash, send); + store.unchecked.put (transaction, nano::genesis_hash, send); store.version_put (transaction, version); send->sideband_set ({}); store.block_put (transaction, send->hash (), *send); @@ -3905,7 +3905,7 @@ TEST (ledger, migrate_lmdb_to_rocksdb) ASSERT_TRUE (rocksdb_store.final_vote.get (rocksdb_transaction, nano::root (send->previous ())).size () == 1); ASSERT_EQ (rocksdb_store.final_vote.get (rocksdb_transaction, nano::root (send->previous ()))[0], nano::block_hash (2)); - auto unchecked_infos = rocksdb_store.unchecked_get (rocksdb_transaction, nano::genesis_hash); + auto unchecked_infos = rocksdb_store.unchecked.get (rocksdb_transaction, nano::genesis_hash); ASSERT_EQ (unchecked_infos.size (), 1); ASSERT_EQ (unchecked_infos.front ().account, nano::genesis_account); ASSERT_EQ (*unchecked_infos.front ().block, *send); diff --git a/nano/core_test/node.cpp b/nano/core_test/node.cpp index a2591d30b6..0b0bfdcbb0 100644 --- a/nano/core_test/node.cpp +++ b/nano/core_test/node.cpp @@ -3331,7 +3331,7 @@ TEST (node, block_processor_signatures) // Invalid signature to unchecked { auto transaction (node1.store.tx_begin_write ()); - node1.store.unchecked_put (transaction, send5->previous (), send5); + node1.store.unchecked.put (transaction, send5->previous (), send5); } auto receive1 = builder.make_block () .account (key1.pub) @@ -3690,27 +3690,27 @@ TEST (node, unchecked_cleanup) node.config.unchecked_cutoff_time = std::chrono::seconds (2); { auto transaction (node.store.tx_begin_read ()); - auto unchecked_count (node.store.unchecked_count (transaction)); + auto unchecked_count (node.store.unchecked.count (transaction)); ASSERT_EQ (unchecked_count, 1); - ASSERT_EQ (unchecked_count, node.store.unchecked_count (transaction)); + ASSERT_EQ (unchecked_count, node.store.unchecked.count (transaction)); } std::this_thread::sleep_for (std::chrono::seconds (1)); node.unchecked_cleanup (); ASSERT_TRUE (node.network.publish_filter.apply (bytes.data (), bytes.size ())); { auto transaction (node.store.tx_begin_read ()); - auto unchecked_count (node.store.unchecked_count (transaction)); + auto unchecked_count (node.store.unchecked.count (transaction)); ASSERT_EQ (unchecked_count, 1); - ASSERT_EQ (unchecked_count, node.store.unchecked_count (transaction)); + ASSERT_EQ (unchecked_count, node.store.unchecked.count (transaction)); } std::this_thread::sleep_for (std::chrono::seconds (2)); node.unchecked_cleanup (); ASSERT_FALSE (node.network.publish_filter.apply (bytes.data (), bytes.size ())); { auto transaction (node.store.tx_begin_read ()); - auto unchecked_count (node.store.unchecked_count (transaction)); + auto unchecked_count (node.store.unchecked.count (transaction)); ASSERT_EQ (unchecked_count, 0); - ASSERT_EQ (unchecked_count, node.store.unchecked_count (transaction)); + ASSERT_EQ (unchecked_count, node.store.unchecked.count (transaction)); } } diff --git a/nano/nano_node/entry.cpp b/nano/nano_node/entry.cpp index da55dce85d..b58e8ec807 100644 --- a/nano/nano_node/entry.cpp +++ b/nano/nano_node/entry.cpp @@ -421,7 +421,7 @@ int main (int argc, char * const * argv) } // Check all unchecked keys for matching frontier hashes. Indicates an issue with process_batch algorithm - for (auto i (node->store.unchecked_begin (transaction)), n (node->store.unchecked_end ()); i != n; ++i) + for (auto i (node->store.unchecked.begin (transaction)), n (node->store.unchecked.end ()); i != n; ++i) { auto it = frontier_hashes.find (i->first.key ()); if (it != frontier_hashes.cend ()) @@ -991,7 +991,7 @@ int main (int argc, char * const * argv) if (timer_l.after_deadline (std::chrono::seconds (15))) { timer_l.restart (); - std::cout << boost::str (boost::format ("%1% (%2%) blocks processed (unchecked), %3% remaining") % node->ledger.cache.block_count % node->store.unchecked_count (node->store.tx_begin_read ()) % node->block_processor.size ()) << std::endl; + std::cout << boost::str (boost::format ("%1% (%2%) blocks processed (unchecked), %3% remaining") % node->ledger.cache.block_count % node->store.unchecked.count (node->store.tx_begin_read ()) % node->block_processor.size ()) << std::endl; } } @@ -1845,7 +1845,7 @@ int main (int argc, char * const * argv) if (timer_l.after_deadline (std::chrono::seconds (60))) { timer_l.restart (); - std::cout << boost::str (boost::format ("%1% (%2%) blocks processed (unchecked)") % node.node->ledger.cache.block_count % node.node->store.unchecked_count (node.node->store.tx_begin_read ())) << std::endl; + std::cout << boost::str (boost::format ("%1% (%2%) blocks processed (unchecked)") % node.node->ledger.cache.block_count % node.node->store.unchecked.count (node.node->store.tx_begin_read ())) << std::endl; } } diff --git a/nano/node/blockprocessor.cpp b/nano/node/blockprocessor.cpp index 84b39b32f6..a0bd0edf20 100644 --- a/nano/node/blockprocessor.cpp +++ b/nano/node/blockprocessor.cpp @@ -403,7 +403,7 @@ nano::process_return nano::block_processor::process_one (nano::write_transaction } nano::unchecked_key unchecked_key (block->previous (), hash); - node.store.unchecked_put (transaction_a, unchecked_key, info_a); + node.store.unchecked.put (transaction_a, unchecked_key, info_a); events_a.events.emplace_back ([this, hash] (nano::transaction const & /* unused */) { this->node.gap_cache.add (hash); }); @@ -423,7 +423,7 @@ nano::process_return nano::block_processor::process_one (nano::write_transaction } nano::unchecked_key unchecked_key (node.ledger.block_source (transaction_a, *(block)), hash); - node.store.unchecked_put (transaction_a, unchecked_key, info_a); + node.store.unchecked.put (transaction_a, unchecked_key, info_a); events_a.events.emplace_back ([this, hash] (nano::transaction const & /* unused */) { this->node.gap_cache.add (hash); }); @@ -443,7 +443,7 @@ nano::process_return nano::block_processor::process_one (nano::write_transaction } nano::unchecked_key unchecked_key (block->account (), hash); // Specific unchecked key starting with epoch open block account public key - node.store.unchecked_put (transaction_a, unchecked_key, info_a); + node.store.unchecked.put (transaction_a, unchecked_key, info_a); node.stats.inc (nano::stat::type::ledger, nano::stat::detail::gap_source); break; @@ -548,12 +548,12 @@ void nano::block_processor::process_old (nano::transaction const & transaction_a void nano::block_processor::queue_unchecked (nano::write_transaction const & transaction_a, nano::hash_or_account const & hash_or_account_a) { - auto unchecked_blocks (node.store.unchecked_get (transaction_a, hash_or_account_a.hash)); + auto unchecked_blocks (node.store.unchecked.get (transaction_a, hash_or_account_a.hash)); for (auto & info : unchecked_blocks) { if (!node.flags.disable_block_processor_unchecked_deletion) { - node.store.unchecked_del (transaction_a, nano::unchecked_key (hash_or_account_a, info.block->hash ())); + node.store.unchecked.del (transaction_a, nano::unchecked_key (hash_or_account_a, info.block->hash ())); } add (info); } diff --git a/nano/node/cli.cpp b/nano/node/cli.cpp index 2c27183df0..2b75660ff0 100644 --- a/nano/node/cli.cpp +++ b/nano/node/cli.cpp @@ -220,7 +220,7 @@ bool copy_database (boost::filesystem::path const & data_path, boost::program_op auto & store (node.node->store); if (vm.count ("unchecked_clear")) { - node.node->store.unchecked_clear (store.tx_begin_write ()); + node.node->store.unchecked.clear (store.tx_begin_write ()); } if (vm.count ("clear_send_ids")) { @@ -491,7 +491,7 @@ std::error_code nano::handle_node_options (boost::program_options::variables_map if (!node.node->init_error ()) { auto transaction (node.node->store.tx_begin_write ()); - node.node->store.unchecked_clear (transaction); + node.node->store.unchecked.clear (transaction); std::cout << "Unchecked blocks deleted" << std::endl; } else diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index 3212d6c6f8..c46d99e352 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -1313,7 +1313,7 @@ void nano::json_handler::block_account () void nano::json_handler::block_count () { response_l.put ("count", std::to_string (node.ledger.cache.block_count)); - response_l.put ("unchecked", std::to_string (node.store.unchecked_count (node.store.tx_begin_read ()))); + response_l.put ("unchecked", std::to_string (node.store.unchecked.count (node.store.tx_begin_read ()))); response_l.put ("cemented", std::to_string (node.ledger.cache.cemented_count)); if (node.flags.enable_pruning) { @@ -3936,7 +3936,7 @@ void nano::json_handler::unchecked () { boost::property_tree::ptree unchecked; auto transaction (node.store.tx_begin_read ()); - for (auto i (node.store.unchecked_begin (transaction)), n (node.store.unchecked_end ()); i != n && unchecked.size () < count; ++i) + for (auto i (node.store.unchecked.begin (transaction)), n (node.store.unchecked.end ()); i != n && unchecked.size () < count; ++i) { nano::unchecked_info const & info (i->second); if (json_block_l) @@ -3961,7 +3961,7 @@ void nano::json_handler::unchecked_clear () { node.workers.push_task (create_worker_task ([] (std::shared_ptr const & rpc_l) { auto transaction (rpc_l->node.store.tx_begin_write ({ tables::unchecked })); - rpc_l->node.store.unchecked_clear (transaction); + rpc_l->node.store.unchecked.clear (transaction); rpc_l->response_l.put ("success", ""); rpc_l->response_errors (); })); @@ -3974,7 +3974,7 @@ void nano::json_handler::unchecked_get () if (!ec) { auto transaction (node.store.tx_begin_read ()); - for (auto i (node.store.unchecked_begin (transaction)), n (node.store.unchecked_end ()); i != n; ++i) + for (auto i (node.store.unchecked.begin (transaction)), n (node.store.unchecked.end ()); i != n; ++i) { nano::unchecked_key const & key (i->first); if (key.hash == hash) @@ -4022,7 +4022,7 @@ void nano::json_handler::unchecked_keys () { boost::property_tree::ptree unchecked; auto transaction (node.store.tx_begin_read ()); - for (auto i (node.store.unchecked_begin (transaction, nano::unchecked_key (key, 0))), n (node.store.unchecked_end ()); i != n && unchecked.size () < count; ++i) + for (auto i (node.store.unchecked.begin (transaction, nano::unchecked_key (key, 0))), n (node.store.unchecked.end ()); i != n && unchecked.size () < count; ++i) { boost::property_tree::ptree entry; nano::unchecked_info const & info (i->second); diff --git a/nano/node/lmdb/lmdb.cpp b/nano/node/lmdb/lmdb.cpp index a1427420f5..86e32fee0e 100644 --- a/nano/node/lmdb/lmdb.cpp +++ b/nano/node/lmdb/lmdb.cpp @@ -41,6 +41,8 @@ void mdb_val::convert_buffer_to_value () } nano::mdb_store::mdb_store (nano::logger_mt & logger_a, boost::filesystem::path const & path_a, nano::txn_tracking_config const & txn_tracking_config_a, std::chrono::milliseconds block_processor_batch_max_time_a, nano::lmdb_config const & lmdb_config_a, bool backup_before_upgrade_a) : + block_store_partial{ unchecked_mdb_store }, + unchecked_mdb_store{ *this }, logger (logger_a), env (error, path_a, nano::mdb_env::options::make ().set_config (lmdb_config_a).set_use_no_mem_init (true)), mdb_txn_tracker (logger_a, txn_tracking_config_a, block_processor_batch_max_time_a), @@ -52,12 +54,12 @@ nano::mdb_store::mdb_store (nano::logger_mt & logger_a, boost::filesystem::path auto is_fresh_db (false); { auto transaction (tx_begin_read ()); - auto err = mdb_dbi_open (env.tx (transaction), "meta", 0, &meta); + auto err = mdb_dbi_open (env.tx (transaction), "meta", 0, &meta_handle); is_fresh_db = err != MDB_SUCCESS; if (err == MDB_SUCCESS) { is_fully_upgraded = (version_get (transaction) == version); - mdb_dbi_close (env, meta); + mdb_dbi_close (env, meta_handle); } } @@ -188,52 +190,52 @@ nano::mdb_txn_callbacks nano::mdb_store::create_txn_callbacks () const void nano::mdb_store::open_databases (bool & error_a, nano::transaction const & transaction_a, unsigned flags) { - error_a |= mdb_dbi_open (env.tx (transaction_a), "frontiers", flags, &frontiers) != 0; - error_a |= mdb_dbi_open (env.tx (transaction_a), "unchecked", flags, &unchecked) != 0; + error_a |= mdb_dbi_open (env.tx (transaction_a), "frontiers", flags, &frontiers_handle) != 0; + error_a |= mdb_dbi_open (env.tx (transaction_a), "unchecked", flags, &unchecked_handle) != 0; error_a |= mdb_dbi_open (env.tx (transaction_a), "online_weight", flags, &online_weight_handle) != 0; - error_a |= mdb_dbi_open (env.tx (transaction_a), "meta", flags, &meta) != 0; - error_a |= mdb_dbi_open (env.tx (transaction_a), "peers", flags, &peer_handle) != 0; + error_a |= mdb_dbi_open (env.tx (transaction_a), "meta", flags, &meta_handle) != 0; + error_a |= mdb_dbi_open (env.tx (transaction_a), "peers", flags, &peers_handle) != 0; error_a |= mdb_dbi_open (env.tx (transaction_a), "pruned", flags, &pruned_handle) != 0; error_a |= mdb_dbi_open (env.tx (transaction_a), "confirmation_height", flags, &confirmation_height_handle) != 0; - error_a |= mdb_dbi_open (env.tx (transaction_a), "accounts", flags, &accounts_v0) != 0; - accounts = accounts_v0; - error_a |= mdb_dbi_open (env.tx (transaction_a), "pending", flags, &pending_v0) != 0; - lmdb_pending = pending_v0; - error_a |= mdb_dbi_open (env.tx (transaction_a), "final_votes", flags, &final_vote_handle) != 0; + error_a |= mdb_dbi_open (env.tx (transaction_a), "accounts", flags, &accounts_v0_handle) != 0; + accounts_handle = accounts_v0_handle; + error_a |= mdb_dbi_open (env.tx (transaction_a), "pending", flags, &pending_v0_handle) != 0; + pending_handle = pending_v0_handle; + error_a |= mdb_dbi_open (env.tx (transaction_a), "final_votes", flags, &final_votes_handle) != 0; auto version_l = version_get (transaction_a); if (version_l < 19) { // These legacy (and state) block databases are no longer used, but need opening so they can be deleted during an upgrade - error_a |= mdb_dbi_open (env.tx (transaction_a), "send", flags, &send_blocks) != 0; - error_a |= mdb_dbi_open (env.tx (transaction_a), "receive", flags, &receive_blocks) != 0; - error_a |= mdb_dbi_open (env.tx (transaction_a), "open", flags, &open_blocks) != 0; - error_a |= mdb_dbi_open (env.tx (transaction_a), "change", flags, &change_blocks) != 0; + error_a |= mdb_dbi_open (env.tx (transaction_a), "send", flags, &send_blocks_handle) != 0; + error_a |= mdb_dbi_open (env.tx (transaction_a), "receive", flags, &receive_blocks_handle) != 0; + error_a |= mdb_dbi_open (env.tx (transaction_a), "open", flags, &open_blocks_handle) != 0; + error_a |= mdb_dbi_open (env.tx (transaction_a), "change", flags, &change_blocks_handle) != 0; if (version_l >= 15) { - error_a |= mdb_dbi_open (env.tx (transaction_a), "state_blocks", flags, &state_blocks) != 0; - state_blocks_v0 = state_blocks; + error_a |= mdb_dbi_open (env.tx (transaction_a), "state_blocks", flags, &state_blocks_handle) != 0; + state_blocks_v0_handle = state_blocks_handle; } } else { - error_a |= mdb_dbi_open (env.tx (transaction_a), "blocks", MDB_CREATE, &blocks) != 0; + error_a |= mdb_dbi_open (env.tx (transaction_a), "blocks", MDB_CREATE, &blocks_handle) != 0; } if (version_l < 16) { // The representation database is no longer used, but needs opening so that it can be deleted during an upgrade - error_a |= mdb_dbi_open (env.tx (transaction_a), "representation", flags, &representation) != 0; + error_a |= mdb_dbi_open (env.tx (transaction_a), "representation", flags, &representation_handle) != 0; } if (version_l < 15) { // These databases are no longer used, but need opening so they can be deleted during an upgrade - error_a |= mdb_dbi_open (env.tx (transaction_a), "state", flags, &state_blocks_v0) != 0; - state_blocks = state_blocks_v0; - error_a |= mdb_dbi_open (env.tx (transaction_a), "accounts_v1", flags, &accounts_v1) != 0; - error_a |= mdb_dbi_open (env.tx (transaction_a), "pending_v1", flags, &pending_v1) != 0; - error_a |= mdb_dbi_open (env.tx (transaction_a), "state_v1", flags, &state_blocks_v1) != 0; + error_a |= mdb_dbi_open (env.tx (transaction_a), "state", flags, &state_blocks_v0_handle) != 0; + state_blocks_handle = state_blocks_v0_handle; + error_a |= mdb_dbi_open (env.tx (transaction_a), "accounts_v1", flags, &accounts_v1_handle) != 0; + error_a |= mdb_dbi_open (env.tx (transaction_a), "pending_v1", flags, &pending_v1_handle) != 0; + error_a |= mdb_dbi_open (env.tx (transaction_a), "state_v1", flags, &state_blocks_v1_handle) != 0; } } @@ -298,10 +300,10 @@ void nano::mdb_store::upgrade_v14_to_v15 (nano::write_transaction & transaction_ logger.always_log ("Preparing v14 to v15 database upgrade..."); std::vector> account_infos; - upgrade_counters account_counters (count (transaction_a, accounts_v0), count (transaction_a, accounts_v1)); + upgrade_counters account_counters (count (transaction_a, accounts_v0_handle), count (transaction_a, accounts_v1_handle)); account_infos.reserve (account_counters.before_v0 + account_counters.before_v1); - nano::mdb_merge_iterator i_account (transaction_a, accounts_v0, accounts_v1); + nano::mdb_merge_iterator i_account (transaction_a, accounts_v0_handle, accounts_v1_handle); nano::mdb_merge_iterator n_account{}; for (; i_account != n_account; ++i_account) { @@ -321,13 +323,13 @@ void nano::mdb_store::upgrade_v14_to_v15 (nano::write_transaction & transaction_ debug_assert (account_counters.are_equal ()); // No longer need accounts_v1, keep v0 but clear it - mdb_drop (env.tx (transaction_a), accounts_v1, 1); - mdb_drop (env.tx (transaction_a), accounts_v0, 0); + mdb_drop (env.tx (transaction_a), accounts_v1_handle, 1); + mdb_drop (env.tx (transaction_a), accounts_v0_handle, 0); for (auto const & account_account_info_pair : account_infos) { auto const & account_info (account_account_info_pair.second); - mdb_put (env.tx (transaction_a), accounts, nano::mdb_val (account_account_info_pair.first), nano::mdb_val (account_info), MDB_APPEND); + mdb_put (env.tx (transaction_a), accounts_handle, nano::mdb_val (account_account_info_pair.first), nano::mdb_val (account_info), MDB_APPEND); } logger.always_log ("Epoch merge upgrade: Finished accounts, now doing state blocks"); @@ -338,9 +340,9 @@ void nano::mdb_store::upgrade_v14_to_v15 (nano::write_transaction & transaction_ MDB_dbi state_blocks_new; mdb_dbi_open (env.tx (transaction_a), "state_blocks", MDB_CREATE, &state_blocks_new); - upgrade_counters state_counters (count (transaction_a, state_blocks_v0), count (transaction_a, state_blocks_v1)); + upgrade_counters state_counters (count (transaction_a, state_blocks_v0_handle), count (transaction_a, state_blocks_v1_handle)); - nano::mdb_merge_iterator i_state (transaction_a, state_blocks_v0, state_blocks_v1); + nano::mdb_merge_iterator i_state (transaction_a, state_blocks_v0_handle, state_blocks_v1_handle); nano::mdb_merge_iterator n_state{}; auto num = 0u; for (; i_state != n_state; ++i_state, ++num) @@ -375,19 +377,19 @@ void nano::mdb_store::upgrade_v14_to_v15 (nano::write_transaction & transaction_ debug_assert (state_counters.are_equal ()); logger.always_log ("Epoch merge upgrade: Finished state blocks, now doing pending blocks"); - state_blocks = state_blocks_new; + state_blocks_handle = state_blocks_new; // No longer need states v0/v1 databases - mdb_drop (env.tx (transaction_a), state_blocks_v1, 1); - mdb_drop (env.tx (transaction_a), state_blocks_v0, 1); + mdb_drop (env.tx (transaction_a), state_blocks_v1_handle, 1); + mdb_drop (env.tx (transaction_a), state_blocks_v0_handle, 1); - state_blocks_v0 = state_blocks; + state_blocks_v0_handle = state_blocks_handle; - upgrade_counters pending_counters (count (transaction_a, pending_v0), count (transaction_a, pending_v1)); + upgrade_counters pending_counters (count (transaction_a, pending_v0_handle), count (transaction_a, pending_v1_handle)); std::vector> pending_infos; pending_infos.reserve (pending_counters.before_v0 + pending_counters.before_v1); - nano::mdb_merge_iterator i_pending (transaction_a, pending_v0, pending_v1); + nano::mdb_merge_iterator i_pending (transaction_a, pending_v0_handle, pending_v1_handle); nano::mdb_merge_iterator n_pending{}; for (; i_pending != n_pending; ++i_pending) { @@ -399,12 +401,12 @@ void nano::mdb_store::upgrade_v14_to_v15 (nano::write_transaction & transaction_ debug_assert (pending_counters.are_equal ()); // No longer need the pending v1 table - mdb_drop (env.tx (transaction_a), pending_v1, 1); - mdb_drop (env.tx (transaction_a), pending_v0, 0); + mdb_drop (env.tx (transaction_a), pending_v1_handle, 1); + mdb_drop (env.tx (transaction_a), pending_v0_handle, 0); for (auto const & pending_key_pending_info_pair : pending_infos) { - mdb_put (env.tx (transaction_a), lmdb_pending, nano::mdb_val (pending_key_pending_info_pair.first), nano::mdb_val (pending_key_pending_info_pair.second), MDB_APPEND); + mdb_put (env.tx (transaction_a), pending_handle, nano::mdb_val (pending_key_pending_info_pair.first), nano::mdb_val (pending_key_pending_info_pair.second), MDB_APPEND); } version_put (transaction_a, 15); @@ -414,12 +416,12 @@ void nano::mdb_store::upgrade_v14_to_v15 (nano::write_transaction & transaction_ void nano::mdb_store::upgrade_v15_to_v16 (nano::write_transaction const & transaction_a) { // Representation table is no longer used - debug_assert (representation != 0); - if (representation != 0) + debug_assert (representation_handle != 0); + if (representation_handle != 0) { - auto status (mdb_drop (env.tx (transaction_a), representation, 1)); + auto status (mdb_drop (env.tx (transaction_a), representation_handle, 1)); release_assert (status == MDB_SUCCESS); - representation = 0; + representation_handle = 0; } version_put (transaction_a, 16); } @@ -507,10 +509,10 @@ void nano::mdb_store::upgrade_v17_to_v18 (nano::write_transaction const & transa { logger.always_log ("Preparing v17 to v18 database upgrade..."); - auto count_pre (count (transaction_a, state_blocks)); + auto count_pre (count (transaction_a, state_blocks_handle)); auto num = 0u; - for (nano::mdb_iterator> state_i (transaction_a, state_blocks), state_n{}; state_i != state_n; ++state_i, ++num) + for (nano::mdb_iterator> state_i (transaction_a, state_blocks_handle), state_n{}; state_i != state_n; ++state_i, ++num) { nano::block_w_sideband_v18 block_w_sideband (state_i->second); auto & block (block_w_sideband.block); @@ -558,7 +560,7 @@ void nano::mdb_store::upgrade_v17_to_v18 (nano::write_transaction const & transa } } - auto count_post (count (transaction_a, state_blocks)); + auto count_post (count (transaction_a, state_blocks_handle)); release_assert (count_pre == count_post); version_put (transaction_a, 18); @@ -568,38 +570,38 @@ void nano::mdb_store::upgrade_v17_to_v18 (nano::write_transaction const & transa void nano::mdb_store::upgrade_v18_to_v19 (nano::write_transaction const & transaction_a) { logger.always_log ("Preparing v18 to v19 database upgrade..."); - auto count_pre (count (transaction_a, state_blocks) + count (transaction_a, send_blocks) + count (transaction_a, receive_blocks) + count (transaction_a, change_blocks) + count (transaction_a, open_blocks)); + auto count_pre (count (transaction_a, state_blocks_handle) + count (transaction_a, send_blocks_handle) + count (transaction_a, receive_blocks_handle) + count (transaction_a, change_blocks_handle) + count (transaction_a, open_blocks_handle)); // Combine in order of likeliness of counts std::map legacy_open_receive_change_blocks; - for (auto i (nano::store_iterator> (std::make_unique>> (transaction_a, change_blocks))), n (nano::store_iterator> (nullptr)); i != n; ++i) + for (auto i (nano::store_iterator> (std::make_unique>> (transaction_a, change_blocks_handle))), n (nano::store_iterator> (nullptr)); i != n; ++i) { nano::block_sideband_v18 const & old_sideband (i->second.sideband); nano::block_sideband new_sideband (old_sideband.account, old_sideband.successor, old_sideband.balance, old_sideband.height, old_sideband.timestamp, nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0); legacy_open_receive_change_blocks[i->first] = { nano::block_w_sideband{ i->second.block, new_sideband } }; } - for (auto i (nano::store_iterator> (std::make_unique>> (transaction_a, open_blocks))), n (nano::store_iterator> (nullptr)); i != n; ++i) + for (auto i (nano::store_iterator> (std::make_unique>> (transaction_a, open_blocks_handle))), n (nano::store_iterator> (nullptr)); i != n; ++i) { nano::block_sideband_v18 const & old_sideband (i->second.sideband); nano::block_sideband new_sideband (old_sideband.account, old_sideband.successor, old_sideband.balance, old_sideband.height, old_sideband.timestamp, nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0); legacy_open_receive_change_blocks[i->first] = { nano::block_w_sideband{ i->second.block, new_sideband } }; } - for (auto i (nano::store_iterator> (std::make_unique>> (transaction_a, receive_blocks))), n (nano::store_iterator> (nullptr)); i != n; ++i) + for (auto i (nano::store_iterator> (std::make_unique>> (transaction_a, receive_blocks_handle))), n (nano::store_iterator> (nullptr)); i != n; ++i) { nano::block_sideband_v18 const & old_sideband (i->second.sideband); nano::block_sideband new_sideband (old_sideband.account, old_sideband.successor, old_sideband.balance, old_sideband.height, old_sideband.timestamp, nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0); legacy_open_receive_change_blocks[i->first] = { nano::block_w_sideband{ i->second.block, new_sideband } }; } - release_assert (!mdb_drop (env.tx (transaction_a), receive_blocks, 1)); - receive_blocks = 0; - release_assert (!mdb_drop (env.tx (transaction_a), open_blocks, 1)); - open_blocks = 0; - release_assert (!mdb_drop (env.tx (transaction_a), change_blocks, 1)); - change_blocks = 0; + release_assert (!mdb_drop (env.tx (transaction_a), receive_blocks_handle, 1)); + receive_blocks_handle = 0; + release_assert (!mdb_drop (env.tx (transaction_a), open_blocks_handle, 1)); + open_blocks_handle = 0; + release_assert (!mdb_drop (env.tx (transaction_a), change_blocks_handle, 1)); + change_blocks_handle = 0; logger.always_log ("Write legacy open/receive/change to new format"); @@ -629,7 +631,7 @@ void nano::mdb_store::upgrade_v18_to_v19 (nano::write_transaction const & transa { mdb_dbi_open (env.tx (transaction_a), "temp_legacy_send_blocks", MDB_CREATE, &temp_legacy_send_blocks); - for (auto i (nano::store_iterator> (std::make_unique>> (transaction_a, send_blocks))), n (nano::store_iterator> (nullptr)); i != n; ++i) + for (auto i (nano::store_iterator> (std::make_unique>> (transaction_a, send_blocks_handle))), n (nano::store_iterator> (nullptr)); i != n; ++i) { auto const & block_w_sideband_v18 (i->second); @@ -646,8 +648,8 @@ void nano::mdb_store::upgrade_v18_to_v19 (nano::write_transaction const & transa } } - release_assert (!mdb_drop (env.tx (transaction_a), send_blocks, 1)); - send_blocks = 0; + release_assert (!mdb_drop (env.tx (transaction_a), send_blocks_handle, 1)); + send_blocks_handle = 0; logger.always_log ("Merge legacy open/receive/change with legacy send blocks"); @@ -676,7 +678,7 @@ void nano::mdb_store::upgrade_v18_to_v19 (nano::write_transaction const & transa auto type_state (nano::block_type::state); mdb_dbi_open (env.tx (transaction_a), "temp_state_blocks", MDB_CREATE, &temp_state_blocks); - for (auto i (nano::store_iterator> (std::make_unique>> (transaction_a, state_blocks))), n (nano::store_iterator> (nullptr)); i != n; ++i) + for (auto i (nano::store_iterator> (std::make_unique>> (transaction_a, state_blocks_handle))), n (nano::store_iterator> (nullptr)); i != n; ++i) { auto const & block_w_sideband_v18 (i->second); nano::block_sideband_v18 const & old_sideband (block_w_sideband_v18.sideband); @@ -711,18 +713,18 @@ void nano::mdb_store::upgrade_v18_to_v19 (nano::write_transaction const & transa } } - release_assert (!mdb_drop (env.tx (transaction_a), state_blocks, 1)); - state_blocks = 0; + release_assert (!mdb_drop (env.tx (transaction_a), state_blocks_handle, 1)); + state_blocks_handle = 0; logger.always_log ("Merging all legacy blocks with state blocks"); // Merge all legacy blocks with state blocks into the final table nano::mdb_merge_iterator i (transaction_a, temp_legacy_send_open_receive_change_blocks, temp_state_blocks); nano::mdb_merge_iterator n{}; - mdb_dbi_open (env.tx (transaction_a), "blocks", MDB_CREATE, &blocks); + mdb_dbi_open (env.tx (transaction_a), "blocks", MDB_CREATE, &blocks_handle); for (; i != n; ++i) { - auto s = mdb_put (env.tx (transaction_a), blocks, nano::mdb_val (i->first), nano::mdb_val (i->second), MDB_APPEND); + auto s = mdb_put (env.tx (transaction_a), blocks_handle, nano::mdb_val (i->first), nano::mdb_val (i->second), MDB_APPEND); release_assert_success (*this, s); } @@ -730,7 +732,7 @@ void nano::mdb_store::upgrade_v18_to_v19 (nano::write_transaction const & transa mdb_drop (env.tx (transaction_a), temp_legacy_send_open_receive_change_blocks, 1); mdb_drop (env.tx (transaction_a), temp_state_blocks, 1); - auto count_post (count (transaction_a, blocks)); + auto count_post (count (transaction_a, blocks_handle)); release_assert (count_pre == count_post); MDB_dbi vote{ 0 }; @@ -752,7 +754,7 @@ void nano::mdb_store::upgrade_v19_to_v20 (nano::write_transaction const & transa void nano::mdb_store::upgrade_v20_to_v21 (nano::write_transaction const & transaction_a) { logger.always_log ("Preparing v20 to v21 database upgrade..."); - mdb_dbi_open (env.tx (transaction_a), "final_votes", MDB_CREATE, &final_vote_handle); + mdb_dbi_open (env.tx (transaction_a), "final_votes", MDB_CREATE, &final_votes_handle); version_put (transaction_a, 21); logger.always_log ("Finished creating new final_vote table"); } @@ -788,10 +790,10 @@ void nano::mdb_store::create_backup_file (nano::mdb_env & env_a, boost::filesyst } } -std::vector nano::mdb_store::unchecked_get (nano::transaction const & transaction_a, nano::block_hash const & hash_a) +std::vector nano::unchecked_mdb_store::get (nano::transaction const & transaction_a, nano::block_hash const & hash_a) { std::vector result; - for (auto i (unchecked_begin (transaction_a, nano::unchecked_key (hash_a, 0))), n (unchecked_end ()); i != n && i->first.key () == hash_a; ++i) + for (auto i (begin (transaction_a, nano::unchecked_key (hash_a, 0))), n (end ()); i != n && i->first.key () == hash_a; ++i) { nano::unchecked_info const & unchecked_info (i->second); result.push_back (unchecked_info); @@ -799,11 +801,14 @@ std::vector nano::mdb_store::unchecked_get (nano::transact return result; } +nano::unchecked_mdb_store::unchecked_mdb_store (nano::mdb_store & mdb_store_a) : + unchecked_store_partial (mdb_store_a){}; + void nano::mdb_store::version_put (nano::write_transaction const & transaction_a, int version_a) { nano::uint256_union version_key (1); nano::uint256_union version_value (version_a); - auto status (mdb_put (env.tx (transaction_a), meta, nano::mdb_val (version_key), nano::mdb_val (version_value), 0)); + auto status (mdb_put (env.tx (transaction_a), meta_handle, nano::mdb_val (version_key), nano::mdb_val (version_value), 0)); release_assert_success (*this, status); } @@ -858,30 +863,30 @@ MDB_dbi nano::mdb_store::table_to_dbi (tables table_a) const switch (table_a) { case tables::frontiers: - return frontiers; + return frontiers_handle; case tables::accounts: - return accounts; + return accounts_handle; case tables::blocks: - return blocks; + return blocks_handle; case tables::pending: - return lmdb_pending; + return pending_handle; case tables::unchecked: - return unchecked; + return unchecked_handle; case tables::online_weight: return online_weight_handle; case tables::meta: - return meta; + return meta_handle; case tables::peers: - return peer_handle; + return peers_handle; case tables::pruned: return pruned_handle; case tables::confirmation_height: return confirmation_height_handle; case tables::final_votes: - return final_vote_handle; + return final_votes_handle; default: release_assert (false); - return peer_handle; + return peers_handle; } } @@ -913,7 +918,7 @@ bool nano::mdb_store::copy_db (boost::filesystem::path const & destination_file) void nano::mdb_store::rebuild_db (nano::write_transaction const & transaction_a) { // Tables with uint256_union key - std::vector tables = { accounts, blocks, pruned_handle, confirmation_height_handle }; + std::vector tables = { accounts_handle, blocks_handle, pruned_handle, confirmation_height_handle }; for (auto const & table : tables) { MDB_dbi temp; @@ -942,20 +947,20 @@ void nano::mdb_store::rebuild_db (nano::write_transaction const & transaction_a) MDB_dbi temp; mdb_dbi_open (env.tx (transaction_a), "temp_table", MDB_CREATE, &temp); // Copy all values to temporary table - for (auto i (nano::store_iterator (std::make_unique> (transaction_a, lmdb_pending))), n (nano::store_iterator (nullptr)); i != n; ++i) + for (auto i (nano::store_iterator (std::make_unique> (transaction_a, pending_handle))), n (nano::store_iterator (nullptr)); i != n; ++i) { auto s = mdb_put (env.tx (transaction_a), temp, nano::mdb_val (i->first), nano::mdb_val (i->second), MDB_APPEND); release_assert_success (*this, s); } - release_assert (count (transaction_a, lmdb_pending) == count (transaction_a, temp)); - mdb_drop (env.tx (transaction_a), lmdb_pending, 0); + release_assert (count (transaction_a, pending_handle) == count (transaction_a, temp)); + mdb_drop (env.tx (transaction_a), pending_handle, 0); // Put values from copy for (auto i (nano::store_iterator (std::make_unique> (transaction_a, temp))), n (nano::store_iterator (nullptr)); i != n; ++i) { - auto s = mdb_put (env.tx (transaction_a), lmdb_pending, nano::mdb_val (i->first), nano::mdb_val (i->second), MDB_APPEND); + auto s = mdb_put (env.tx (transaction_a), pending_handle, nano::mdb_val (i->first), nano::mdb_val (i->second), MDB_APPEND); release_assert_success (*this, s); } - release_assert (count (transaction_a, lmdb_pending) == count (transaction_a, temp)); + release_assert (count (transaction_a, pending_handle) == count (transaction_a, temp)); mdb_drop (env.tx (transaction_a), temp, 1); } } @@ -1011,27 +1016,27 @@ boost::optional nano::mdb_store::block_raw_get_by_type_v18 (nano: { case nano::block_type::send: { - status = mdb_get (env.tx (transaction_a), send_blocks, hash, value); + status = mdb_get (env.tx (transaction_a), send_blocks_handle, hash, value); break; } case nano::block_type::receive: { - status = mdb_get (env.tx (transaction_a), receive_blocks, hash, value); + status = mdb_get (env.tx (transaction_a), receive_blocks_handle, hash, value); break; } case nano::block_type::open: { - status = mdb_get (env.tx (transaction_a), open_blocks, hash, value); + status = mdb_get (env.tx (transaction_a), open_blocks_handle, hash, value); break; } case nano::block_type::change: { - status = mdb_get (env.tx (transaction_a), change_blocks, hash, value); + status = mdb_get (env.tx (transaction_a), change_blocks_handle, hash, value); break; } case nano::block_type::state: { - status = mdb_get (env.tx (transaction_a), state_blocks, hash, value); + status = mdb_get (env.tx (transaction_a), state_blocks_handle, hash, value); break; } case nano::block_type::invalid: @@ -1112,34 +1117,34 @@ boost::optional nano::mdb_store::block_raw_get_by_type_v14 (nano: { case nano::block_type::send: { - status = mdb_get (env.tx (transaction_a), send_blocks, hash, value); + status = mdb_get (env.tx (transaction_a), send_blocks_handle, hash, value); break; } case nano::block_type::receive: { - status = mdb_get (env.tx (transaction_a), receive_blocks, hash, value); + status = mdb_get (env.tx (transaction_a), receive_blocks_handle, hash, value); break; } case nano::block_type::open: { - status = mdb_get (env.tx (transaction_a), open_blocks, hash, value); + status = mdb_get (env.tx (transaction_a), open_blocks_handle, hash, value); break; } case nano::block_type::change: { - status = mdb_get (env.tx (transaction_a), change_blocks, hash, value); + status = mdb_get (env.tx (transaction_a), change_blocks_handle, hash, value); break; } case nano::block_type::state: { - status = mdb_get (env.tx (transaction_a), state_blocks_v1, hash, value); + status = mdb_get (env.tx (transaction_a), state_blocks_v1_handle, hash, value); if (is_state_v1 != nullptr) { *is_state_v1 = success (status); } if (not_found (status)) { - status = mdb_get (env.tx (transaction_a), state_blocks_v0, hash, value); + status = mdb_get (env.tx (transaction_a), state_blocks_v0_handle, hash, value); } break; } @@ -1198,3 +1203,4 @@ unsigned nano::mdb_store::max_block_write_batch_num () const // Explicitly instantiate template class nano::block_store_partial; +template class nano::unchecked_store_partial; diff --git a/nano/node/lmdb/lmdb.hpp b/nano/node/lmdb/lmdb.hpp index a586a36f26..0db4968118 100644 --- a/nano/node/lmdb/lmdb.hpp +++ b/nano/node/lmdb/lmdb.hpp @@ -9,6 +9,7 @@ #include #include #include +#include #include #include @@ -28,14 +29,22 @@ namespace nano using mdb_val = db_val; class logging_mt; +class mdb_store; + +class unchecked_mdb_store : public unchecked_store_partial +{ +public: + explicit unchecked_mdb_store (nano::mdb_store &); + std::vector get (nano::transaction const &, nano::block_hash const &); +}; + /** * mdb implementation of the block store */ class mdb_store : public block_store_partial { public: - using block_store_partial::block_exists; - using block_store_partial::unchecked_put; + friend class nano::unchecked_mdb_store; mdb_store (nano::logger_mt &, boost::filesystem::path const &, nano::txn_tracking_config const & txn_tracking_config_a = nano::txn_tracking_config{}, std::chrono::milliseconds block_processor_batch_max_time_a = std::chrono::milliseconds (5000), nano::lmdb_config const & lmdb_config_a = nano::lmdb_config{}, bool backup_before_upgrade = false); nano::write_transaction tx_begin_write (std::vector const & tables_requiring_lock = {}, std::vector const & tables_no_lock = {}) override; @@ -54,6 +63,8 @@ class mdb_store : public block_store_partial unsigned max_block_write_batch_num () const override; private: + nano::unchecked_mdb_store unchecked_mdb_store; + nano::logger_mt & logger; bool error{ false }; @@ -64,97 +75,97 @@ class mdb_store : public block_store_partial * Maps head block to owning account * nano::block_hash -> nano::account */ - MDB_dbi frontiers{ 0 }; + MDB_dbi frontiers_handle{ 0 }; /** * Maps account v1 to account information, head, rep, open, balance, timestamp and block count. (Removed) * nano::account -> nano::block_hash, nano::block_hash, nano::block_hash, nano::amount, uint64_t, uint64_t */ - MDB_dbi accounts_v0{ 0 }; + MDB_dbi accounts_v0_handle{ 0 }; /** * Maps account v0 to account information, head, rep, open, balance, timestamp and block count. (Removed) * nano::account -> nano::block_hash, nano::block_hash, nano::block_hash, nano::amount, uint64_t, uint64_t */ - MDB_dbi accounts_v1{ 0 }; + MDB_dbi accounts_v1_handle{ 0 }; /** * Maps account v0 to account information, head, rep, open, balance, timestamp, block count and epoch * nano::account -> nano::block_hash, nano::block_hash, nano::block_hash, nano::amount, uint64_t, uint64_t, nano::epoch */ - MDB_dbi accounts{ 0 }; + MDB_dbi accounts_handle{ 0 }; /** * Maps block hash to send block. (Removed) * nano::block_hash -> nano::send_block */ - MDB_dbi send_blocks{ 0 }; + MDB_dbi send_blocks_handle{ 0 }; /** * Maps block hash to receive block. (Removed) * nano::block_hash -> nano::receive_block */ - MDB_dbi receive_blocks{ 0 }; + MDB_dbi receive_blocks_handle{ 0 }; /** * Maps block hash to open block. (Removed) * nano::block_hash -> nano::open_block */ - MDB_dbi open_blocks{ 0 }; + MDB_dbi open_blocks_handle{ 0 }; /** * Maps block hash to change block. (Removed) * nano::block_hash -> nano::change_block */ - MDB_dbi change_blocks{ 0 }; + MDB_dbi change_blocks_handle{ 0 }; /** * Maps block hash to v0 state block. (Removed) * nano::block_hash -> nano::state_block */ - MDB_dbi state_blocks_v0{ 0 }; + MDB_dbi state_blocks_v0_handle{ 0 }; /** * Maps block hash to v1 state block. (Removed) * nano::block_hash -> nano::state_block */ - MDB_dbi state_blocks_v1{ 0 }; + MDB_dbi state_blocks_v1_handle{ 0 }; /** * Maps block hash to state block. (Removed) * nano::block_hash -> nano::state_block */ - MDB_dbi state_blocks{ 0 }; + MDB_dbi state_blocks_handle{ 0 }; /** * Maps min_version 0 (destination account, pending block) to (source account, amount). (Removed) * nano::account, nano::block_hash -> nano::account, nano::amount */ - MDB_dbi pending_v0{ 0 }; + MDB_dbi pending_v0_handle{ 0 }; /** * Maps min_version 1 (destination account, pending block) to (source account, amount). (Removed) * nano::account, nano::block_hash -> nano::account, nano::amount */ - MDB_dbi pending_v1{ 0 }; + MDB_dbi pending_v1_handle{ 0 }; /** * Maps (destination account, pending block) to (source account, amount, version). (Removed) * nano::account, nano::block_hash -> nano::account, nano::amount, nano::epoch */ - MDB_dbi lmdb_pending{ 0 }; + MDB_dbi pending_handle{ 0 }; /** * Representative weights. (Removed) * nano::account -> nano::uint128_t */ - MDB_dbi representation{ 0 }; + MDB_dbi representation_handle{ 0 }; /** * Unchecked bootstrap blocks info. * nano::block_hash -> nano::unchecked_info */ - MDB_dbi unchecked{ 0 }; + MDB_dbi unchecked_handle{ 0 }; /** * Samples of online vote weight @@ -166,7 +177,7 @@ class mdb_store : public block_store_partial * Meta information about block store, such as versions. * nano::uint256_union (arbitrary key) -> blob */ - MDB_dbi meta{ 0 }; + MDB_dbi meta_handle{ 0 }; /** * Pruned blocks hashes @@ -178,7 +189,7 @@ class mdb_store : public block_store_partial * Endpoints for peers * nano::endpoint_key -> no_value */ - MDB_dbi peer_handle{ 0 }; + MDB_dbi peers_handle{ 0 }; /* * Confirmation height of an account, and the hash for the block at that height @@ -190,16 +201,15 @@ class mdb_store : public block_store_partial * Contains block_sideband and block for all block types (legacy send/change/open/receive & state blocks) * nano::block_hash -> nano::block_sideband, nano::block */ - MDB_dbi blocks{ 0 }; + MDB_dbi blocks_handle{ 0 }; /** * Maps root to block hash for generated final votes. * nano::qualified_root -> nano::block_hash */ - MDB_dbi final_vote_handle{ 0 }; + MDB_dbi final_votes_handle{ 0 }; bool exists (nano::transaction const & transaction_a, tables table_a, nano::mdb_val const & key_a) const; - std::vector unchecked_get (nano::transaction const & transaction_a, nano::block_hash const & hash_a) override; int get (nano::transaction const & transaction_a, tables table_a, nano::mdb_val const & key_a, nano::mdb_val & value_a) const; int put (nano::write_transaction const & transaction_a, tables table_a, nano::mdb_val const & key_a, const nano::mdb_val & value_a) const; diff --git a/nano/node/node.cpp b/nano/node/node.cpp index e894880830..adcee0920e 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -406,7 +406,7 @@ nano::node::node (boost::asio::io_context & io_ctx_a, boost::filesystem::path co if (!flags.disable_unchecked_drop && !use_bootstrap_weight && !flags.read_only) { auto transaction (store.tx_begin_write ({ tables::unchecked })); - store.unchecked_clear (transaction); + store.unchecked.clear (transaction); logger.always_log ("Dropping unchecked blocks"); } } @@ -921,7 +921,7 @@ void nano::node::unchecked_cleanup () auto now (nano::seconds_since_epoch ()); auto transaction (store.tx_begin_read ()); // Max 1M records to clean, max 2 minutes reading to prevent slow i/o systems issues - for (auto i (store.unchecked_begin (transaction)), n (store.unchecked_end ()); i != n && cleaning_list.size () < 1024 * 1024 && nano::seconds_since_epoch () - now < 120; ++i) + for (auto i (store.unchecked.begin (transaction)), n (store.unchecked.end ()); i != n && cleaning_list.size () < 1024 * 1024 && nano::seconds_since_epoch () - now < 120; ++i) { nano::unchecked_key const & key (i->first); nano::unchecked_info const & info (i->second); @@ -945,9 +945,9 @@ void nano::node::unchecked_cleanup () { auto key (cleaning_list.front ()); cleaning_list.pop_front (); - if (store.unchecked_exists (transaction, key)) + if (store.unchecked.exists (transaction, key)) { - store.unchecked_del (transaction, key); + store.unchecked.del (transaction, key); } } } diff --git a/nano/node/rocksdb/rocksdb.cpp b/nano/node/rocksdb/rocksdb.cpp index 74b8578910..cdec1cff78 100644 --- a/nano/node/rocksdb/rocksdb.cpp +++ b/nano/node/rocksdb/rocksdb.cpp @@ -64,6 +64,8 @@ void rocksdb_val::convert_buffer_to_value () } nano::rocksdb_store::rocksdb_store (nano::logger_mt & logger_a, boost::filesystem::path const & path_a, nano::rocksdb_config const & rocksdb_config_a, bool open_read_only_a) : + block_store_partial{ unchecked_rocksdb_store }, + unchecked_rocksdb_store{ *this }, logger{ logger_a }, rocksdb_config{ rocksdb_config_a }, max_block_write_batch_num_m{ nano::narrow_cast (blocks_memtable_size_bytes () / (2 * (sizeof (nano::block_type) + nano::state_block::size + nano::block_sideband::size (nano::block_type::state)))) }, @@ -590,9 +592,13 @@ int nano::rocksdb_store::clear (rocksdb::ColumnFamilyHandle * column_family) return status.code (); } -std::vector nano::rocksdb_store::unchecked_get (nano::transaction const & transaction_a, nano::block_hash const & hash_a) +nano::unchecked_rocksdb_store::unchecked_rocksdb_store (nano::rocksdb_store & rocksdb_store_a) : + nano::unchecked_store_partial (rocksdb_store_a), + rocksdb_store{ rocksdb_store_a } {}; + +std::vector nano::unchecked_rocksdb_store::get (nano::transaction const & transaction_a, nano::block_hash const & hash_a) { - auto cf = table_to_column_family (tables::unchecked); + auto cf = rocksdb_store.table_to_column_family (tables::unchecked); std::unique_ptr iter; nano::qualified_root upper (hash_a, nano::block_hash (std::numeric_limits::max ())); @@ -604,7 +610,7 @@ std::vector nano::rocksdb_store::unchecked_get (nano::tran read_options.auto_prefix_mode = true; read_options.iterate_upper_bound = upper_bound; read_options.fill_cache = false; - iter.reset (db->NewIterator (read_options, cf)); + iter.reset (rocksdb_store.db->NewIterator (read_options, cf)); } else { @@ -613,7 +619,7 @@ std::vector nano::rocksdb_store::unchecked_get (nano::tran read_options.auto_prefix_mode = true; read_options.iterate_upper_bound = upper_bound; read_options.fill_cache = false; - iter.reset (tx (transaction_a)->GetIterator (read_options, cf)); + iter.reset (rocksdb_store.tx (transaction_a)->GetIterator (read_options, cf)); } // Uses prefix extraction @@ -914,3 +920,4 @@ nano::rocksdb_store::tombstone_info::tombstone_info (uint64_t num_since_last_flu // Explicitly instantiate template class nano::block_store_partial; +//template class nano::unchecked_store_partial; \ No newline at end of file diff --git a/nano/node/rocksdb/rocksdb.hpp b/nano/node/rocksdb/rocksdb.hpp index 6a5ab11571..93fda92024 100644 --- a/nano/node/rocksdb/rocksdb.hpp +++ b/nano/node/rocksdb/rocksdb.hpp @@ -6,6 +6,7 @@ #include #include #include +#include #include #include @@ -19,6 +20,17 @@ namespace nano { class logging_mt; class rocksdb_config; +class rocksdb_store; + +class unchecked_rocksdb_store : public unchecked_store_partial +{ +public: + explicit unchecked_rocksdb_store (nano::rocksdb_store &); + std::vector get (nano::transaction const &, nano::block_hash const &); + +private: + nano::rocksdb_store & rocksdb_store; +}; /** * rocksdb implementation of the block store @@ -26,7 +38,10 @@ class rocksdb_config; class rocksdb_store : public block_store_partial { public: - rocksdb_store (nano::logger_mt &, boost::filesystem::path const &, nano::rocksdb_config const & = nano::rocksdb_config{}, bool open_read_only = false); + friend class nano::unchecked_rocksdb_store; + + explicit rocksdb_store (nano::logger_mt &, boost::filesystem::path const &, nano::rocksdb_config const & = nano::rocksdb_config{}, bool open_read_only = false); + nano::write_transaction tx_begin_write (std::vector const & tables_requiring_lock = {}, std::vector const & tables_no_lock = {}) override; nano::read_transaction tx_begin_read () const override; @@ -34,7 +49,6 @@ class rocksdb_store : public block_store_partial uint64_t count (nano::transaction const & transaction_a, tables table_a) const override; void version_put (nano::write_transaction const &, int) override; - std::vector unchecked_get (nano::transaction const & transaction_a, nano::block_hash const & hash_a) override; bool exists (nano::transaction const & transaction_a, tables table_a, nano::rocksdb_val const & key_a) const; int get (nano::transaction const & transaction_a, tables table_a, nano::rocksdb_val const & key_a, nano::rocksdb_val & value_a) const; @@ -65,6 +79,8 @@ class rocksdb_store : public block_store_partial std::string error_string (int status) const override; private: + nano::unchecked_rocksdb_store unchecked_rocksdb_store; + bool error{ false }; nano::logger_mt & logger; // Optimistic transactions are used in write mode diff --git a/nano/node/telemetry.cpp b/nano/node/telemetry.cpp index e370e49ac3..0610d74498 100644 --- a/nano/node/telemetry.cpp +++ b/nano/node/telemetry.cpp @@ -633,7 +633,7 @@ nano::telemetry_data nano::local_telemetry_data (nano::ledger const & ledger_a, telemetry_data.bandwidth_cap = bandwidth_limit_a; telemetry_data.protocol_version = network_params_a.protocol.protocol_version; telemetry_data.uptime = std::chrono::duration_cast (std::chrono::steady_clock::now () - statup_time_a).count (); - telemetry_data.unchecked_count = ledger_a.store.unchecked_count (ledger_a.store.tx_begin_read ()); + telemetry_data.unchecked_count = ledger_a.store.unchecked.count (ledger_a.store.tx_begin_read ()); telemetry_data.genesis_block = network_params_a.ledger.genesis_hash; telemetry_data.peer_count = nano::narrow_cast (network_a.size ()); telemetry_data.account_count = ledger_a.cache.account_count; diff --git a/nano/qt/qt.cpp b/nano/qt/qt.cpp index 6029dfcf90..5a038fa11c 100644 --- a/nano/qt/qt.cpp +++ b/nano/qt/qt.cpp @@ -923,7 +923,7 @@ std::string nano_qt::status::text () std::string count_string; { auto size (wallet.wallet_m->wallets.node.ledger.cache.block_count.load ()); - unchecked = wallet.wallet_m->wallets.node.store.unchecked_count (wallet.wallet_m->wallets.node.store.tx_begin_read ()); + unchecked = wallet.wallet_m->wallets.node.store.unchecked.count (wallet.wallet_m->wallets.node.store.tx_begin_read ()); count_string = std::to_string (size); } diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index da8fe13b27..ca38afe9a1 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -6433,14 +6433,14 @@ TEST (rpc, unchecked_clear) node.block_processor.flush (); boost::property_tree::ptree request; { - ASSERT_EQ (node.store.unchecked_count (node.store.tx_begin_read ()), 1); + ASSERT_EQ (node.store.unchecked.count (node.store.tx_begin_read ()), 1); } request.put ("action", "unchecked_clear"); test_response response (request, rpc.config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); - ASSERT_TIMELY (10s, node.store.unchecked_count (node.store.tx_begin_read ()) == 0); + ASSERT_TIMELY (10s, node.store.unchecked.count (node.store.tx_begin_read ()) == 0); } TEST (rpc, unopened) diff --git a/nano/secure/CMakeLists.txt b/nano/secure/CMakeLists.txt index b8468d2295..1117371919 100644 --- a/nano/secure/CMakeLists.txt +++ b/nano/secure/CMakeLists.txt @@ -61,6 +61,7 @@ add_library( store/pruned_store_partial.hpp store/peer_store_partial.hpp store/confirmation_height_store_partial.hpp + store/unchecked_store_partial.hpp store/final_vote_store_partial.hpp) target_link_libraries( diff --git a/nano/secure/blockstore.cpp b/nano/secure/blockstore.cpp index f20edab11e..5e8711c3fa 100644 --- a/nano/secure/blockstore.cpp +++ b/nano/secure/blockstore.cpp @@ -105,10 +105,11 @@ bool nano::write_transaction::contains (nano::tables table_a) const return impl->contains (table_a); } -nano::block_store::block_store (nano::frontier_store & frontier_store_a, nano::account_store & account_store_a, nano::pending_store & pending_store_a, nano::online_weight_store & online_weight_store_a, nano::pruned_store & pruned_store_a, nano::peer_store & peer_store_a, nano::confirmation_height_store & confirmation_height_store_a, nano::final_vote_store & final_vote_store_a) : +nano::block_store::block_store (nano::frontier_store & frontier_store_a, nano::account_store & account_store_a, nano::pending_store & pending_store_a, nano::unchecked_store & unchecked_store_a, nano::online_weight_store & online_weight_store_a, nano::pruned_store & pruned_store_a, nano::peer_store & peer_store_a, nano::confirmation_height_store & confirmation_height_store_a, nano::final_vote_store & final_vote_store_a) : frontier (frontier_store_a), account (account_store_a), pending (pending_store_a), + unchecked (unchecked_store_a), online_weight (online_weight_store_a), pruned (pruned_store_a), peer (peer_store_a), diff --git a/nano/secure/blockstore.hpp b/nano/secure/blockstore.hpp index 361c5f5fc5..b38086b790 100644 --- a/nano/secure/blockstore.hpp +++ b/nano/secure/blockstore.hpp @@ -737,6 +737,25 @@ class confirmation_height_store virtual void for_each_par (std::function, nano::store_iterator)> const &) const = 0; }; +/** + * Manages unchecked storage and iteration + */ +class unchecked_store +{ +public: + virtual void clear (nano::write_transaction const &) = 0; + virtual void put (nano::write_transaction const &, nano::unchecked_key const &, nano::unchecked_info const &) = 0; + virtual void put (nano::write_transaction const &, nano::block_hash const &, std::shared_ptr const &) = 0; + virtual std::vector get (nano::transaction const &, nano::block_hash const &) = 0; + virtual bool exists (nano::transaction const & transaction_a, nano::unchecked_key const & unchecked_key_a) = 0; + virtual void del (nano::write_transaction const &, nano::unchecked_key const &) = 0; + virtual nano::store_iterator begin (nano::transaction const &) const = 0; + virtual nano::store_iterator begin (nano::transaction const &, nano::unchecked_key const &) const = 0; + virtual nano::store_iterator end () const = 0; + virtual size_t count (nano::transaction const &) = 0; + virtual void for_each_par (std::function, nano::store_iterator)> const & action_a) const = 0; +}; + /** * Manages final vote storage and iteration */ @@ -761,7 +780,7 @@ class final_vote_store class block_store { public: - explicit block_store (nano::frontier_store &, nano::account_store &, nano::pending_store &, nano::online_weight_store &, nano::pruned_store &, nano::peer_store &, nano::confirmation_height_store &, nano::final_vote_store &); + explicit block_store (nano::frontier_store &, nano::account_store &, nano::pending_store &, nano::unchecked_store &, nano::online_weight_store &, nano::pruned_store &, nano::peer_store &, nano::confirmation_height_store &, nano::final_vote_store &); virtual ~block_store () = default; virtual void initialize (nano::write_transaction const &, nano::genesis const &, nano::ledger_cache &) = 0; virtual void block_put (nano::write_transaction const &, nano::block_hash const &, nano::block const &) = 0; @@ -789,16 +808,7 @@ class block_store virtual nano::uint128_t block_balance_calculated (std::shared_ptr const &) const = 0; virtual nano::epoch block_version (nano::transaction const &, nano::block_hash const &) = 0; - virtual void unchecked_clear (nano::write_transaction const &) = 0; - virtual void unchecked_put (nano::write_transaction const &, nano::unchecked_key const &, nano::unchecked_info const &) = 0; - virtual void unchecked_put (nano::write_transaction const &, nano::block_hash const &, std::shared_ptr const &) = 0; - virtual std::vector unchecked_get (nano::transaction const &, nano::block_hash const &) = 0; - virtual bool unchecked_exists (nano::transaction const & transaction_a, nano::unchecked_key const & unchecked_key_a) = 0; - virtual void unchecked_del (nano::write_transaction const &, nano::unchecked_key const &) = 0; - virtual nano::store_iterator unchecked_begin (nano::transaction const &) const = 0; - virtual nano::store_iterator unchecked_begin (nano::transaction const &, nano::unchecked_key const &) const = 0; - virtual nano::store_iterator unchecked_end () const = 0; - virtual size_t unchecked_count (nano::transaction const &) = 0; + unchecked_store & unchecked; online_weight_store & online_weight; @@ -811,7 +821,6 @@ class block_store confirmation_height_store & confirmation_height; - virtual void unchecked_for_each_par (std::function, nano::store_iterator)> const & action_a) const = 0; virtual void blocks_for_each_par (std::function, nano::store_iterator)> const & action_a) const = 0; virtual uint64_t block_account_height (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const = 0; diff --git a/nano/secure/blockstore_partial.hpp b/nano/secure/blockstore_partial.hpp index 5243d50dd1..6c22a49571 100644 --- a/nano/secure/blockstore_partial.hpp +++ b/nano/secure/blockstore_partial.hpp @@ -14,6 +14,7 @@ #include #include #include +#include #include @@ -39,6 +40,9 @@ void release_assert_success (block_store_partial const & blo } } +template +class unchecked_store_partial; + /** This base class implements the block_store interface functions which have DB agnostic functionality */ template class block_store_partial : public block_store @@ -46,6 +50,7 @@ class block_store_partial : public block_store nano::frontier_store_partial frontier_store_partial; nano::account_store_partial account_store_partial; nano::pending_store_partial pending_store_partial; + nano::unchecked_store_partial & unchecked_store_partial; nano::online_weight_store_partial online_weight_store_partial; nano::pruned_store_partial pruned_store_partial; nano::peer_store_partial peer_store_partial; @@ -56,23 +61,24 @@ class block_store_partial : public block_store public: using block_store::block_exists; - using block_store::unchecked_put; friend class nano::block_predecessor_set; friend class nano::frontier_store_partial; friend class nano::account_store_partial; friend class nano::pending_store_partial; + friend class nano::unchecked_store_partial; friend class nano::online_weight_store_partial; friend class nano::pruned_store_partial; friend class nano::peer_store_partial; friend class nano::confirmation_height_store_partial; friend class nano::final_vote_store_partial; - block_store_partial () : - block_store{ frontier_store_partial, account_store_partial, pending_store_partial, online_weight_store_partial, pruned_store_partial, peer_store_partial, confirmation_height_store_partial, final_vote_store_partial }, + block_store_partial (nano::unchecked_store_partial & unchecked_store_partial_a) : + block_store{ frontier_store_partial, account_store_partial, pending_store_partial, unchecked_store_partial_a, online_weight_store_partial, pruned_store_partial, peer_store_partial, confirmation_height_store_partial, final_vote_store_partial }, frontier_store_partial{ *this }, account_store_partial{ *this }, pending_store_partial{ *this }, + unchecked_store_partial (unchecked_store_partial_a), online_weight_store_partial{ *this }, pruned_store_partial{ *this }, peer_store_partial{ *this }, @@ -248,11 +254,6 @@ class block_store_partial : public block_store block_raw_put (transaction_a, data, hash_a); } - nano::store_iterator unchecked_end () const override - { - return nano::store_iterator (nullptr); - } - nano::store_iterator blocks_end () const override { return nano::store_iterator (nullptr); @@ -297,40 +298,6 @@ class block_store_partial : public block_store release_assert_success (*this, status); } - void unchecked_del (nano::write_transaction const & transaction_a, nano::unchecked_key const & key_a) override - { - auto status (del (transaction_a, tables::unchecked, key_a)); - release_assert_success (*this, status); - } - - bool unchecked_exists (nano::transaction const & transaction_a, nano::unchecked_key const & unchecked_key_a) override - { - nano::db_val value; - auto status (get (transaction_a, tables::unchecked, nano::db_val (unchecked_key_a), value)); - release_assert (success (status) || not_found (status)); - return (success (status)); - } - - void unchecked_put (nano::write_transaction const & transaction_a, nano::unchecked_key const & key_a, nano::unchecked_info const & info_a) override - { - nano::db_val info (info_a); - auto status (put (transaction_a, tables::unchecked, key_a, info)); - release_assert_success (*this, status); - } - - void unchecked_put (nano::write_transaction const & transaction_a, nano::block_hash const & hash_a, std::shared_ptr const & block_a) override - { - nano::unchecked_key key (hash_a, block_a->hash ()); - nano::unchecked_info info (block_a, block_a->account (), nano::seconds_since_epoch (), nano::signature_verification::unknown); - unchecked_put (transaction_a, key, info); - } - - void unchecked_clear (nano::write_transaction const & transaction_a) override - { - auto status = drop (transaction_a, tables::unchecked); - release_assert_success (*this, status); - } - bool exists (nano::transaction const & transaction_a, tables table_a, nano::db_val const & key_a) const { return static_cast (*this).exists (transaction_a, table_a, key_a); @@ -365,32 +332,6 @@ class block_store_partial : public block_store return make_iterator (transaction_a, tables::blocks, nano::db_val (hash_a)); } - nano::store_iterator unchecked_begin (nano::transaction const & transaction_a) const override - { - return make_iterator (transaction_a, tables::unchecked); - } - - nano::store_iterator unchecked_begin (nano::transaction const & transaction_a, nano::unchecked_key const & key_a) const override - { - return make_iterator (transaction_a, tables::unchecked, nano::db_val (key_a)); - } - - size_t unchecked_count (nano::transaction const & transaction_a) override - { - return count (transaction_a, tables::unchecked); - } - - void unchecked_for_each_par (std::function, nano::store_iterator)> const & action_a) const override - { - parallel_traversal ( - [&action_a, this] (nano::uint512_t const & start, nano::uint512_t const & end, bool const is_last) { - nano::unchecked_key key_start (start); - nano::unchecked_key key_end (end); - auto transaction (this->tx_begin_read ()); - action_a (transaction, this->unchecked_begin (transaction, key_start), !is_last ? this->unchecked_begin (transaction, key_end) : this->unchecked_end ()); - }); - } - void blocks_for_each_par (std::function, nano::store_iterator)> const & action_a) const override { parallel_traversal ( diff --git a/nano/secure/ledger.cpp b/nano/secure/ledger.cpp index 419eb47246..0afeb3cc11 100644 --- a/nano/secure/ledger.cpp +++ b/nano/secure/ledger.cpp @@ -1436,12 +1436,12 @@ bool nano::ledger::migrate_lmdb_to_rocksdb (boost::filesystem::path const & data } }); - store.unchecked_for_each_par ( + store.unchecked.for_each_par ( [&rocksdb_store] (nano::read_transaction const & /*unused*/, auto i, auto n) { for (; i != n; ++i) { auto rocksdb_transaction (rocksdb_store->tx_begin_write ({}, { nano::tables::unchecked })); - rocksdb_store->unchecked_put (rocksdb_transaction, i->first, i->second); + rocksdb_store->unchecked.put (rocksdb_transaction, i->first, i->second); } }); @@ -1515,7 +1515,7 @@ bool nano::ledger::migrate_lmdb_to_rocksdb (boost::filesystem::path const & data } // Compare counts - error |= store.unchecked_count (lmdb_transaction) != rocksdb_store->unchecked_count (rocksdb_transaction); + error |= store.unchecked.count (lmdb_transaction) != rocksdb_store->unchecked.count (rocksdb_transaction); error |= store.peer.count (lmdb_transaction) != rocksdb_store->peer.count (rocksdb_transaction); error |= store.pruned.count (lmdb_transaction) != rocksdb_store->pruned.count (rocksdb_transaction); error |= store.final_vote.count (lmdb_transaction) != rocksdb_store->final_vote.count (rocksdb_transaction); diff --git a/nano/secure/store/unchecked_store_partial.hpp b/nano/secure/store/unchecked_store_partial.hpp new file mode 100644 index 0000000000..86dd3247e3 --- /dev/null +++ b/nano/secure/store/unchecked_store_partial.hpp @@ -0,0 +1,97 @@ +#pragma once + +#include + +namespace +{ +template +void parallel_traversal (std::function const & action); +} + +namespace nano +{ +template +class block_store_partial; + +template +void release_assert_success (block_store_partial const & block_store, const int status); + +template +class unchecked_store_partial : public unchecked_store +{ +private: + nano::block_store_partial & block_store; + + friend void release_assert_success (block_store_partial const & block_store, const int status); + +public: + unchecked_store_partial (nano::block_store_partial & block_store_a) : + block_store (block_store_a){}; + + void clear (nano::write_transaction const & transaction_a) override + { + auto status = block_store.drop (transaction_a, tables::unchecked); + release_assert_success (block_store, status); + } + + void put (nano::write_transaction const & transaction_a, nano::unchecked_key const & key_a, nano::unchecked_info const & info_a) override + { + nano::db_val info (info_a); + auto status (block_store.put (transaction_a, tables::unchecked, key_a, info)); + release_assert_success (block_store, status); + } + + void put (nano::write_transaction const & transaction_a, nano::block_hash const & hash_a, std::shared_ptr const & block_a) override + { + nano::unchecked_key key (hash_a, block_a->hash ()); + nano::unchecked_info info (block_a, block_a->account (), nano::seconds_since_epoch (), nano::signature_verification::unknown); + put (transaction_a, key, info); + } + + bool exists (nano::transaction const & transaction_a, nano::unchecked_key const & unchecked_key_a) override + { + nano::db_val value; + auto status (block_store.get (transaction_a, tables::unchecked, nano::db_val (unchecked_key_a), value)); + release_assert (block_store.success (status) || block_store.not_found (status)); + return (block_store.success (status)); + } + + void del (nano::write_transaction const & transaction_a, nano::unchecked_key const & key_a) override + { + auto status (block_store.del (transaction_a, tables::unchecked, key_a)); + release_assert_success (block_store, status); + } + + nano::store_iterator end () const override + { + return nano::store_iterator (nullptr); + } + + nano::store_iterator begin (nano::transaction const & transaction_a) const override + { + return block_store.template make_iterator (transaction_a, tables::unchecked); + } + + nano::store_iterator begin (nano::transaction const & transaction_a, nano::unchecked_key const & key_a) const override + { + return block_store.template make_iterator (transaction_a, tables::unchecked, nano::db_val (key_a)); + } + + size_t count (nano::transaction const & transaction_a) override + { + return block_store.count (transaction_a, tables::unchecked); + } + + void for_each_par (std::function, nano::store_iterator)> const & action_a) const override + { + parallel_traversal ( + [&action_a, this] (nano::uint512_t const & start, nano::uint512_t const & end, bool const is_last) { + nano::unchecked_key key_start (start); + nano::unchecked_key key_end (end); + auto transaction (this->block_store.tx_begin_read ()); + action_a (transaction, this->begin (transaction, key_start), !is_last ? this->begin (transaction, key_end) : this->end ()); + }); + } +}; + +} diff --git a/nano/slow_test/node.cpp b/nano/slow_test/node.cpp index 51d91974ae..c61787d72b 100644 --- a/nano/slow_test/node.cpp +++ b/nano/slow_test/node.cpp @@ -398,10 +398,10 @@ TEST (store, unchecked_load) for (auto i (0); i < 1000000; ++i) { auto transaction (node.store.tx_begin_write ()); - node.store.unchecked_put (transaction, i, block); + node.store.unchecked.put (transaction, i, block); } auto transaction (node.store.tx_begin_read ()); - ASSERT_EQ (num_unchecked, node.store.unchecked_count (transaction)); + ASSERT_EQ (num_unchecked, node.store.unchecked.count (transaction)); } TEST (store, vote_load) From 6ee8673d022572eaed41a268d6e5d1687205dcc6 Mon Sep 17 00:00:00 2001 From: dsiganos Date: Thu, 10 Jun 2021 13:51:23 +0100 Subject: [PATCH 038/346] Test case for max incoming tcp sockets limit (#3327) --- nano/core_test/socket.cpp | 99 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) diff --git a/nano/core_test/socket.cpp b/nano/core_test/socket.cpp index eedab3997c..68de594a50 100644 --- a/nano/core_test/socket.cpp +++ b/nano/core_test/socket.cpp @@ -7,6 +7,105 @@ using namespace std::chrono_literals; +TEST (socket, max_connections) +{ + // this is here just so that ASSERT_TIMELY can be used + nano::system system; + + auto node_flags = nano::inactive_node_flag_defaults (); + node_flags.read_only = false; + nano::inactive_node inactivenode (nano::unique_path (), node_flags); + auto node = inactivenode.node; + + nano::thread_runner runner (node->io_ctx, 1); + + auto server_port (nano::get_available_port ()); + boost::asio::ip::tcp::endpoint listen_endpoint (boost::asio::ip::address_v6::any (), server_port); + boost::asio::ip::tcp::endpoint dst_endpoint (boost::asio::ip::address_v6::loopback (), server_port); + + // start a server socket that allows max 2 live connections + auto server_socket = std::make_shared (*node, listen_endpoint, 2); + boost::system::error_code ec; + server_socket->start (ec); + ASSERT_FALSE (ec); + + // successful incoming connections are stored in server_sockets to keep them alive (server side) + std::vector> server_sockets; + server_socket->on_connection ([&server_sockets] (std::shared_ptr const & new_connection, boost::system::error_code const & ec_a) { + server_sockets.push_back (new_connection); + return true; + }); + + // client side connection tracking + std::atomic connection_attempts = 0; + auto connect_handler = [&connection_attempts] (boost::system::error_code const & ec_a) { + ASSERT_EQ (ec_a.value (), 0); + connection_attempts++; + }; + + // start 3 clients, 2 will persist but 1 will be dropped + + auto client1 = std::make_shared (*node, boost::none); + client1->async_connect (dst_endpoint, connect_handler); + + auto client2 = std::make_shared (*node, boost::none); + client2->async_connect (dst_endpoint, connect_handler); + + auto client3 = std::make_shared (*node, boost::none); + client3->async_connect (dst_endpoint, connect_handler); + + auto get_tcp_accept_failures = [&node] () { + return node->stats.count (nano::stat::type::tcp, nano::stat::detail::tcp_accept_failure, nano::stat::dir::in); + }; + + auto get_tcp_accept_successes = [&node] () { + return node->stats.count (nano::stat::type::tcp, nano::stat::detail::tcp_accept_success, nano::stat::dir::in); + }; + + ASSERT_TIMELY (5s, get_tcp_accept_failures () == 1); + ASSERT_EQ (get_tcp_accept_successes (), 2); + ASSERT_EQ (connection_attempts, 3); + + // create space for one socket and fill the connections table again + + server_sockets[0].reset (); + + auto client4 = std::make_shared (*node, boost::none); + client4->async_connect (dst_endpoint, connect_handler); + + auto client5 = std::make_shared (*node, boost::none); + client5->async_connect (dst_endpoint, connect_handler); + + ASSERT_TIMELY (5s, get_tcp_accept_failures () == 2); + ASSERT_EQ (get_tcp_accept_successes (), 3); + ASSERT_EQ (connection_attempts, 5); + + // close all existing sockets and fill the connections table again + // start counting form 1 because 0 is the already closed socket + + server_sockets[1].reset (); + server_sockets[2].reset (); + ASSERT_EQ (server_sockets.size (), 3); + + auto client6 = std::make_shared (*node, boost::none); + client6->async_connect (dst_endpoint, connect_handler); + + auto client7 = std::make_shared (*node, boost::none); + client7->async_connect (dst_endpoint, connect_handler); + + auto client8 = std::make_shared (*node, boost::none); + client8->async_connect (dst_endpoint, connect_handler); + + ASSERT_TIMELY (5s, get_tcp_accept_failures () == 3); + ASSERT_EQ (get_tcp_accept_successes (), 5); + ASSERT_EQ (connection_attempts, 8); // connections initiated by the client + ASSERT_EQ (server_sockets.size (), 5); // connections accepted by the server + + node->stop (); + runner.stop_event_processing (); + runner.join (); +} + TEST (socket, drop_policy) { auto node_flags = nano::inactive_node_flag_defaults (); From 21b0e8d5b4182936dc0b579d249abeeafc55146f Mon Sep 17 00:00:00 2001 From: clemahieu Date: Sun, 13 Jun 2021 13:38:28 +0200 Subject: [PATCH 039/346] Moving the check "using_rocksdb_in_tests" on to rocksdb_config, which is logically where it belongs. Also this moves the check from the node library in to the nano_lib library. This addresses a circular reference where node code is referencing the test library. --- nano/core_test/block_store.cpp | 30 +++++++++++++------------- nano/core_test/confirmation_height.cpp | 8 +++---- nano/core_test/ledger.cpp | 2 +- nano/core_test/node.cpp | 4 ++-- nano/lib/rocksdbconfig.cpp | 8 +++++++ nano/lib/rocksdbconfig.hpp | 7 ++++++ nano/node/node.cpp | 4 ++-- nano/node/testing.cpp | 7 ------ nano/node/testing.hpp | 2 -- nano/qt_test/qt.cpp | 4 ++-- nano/rpc_test/rpc.cpp | 2 +- nano/slow_test/node.cpp | 6 +++--- 12 files changed, 45 insertions(+), 39 deletions(-) diff --git a/nano/core_test/block_store.cpp b/nano/core_test/block_store.cpp index 0dbf306c52..7f6c857e9c 100644 --- a/nano/core_test/block_store.cpp +++ b/nano/core_test/block_store.cpp @@ -369,7 +369,7 @@ TEST (bootstrap, simple) TEST (unchecked, multiple) { - if (nano::using_rocksdb_in_tests ()) + if (nano::rocksdb_config::using_rocksdb_in_tests ()) { // Don't test this in rocksdb mode return; @@ -654,7 +654,7 @@ TEST (block_store, latest_find) TEST (mdb_block_store, supported_version_upgrades) { - if (nano::using_rocksdb_in_tests ()) + if (nano::rocksdb_config::using_rocksdb_in_tests ()) { // Don't test this in rocksdb mode return; @@ -705,7 +705,7 @@ TEST (mdb_block_store, supported_version_upgrades) TEST (mdb_block_store, bad_path) { - if (nano::using_rocksdb_in_tests ()) + if (nano::rocksdb_config::using_rocksdb_in_tests ()) { // Don't test this in rocksdb mode return; @@ -999,7 +999,7 @@ TEST (block_store, state_block) TEST (mdb_block_store, sideband_height) { - if (nano::using_rocksdb_in_tests ()) + if (nano::rocksdb_config::using_rocksdb_in_tests ()) { // Don't test this in rocksdb mode return; @@ -1264,7 +1264,7 @@ TEST (block_store, pruned_blocks) TEST (mdb_block_store, upgrade_v14_v15) { - if (nano::using_rocksdb_in_tests ()) + if (nano::rocksdb_config::using_rocksdb_in_tests ()) { // Don't test this in rocksdb mode return; @@ -1377,7 +1377,7 @@ TEST (mdb_block_store, upgrade_v14_v15) TEST (mdb_block_store, upgrade_v15_v16) { - if (nano::using_rocksdb_in_tests ()) + if (nano::rocksdb_config::using_rocksdb_in_tests ()) { // Don't test this in rocksdb mode return; @@ -1423,7 +1423,7 @@ TEST (mdb_block_store, upgrade_v15_v16) TEST (mdb_block_store, upgrade_v16_v17) { - if (nano::using_rocksdb_in_tests ()) + if (nano::rocksdb_config::using_rocksdb_in_tests ()) { // Don't test this in rocksdb mode return; @@ -1487,7 +1487,7 @@ TEST (mdb_block_store, upgrade_v16_v17) TEST (mdb_block_store, upgrade_v17_v18) { - if (nano::using_rocksdb_in_tests ()) + if (nano::rocksdb_config::using_rocksdb_in_tests ()) { // Don't test this in rocksdb mode return; @@ -1691,7 +1691,7 @@ TEST (mdb_block_store, upgrade_v17_v18) TEST (mdb_block_store, upgrade_v18_v19) { - if (nano::using_rocksdb_in_tests ()) + if (nano::rocksdb_config::using_rocksdb_in_tests ()) { // Don't test this in rocksdb mode return; @@ -1784,7 +1784,7 @@ TEST (mdb_block_store, upgrade_v18_v19) TEST (mdb_block_store, upgrade_v19_v20) { - if (nano::using_rocksdb_in_tests ()) + if (nano::rocksdb_config::using_rocksdb_in_tests ()) { // Don't test this in rocksdb mode return; @@ -1814,7 +1814,7 @@ TEST (mdb_block_store, upgrade_v19_v20) TEST (mdb_block_store, upgrade_v20_v21) { - if (nano::using_rocksdb_in_tests ()) + if (nano::rocksdb_config::using_rocksdb_in_tests ()) { // Don't test this in rocksdb mode return; @@ -1844,7 +1844,7 @@ TEST (mdb_block_store, upgrade_v20_v21) TEST (mdb_block_store, upgrade_backup) { - if (nano::using_rocksdb_in_tests ()) + if (nano::rocksdb_config::using_rocksdb_in_tests ()) { // Don't test this in rocksdb mode return; @@ -1886,7 +1886,7 @@ TEST (mdb_block_store, upgrade_backup) // Test various confirmation height values as well as clearing them TEST (block_store, confirmation_height) { - if (nano::using_rocksdb_in_tests ()) + if (nano::rocksdb_config::using_rocksdb_in_tests ()) { // Don't test this in rocksdb mode return; @@ -1932,7 +1932,7 @@ TEST (block_store, confirmation_height) // Test various confirmation height values as well as clearing them TEST (block_store, final_vote) { - if (nano::using_rocksdb_in_tests ()) + if (nano::rocksdb_config::using_rocksdb_in_tests ()) { // Don't test this in rocksdb mode as deletions cause inaccurate counts return; @@ -2041,7 +2041,7 @@ namespace nano { TEST (rocksdb_block_store, tombstone_count) { - if (nano::using_rocksdb_in_tests ()) + if (nano::rocksdb_config::using_rocksdb_in_tests ()) { nano::logger_mt logger; auto store = std::make_unique (logger, nano::unique_path ()); diff --git a/nano/core_test/confirmation_height.cpp b/nano/core_test/confirmation_height.cpp index 04be4cc070..311e764631 100644 --- a/nano/core_test/confirmation_height.cpp +++ b/nano/core_test/confirmation_height.cpp @@ -707,7 +707,7 @@ TEST (confirmation_height, conflict_rollback_cemented) TEST (confirmation_heightDeathTest, rollback_added_block) { - if (nano::using_rocksdb_in_tests ()) + if (nano::rocksdb_config::using_rocksdb_in_tests ()) { // Don't test this in rocksdb mode return; @@ -784,7 +784,7 @@ TEST (confirmation_height, observers) // This tests when a read has been done, but the block no longer exists by the time a write is done TEST (confirmation_heightDeathTest, modified_chain) { - if (nano::using_rocksdb_in_tests ()) + if (nano::rocksdb_config::using_rocksdb_in_tests ()) { // Don't test this in rocksdb mode return; @@ -855,7 +855,7 @@ TEST (confirmation_heightDeathTest, modified_chain) // This tests when a read has been done, but the account no longer exists by the time a write is done TEST (confirmation_heightDeathTest, modified_chain_account_removed) { - if (nano::using_rocksdb_in_tests ()) + if (nano::rocksdb_config::using_rocksdb_in_tests ()) { // Don't test this in rocksdb mode return; @@ -1355,7 +1355,7 @@ TEST (confirmation_height, election_winner_details_clearing_node_process_confirm TEST (confirmation_height, unbounded_block_cache_iteration) { - if (nano::using_rocksdb_in_tests ()) + if (nano::rocksdb_config::using_rocksdb_in_tests ()) { // Don't test this in rocksdb mode return; diff --git a/nano/core_test/ledger.cpp b/nano/core_test/ledger.cpp index 9cda4e93f4..df136786c3 100644 --- a/nano/core_test/ledger.cpp +++ b/nano/core_test/ledger.cpp @@ -12,7 +12,7 @@ using namespace std::chrono_literals; // Init returns an error if it can't open files at the path TEST (ledger, store_error) { - if (nano::using_rocksdb_in_tests ()) + if (nano::rocksdb_config::using_rocksdb_in_tests ()) { // Don't test this in rocksdb mode return; diff --git a/nano/core_test/node.cpp b/nano/core_test/node.cpp index a2591d30b6..47d6c85350 100644 --- a/nano/core_test/node.cpp +++ b/nano/core_test/node.cpp @@ -73,7 +73,7 @@ TEST (node_DeathTest, readonly_block_store_not_exist) #endif { // This is a read-only node with no ledger file - if (nano::using_rocksdb_in_tests ()) + if (nano::rocksdb_config::using_rocksdb_in_tests ()) { nano::inactive_node node (nano::unique_path (), nano::inactive_node_flag_defaults ()); ASSERT_TRUE (node.node->init_error ()); @@ -3748,7 +3748,7 @@ TEST (node, dont_write_lock_node) TEST (node, bidirectional_tcp) { #ifdef _WIN32 - if (nano::using_rocksdb_in_tests ()) + if (nano::rocksdb_config::using_rocksdb_in_tests ()) { // Don't test this in rocksdb mode return; diff --git a/nano/lib/rocksdbconfig.cpp b/nano/lib/rocksdbconfig.cpp index fb090ca41f..c3bac1f2e3 100644 --- a/nano/lib/rocksdbconfig.cpp +++ b/nano/lib/rocksdbconfig.cpp @@ -1,3 +1,4 @@ +#include #include #include @@ -27,3 +28,10 @@ nano::error nano::rocksdb_config::deserialize_toml (nano::tomlconfig & toml) return toml.get_error (); } + +bool nano::rocksdb_config::using_rocksdb_in_tests () +{ + static nano::network_constants network_constants; + auto use_rocksdb_str = std::getenv ("TEST_USE_ROCKSDB"); + return network_constants.is_dev_network () && use_rocksdb_str && (boost::lexical_cast (use_rocksdb_str) == 1); +} diff --git a/nano/lib/rocksdbconfig.hpp b/nano/lib/rocksdbconfig.hpp index 750eab9d5d..ff185ada0e 100644 --- a/nano/lib/rocksdbconfig.hpp +++ b/nano/lib/rocksdbconfig.hpp @@ -12,9 +12,16 @@ class tomlconfig; class rocksdb_config final { public: + rocksdb_config () : + enable{ using_rocksdb_in_tests () } + { + } nano::error serialize_toml (nano::tomlconfig & toml_a) const; nano::error deserialize_toml (nano::tomlconfig & toml_a); + /** To use RocksDB in tests make sure the environment variable TEST_USE_ROCKSDB=1 is set */ + static bool using_rocksdb_in_tests (); + bool enable{ false }; uint8_t memory_multiplier{ 2 }; unsigned io_threads{ std::thread::hardware_concurrency () }; diff --git a/nano/node/node.cpp b/nano/node/node.cpp index e894880830..79ce1befa4 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -85,7 +85,7 @@ nano::node::node (boost::asio::io_context & io_ctx_a, uint16_t peering_port_a, b } nano::node::node (boost::asio::io_context & io_ctx_a, boost::filesystem::path const & application_path_a, nano::node_config const & config_a, nano::work_pool & work_a, nano::node_flags flags_a, unsigned seq) : - write_database_queue (!flags_a.force_use_write_database_queue && (config_a.rocksdb_config.enable || nano::using_rocksdb_in_tests ())), + write_database_queue (!flags_a.force_use_write_database_queue && (config_a.rocksdb_config.enable)), io_ctx (io_ctx_a), node_initialized_latch (1), config (config_a), @@ -1821,7 +1821,7 @@ nano::node_flags const & nano::inactive_node_flag_defaults () std::unique_ptr nano::make_store (nano::logger_mt & logger, boost::filesystem::path const & path, bool read_only, bool add_db_postfix, nano::rocksdb_config const & rocksdb_config, nano::txn_tracking_config const & txn_tracking_config_a, std::chrono::milliseconds block_processor_batch_max_time_a, nano::lmdb_config const & lmdb_config_a, bool backup_before_upgrade) { - if (rocksdb_config.enable || using_rocksdb_in_tests ()) + if (rocksdb_config.enable) { return std::make_unique (logger, add_db_postfix ? path / "rocksdb" : path, rocksdb_config, read_only); } diff --git a/nano/node/testing.cpp b/nano/node/testing.cpp index 053c74a9fc..d481bf80e0 100644 --- a/nano/node/testing.cpp +++ b/nano/node/testing.cpp @@ -550,10 +550,3 @@ void nano::cleanup_dev_directories_on_exit () nano::remove_temporary_directories (); } } - -bool nano::using_rocksdb_in_tests () -{ - static nano::network_constants network_constants; - auto use_rocksdb_str = std::getenv ("TEST_USE_ROCKSDB"); - return network_constants.is_dev_network () && use_rocksdb_str && (boost::lexical_cast (use_rocksdb_str) == 1); -} diff --git a/nano/node/testing.hpp b/nano/node/testing.hpp index aefb36e61e..e1f2cbc0f8 100644 --- a/nano/node/testing.hpp +++ b/nano/node/testing.hpp @@ -58,7 +58,5 @@ std::unique_ptr upgrade_epoch (nano::work_pool &, nano::ledge void blocks_confirm (nano::node &, std::vector> const &, bool const = false); uint16_t get_available_port (); void cleanup_dev_directories_on_exit (); -/** To use RocksDB in tests make sure the environment variable TEST_USE_ROCKSDB=1 is set */ -bool using_rocksdb_in_tests (); } REGISTER_ERROR_CODES (nano, error_system); diff --git a/nano/qt_test/qt.cpp b/nano/qt_test/qt.cpp index 58c650daa6..a3ee579a29 100644 --- a/nano/qt_test/qt.cpp +++ b/nano/qt_test/qt.cpp @@ -498,7 +498,7 @@ TEST (wallet, create_change) TEST (history, short_text) { - if (nano::using_rocksdb_in_tests ()) + if (nano::rocksdb_config::using_rocksdb_in_tests ()) { // Don't test this in rocksdb mode return; @@ -536,7 +536,7 @@ TEST (history, short_text) TEST (history, pruned_source) { - if (nano::using_rocksdb_in_tests ()) + if (nano::rocksdb_config::using_rocksdb_in_tests ()) { // Don't test this in rocksdb mode return; diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index da8fe13b27..4cf433e9ad 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -6839,7 +6839,7 @@ TEST (rpc, block_confirmed) TEST (rpc, database_txn_tracker) { - if (nano::using_rocksdb_in_tests ()) + if (nano::rocksdb_config::using_rocksdb_in_tests ()) { // Don't test this in rocksdb mode return; diff --git a/nano/slow_test/node.cpp b/nano/slow_test/node.cpp index 51d91974ae..9214c79aaf 100644 --- a/nano/slow_test/node.cpp +++ b/nano/slow_test/node.cpp @@ -421,7 +421,7 @@ TEST (store, pruned_load) nano::logger_mt logger; auto path (nano::unique_path ()); constexpr auto num_pruned = 2000000; - auto const expected_result = nano::using_rocksdb_in_tests () ? num_pruned : num_pruned / 2; + auto const expected_result = nano::rocksdb_config::using_rocksdb_in_tests () ? num_pruned : num_pruned / 2; constexpr auto batch_size = 20; boost::unordered_set hashes; { @@ -438,7 +438,7 @@ TEST (store, pruned_load) store->pruned.put (transaction, random_hash); } } - if (!nano::using_rocksdb_in_tests ()) + if (!nano::rocksdb_config::using_rocksdb_in_tests ()) { auto transaction (store->tx_begin_write ()); for (auto k (0); k < batch_size / 2; ++k) @@ -956,7 +956,7 @@ TEST (confirmation_height, many_accounts_send_receive_self) // as opposed to active transactions which implicitly calls confirmation height processor. TEST (confirmation_height, many_accounts_send_receive_self_no_elections) { - if (nano::using_rocksdb_in_tests ()) + if (nano::rocksdb_config::using_rocksdb_in_tests ()) { // Don't test this in rocksdb mode return; From f6cdf1eacd05eef254988353e62f7209ebc259d5 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Sun, 13 Jun 2021 15:29:03 +0200 Subject: [PATCH 040/346] Moving nano::system out of the node library and in to the test_core library since it is a testing class. Also renaming file from testing.c/hpp to system.c/hpp to better represent what the file contains. --- CMakeLists.txt | 1 + nano/core_test/active_transactions.cpp | 2 +- nano/core_test/block_store.cpp | 2 +- nano/core_test/bootstrap.cpp | 2 +- nano/core_test/confirmation_height.cpp | 2 +- nano/core_test/confirmation_solicitor.cpp | 2 +- nano/core_test/conflicts.cpp | 2 +- nano/core_test/difficulty.cpp | 2 +- nano/core_test/distributed_work.cpp | 2 +- nano/core_test/election.cpp | 2 +- nano/core_test/election_scheduler.cpp | 2 +- nano/core_test/frontiers_confirmation.cpp | 2 +- nano/core_test/gap_cache.cpp | 2 +- nano/core_test/ipc.cpp | 2 +- nano/core_test/ledger.cpp | 2 +- nano/core_test/message_parser.cpp | 2 +- nano/core_test/network.cpp | 2 +- nano/core_test/node.cpp | 2 +- nano/core_test/peer_container.cpp | 2 +- nano/core_test/request_aggregator.cpp | 2 +- nano/core_test/socket.cpp | 2 +- nano/core_test/telemetry.cpp | 2 +- nano/core_test/vote_processor.cpp | 2 +- nano/core_test/voting.cpp | 2 +- nano/core_test/wallet.cpp | 2 +- nano/core_test/wallets.cpp | 2 +- nano/core_test/websocket.cpp | 2 +- nano/node/CMakeLists.txt | 2 -- nano/node/node.cpp | 4 ++-- nano/node/vote_processor.hpp | 1 + nano/qt_system/entry.cpp | 2 +- nano/qt_test/qt.cpp | 2 +- nano/rpc_test/rpc.cpp | 2 +- nano/slow_test/node.cpp | 2 +- nano/test_common/CMakeLists.txt | 11 +++++++++-- nano/test_common/network.cpp | 2 +- nano/{node/testing.cpp => test_common/system.cpp} | 2 +- nano/{node/testing.hpp => test_common/system.hpp} | 0 nano/test_common/testutil.cpp | 2 +- 39 files changed, 46 insertions(+), 39 deletions(-) rename nano/{node/testing.cpp => test_common/system.cpp} (99%) rename nano/{node/testing.hpp => test_common/system.hpp} (100%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 70384f03d3..4c86e995b2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -610,6 +610,7 @@ if(NANO_GUI OR RAIBLOCKS_GUI) node secure nano_lib + test_common libminiupnpc-static Qt5::Gui Qt5::Widgets) diff --git a/nano/core_test/active_transactions.cpp b/nano/core_test/active_transactions.cpp index 51395967b1..9e889ad580 100644 --- a/nano/core_test/active_transactions.cpp +++ b/nano/core_test/active_transactions.cpp @@ -1,6 +1,6 @@ #include #include -#include +#include #include #include diff --git a/nano/core_test/block_store.cpp b/nano/core_test/block_store.cpp index 7f6c857e9c..7da7c92bb9 100644 --- a/nano/core_test/block_store.cpp +++ b/nano/core_test/block_store.cpp @@ -7,10 +7,10 @@ #include #include #include -#include #include #include #include +#include #include #include diff --git a/nano/core_test/bootstrap.cpp b/nano/core_test/bootstrap.cpp index 6433dad4d4..98bc0bd547 100644 --- a/nano/core_test/bootstrap.cpp +++ b/nano/core_test/bootstrap.cpp @@ -1,6 +1,6 @@ #include #include -#include +#include #include #include diff --git a/nano/core_test/confirmation_height.cpp b/nano/core_test/confirmation_height.cpp index 311e764631..ba0d536171 100644 --- a/nano/core_test/confirmation_height.cpp +++ b/nano/core_test/confirmation_height.cpp @@ -1,5 +1,5 @@ #include -#include +#include #include #include diff --git a/nano/core_test/confirmation_solicitor.cpp b/nano/core_test/confirmation_solicitor.cpp index 907ef5fede..b32ee2ea42 100644 --- a/nano/core_test/confirmation_solicitor.cpp +++ b/nano/core_test/confirmation_solicitor.cpp @@ -1,6 +1,6 @@ #include #include -#include +#include #include #include diff --git a/nano/core_test/conflicts.cpp b/nano/core_test/conflicts.cpp index 1bbb1a8c45..33940baba1 100644 --- a/nano/core_test/conflicts.cpp +++ b/nano/core_test/conflicts.cpp @@ -1,5 +1,5 @@ #include -#include +#include #include #include diff --git a/nano/core_test/difficulty.cpp b/nano/core_test/difficulty.cpp index 1f9e8e2eb2..83cd5d38e9 100644 --- a/nano/core_test/difficulty.cpp +++ b/nano/core_test/difficulty.cpp @@ -3,7 +3,7 @@ #include #include #include -#include +#include #include #include diff --git a/nano/core_test/distributed_work.cpp b/nano/core_test/distributed_work.cpp index 91a054e903..9cf30333cc 100644 --- a/nano/core_test/distributed_work.cpp +++ b/nano/core_test/distributed_work.cpp @@ -1,5 +1,5 @@ #include -#include +#include #include #include diff --git a/nano/core_test/election.cpp b/nano/core_test/election.cpp index 0dabbdec3c..941fc61879 100644 --- a/nano/core_test/election.cpp +++ b/nano/core_test/election.cpp @@ -1,5 +1,5 @@ #include -#include +#include #include #include diff --git a/nano/core_test/election_scheduler.cpp b/nano/core_test/election_scheduler.cpp index c95dc39292..12cb23dec3 100644 --- a/nano/core_test/election_scheduler.cpp +++ b/nano/core_test/election_scheduler.cpp @@ -1,5 +1,5 @@ #include -#include +#include #include #include diff --git a/nano/core_test/frontiers_confirmation.cpp b/nano/core_test/frontiers_confirmation.cpp index 120a71bc8d..faa6edea93 100644 --- a/nano/core_test/frontiers_confirmation.cpp +++ b/nano/core_test/frontiers_confirmation.cpp @@ -1,5 +1,5 @@ #include -#include +#include #include #include diff --git a/nano/core_test/gap_cache.cpp b/nano/core_test/gap_cache.cpp index d87a071220..966df14021 100644 --- a/nano/core_test/gap_cache.cpp +++ b/nano/core_test/gap_cache.cpp @@ -1,4 +1,4 @@ -#include +#include #include #include diff --git a/nano/core_test/ipc.cpp b/nano/core_test/ipc.cpp index 012a2e5632..a12ce3e7cf 100644 --- a/nano/core_test/ipc.cpp +++ b/nano/core_test/ipc.cpp @@ -2,8 +2,8 @@ #include #include #include -#include #include +#include #include #include diff --git a/nano/core_test/ledger.cpp b/nano/core_test/ledger.cpp index df136786c3..d2990d8c60 100644 --- a/nano/core_test/ledger.cpp +++ b/nano/core_test/ledger.cpp @@ -2,7 +2,7 @@ #include #include #include -#include +#include #include #include diff --git a/nano/core_test/message_parser.cpp b/nano/core_test/message_parser.cpp index 20fc2e6c60..5d54e1736d 100644 --- a/nano/core_test/message_parser.cpp +++ b/nano/core_test/message_parser.cpp @@ -1,4 +1,4 @@ -#include +#include #include #include diff --git a/nano/core_test/network.cpp b/nano/core_test/network.cpp index 600fdac132..6b17ef89b7 100644 --- a/nano/core_test/network.cpp +++ b/nano/core_test/network.cpp @@ -1,6 +1,6 @@ -#include #include #include +#include #include #include diff --git a/nano/core_test/node.cpp b/nano/core_test/node.cpp index 47d6c85350..8ebf3d9552 100644 --- a/nano/core_test/node.cpp +++ b/nano/core_test/node.cpp @@ -1,8 +1,8 @@ #include #include -#include #include #include +#include #include #include diff --git a/nano/core_test/peer_container.cpp b/nano/core_test/peer_container.cpp index 9914ab3e9a..c4150cf9dc 100644 --- a/nano/core_test/peer_container.cpp +++ b/nano/core_test/peer_container.cpp @@ -1,4 +1,4 @@ -#include +#include #include #include diff --git a/nano/core_test/request_aggregator.cpp b/nano/core_test/request_aggregator.cpp index 28758cf998..f60dd14c80 100644 --- a/nano/core_test/request_aggregator.cpp +++ b/nano/core_test/request_aggregator.cpp @@ -1,6 +1,6 @@ #include #include -#include +#include #include #include diff --git a/nano/core_test/socket.cpp b/nano/core_test/socket.cpp index eedab3997c..afba0c07a7 100644 --- a/nano/core_test/socket.cpp +++ b/nano/core_test/socket.cpp @@ -1,6 +1,6 @@ #include #include -#include +#include #include #include diff --git a/nano/core_test/telemetry.cpp b/nano/core_test/telemetry.cpp index 1ad42c4e73..13792edfc2 100644 --- a/nano/core_test/telemetry.cpp +++ b/nano/core_test/telemetry.cpp @@ -1,6 +1,6 @@ #include -#include #include +#include #include #include diff --git a/nano/core_test/vote_processor.cpp b/nano/core_test/vote_processor.cpp index 72869e4ce1..4b40c740ed 100644 --- a/nano/core_test/vote_processor.cpp +++ b/nano/core_test/vote_processor.cpp @@ -1,6 +1,6 @@ #include -#include #include +#include #include #include diff --git a/nano/core_test/voting.cpp b/nano/core_test/voting.cpp index 2abe3da48b..32bb33c778 100644 --- a/nano/core_test/voting.cpp +++ b/nano/core_test/voting.cpp @@ -1,6 +1,6 @@ #include -#include #include +#include #include #include diff --git a/nano/core_test/wallet.cpp b/nano/core_test/wallet.cpp index dc98ff0536..7702b18c4c 100644 --- a/nano/core_test/wallet.cpp +++ b/nano/core_test/wallet.cpp @@ -1,7 +1,7 @@ #include #include #include -#include +#include #include #include diff --git a/nano/core_test/wallets.cpp b/nano/core_test/wallets.cpp index 21871a050d..facf35c745 100644 --- a/nano/core_test/wallets.cpp +++ b/nano/core_test/wallets.cpp @@ -1,5 +1,5 @@ -#include #include +#include #include #include diff --git a/nano/core_test/websocket.cpp b/nano/core_test/websocket.cpp index 4484bdb92a..412a9f5325 100644 --- a/nano/core_test/websocket.cpp +++ b/nano/core_test/websocket.cpp @@ -1,7 +1,7 @@ #include -#include #include #include +#include #include #include diff --git a/nano/node/CMakeLists.txt b/nano/node/CMakeLists.txt index dd2d92e12a..d00f6a7833 100644 --- a/nano/node/CMakeLists.txt +++ b/nano/node/CMakeLists.txt @@ -128,8 +128,6 @@ add_library( state_block_signature_verification.cpp telemetry.hpp telemetry.cpp - testing.hpp - testing.cpp transport/tcp.hpp transport/tcp.cpp transport/transport.hpp diff --git a/nano/node/node.cpp b/nano/node/node.cpp index 79ce1befa4..374e4e2428 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -6,10 +6,10 @@ #include #include #include -#include #include #include #include +#include #include #include @@ -1781,7 +1781,7 @@ nano::node_wrapper::node_wrapper (boost::filesystem::path const & path_a, boost: } auto & node_config = daemon_config.node; - node_config.peering_port = nano::get_available_port (); + //node_config.peering_port = nano::get_available_port (); node_config.logging.max_size = std::numeric_limits::max (); node_config.logging.init (path_a); diff --git a/nano/node/vote_processor.hpp b/nano/node/vote_processor.hpp index 9dab5323e1..b1eecdd6ee 100644 --- a/nano/node/vote_processor.hpp +++ b/nano/node/vote_processor.hpp @@ -24,6 +24,7 @@ class rep_crawler; class ledger; class network_params; class node_flags; +class stat; class transaction; namespace transport diff --git a/nano/qt_system/entry.cpp b/nano/qt_system/entry.cpp index bcda125b60..ae55f0f071 100644 --- a/nano/qt_system/entry.cpp +++ b/nano/qt_system/entry.cpp @@ -2,8 +2,8 @@ #include #include #include -#include #include +#include #include diff --git a/nano/qt_test/qt.cpp b/nano/qt_test/qt.cpp index a3ee579a29..e9cf1f3c8e 100644 --- a/nano/qt_test/qt.cpp +++ b/nano/qt_test/qt.cpp @@ -1,5 +1,5 @@ -#include #include +#include #include #include diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index 4cf433e9ad..57f1943d58 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -5,10 +5,10 @@ #include #include #include -#include #include #include #include +#include #include #include diff --git a/nano/slow_test/node.cpp b/nano/slow_test/node.cpp index 9214c79aaf..31b751785c 100644 --- a/nano/slow_test/node.cpp +++ b/nano/slow_test/node.cpp @@ -1,9 +1,9 @@ #include #include #include -#include #include #include +#include #include #include diff --git a/nano/test_common/CMakeLists.txt b/nano/test_common/CMakeLists.txt index eef91729bc..4927654693 100644 --- a/nano/test_common/CMakeLists.txt +++ b/nano/test_common/CMakeLists.txt @@ -1,5 +1,12 @@ -add_library(test_common network.hpp network.cpp telemetry.hpp telemetry.cpp - testutil.hpp testutil.cpp) +add_library(test_common + network.hpp + network.cpp + system.hpp + system.cpp + telemetry.hpp + telemetry.cpp + testutil.hpp + testutil.cpp) target_link_libraries(test_common node gtest Boost::log_setup Boost::log Boost::boost) diff --git a/nano/test_common/network.cpp b/nano/test_common/network.cpp index 5427ad6efa..316218a91b 100644 --- a/nano/test_common/network.cpp +++ b/nano/test_common/network.cpp @@ -1,6 +1,6 @@ #include -#include #include +#include #include #include diff --git a/nano/node/testing.cpp b/nano/test_common/system.cpp similarity index 99% rename from nano/node/testing.cpp rename to nano/test_common/system.cpp index d481bf80e0..98f4ba9d3c 100644 --- a/nano/node/testing.cpp +++ b/nano/test_common/system.cpp @@ -1,7 +1,7 @@ #include #include -#include #include +#include #include diff --git a/nano/node/testing.hpp b/nano/test_common/system.hpp similarity index 100% rename from nano/node/testing.hpp rename to nano/test_common/system.hpp diff --git a/nano/test_common/testutil.cpp b/nano/test_common/testutil.cpp index 194a85adbd..5d77700df6 100644 --- a/nano/test_common/testutil.cpp +++ b/nano/test_common/testutil.cpp @@ -1,5 +1,5 @@ #include -#include +#include #include #include From c3105a33f24547da3b462c33700cd98f7b924647 Mon Sep 17 00:00:00 2001 From: Sergey Kroshnin Date: Mon, 14 Jun 2021 18:50:24 +0300 Subject: [PATCH 041/346] Remove election restart by difficulty (#3280) * Remove election restart by difficulty - Leftover after https://github.com/nanocurrency/nano-node/pull/3260 - additionally fix failing active_transactions.inactive_votes_cache_election_start test (default dev network voters to start election from inactive cache is 2, not 5) * Commentary & receive minimum for confirmation_height.gap_live --- nano/core_test/active_transactions.cpp | 57 ------------ nano/core_test/node.cpp | 10 --- nano/node/active_transactions.cpp | 28 ------ nano/node/active_transactions.hpp | 2 - nano/node/blockprocessor.cpp | 118 +++++++++---------------- nano/node/blockprocessor.hpp | 3 - 6 files changed, 44 insertions(+), 174 deletions(-) diff --git a/nano/core_test/active_transactions.cpp b/nano/core_test/active_transactions.cpp index 51395967b1..4a84258af5 100644 --- a/nano/core_test/active_transactions.cpp +++ b/nano/core_test/active_transactions.cpp @@ -964,63 +964,6 @@ TEST (active_transactions, confirm_new) ASSERT_TIMELY (5s, node1.ledger.cache.cemented_count == 2 && node2.ledger.cache.cemented_count == 2); } -TEST (active_transactions, restart_dropped) -{ - nano::system system; - nano::node_config node_config (nano::get_available_port (), system.logging); - node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; - auto & node = *system.add_node (node_config); - nano::genesis genesis; - auto send = nano::state_block_builder () - .account (nano::dev_genesis_key.pub) - .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) - .balance (nano::genesis_amount - nano::xrb_ratio) - .link (nano::dev_genesis_key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) - .work (*system.work.generate (genesis.hash ())) - .build_shared (); // Process only in ledger and simulate dropping the election - ASSERT_EQ (nano::process_result::progress, node.process (*send).code); - // Generate higher difficulty work - ASSERT_TRUE (node.work_generate_blocking (*send, send->difficulty () + 1).is_initialized ()); - // Process the same block with updated work - ASSERT_EQ (0, node.active.size ()); - node.process_active (send); - node.block_processor.flush (); - node.scheduler.flush (); - ASSERT_EQ (1, node.active.size ()); - ASSERT_EQ (1, node.stats.count (nano::stat::type::election, nano::stat::detail::election_restart)); - auto ledger_block (node.store.block_get (node.store.tx_begin_read (), send->hash ())); - ASSERT_NE (nullptr, ledger_block); - // Exact same block, including work value must have been re-written - ASSERT_EQ (*send, *ledger_block); - // Drop election - node.active.erase (*send); - ASSERT_EQ (0, node.active.size ()); - // Try to restart election with the same difficulty - node.process_active (send); - node.block_processor.flush (); - node.scheduler.flush (); - ASSERT_EQ (0, node.active.size ()); - ASSERT_EQ (1, node.stats.count (nano::stat::type::election, nano::stat::detail::election_restart)); - // Generate even higher difficulty work - ASSERT_TRUE (node.work_generate_blocking (*send, send->difficulty () + 1).is_initialized ()); - // Add voting - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - // Process the same block with updated work - ASSERT_EQ (0, node.active.size ()); - node.process_active (send); - node.block_processor.flush (); - node.scheduler.flush (); - ASSERT_EQ (1, node.active.size ()); - ASSERT_EQ (1, node.ledger.cache.cemented_count); - ASSERT_EQ (2, node.stats.count (nano::stat::type::election, nano::stat::detail::election_restart)); - // Wait for the election to complete - ASSERT_TIMELY (5s, node.ledger.cache.cemented_count == 2); - // Verify the block is eventually updated in the ledger - ASSERT_TIMELY (3s, node.store.block_get (node.store.tx_begin_read (), send->hash ())->block_work () == send->block_work ()); -} - // Ensures votes are tallied on election::publish even if no vote is inserted through inactive_votes_cache TEST (active_transactions, conflicting_block_vote_existing_election) { diff --git a/nano/core_test/node.cpp b/nano/core_test/node.cpp index 0b0bfdcbb0..263a3a51aa 100644 --- a/nano/core_test/node.cpp +++ b/nano/core_test/node.cpp @@ -4586,8 +4586,6 @@ TEST (node, deferred_dependent_elections) node.process_local (open); node.block_processor.flush (); ASSERT_FALSE (node.active.active (open->qualified_root ())); - /// However, work is still updated - ASSERT_TIMELY (3s, node.store.block_get (node.store.tx_begin_read (), open->hash ())->block_work () == open->block_work ()); // It is however possible to manually start an election from elsewhere node.block_confirm (open); @@ -4601,8 +4599,6 @@ TEST (node, deferred_dependent_elections) node.process_local (open); node.block_processor.flush (); ASSERT_FALSE (node.active.active (open->qualified_root ())); - /// However, work is still updated - ASSERT_TIMELY (3s, node.store.block_get (node.store.tx_begin_read (), open->hash ())->block_work () == open->block_work ()); // Frontier confirmation also starts elections ASSERT_NO_ERROR (system.poll_until_true (5s, [&node, &send2] { @@ -4652,12 +4648,6 @@ TEST (node, deferred_dependent_elections) election_send2->force_confirm (); ASSERT_TIMELY (2s, node.block_confirmed (send2->hash ())); ASSERT_TIMELY (2s, node.active.active (receive->qualified_root ())); - node.active.erase (*receive); - ASSERT_FALSE (node.active.active (receive->qualified_root ())); - node.work_generate_blocking (*receive, receive->difficulty () + 1); - node.process_local (receive); - node.block_processor.flush (); - ASSERT_TRUE (node.active.active (receive->qualified_root ())); } } diff --git a/nano/node/active_transactions.cpp b/nano/node/active_transactions.cpp index 3a1eaf1e01..789f2302c2 100644 --- a/nano/node/active_transactions.cpp +++ b/nano/node/active_transactions.cpp @@ -967,34 +967,6 @@ std::shared_ptr nano::active_transactions::winner (nano::block_hash return result; } -void nano::active_transactions::restart (nano::transaction const & transaction_a, std::shared_ptr const & block_a) -{ - auto hash (block_a->hash ()); - auto ledger_block (node.store.block_get (transaction_a, hash)); - if (ledger_block != nullptr && ledger_block->block_work () != block_a->block_work () && !node.block_confirmed_or_being_confirmed (transaction_a, hash)) - { - if (block_a->difficulty () > ledger_block->difficulty ()) - { - // Re-writing the block is necessary to avoid the same work being received later to force restarting the election - // The existing block is re-written, not the arriving block, as that one might not have gone through a full signature check - ledger_block->block_work_set (block_a->block_work ()); - - // Deferred write - node.block_processor.update (ledger_block); - - // Restart election for the upgraded block, previously dropped from elections - if (node.ledger.dependents_confirmed (transaction_a, *ledger_block)) - { - node.stats.inc (nano::stat::type::election, nano::stat::detail::election_restart); - auto previous_balance = node.ledger.balance (transaction_a, ledger_block->previous ()); - auto block_has_account = ledger_block->type () == nano::block_type::state || ledger_block->type () == nano::block_type::open; - auto account = block_has_account ? ledger_block->account () : ledger_block->sideband ().account; - scheduler.activate (account, transaction_a); - } - } - } -} - std::deque nano::active_transactions::list_recently_cemented () { nano::lock_guard lock (mutex); diff --git a/nano/node/active_transactions.hpp b/nano/node/active_transactions.hpp index 24e8940ac8..e4432b3afa 100644 --- a/nano/node/active_transactions.hpp +++ b/nano/node/active_transactions.hpp @@ -161,8 +161,6 @@ class active_transactions final bool active (nano::qualified_root const &); std::shared_ptr election (nano::qualified_root const &) const; std::shared_ptr winner (nano::block_hash const &) const; - // Returns false if the election was restarted - void restart (nano::transaction const &, std::shared_ptr const &); // Returns a list of elections sorted by difficulty std::vector> list_active (size_t = std::numeric_limits::max ()); void erase (nano::block const &); diff --git a/nano/node/blockprocessor.cpp b/nano/node/blockprocessor.cpp index a0bd0edf20..1116f919cb 100644 --- a/nano/node/blockprocessor.cpp +++ b/nano/node/blockprocessor.cpp @@ -137,15 +137,6 @@ void nano::block_processor::force (std::shared_ptr const & block_a) condition.notify_all (); } -void nano::block_processor::update (std::shared_ptr const & block_a) -{ - { - nano::lock_guard lock (mutex); - updates.push_back (block_a); - } - condition.notify_all (); -} - void nano::block_processor::wait_write () { nano::lock_guard lock (mutex); @@ -188,7 +179,7 @@ bool nano::block_processor::should_log () bool nano::block_processor::have_blocks_ready () { debug_assert (!mutex.try_lock ()); - return !blocks.empty () || !forced.empty () || !updates.empty (); + return !blocks.empty () || !forced.empty (); } bool nano::block_processor::have_blocks () @@ -245,82 +236,67 @@ void nano::block_processor::process_batch (nano::unique_lock & lock lock_a.lock (); timer_l.start (); // Processing blocks - unsigned number_of_blocks_processed (0), number_of_forced_processed (0), number_of_updates_processed (0); + unsigned number_of_blocks_processed (0), number_of_forced_processed (0); auto deadline_reached = [&timer_l, deadline = node.config.block_processor_batch_max_time] { return timer_l.after_deadline (deadline); }; auto processor_batch_reached = [&number_of_blocks_processed, max = node.flags.block_processor_batch_size] { return number_of_blocks_processed >= max; }; auto store_batch_reached = [&number_of_blocks_processed, max = node.store.max_block_write_batch_num ()] { return number_of_blocks_processed >= max; }; while (have_blocks_ready () && (!deadline_reached () || !processor_batch_reached ()) && !awaiting_write && !store_batch_reached ()) { - if ((blocks.size () + state_block_signature_verification.size () + forced.size () + updates.size () > 64) && should_log ()) + if ((blocks.size () + state_block_signature_verification.size () + forced.size () > 64) && should_log ()) { - node.logger.always_log (boost::str (boost::format ("%1% blocks (+ %2% state blocks) (+ %3% forced, %4% updates) in processing queue") % blocks.size () % state_block_signature_verification.size () % forced.size () % updates.size ())); + node.logger.always_log (boost::str (boost::format ("%1% blocks (+ %2% state blocks) (+ %3% forced) in processing queue") % blocks.size () % state_block_signature_verification.size () % forced.size ())); } - if (!updates.empty ()) + nano::unchecked_info info; + nano::block_hash hash (0); + bool force (false); + if (forced.empty ()) { - auto block (updates.front ()); - updates.pop_front (); - lock_a.unlock (); - auto hash (block->hash ()); - if (node.store.block_exists (transaction, hash)) - { - node.store.block_put (transaction, hash, *block); - } - ++number_of_updates_processed; + info = blocks.front (); + blocks.pop_front (); + hash = info.block->hash (); } else { - nano::unchecked_info info; - nano::block_hash hash (0); - bool force (false); - if (forced.empty ()) - { - info = blocks.front (); - blocks.pop_front (); - hash = info.block->hash (); - } - else - { - info = nano::unchecked_info (forced.front (), 0, nano::seconds_since_epoch (), nano::signature_verification::unknown); - forced.pop_front (); - hash = info.block->hash (); - force = true; - number_of_forced_processed++; - } - lock_a.unlock (); - if (force) + info = nano::unchecked_info (forced.front (), 0, nano::seconds_since_epoch (), nano::signature_verification::unknown); + forced.pop_front (); + hash = info.block->hash (); + force = true; + number_of_forced_processed++; + } + lock_a.unlock (); + if (force) + { + auto successor (node.ledger.successor (transaction, info.block->qualified_root ())); + if (successor != nullptr && successor->hash () != hash) { - auto successor (node.ledger.successor (transaction, info.block->qualified_root ())); - if (successor != nullptr && successor->hash () != hash) + // Replace our block with the winner and roll back any dependent blocks + if (node.config.logging.ledger_rollback_logging ()) { - // Replace our block with the winner and roll back any dependent blocks - if (node.config.logging.ledger_rollback_logging ()) - { - node.logger.always_log (boost::str (boost::format ("Rolling back %1% and replacing with %2%") % successor->hash ().to_string () % hash.to_string ())); - } - std::vector> rollback_list; - if (node.ledger.rollback (transaction, successor->hash (), rollback_list)) - { - node.logger.always_log (nano::severity_level::error, boost::str (boost::format ("Failed to roll back %1% because it or a successor was confirmed") % successor->hash ().to_string ())); - } - else if (node.config.logging.ledger_rollback_logging ()) - { - node.logger.always_log (boost::str (boost::format ("%1% blocks rolled back") % rollback_list.size ())); - } - // Deleting from votes cache, stop active transaction - for (auto & i : rollback_list) + node.logger.always_log (boost::str (boost::format ("Rolling back %1% and replacing with %2%") % successor->hash ().to_string () % hash.to_string ())); + } + std::vector> rollback_list; + if (node.ledger.rollback (transaction, successor->hash (), rollback_list)) + { + node.logger.always_log (nano::severity_level::error, boost::str (boost::format ("Failed to roll back %1% because it or a successor was confirmed") % successor->hash ().to_string ())); + } + else if (node.config.logging.ledger_rollback_logging ()) + { + node.logger.always_log (boost::str (boost::format ("%1% blocks rolled back") % rollback_list.size ())); + } + // Deleting from votes cache, stop active transaction + for (auto & i : rollback_list) + { + node.history.erase (i->root ()); + // Stop all rolled back active transactions except initial + if (i->hash () != successor->hash ()) { - node.history.erase (i->root ()); - // Stop all rolled back active transactions except initial - if (i->hash () != successor->hash ()) - { - node.active.erase (*i); - } + node.active.erase (*i); } } } - number_of_blocks_processed++; - process_one (transaction, post_events, info, force); } + number_of_blocks_processed++; + process_one (transaction, post_events, info, force); lock_a.lock (); } awaiting_write = false; @@ -454,7 +430,6 @@ nano::process_return nano::block_processor::process_one (nano::write_transaction { node.logger.try_log (boost::str (boost::format ("Old for: %1%") % hash.to_string ())); } - events_a.events.emplace_back ([this, block = info_a.block, origin_a] (nano::transaction const & post_event_transaction_a) { process_old (post_event_transaction_a, block, origin_a); }); node.stats.inc (nano::stat::type::ledger, nano::stat::detail::old); break; } @@ -541,11 +516,6 @@ nano::process_return nano::block_processor::process_one (nano::write_transaction return result; } -void nano::block_processor::process_old (nano::transaction const & transaction_a, std::shared_ptr const & block_a, nano::block_origin const origin_a) -{ - node.active.restart (transaction_a, block_a); -} - void nano::block_processor::queue_unchecked (nano::write_transaction const & transaction_a, nano::hash_or_account const & hash_or_account_a) { auto unchecked_blocks (node.store.unchecked.get (transaction_a, hash_or_account_a.hash)); diff --git a/nano/node/blockprocessor.hpp b/nano/node/blockprocessor.hpp index decd574271..132f85bdab 100644 --- a/nano/node/blockprocessor.hpp +++ b/nano/node/blockprocessor.hpp @@ -58,7 +58,6 @@ class block_processor final void add (nano::unchecked_info const &); void add (std::shared_ptr const &, uint64_t = 0); void force (std::shared_ptr const &); - void update (std::shared_ptr const &); void wait_write (); bool should_log (); bool have_blocks_ready (); @@ -74,7 +73,6 @@ class block_processor final void queue_unchecked (nano::write_transaction const &, nano::hash_or_account const &); void process_batch (nano::unique_lock &); void process_live (nano::transaction const &, nano::block_hash const &, std::shared_ptr const &, nano::process_return const &, nano::block_origin const = nano::block_origin::remote); - void process_old (nano::transaction const &, std::shared_ptr const &, nano::block_origin const); void requeue_invalid (nano::block_hash const &, nano::unchecked_info const &); void process_verified_state_blocks (std::deque &, std::vector const &, std::vector const &, std::vector const &); bool stopped{ false }; @@ -83,7 +81,6 @@ class block_processor final std::chrono::steady_clock::time_point next_log; std::deque blocks; std::deque> forced; - std::deque> updates; nano::condition_variable condition; nano::node & node; nano::write_database_queue & write_database_queue; From 0d64a2c2ca3e601cfdf73220be33057ef771b382 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Mon, 14 Jun 2021 20:01:37 +0200 Subject: [PATCH 042/346] Applying cmake-format. --- nano/test_common/CMakeLists.txt | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/nano/test_common/CMakeLists.txt b/nano/test_common/CMakeLists.txt index 4927654693..1e70b41704 100644 --- a/nano/test_common/CMakeLists.txt +++ b/nano/test_common/CMakeLists.txt @@ -1,4 +1,5 @@ -add_library(test_common +add_library( + test_common network.hpp network.cpp system.hpp From d003c5b897d5a8fb7e8efa89c69c3de1152ba959 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Mon, 14 Jun 2021 12:09:07 +0200 Subject: [PATCH 043/346] Rocksdb set to true within config text so it should deserialize true. --- nano/core_test/toml.cpp | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/nano/core_test/toml.cpp b/nano/core_test/toml.cpp index fff7bccfb2..563b83d208 100644 --- a/nano/core_test/toml.cpp +++ b/nano/core_test/toml.cpp @@ -659,7 +659,8 @@ TEST (toml, daemon_config_deserialize_no_defaults) ASSERT_NE (conf.node.lmdb_config.max_databases, defaults.node.lmdb_config.max_databases); ASSERT_NE (conf.node.lmdb_config.map_size, defaults.node.lmdb_config.map_size); - ASSERT_NE (conf.node.rocksdb_config.enable, defaults.node.rocksdb_config.enable); + ASSERT_TRUE (conf.node.rocksdb_config.enable); + ASSERT_EQ (nano::rocksdb_config::using_rocksdb_in_tests (), defaults.node.rocksdb_config.enable); ASSERT_NE (conf.node.rocksdb_config.memory_multiplier, defaults.node.rocksdb_config.memory_multiplier); ASSERT_NE (conf.node.rocksdb_config.io_threads, defaults.node.rocksdb_config.io_threads); } From 269c086776d006181ae3c7bf30325470d0abcac8 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Mon, 14 Jun 2021 21:20:21 +0200 Subject: [PATCH 044/346] Re-adding commented out line. --- nano/node/node.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nano/node/node.cpp b/nano/node/node.cpp index 374e4e2428..6f2d364ef8 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -1781,7 +1781,7 @@ nano::node_wrapper::node_wrapper (boost::filesystem::path const & path_a, boost: } auto & node_config = daemon_config.node; - //node_config.peering_port = nano::get_available_port (); + node_config.peering_port = nano::get_available_port (); node_config.logging.max_size = std::numeric_limits::max (); node_config.logging.init (path_a); From df5072eff585f3d7075a3ba0a7406458d723b77b Mon Sep 17 00:00:00 2001 From: clemahieu Date: Mon, 14 Jun 2021 23:19:04 +0200 Subject: [PATCH 045/346] Currently the node lib doesn't reference the test_common library and likely shouldn't just for the purpose of getting a dummy port for command line options. This change uses test port 24000 for nano::inactive_node which is used for CLI options and won't collide with live or debug ports. (#3334) --- nano/node/node.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nano/node/node.cpp b/nano/node/node.cpp index 0aa8b20678..be3c76cd7b 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -1781,7 +1781,7 @@ nano::node_wrapper::node_wrapper (boost::filesystem::path const & path_a, boost: } auto & node_config = daemon_config.node; - node_config.peering_port = nano::get_available_port (); + node_config.peering_port = 24000; node_config.logging.max_size = std::numeric_limits::max (); node_config.logging.init (path_a); From 4d915c1fa3f7741299cae041f992dae283319e74 Mon Sep 17 00:00:00 2001 From: Thiago Silva <82097354+thsfs@users.noreply.github.com> Date: Mon, 14 Jun 2021 19:03:04 -0300 Subject: [PATCH 046/346] Block store break up (#3329) As part of the issue #3255: * Moves out version methods from the block store class * Splits block_store class into store/block_store classes --- nano/core_test/block_store.cpp | 254 ++++----- nano/core_test/bootstrap.cpp | 10 +- nano/core_test/confirmation_height.cpp | 4 +- nano/core_test/gap_cache.cpp | 6 +- nano/core_test/ledger.cpp | 206 ++++---- nano/core_test/node.cpp | 38 +- nano/core_test/processor_service.cpp | 2 +- nano/core_test/wallet.cpp | 10 +- nano/lib/rep_weights.cpp | 2 +- nano/lib/rep_weights.hpp | 2 +- nano/nano_node/entry.cpp | 20 +- nano/node/active_transactions.cpp | 14 +- nano/node/blockprocessor.cpp | 4 +- nano/node/bootstrap/bootstrap_bulk_pull.cpp | 4 +- nano/node/cli.cpp | 4 +- nano/node/confirmation_height_bounded.cpp | 18 +- nano/node/confirmation_height_bounded.hpp | 2 +- nano/node/confirmation_height_processor.hpp | 2 +- nano/node/confirmation_height_unbounded.cpp | 6 +- nano/node/confirmation_height_unbounded.hpp | 2 +- nano/node/election.hpp | 2 +- nano/node/election_scheduler.cpp | 4 +- nano/node/gap_cache.cpp | 2 +- nano/node/json_handler.cpp | 72 +-- nano/node/lmdb/lmdb.cpp | 59 ++- nano/node/lmdb/lmdb.hpp | 35 +- nano/node/lmdb/lmdb_env.hpp | 2 +- nano/node/lmdb/lmdb_iterator.hpp | 2 +- nano/node/lmdb/lmdb_txn.cpp | 2 +- nano/node/lmdb/lmdb_txn.hpp | 2 +- nano/node/lmdb/wallet_value.hpp | 2 +- nano/node/node.cpp | 12 +- nano/node/node.hpp | 4 +- nano/node/online_reps.cpp | 2 +- nano/node/request_aggregator.cpp | 12 +- nano/node/rocksdb/rocksdb.cpp | 45 +- nano/node/rocksdb/rocksdb.hpp | 42 +- nano/node/rocksdb/rocksdb_iterator.hpp | 2 +- nano/node/rocksdb/rocksdb_txn.hpp | 2 +- nano/node/telemetry.cpp | 2 +- nano/node/vote_processor.cpp | 2 +- nano/node/vote_processor.hpp | 2 +- nano/node/voting.cpp | 6 +- nano/node/wallet.cpp | 6 +- nano/node/wallet.hpp | 4 +- nano/qt/qt.cpp | 16 +- nano/qt_test/qt.cpp | 2 +- nano/rpc_test/rpc.cpp | 24 +- nano/secure/CMakeLists.txt | 10 +- nano/secure/blockstore_partial.hpp | 498 ------------------ nano/secure/common.cpp | 2 +- nano/secure/ledger.cpp | 134 ++--- nano/secure/ledger.hpp | 6 +- nano/secure/{blockstore.cpp => store.cpp} | 26 +- nano/secure/{blockstore.hpp => store.hpp} | 98 ++-- nano/secure/store/account_store_partial.hpp | 38 +- nano/secure/store/block_store_partial.hpp | 313 +++++++++++ .../confirmation_height_store_partial.hpp | 40 +- .../secure/store/final_vote_store_partial.hpp | 38 +- nano/secure/store/frontier_store_partial.hpp | 34 +- nano/secure/store/online_weight_partial.hpp | 32 +- nano/secure/store/peer_store_partial.hpp | 32 +- nano/secure/store/pending_store_partial.hpp | 34 +- nano/secure/store/pruned_store_partial.hpp | 42 +- nano/secure/store/unchecked_store_partial.hpp | 40 +- nano/secure/store/version_store_partial.hpp | 47 ++ nano/secure/store_partial.hpp | 217 ++++++++ nano/slow_test/node.cpp | 4 +- nano/test_common/system.cpp | 2 +- 69 files changed, 1438 insertions(+), 1228 deletions(-) delete mode 100644 nano/secure/blockstore_partial.hpp rename nano/secure/{blockstore.cpp => store.cpp} (75%) rename nano/secure/{blockstore.hpp => store.hpp} (90%) create mode 100644 nano/secure/store/block_store_partial.hpp create mode 100644 nano/secure/store/version_store_partial.hpp create mode 100644 nano/secure/store_partial.hpp diff --git a/nano/core_test/block_store.cpp b/nano/core_test/block_store.cpp index dd7a409ef7..3f016e3fe5 100644 --- a/nano/core_test/block_store.cpp +++ b/nano/core_test/block_store.cpp @@ -115,17 +115,17 @@ TEST (block_store, add_item) block.sideband_set ({}); auto hash1 (block.hash ()); auto transaction (store->tx_begin_write ()); - auto latest1 (store->block_get (transaction, hash1)); + auto latest1 (store->block.get (transaction, hash1)); ASSERT_EQ (nullptr, latest1); - ASSERT_FALSE (store->block_exists (transaction, hash1)); - store->block_put (transaction, hash1, block); - auto latest2 (store->block_get (transaction, hash1)); + ASSERT_FALSE (store->block.exists (transaction, hash1)); + store->block.put (transaction, hash1, block); + auto latest2 (store->block.get (transaction, hash1)); ASSERT_NE (nullptr, latest2); ASSERT_EQ (block, *latest2); - ASSERT_TRUE (store->block_exists (transaction, hash1)); - ASSERT_FALSE (store->block_exists (transaction, hash1.number () - 1)); - store->block_del (transaction, hash1); - auto latest3 (store->block_get (transaction, hash1)); + ASSERT_TRUE (store->block.exists (transaction, hash1)); + ASSERT_FALSE (store->block.exists (transaction, hash1.number () - 1)); + store->block.del (transaction, hash1); + auto latest3 (store->block.get (transaction, hash1)); ASSERT_EQ (nullptr, latest3); } @@ -137,25 +137,25 @@ TEST (block_store, clear_successor) nano::open_block block1 (0, 1, 0, nano::keypair ().prv, 0, 0); block1.sideband_set ({}); auto transaction (store->tx_begin_write ()); - store->block_put (transaction, block1.hash (), block1); + store->block.put (transaction, block1.hash (), block1); nano::open_block block2 (0, 2, 0, nano::keypair ().prv, 0, 0); block2.sideband_set ({}); - store->block_put (transaction, block2.hash (), block2); - auto block2_store (store->block_get (transaction, block1.hash ())); + store->block.put (transaction, block2.hash (), block2); + auto block2_store (store->block.get (transaction, block1.hash ())); ASSERT_NE (nullptr, block2_store); ASSERT_EQ (0, block2_store->sideband ().successor.number ()); auto modified_sideband = block2_store->sideband (); modified_sideband.successor = block2.hash (); block1.sideband_set (modified_sideband); - store->block_put (transaction, block1.hash (), block1); + store->block.put (transaction, block1.hash (), block1); { - auto block1_store (store->block_get (transaction, block1.hash ())); + auto block1_store (store->block.get (transaction, block1.hash ())); ASSERT_NE (nullptr, block1_store); ASSERT_EQ (block2.hash (), block1_store->sideband ().successor); } - store->block_successor_clear (transaction, block1.hash ()); + store->block.successor_clear (transaction, block1.hash ()); { - auto block1_store (store->block_get (transaction, block1.hash ())); + auto block1_store (store->block.get (transaction, block1.hash ())); ASSERT_NE (nullptr, block1_store); ASSERT_EQ (0, block1_store->sideband ().successor.number ()); } @@ -172,10 +172,10 @@ TEST (block_store, add_nonempty_block) auto hash1 (block.hash ()); block.signature = nano::sign_message (key1.prv, key1.pub, hash1); auto transaction (store->tx_begin_write ()); - auto latest1 (store->block_get (transaction, hash1)); + auto latest1 (store->block.get (transaction, hash1)); ASSERT_EQ (nullptr, latest1); - store->block_put (transaction, hash1, block); - auto latest2 (store->block_get (transaction, hash1)); + store->block.put (transaction, hash1, block); + auto latest2 (store->block.get (transaction, hash1)); ASSERT_NE (nullptr, latest2); ASSERT_EQ (block, *latest2); } @@ -191,21 +191,21 @@ TEST (block_store, add_two_items) auto hash1 (block.hash ()); block.signature = nano::sign_message (key1.prv, key1.pub, hash1); auto transaction (store->tx_begin_write ()); - auto latest1 (store->block_get (transaction, hash1)); + auto latest1 (store->block.get (transaction, hash1)); ASSERT_EQ (nullptr, latest1); nano::open_block block2 (0, 1, 3, nano::keypair ().prv, 0, 0); block2.sideband_set ({}); block2.hashables.account = 3; auto hash2 (block2.hash ()); block2.signature = nano::sign_message (key1.prv, key1.pub, hash2); - auto latest2 (store->block_get (transaction, hash2)); + auto latest2 (store->block.get (transaction, hash2)); ASSERT_EQ (nullptr, latest2); - store->block_put (transaction, hash1, block); - store->block_put (transaction, hash2, block2); - auto latest3 (store->block_get (transaction, hash1)); + store->block.put (transaction, hash1, block); + store->block.put (transaction, hash2, block2); + auto latest3 (store->block.get (transaction, hash1)); ASSERT_NE (nullptr, latest3); ASSERT_EQ (block, *latest3); - auto latest4 (store->block_get (transaction, hash2)); + auto latest4 (store->block.get (transaction, hash2)); ASSERT_NE (nullptr, latest4); ASSERT_EQ (block2, *latest4); ASSERT_FALSE (*latest3 == *latest4); @@ -221,14 +221,14 @@ TEST (block_store, add_receive) nano::open_block block1 (0, 1, 0, nano::keypair ().prv, 0, 0); block1.sideband_set ({}); auto transaction (store->tx_begin_write ()); - store->block_put (transaction, block1.hash (), block1); + store->block.put (transaction, block1.hash (), block1); nano::receive_block block (block1.hash (), 1, nano::keypair ().prv, 2, 3); block.sideband_set ({}); nano::block_hash hash1 (block.hash ()); - auto latest1 (store->block_get (transaction, hash1)); + auto latest1 (store->block.get (transaction, hash1)); ASSERT_EQ (nullptr, latest1); - store->block_put (transaction, hash1, block); - auto latest2 (store->block_get (transaction, hash1)); + store->block.put (transaction, hash1, block); + auto latest2 (store->block.get (transaction, hash1)); ASSERT_NE (nullptr, latest2); ASSERT_EQ (block, *latest2); } @@ -332,7 +332,7 @@ TEST (block_store, genesis) nano::account_info info; ASSERT_FALSE (store->account.get (transaction, nano::genesis_account, info)); ASSERT_EQ (hash, info.head); - auto block1 (store->block_get (transaction, info.head)); + auto block1 (store->block.get (transaction, info.head)); ASSERT_NE (nullptr, block1); auto receive1 (dynamic_cast (block1.get ())); ASSERT_NE (nullptr, receive1); @@ -474,8 +474,8 @@ TEST (block_store, one_block) nano::open_block block1 (0, 1, 0, nano::keypair ().prv, 0, 0); block1.sideband_set ({}); auto transaction (store->tx_begin_write ()); - store->block_put (transaction, block1.hash (), block1); - ASSERT_TRUE (store->block_exists (transaction, block1.hash ())); + store->block.put (transaction, block1.hash (), block1); + ASSERT_TRUE (store->block.exists (transaction, block1.hash ())); } TEST (block_store, empty_bootstrap) @@ -575,14 +575,14 @@ TEST (block_store, two_block) hashes.push_back (block1.hash ()); blocks.push_back (block1); auto transaction (store->tx_begin_write ()); - store->block_put (transaction, hashes[0], block1); + store->block.put (transaction, hashes[0], block1); nano::open_block block2 (0, 1, 2, nano::keypair ().prv, 0, 0); block2.sideband_set ({}); hashes.push_back (block2.hash ()); blocks.push_back (block2); - store->block_put (transaction, hashes[1], block2); - ASSERT_TRUE (store->block_exists (transaction, block1.hash ())); - ASSERT_TRUE (store->block_exists (transaction, block2.hash ())); + store->block.put (transaction, hashes[1], block2); + ASSERT_TRUE (store->block.exists (transaction, block1.hash ())); + ASSERT_TRUE (store->block.exists (transaction, block2.hash ())); } TEST (block_store, two_account) @@ -670,7 +670,7 @@ TEST (mdb_block_store, supported_version_upgrades) auto transaction (store.tx_begin_write ()); store.initialize (transaction, genesis, ledger.cache); // Lower the database to the max version unsupported for upgrades - store.version_put (transaction, store.minimum_version - 1); + store.version.put (transaction, store.minimum_version - 1); } // Upgrade should fail @@ -688,7 +688,7 @@ TEST (mdb_block_store, supported_version_upgrades) auto transaction (store.tx_begin_write ()); store.initialize (transaction, genesis, ledger.cache); // Lower the database version to the minimum version supported for upgrade. - store.version_put (transaction, store.minimum_version); + store.version.put (transaction, store.minimum_version); store.confirmation_height.del (transaction, nano::genesis_account); ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "accounts_v1", MDB_CREATE, &store.accounts_v1_handle)); ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "open", MDB_CREATE, &store.open_blocks_handle)); @@ -834,9 +834,9 @@ TEST (block_store, block_replace) nano::send_block send2 (0, 0, 0, nano::keypair ().prv, 0, 2); send2.sideband_set ({}); auto transaction (store->tx_begin_write ()); - store->block_put (transaction, 0, send1); - store->block_put (transaction, 0, send2); - auto block3 (store->block_get (transaction, 0)); + store->block.put (transaction, 0, send1); + store->block.put (transaction, 0, send2); + auto block3 (store->block.get (transaction, 0)); ASSERT_NE (nullptr, block3); ASSERT_EQ (2, block3->block_work ()); } @@ -848,14 +848,14 @@ TEST (block_store, block_count) ASSERT_TRUE (!store->init_error ()); { auto transaction (store->tx_begin_write ()); - ASSERT_EQ (0, store->block_count (transaction)); + ASSERT_EQ (0, store->block.count (transaction)); nano::open_block block (0, 1, 0, nano::keypair ().prv, 0, 0); block.sideband_set ({}); auto hash1 (block.hash ()); - store->block_put (transaction, hash1, block); + store->block.put (transaction, hash1, block); } auto transaction (store->tx_begin_read ()); - ASSERT_EQ (1, store->block_count (transaction)); + ASSERT_EQ (1, store->block.count (transaction)); } TEST (block_store, account_count) @@ -898,7 +898,7 @@ TEST (block_store, block_random) store->initialize (transaction, genesis, ledger_cache); } auto transaction (store->tx_begin_read ()); - auto block (store->block_random (transaction)); + auto block (store->block.random (transaction)); ASSERT_NE (nullptr, block); ASSERT_EQ (*block, *genesis.open); } @@ -979,21 +979,21 @@ TEST (block_store, state_block) auto transaction (store->tx_begin_write ()); store->initialize (transaction, genesis, ledger_cache); ASSERT_EQ (nano::block_type::state, block1.type ()); - store->block_put (transaction, block1.hash (), block1); - ASSERT_TRUE (store->block_exists (transaction, block1.hash ())); - auto block2 (store->block_get (transaction, block1.hash ())); + store->block.put (transaction, block1.hash (), block1); + ASSERT_TRUE (store->block.exists (transaction, block1.hash ())); + auto block2 (store->block.get (transaction, block1.hash ())); ASSERT_NE (nullptr, block2); ASSERT_EQ (block1, *block2); } { auto transaction (store->tx_begin_write ()); - auto count (store->block_count (transaction)); + auto count (store->block.count (transaction)); ASSERT_EQ (2, count); - store->block_del (transaction, block1.hash ()); - ASSERT_FALSE (store->block_exists (transaction, block1.hash ())); + store->block.del (transaction, block1.hash ()); + ASSERT_FALSE (store->block.exists (transaction, block1.hash ())); } auto transaction (store->tx_begin_read ()); - auto count2 (store->block_count (transaction)); + auto count2 (store->block.count (transaction)); ASSERT_EQ (1, count2); } @@ -1032,37 +1032,37 @@ TEST (mdb_block_store, sideband_height) ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, state_open).code); nano::state_block epoch (key1.pub, state_open.hash (), 0, nano::Gxrb_ratio, ledger.epoch_link (nano::epoch::epoch_1), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (state_open.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch).code); - ASSERT_EQ (nano::epoch::epoch_1, store.block_version (transaction, epoch.hash ())); + ASSERT_EQ (nano::epoch::epoch_1, store.block.version (transaction, epoch.hash ())); nano::state_block epoch_open (key2.pub, 0, 0, 0, ledger.epoch_link (nano::epoch::epoch_1), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (key2.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch_open).code); - ASSERT_EQ (nano::epoch::epoch_1, store.block_version (transaction, epoch_open.hash ())); + ASSERT_EQ (nano::epoch::epoch_1, store.block.version (transaction, epoch_open.hash ())); nano::state_block state_receive (key2.pub, epoch_open.hash (), 0, nano::Gxrb_ratio, state_send2.hash (), key2.prv, key2.pub, *pool.generate (epoch_open.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, state_receive).code); nano::open_block open (state_send3.hash (), nano::dev_genesis_key.pub, key3.pub, key3.prv, key3.pub, *pool.generate (key3.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open).code); - auto block1 (store.block_get (transaction, genesis.hash ())); + auto block1 (store.block.get (transaction, genesis.hash ())); ASSERT_EQ (block1->sideband ().height, 1); - auto block2 (store.block_get (transaction, send.hash ())); + auto block2 (store.block.get (transaction, send.hash ())); ASSERT_EQ (block2->sideband ().height, 2); - auto block3 (store.block_get (transaction, receive.hash ())); + auto block3 (store.block.get (transaction, receive.hash ())); ASSERT_EQ (block3->sideband ().height, 3); - auto block4 (store.block_get (transaction, change.hash ())); + auto block4 (store.block.get (transaction, change.hash ())); ASSERT_EQ (block4->sideband ().height, 4); - auto block5 (store.block_get (transaction, state_send1.hash ())); + auto block5 (store.block.get (transaction, state_send1.hash ())); ASSERT_EQ (block5->sideband ().height, 5); - auto block6 (store.block_get (transaction, state_send2.hash ())); + auto block6 (store.block.get (transaction, state_send2.hash ())); ASSERT_EQ (block6->sideband ().height, 6); - auto block7 (store.block_get (transaction, state_send3.hash ())); + auto block7 (store.block.get (transaction, state_send3.hash ())); ASSERT_EQ (block7->sideband ().height, 7); - auto block8 (store.block_get (transaction, state_open.hash ())); + auto block8 (store.block.get (transaction, state_open.hash ())); ASSERT_EQ (block8->sideband ().height, 1); - auto block9 (store.block_get (transaction, epoch.hash ())); + auto block9 (store.block.get (transaction, epoch.hash ())); ASSERT_EQ (block9->sideband ().height, 2); - auto block10 (store.block_get (transaction, epoch_open.hash ())); + auto block10 (store.block.get (transaction, epoch_open.hash ())); ASSERT_EQ (block10->sideband ().height, 1); - auto block11 (store.block_get (transaction, state_receive.hash ())); + auto block11 (store.block.get (transaction, state_receive.hash ())); ASSERT_EQ (block11->sideband ().height, 2); - auto block12 (store.block_get (transaction, open.hash ())); + auto block12 (store.block.get (transaction, open.hash ())); ASSERT_EQ (block12->sideband ().height, 1); } @@ -1231,9 +1231,9 @@ TEST (block_store, pruned_blocks) auto transaction (store->tx_begin_write ()); store->pruned.put (transaction, hash2); ASSERT_TRUE (store->pruned.exists (transaction, hash2)); // Check new pruned hash is here - ASSERT_FALSE (store->block_exists (transaction, hash2)); + ASSERT_FALSE (store->block.exists (transaction, hash2)); ASSERT_TRUE (store->pruned.exists (transaction, hash1)); // Check first pruned hash is still here - ASSERT_FALSE (store->block_exists (transaction, hash1)); + ASSERT_FALSE (store->block.exists (transaction, hash1)); } ASSERT_EQ (store->pruned.count (store->tx_begin_read ()), 2); @@ -1243,11 +1243,11 @@ TEST (block_store, pruned_blocks) auto transaction (store->tx_begin_write ()); store->pruned.del (transaction, hash2); ASSERT_FALSE (store->pruned.exists (transaction, hash2)); // Confirm it no longer exists - ASSERT_FALSE (store->block_exists (transaction, hash2)); // true for block_exists - store->block_put (transaction, hash2, block2); // Add corresponding block - ASSERT_TRUE (store->block_exists (transaction, hash2)); + ASSERT_FALSE (store->block.exists (transaction, hash2)); // true for block_exists + store->block.put (transaction, hash2, block2); // Add corresponding block + ASSERT_TRUE (store->block.exists (transaction, hash2)); ASSERT_TRUE (store->pruned.exists (transaction, hash1)); // Check first pruned hash is still here - ASSERT_FALSE (store->block_exists (transaction, hash1)); + ASSERT_FALSE (store->block.exists (transaction, hash1)); } ASSERT_EQ (store->pruned.count (store->tx_begin_read ()), 1); @@ -1301,7 +1301,7 @@ TEST (mdb_block_store, upgrade_v14_v15) ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch).code); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, state_send).code); // Lower the database to the previous version - store.version_put (transaction, 14); + store.version.put (transaction, 14); store.confirmation_height.del (transaction, nano::genesis_account); modify_account_info_to_v14 (store, transaction, nano::genesis_account, confirmation_height_info.height, state_send.hash ()); @@ -1313,8 +1313,8 @@ TEST (mdb_block_store, upgrade_v14_v15) write_block_w_sideband_v18 (store, store.send_blocks_handle, transaction, send); // Remove from blocks table - store.block_del (transaction, state_send.hash ()); - store.block_del (transaction, epoch.hash ()); + store.block.del (transaction, state_send.hash ()); + store.block.del (transaction, epoch.hash ()); // Turn pending into v14 ASSERT_FALSE (mdb_put (store.env.tx (transaction), store.pending_v0_handle, nano::mdb_val (nano::pending_key (nano::dev_genesis_key.pub, send.hash ())), nano::mdb_val (nano::pending_info_v14 (nano::genesis_account, nano::Gxrb_ratio, nano::epoch::epoch_0)), 0)); @@ -1358,10 +1358,10 @@ TEST (mdb_block_store, upgrade_v14_v15) ASSERT_NE (error_get_state_v1, MDB_SUCCESS); // Check that the epochs are set correctly for the sideband, accounts and pending entries - auto block = store.block_get (transaction, state_send.hash ()); + auto block = store.block.get (transaction, state_send.hash ()); ASSERT_NE (block, nullptr); ASSERT_EQ (block->sideband ().details.epoch, nano::epoch::epoch_1); - block = store.block_get (transaction, send.hash ()); + block = store.block.get (transaction, send.hash ()); ASSERT_NE (block, nullptr); ASSERT_EQ (block->sideband ().details.epoch, nano::epoch::epoch_0); ASSERT_EQ (info.epoch (), nano::epoch::epoch_1); @@ -1372,7 +1372,7 @@ TEST (mdb_block_store, upgrade_v14_v15) ASSERT_EQ (pending_info.epoch, nano::epoch::epoch_1); // Version should be correct - ASSERT_LT (14, store.version_get (transaction)); + ASSERT_LT (14, store.version.get (transaction)); } TEST (mdb_block_store, upgrade_v15_v16) @@ -1400,7 +1400,7 @@ TEST (mdb_block_store, upgrade_v15_v16) ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "open", MDB_CREATE, &store.open_blocks_handle)); write_block_w_sideband_v18 (store, store.open_blocks_handle, transaction, *genesis.open); // Lower the database to the previous version - store.version_put (transaction, 15); + store.version.put (transaction, 15); // Confirm the rep weight exists in the database ASSERT_EQ (MDB_SUCCESS, mdb_get (store.env.tx (transaction), store.representation_handle, nano::mdb_val (nano::genesis_account), value)); store.confirmation_height.del (transaction, nano::genesis_account); @@ -1418,7 +1418,7 @@ TEST (mdb_block_store, upgrade_v15_v16) ASSERT_EQ (store.representation_handle, 0); // Version should be correct - ASSERT_LT (15, store.version_get (transaction)); + ASSERT_LT (15, store.version.get (transaction)); } TEST (mdb_block_store, upgrade_v16_v17) @@ -1458,7 +1458,7 @@ TEST (mdb_block_store, upgrade_v16_v17) write_block_w_sideband_v18 (store, store.state_blocks_handle, transaction, block3); // Lower the database to the previous version - store.version_put (transaction, 16); + store.version.put (transaction, 16); } // Now do the upgrade @@ -1475,7 +1475,7 @@ TEST (mdb_block_store, upgrade_v16_v17) ASSERT_EQ (confirmation_height_info.frontier, expected_cemented_frontier); // Version should be correct - ASSERT_LT (16, store.version_get (transaction)); + ASSERT_LT (16, store.version.get (transaction)); }; code (0, nano::block_hash (0)); @@ -1536,7 +1536,7 @@ TEST (mdb_block_store, upgrade_v17_v18) ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "state_blocks", MDB_CREATE, &store.state_blocks_handle)); // Downgrade the store - store.version_put (transaction, 17); + store.version.put (transaction, 17); write_block_w_sideband_v18 (store, store.state_blocks_handle, transaction, state_receive); write_block_w_sideband_v18 (store, store.state_blocks_handle, transaction, epoch_first); @@ -1555,13 +1555,13 @@ TEST (mdb_block_store, upgrade_v17_v18) write_sideband_v15 (store, transaction, state_receive2); write_sideband_v15 (store, transaction, state_open); - store.block_del (transaction, state_receive_zero.hash ()); - store.block_del (transaction, epoch.hash ()); - store.block_del (transaction, state_send.hash ()); - store.block_del (transaction, state_change.hash ()); - store.block_del (transaction, state_send_change.hash ()); - store.block_del (transaction, state_receive2.hash ()); - store.block_del (transaction, state_open.hash ()); + store.block.del (transaction, state_receive_zero.hash ()); + store.block.del (transaction, epoch.hash ()); + store.block.del (transaction, state_send.hash ()); + store.block.del (transaction, state_change.hash ()); + store.block.del (transaction, state_send_change.hash ()); + store.block.del (transaction, state_receive2.hash ()); + store.block.del (transaction, state_open.hash ()); } // Now do the upgrade @@ -1578,7 +1578,7 @@ TEST (mdb_block_store, upgrade_v17_v18) // Check that sidebands are correctly populated { // Non-state unaffected - auto block = store.block_get (transaction, send_zero.hash ()); + auto block = store.block.get (transaction, send_zero.hash ()); ASSERT_NE (block, nullptr); // All defaults ASSERT_EQ (block->sideband ().details.epoch, nano::epoch::epoch_0); @@ -1588,7 +1588,7 @@ TEST (mdb_block_store, upgrade_v17_v18) } { // State receive from old zero send - auto block = store.block_get (transaction, state_receive_zero.hash ()); + auto block = store.block.get (transaction, state_receive_zero.hash ()); ASSERT_NE (block, nullptr); ASSERT_EQ (block->sideband ().details.epoch, nano::epoch::epoch_0); ASSERT_FALSE (block->sideband ().details.is_epoch); @@ -1597,7 +1597,7 @@ TEST (mdb_block_store, upgrade_v17_v18) } { // Epoch - auto block = store.block_get (transaction, epoch.hash ()); + auto block = store.block.get (transaction, epoch.hash ()); ASSERT_NE (block, nullptr); ASSERT_EQ (block->sideband ().details.epoch, nano::epoch::epoch_1); ASSERT_TRUE (block->sideband ().details.is_epoch); @@ -1606,7 +1606,7 @@ TEST (mdb_block_store, upgrade_v17_v18) } { // State send - auto block = store.block_get (transaction, state_send.hash ()); + auto block = store.block.get (transaction, state_send.hash ()); ASSERT_NE (block, nullptr); ASSERT_EQ (block->sideband ().details.epoch, nano::epoch::epoch_1); ASSERT_FALSE (block->sideband ().details.is_epoch); @@ -1615,7 +1615,7 @@ TEST (mdb_block_store, upgrade_v17_v18) } { // State receive - auto block = store.block_get (transaction, state_receive.hash ()); + auto block = store.block.get (transaction, state_receive.hash ()); ASSERT_NE (block, nullptr); ASSERT_EQ (block->sideband ().details.epoch, nano::epoch::epoch_1); ASSERT_FALSE (block->sideband ().details.is_epoch); @@ -1624,7 +1624,7 @@ TEST (mdb_block_store, upgrade_v17_v18) } { // State change - auto block = store.block_get (transaction, state_change.hash ()); + auto block = store.block.get (transaction, state_change.hash ()); ASSERT_NE (block, nullptr); ASSERT_EQ (block->sideband ().details.epoch, nano::epoch::epoch_1); ASSERT_FALSE (block->sideband ().details.is_epoch); @@ -1633,7 +1633,7 @@ TEST (mdb_block_store, upgrade_v17_v18) } { // State send + change - auto block = store.block_get (transaction, state_send_change.hash ()); + auto block = store.block.get (transaction, state_send_change.hash ()); ASSERT_NE (block, nullptr); ASSERT_EQ (block->sideband ().details.epoch, nano::epoch::epoch_1); ASSERT_FALSE (block->sideband ().details.is_epoch); @@ -1642,7 +1642,7 @@ TEST (mdb_block_store, upgrade_v17_v18) } { // Epoch on unopened account - auto block = store.block_get (transaction, epoch_first.hash ()); + auto block = store.block.get (transaction, epoch_first.hash ()); ASSERT_NE (block, nullptr); ASSERT_EQ (block->sideband ().details.epoch, nano::epoch::epoch_2); ASSERT_TRUE (block->sideband ().details.is_epoch); @@ -1651,7 +1651,7 @@ TEST (mdb_block_store, upgrade_v17_v18) } { // State open following epoch - auto block = store.block_get (transaction, state_receive2.hash ()); + auto block = store.block.get (transaction, state_receive2.hash ()); ASSERT_NE (block, nullptr); ASSERT_EQ (block->sideband ().details.epoch, nano::epoch::epoch_2); ASSERT_FALSE (block->sideband ().details.is_epoch); @@ -1660,7 +1660,7 @@ TEST (mdb_block_store, upgrade_v17_v18) } { // Another state send - auto block = store.block_get (transaction, state_send2.hash ()); + auto block = store.block.get (transaction, state_send2.hash ()); ASSERT_NE (block, nullptr); ASSERT_EQ (block->sideband ().details.epoch, nano::epoch::epoch_1); ASSERT_FALSE (block->sideband ().details.is_epoch); @@ -1669,7 +1669,7 @@ TEST (mdb_block_store, upgrade_v17_v18) } { // State open - auto block = store.block_get (transaction, state_open.hash ()); + auto block = store.block.get (transaction, state_open.hash ()); ASSERT_NE (block, nullptr); ASSERT_EQ (block->sideband ().details.epoch, nano::epoch::epoch_1); ASSERT_FALSE (block->sideband ().details.is_epoch); @@ -1678,7 +1678,7 @@ TEST (mdb_block_store, upgrade_v17_v18) } { // State send to an epoch link - auto block = store.block_get (transaction, state_send_epoch_link.hash ()); + auto block = store.block.get (transaction, state_send_epoch_link.hash ()); ASSERT_NE (block, nullptr); ASSERT_EQ (block->sideband ().details.epoch, nano::epoch::epoch_1); ASSERT_FALSE (block->sideband ().details.is_epoch); @@ -1686,7 +1686,7 @@ TEST (mdb_block_store, upgrade_v17_v18) ASSERT_FALSE (block->sideband ().details.is_receive); } // Version should be correct - ASSERT_LT (17, store.version_get (transaction)); + ASSERT_LT (17, store.version.get (transaction)); } TEST (mdb_block_store, upgrade_v18_v19) @@ -1740,7 +1740,7 @@ TEST (mdb_block_store, upgrade_v18_v19) write_block_w_sideband_v18 (store, store.state_blocks_handle, transaction, state_send); write_block_w_sideband_v18 (store, store.state_blocks_handle, transaction, state_open); - store.version_put (transaction, 18); + store.version.put (transaction, 18); } // Now do the upgrade @@ -1757,21 +1757,21 @@ TEST (mdb_block_store, upgrade_v18_v19) ASSERT_EQ (store.state_blocks_handle, 0); // Confirm these blocks all exist after the upgrade - ASSERT_TRUE (store.block_get (transaction, send.hash ())); - ASSERT_TRUE (store.block_get (transaction, receive.hash ())); - ASSERT_TRUE (store.block_get (transaction, change.hash ())); - ASSERT_TRUE (store.block_get (transaction, nano::genesis_hash)); - auto state_epoch_disk (store.block_get (transaction, state_epoch.hash ())); + ASSERT_TRUE (store.block.get (transaction, send.hash ())); + ASSERT_TRUE (store.block.get (transaction, receive.hash ())); + ASSERT_TRUE (store.block.get (transaction, change.hash ())); + ASSERT_TRUE (store.block.get (transaction, nano::genesis_hash)); + auto state_epoch_disk (store.block.get (transaction, state_epoch.hash ())); ASSERT_NE (nullptr, state_epoch_disk); ASSERT_EQ (nano::epoch::epoch_1, state_epoch_disk->sideband ().details.epoch); ASSERT_EQ (nano::epoch::epoch_0, state_epoch_disk->sideband ().source_epoch); // Not used for epoch state blocks - ASSERT_TRUE (store.block_get (transaction, state_send.hash ())); - auto state_send_disk (store.block_get (transaction, state_send.hash ())); + ASSERT_TRUE (store.block.get (transaction, state_send.hash ())); + auto state_send_disk (store.block.get (transaction, state_send.hash ())); ASSERT_NE (nullptr, state_send_disk); ASSERT_EQ (nano::epoch::epoch_1, state_send_disk->sideband ().details.epoch); ASSERT_EQ (nano::epoch::epoch_0, state_send_disk->sideband ().source_epoch); // Not used for send state blocks - ASSERT_TRUE (store.block_get (transaction, state_open.hash ())); - auto state_open_disk (store.block_get (transaction, state_open.hash ())); + ASSERT_TRUE (store.block.get (transaction, state_open.hash ())); + auto state_open_disk (store.block.get (transaction, state_open.hash ())); ASSERT_NE (nullptr, state_open_disk); ASSERT_EQ (nano::epoch::epoch_1, state_open_disk->sideband ().details.epoch); ASSERT_EQ (nano::epoch::epoch_1, state_open_disk->sideband ().source_epoch); @@ -1779,7 +1779,7 @@ TEST (mdb_block_store, upgrade_v18_v19) ASSERT_EQ (7, store.count (transaction, store.blocks_handle)); // Version should be correct - ASSERT_LT (18, store.version_get (transaction)); + ASSERT_LT (18, store.version.get (transaction)); } TEST (mdb_block_store, upgrade_v19_v20) @@ -1800,7 +1800,7 @@ TEST (mdb_block_store, upgrade_v19_v20) store.initialize (transaction, genesis, ledger.cache); // Delete pruned table ASSERT_FALSE (mdb_drop (store.env.tx (transaction), store.pruned_handle, 1)); - store.version_put (transaction, 19); + store.version.put (transaction, 19); } // Upgrading should create the table nano::mdb_store store (logger, path); @@ -1809,7 +1809,7 @@ TEST (mdb_block_store, upgrade_v19_v20) // Version should be correct auto transaction (store.tx_begin_read ()); - ASSERT_LT (19, store.version_get (transaction)); + ASSERT_LT (19, store.version.get (transaction)); } TEST (mdb_block_store, upgrade_v20_v21) @@ -1830,7 +1830,7 @@ TEST (mdb_block_store, upgrade_v20_v21) store.initialize (transaction, genesis, ledger.cache); // Delete pruned table ASSERT_FALSE (mdb_drop (store.env.tx (transaction), store.final_votes_handle, 1)); - store.version_put (transaction, 20); + store.version.put (transaction, 20); } // Upgrading should create the table nano::mdb_store store (logger, path); @@ -1839,7 +1839,7 @@ TEST (mdb_block_store, upgrade_v20_v21) // Version should be correct auto transaction (store.tx_begin_read ()); - ASSERT_LT (19, store.version_get (transaction)); + ASSERT_LT (19, store.version.get (transaction)); } TEST (mdb_block_store, upgrade_backup) @@ -1870,7 +1870,7 @@ TEST (mdb_block_store, upgrade_backup) nano::genesis genesis; nano::mdb_store store (logger, path); auto transaction (store.tx_begin_write ()); - store.version_put (transaction, 14); + store.version.put (transaction, 14); } ASSERT_EQ (get_backup_path ().string (), dir.string ()); @@ -1879,7 +1879,7 @@ TEST (mdb_block_store, upgrade_backup) nano::mdb_store store (logger, path, nano::txn_tracking_config{}, std::chrono::seconds (5), nano::lmdb_config{}, true); ASSERT_FALSE (store.init_error ()); auto transaction (store.tx_begin_read ()); - ASSERT_LT (14, store.version_get (transaction)); + ASSERT_LT (14, store.version.get (transaction)); ASSERT_NE (get_backup_path ().string (), dir.string ()); } @@ -1970,7 +1970,7 @@ TEST (block_store, incompatible_version) // Put version to an unreachable number so that it should always be incompatible auto transaction (store->tx_begin_write ()); - store->version_put (transaction, std::numeric_limits::max ()); + store->version.put (transaction, std::numeric_limits::max ()); } // Now try and read it, should give an error @@ -1979,7 +1979,7 @@ TEST (block_store, incompatible_version) ASSERT_TRUE (store->init_error ()); auto transaction = store->tx_begin_read (); - auto version_l = store->version_get (transaction); + auto version_l = store->version.get (transaction); ASSERT_EQ (version_l, std::numeric_limits::max ()); } } @@ -1997,7 +1997,7 @@ TEST (block_store, reset_renew_existing_transaction) auto read_transaction = store->tx_begin_read (); // Block shouldn't exist yet - auto block_non_existing (store->block_get (read_transaction, hash1)); + auto block_non_existing (store->block.get (read_transaction, hash1)); ASSERT_EQ (nullptr, block_non_existing); // Release resources for the transaction @@ -2006,13 +2006,13 @@ TEST (block_store, reset_renew_existing_transaction) // Write the block { auto write_transaction (store->tx_begin_write ()); - store->block_put (write_transaction, hash1, block); + store->block.put (write_transaction, hash1, block); } read_transaction.renew (); // Block should exist now - auto block_existing (store->block_get (read_transaction, hash1)); + auto block_existing (store->block.get (read_transaction, hash1)); ASSERT_NE (nullptr, block_existing); } @@ -2060,7 +2060,7 @@ namespace { void write_sideband_v14 (nano::mdb_store & store_a, nano::transaction & transaction_a, nano::block const & block_a, MDB_dbi db_a) { - auto block = store_a.block_get (transaction_a, block_a.hash ()); + auto block = store_a.block.get (transaction_a, block_a.hash ()); ASSERT_NE (block, nullptr); nano::block_sideband_v14 sideband_v14 (block->type (), block->sideband ().account, block->sideband ().successor, block->sideband ().balance, block->sideband ().timestamp, block->sideband ().height); @@ -2077,7 +2077,7 @@ void write_sideband_v14 (nano::mdb_store & store_a, nano::transaction & transact void write_sideband_v15 (nano::mdb_store & store_a, nano::transaction & transaction_a, nano::block const & block_a) { - auto block = store_a.block_get (transaction_a, block_a.hash ()); + auto block = store_a.block.get (transaction_a, block_a.hash ()); ASSERT_NE (block, nullptr); ASSERT_LE (block->sideband ().details.epoch, nano::epoch::max); @@ -2096,7 +2096,7 @@ void write_sideband_v15 (nano::mdb_store & store_a, nano::transaction & transact void write_block_w_sideband_v18 (nano::mdb_store & store_a, MDB_dbi database, nano::write_transaction & transaction_a, nano::block const & block_a) { - auto block = store_a.block_get (transaction_a, block_a.hash ()); + auto block = store_a.block.get (transaction_a, block_a.hash ()); ASSERT_NE (block, nullptr); auto new_sideband (block->sideband ()); nano::block_sideband_v18 sideband_v18 (new_sideband.account, new_sideband.successor, new_sideband.balance, new_sideband.height, new_sideband.timestamp, new_sideband.details.epoch, new_sideband.details.is_send, new_sideband.details.is_receive, new_sideband.details.is_epoch); diff --git a/nano/core_test/bootstrap.cpp b/nano/core_test/bootstrap.cpp index a63de5c502..b0b4034c34 100644 --- a/nano/core_test/bootstrap.cpp +++ b/nano/core_test/bootstrap.cpp @@ -441,13 +441,13 @@ TEST (bootstrap_processor, push_diamond_pruning) auto transaction (node1->store.tx_begin_write ()); ASSERT_EQ (1, node1->ledger.pruning_action (transaction, send1->hash (), 2)); ASSERT_EQ (1, node1->ledger.pruning_action (transaction, open->hash (), 1)); - ASSERT_TRUE (node1->store.block_exists (transaction, latest)); - ASSERT_FALSE (node1->store.block_exists (transaction, send1->hash ())); + ASSERT_TRUE (node1->store.block.exists (transaction, latest)); + ASSERT_FALSE (node1->store.block.exists (transaction, send1->hash ())); ASSERT_TRUE (node1->store.pruned.exists (transaction, send1->hash ())); - ASSERT_FALSE (node1->store.block_exists (transaction, open->hash ())); + ASSERT_FALSE (node1->store.block.exists (transaction, open->hash ())); ASSERT_TRUE (node1->store.pruned.exists (transaction, open->hash ())); - ASSERT_TRUE (node1->store.block_exists (transaction, send2->hash ())); - ASSERT_TRUE (node1->store.block_exists (transaction, receive->hash ())); + ASSERT_TRUE (node1->store.block.exists (transaction, send2->hash ())); + ASSERT_TRUE (node1->store.block.exists (transaction, receive->hash ())); ASSERT_EQ (2, node1->ledger.cache.pruned_count); ASSERT_EQ (5, node1->ledger.cache.block_count); } diff --git a/nano/core_test/confirmation_height.cpp b/nano/core_test/confirmation_height.cpp index d8e9126de6..9ee02d31aa 100644 --- a/nano/core_test/confirmation_height.cpp +++ b/nano/core_test/confirmation_height.cpp @@ -682,12 +682,12 @@ TEST (confirmation_height, conflict_rollback_cemented) // Force blocks to be cemented on both nodes { auto transaction (node1->store.tx_begin_write ()); - ASSERT_TRUE (node1->store.block_exists (transaction, publish1.block->hash ())); + ASSERT_TRUE (node1->store.block.exists (transaction, publish1.block->hash ())); node1->store.confirmation_height.put (transaction, nano::genesis_account, nano::confirmation_height_info{ 2, send2->hash () }); } { auto transaction (node2->store.tx_begin_write ()); - ASSERT_TRUE (node2->store.block_exists (transaction, publish2.block->hash ())); + ASSERT_TRUE (node2->store.block.exists (transaction, publish2.block->hash ())); node2->store.confirmation_height.put (transaction, nano::genesis_account, nano::confirmation_height_info{ 2, send2->hash () }); } diff --git a/nano/core_test/gap_cache.cpp b/nano/core_test/gap_cache.cpp index 966df14021..e4679c8a46 100644 --- a/nano/core_test/gap_cache.cpp +++ b/nano/core_test/gap_cache.cpp @@ -106,7 +106,7 @@ TEST (gap_cache, two_dependencies) node1.block_processor.flush (); ASSERT_EQ (0, node1.gap_cache.size ()); auto transaction (node1.store.tx_begin_read ()); - ASSERT_TRUE (node1.store.block_exists (transaction, send1->hash ())); - ASSERT_TRUE (node1.store.block_exists (transaction, send2->hash ())); - ASSERT_TRUE (node1.store.block_exists (transaction, open->hash ())); + ASSERT_TRUE (node1.store.block.exists (transaction, send1->hash ())); + ASSERT_TRUE (node1.store.block.exists (transaction, send2->hash ())); + ASSERT_TRUE (node1.store.block.exists (transaction, open->hash ())); } diff --git a/nano/core_test/ledger.cpp b/nano/core_test/ledger.cpp index e8ee88f5ab..d75c3bcbcb 100644 --- a/nano/core_test/ledger.cpp +++ b/nano/core_test/ledger.cpp @@ -89,7 +89,7 @@ TEST (ledger, process_modifies_sideband) nano::work_pool pool (std::numeric_limits::max ()); nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (store->tx_begin_write (), send1).code); - ASSERT_EQ (send1.sideband ().timestamp, store->block_get (store->tx_begin_read (), send1.hash ())->sideband ().timestamp); + ASSERT_EQ (send1.sideband ().timestamp, store->block.get (store->tx_begin_read (), send1.hash ())->sideband ().timestamp); } // Create a send block and publish it. @@ -119,13 +119,13 @@ TEST (ledger, process_send) ASSERT_TRUE (store->frontier.get (transaction, info1.head).is_zero ()); ASSERT_EQ (nano::dev_genesis_key.pub, store->frontier.get (transaction, hash1)); ASSERT_EQ (nano::process_result::progress, return1.code); - ASSERT_EQ (nano::dev_genesis_key.pub, store->block_account_calculated (send)); + ASSERT_EQ (nano::dev_genesis_key.pub, store->block.account_calculated (send)); ASSERT_EQ (50, ledger.account_balance (transaction, nano::dev_genesis_key.pub)); ASSERT_EQ (nano::genesis_amount - 50, ledger.account_pending (transaction, key2.pub)); nano::account_info info2; ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info2)); ASSERT_EQ (2, info2.block_count); - auto latest6 (store->block_get (transaction, info2.head)); + auto latest6 (store->block.get (transaction, info2.head)); ASSERT_NE (nullptr, latest6); auto latest7 (dynamic_cast (latest6.get ())); ASSERT_NE (nullptr, latest7); @@ -141,7 +141,7 @@ TEST (ledger, process_send) ASSERT_EQ (1, open.sideband ().height); ASSERT_EQ (nano::genesis_amount - 50, ledger.amount (transaction, hash2)); ASSERT_EQ (nano::process_result::progress, return2.code); - ASSERT_EQ (key2.pub, store->block_account_calculated (open)); + ASSERT_EQ (key2.pub, store->block.account_calculated (open)); ASSERT_EQ (nano::genesis_amount - 50, ledger.amount (transaction, hash2)); ASSERT_EQ (key2.pub, store->frontier.get (transaction, hash2)); ASSERT_EQ (nano::genesis_amount - 50, ledger.account_balance (transaction, key2.pub)); @@ -150,14 +150,14 @@ TEST (ledger, process_send) ASSERT_EQ (nano::genesis_amount - 50, ledger.weight (key2.pub)); nano::account_info info3; ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info3)); - auto latest2 (store->block_get (transaction, info3.head)); + auto latest2 (store->block.get (transaction, info3.head)); ASSERT_NE (nullptr, latest2); auto latest3 (dynamic_cast (latest2.get ())); ASSERT_NE (nullptr, latest3); ASSERT_EQ (send, *latest3); nano::account_info info4; ASSERT_FALSE (store->account.get (transaction, key2.pub, info4)); - auto latest4 (store->block_get (transaction, info4.head)); + auto latest4 (store->block.get (transaction, info4.head)); ASSERT_NE (nullptr, latest4); auto latest5 (dynamic_cast (latest4.get ())); ASSERT_NE (nullptr, latest5); @@ -215,7 +215,7 @@ TEST (ledger, process_receive) nano::block_hash hash2 (open.hash ()); auto return1 (ledger.process (transaction, open)); ASSERT_EQ (nano::process_result::progress, return1.code); - ASSERT_EQ (key2.pub, store->block_account_calculated (open)); + ASSERT_EQ (key2.pub, store->block.account_calculated (open)); ASSERT_EQ (key2.pub, open.sideband ().account); ASSERT_EQ (nano::genesis_amount - 50, open.sideband ().balance.number ()); ASSERT_EQ (1, open.sideband ().height); @@ -235,14 +235,14 @@ TEST (ledger, process_receive) ASSERT_TRUE (store->frontier.get (transaction, hash2).is_zero ()); ASSERT_EQ (key2.pub, store->frontier.get (transaction, hash4)); ASSERT_EQ (nano::process_result::progress, return2.code); - ASSERT_EQ (key2.pub, store->block_account_calculated (receive)); + ASSERT_EQ (key2.pub, store->block.account_calculated (receive)); ASSERT_EQ (hash4, ledger.latest (transaction, key2.pub)); ASSERT_EQ (25, ledger.account_balance (transaction, nano::dev_genesis_key.pub)); ASSERT_EQ (0, ledger.account_pending (transaction, key2.pub)); ASSERT_EQ (nano::genesis_amount - 25, ledger.account_balance (transaction, key2.pub)); ASSERT_EQ (nano::genesis_amount - 25, ledger.weight (key3.pub)); ASSERT_FALSE (ledger.rollback (transaction, hash4)); - ASSERT_TRUE (store->block_successor (transaction, hash2).is_zero ()); + ASSERT_TRUE (store->block.successor (transaction, hash2).is_zero ()); ASSERT_EQ (key2.pub, store->frontier.get (transaction, hash2)); ASSERT_TRUE (store->frontier.get (transaction, hash4).is_zero ()); ASSERT_EQ (25, ledger.account_balance (transaction, nano::dev_genesis_key.pub)); @@ -443,7 +443,7 @@ TEST (ledger, representative_change) ASSERT_TRUE (store->frontier.get (transaction, info1.head).is_zero ()); ASSERT_EQ (nano::dev_genesis_key.pub, store->frontier.get (transaction, block.hash ())); ASSERT_EQ (nano::process_result::progress, return1.code); - ASSERT_EQ (nano::dev_genesis_key.pub, store->block_account_calculated (block)); + ASSERT_EQ (nano::dev_genesis_key.pub, store->block.account_calculated (block)); ASSERT_EQ (0, ledger.weight (nano::dev_genesis_key.pub)); ASSERT_EQ (nano::genesis_amount, ledger.weight (key2.pub)); nano::account_info info2; @@ -1724,8 +1724,8 @@ TEST (ledger, state_send_receive) nano::work_pool pool (std::numeric_limits::max ()); nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - ASSERT_TRUE (store->block_exists (transaction, send1.hash ())); - auto send2 (store->block_get (transaction, send1.hash ())); + ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); + auto send2 (store->block.get (transaction, send1.hash ())); ASSERT_NE (nullptr, send2); ASSERT_EQ (send1, *send2); ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); @@ -1738,8 +1738,8 @@ TEST (ledger, state_send_receive) ASSERT_FALSE (send2->sideband ().details.is_epoch); nano::state_block receive1 (nano::genesis_account, send1.hash (), nano::genesis_account, nano::genesis_amount, send1.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); - ASSERT_TRUE (store->block_exists (transaction, receive1.hash ())); - auto receive2 (store->block_get (transaction, receive1.hash ())); + ASSERT_TRUE (store->block.exists (transaction, receive1.hash ())); + auto receive2 (store->block.get (transaction, receive1.hash ())); ASSERT_NE (nullptr, receive2); ASSERT_EQ (receive1, *receive2); ASSERT_EQ (nano::genesis_amount, ledger.balance (transaction, receive1.hash ())); @@ -1766,8 +1766,8 @@ TEST (ledger, state_receive) nano::work_pool pool (std::numeric_limits::max ()); nano::send_block send1 (genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - ASSERT_TRUE (store->block_exists (transaction, send1.hash ())); - auto send2 (store->block_get (transaction, send1.hash ())); + ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); + auto send2 (store->block.get (transaction, send1.hash ())); ASSERT_NE (nullptr, send2); ASSERT_EQ (send1, *send2); ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); @@ -1775,8 +1775,8 @@ TEST (ledger, state_receive) ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::genesis_account)); nano::state_block receive1 (nano::genesis_account, send1.hash (), nano::genesis_account, nano::genesis_amount, send1.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); - ASSERT_TRUE (store->block_exists (transaction, receive1.hash ())); - auto receive2 (store->block_get (transaction, receive1.hash ())); + ASSERT_TRUE (store->block.exists (transaction, receive1.hash ())); + auto receive2 (store->block.get (transaction, receive1.hash ())); ASSERT_NE (nullptr, receive2); ASSERT_EQ (receive1, *receive2); ASSERT_EQ (nano::genesis_amount, ledger.balance (transaction, receive1.hash ())); @@ -1802,8 +1802,8 @@ TEST (ledger, state_rep_change) nano::keypair rep; nano::state_block change1 (nano::genesis_account, genesis.hash (), rep.pub, nano::genesis_amount, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, change1).code); - ASSERT_TRUE (store->block_exists (transaction, change1.hash ())); - auto change2 (store->block_get (transaction, change1.hash ())); + ASSERT_TRUE (store->block.exists (transaction, change1.hash ())); + auto change2 (store->block.get (transaction, change1.hash ())); ASSERT_NE (nullptr, change2); ASSERT_EQ (change1, *change2); ASSERT_EQ (nano::genesis_amount, ledger.balance (transaction, change1.hash ())); @@ -1830,8 +1830,8 @@ TEST (ledger, state_open) nano::keypair destination; nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - ASSERT_TRUE (store->block_exists (transaction, send1.hash ())); - auto send2 (store->block_get (transaction, send1.hash ())); + ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); + auto send2 (store->block.get (transaction, send1.hash ())); ASSERT_NE (nullptr, send2); ASSERT_EQ (send1, *send2); ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); @@ -1841,8 +1841,8 @@ TEST (ledger, state_open) nano::state_block open1 (destination.pub, 0, nano::genesis_account, nano::Gxrb_ratio, send1.hash (), destination.prv, destination.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open1).code); ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (destination.pub, send1.hash ()))); - ASSERT_TRUE (store->block_exists (transaction, open1.hash ())); - auto open2 (store->block_get (transaction, open1.hash ())); + ASSERT_TRUE (store->block.exists (transaction, open1.hash ())); + auto open2 (store->block.get (transaction, open1.hash ())); ASSERT_NE (nullptr, open2); ASSERT_EQ (open1, *open2); ASSERT_EQ (nano::Gxrb_ratio, ledger.balance (transaction, open1.hash ())); @@ -1923,8 +1923,8 @@ TEST (ledger, state_unreceivable_fail) nano::work_pool pool (std::numeric_limits::max ()); nano::send_block send1 (genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - ASSERT_TRUE (store->block_exists (transaction, send1.hash ())); - auto send2 (store->block_get (transaction, send1.hash ())); + ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); + auto send2 (store->block.get (transaction, send1.hash ())); ASSERT_NE (nullptr, send2); ASSERT_EQ (send1, *send2); ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); @@ -1947,8 +1947,8 @@ TEST (ledger, state_receive_bad_amount_fail) nano::work_pool pool (std::numeric_limits::max ()); nano::send_block send1 (genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - ASSERT_TRUE (store->block_exists (transaction, send1.hash ())); - auto send2 (store->block_get (transaction, send1.hash ())); + ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); + auto send2 (store->block.get (transaction, send1.hash ())); ASSERT_NE (nullptr, send2); ASSERT_EQ (send1, *send2); ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); @@ -1989,8 +1989,8 @@ TEST (ledger, state_receive_wrong_account_fail) nano::work_pool pool (std::numeric_limits::max ()); nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - ASSERT_TRUE (store->block_exists (transaction, send1.hash ())); - auto send2 (store->block_get (transaction, send1.hash ())); + ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); + auto send2 (store->block.get (transaction, send1.hash ())); ASSERT_NE (nullptr, send2); ASSERT_EQ (send1, *send2); ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); @@ -2094,8 +2094,8 @@ TEST (ledger, state_send_change) nano::keypair rep; nano::state_block send1 (nano::genesis_account, genesis.hash (), rep.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - ASSERT_TRUE (store->block_exists (transaction, send1.hash ())); - auto send2 (store->block_get (transaction, send1.hash ())); + ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); + auto send2 (store->block.get (transaction, send1.hash ())); ASSERT_NE (nullptr, send2); ASSERT_EQ (send1, *send2); ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); @@ -2121,8 +2121,8 @@ TEST (ledger, state_receive_change) nano::work_pool pool (std::numeric_limits::max ()); nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - ASSERT_TRUE (store->block_exists (transaction, send1.hash ())); - auto send2 (store->block_get (transaction, send1.hash ())); + ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); + auto send2 (store->block.get (transaction, send1.hash ())); ASSERT_NE (nullptr, send2); ASSERT_EQ (send1, *send2); ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); @@ -2131,8 +2131,8 @@ TEST (ledger, state_receive_change) nano::keypair rep; nano::state_block receive1 (nano::genesis_account, send1.hash (), rep.pub, nano::genesis_amount, send1.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); - ASSERT_TRUE (store->block_exists (transaction, receive1.hash ())); - auto receive2 (store->block_get (transaction, receive1.hash ())); + ASSERT_TRUE (store->block.exists (transaction, receive1.hash ())); + auto receive2 (store->block.get (transaction, receive1.hash ())); ASSERT_NE (nullptr, receive2); ASSERT_EQ (receive1, *receive2); ASSERT_EQ (nano::genesis_amount, ledger.balance (transaction, receive1.hash ())); @@ -2204,8 +2204,8 @@ TEST (ledger, state_rollback_send) nano::work_pool pool (std::numeric_limits::max ()); nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - ASSERT_TRUE (store->block_exists (transaction, send1.hash ())); - auto send2 (store->block_get (transaction, send1.hash ())); + ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); + auto send2 (store->block.get (transaction, send1.hash ())); ASSERT_NE (nullptr, send2); ASSERT_EQ (send1, *send2); ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.account_balance (transaction, nano::genesis_account)); @@ -2215,11 +2215,11 @@ TEST (ledger, state_rollback_send) ASSERT_EQ (nano::genesis_account, info.source); ASSERT_EQ (nano::Gxrb_ratio, info.amount.number ()); ASSERT_FALSE (ledger.rollback (transaction, send1.hash ())); - ASSERT_FALSE (store->block_exists (transaction, send1.hash ())); + ASSERT_FALSE (store->block.exists (transaction, send1.hash ())); ASSERT_EQ (nano::genesis_amount, ledger.account_balance (transaction, nano::genesis_account)); ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::genesis_account)); ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); - ASSERT_TRUE (store->block_successor (transaction, genesis.hash ()).is_zero ()); + ASSERT_TRUE (store->block.successor (transaction, genesis.hash ()).is_zero ()); ASSERT_EQ (store->account.count (transaction), ledger.cache.account_count); } @@ -2244,7 +2244,7 @@ TEST (ledger, state_rollback_receive) ASSERT_FALSE (store->pending.get (transaction, nano::pending_key (nano::genesis_account, send1.hash ()), info)); ASSERT_EQ (nano::genesis_account, info.source); ASSERT_EQ (nano::Gxrb_ratio, info.amount.number ()); - ASSERT_FALSE (store->block_exists (transaction, receive1.hash ())); + ASSERT_FALSE (store->block.exists (transaction, receive1.hash ())); ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.account_balance (transaction, nano::genesis_account)); ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::genesis_account)); ASSERT_EQ (store->account.count (transaction), ledger.cache.account_count); @@ -2269,8 +2269,8 @@ TEST (ledger, state_rollback_received_send) ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::genesis_account, receive1.hash ()))); ASSERT_FALSE (ledger.rollback (transaction, send1.hash ())); ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); - ASSERT_FALSE (store->block_exists (transaction, send1.hash ())); - ASSERT_FALSE (store->block_exists (transaction, receive1.hash ())); + ASSERT_FALSE (store->block.exists (transaction, send1.hash ())); + ASSERT_FALSE (store->block.exists (transaction, receive1.hash ())); ASSERT_EQ (nano::genesis_amount, ledger.account_balance (transaction, nano::genesis_account)); ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::genesis_account)); ASSERT_EQ (0, ledger.account_balance (transaction, key.pub)); @@ -2293,7 +2293,7 @@ TEST (ledger, state_rep_change_rollback) nano::state_block change1 (nano::genesis_account, genesis.hash (), rep.pub, nano::genesis_amount, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, change1).code); ASSERT_FALSE (ledger.rollback (transaction, change1.hash ())); - ASSERT_FALSE (store->block_exists (transaction, change1.hash ())); + ASSERT_FALSE (store->block.exists (transaction, change1.hash ())); ASSERT_EQ (nano::genesis_amount, ledger.account_balance (transaction, nano::genesis_account)); ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::genesis_account)); ASSERT_EQ (0, ledger.weight (rep.pub)); @@ -2316,7 +2316,7 @@ TEST (ledger, state_open_rollback) nano::state_block open1 (destination.pub, 0, nano::genesis_account, nano::Gxrb_ratio, send1.hash (), destination.prv, destination.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open1).code); ASSERT_FALSE (ledger.rollback (transaction, open1.hash ())); - ASSERT_FALSE (store->block_exists (transaction, open1.hash ())); + ASSERT_FALSE (store->block.exists (transaction, open1.hash ())); ASSERT_EQ (0, ledger.account_balance (transaction, destination.pub)); ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::genesis_account)); nano::pending_info info; @@ -2341,7 +2341,7 @@ TEST (ledger, state_send_change_rollback) nano::state_block send1 (nano::genesis_account, genesis.hash (), rep.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_FALSE (ledger.rollback (transaction, send1.hash ())); - ASSERT_FALSE (store->block_exists (transaction, send1.hash ())); + ASSERT_FALSE (store->block.exists (transaction, send1.hash ())); ASSERT_EQ (nano::genesis_amount, ledger.account_balance (transaction, nano::genesis_account)); ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::genesis_account)); ASSERT_EQ (0, ledger.weight (rep.pub)); @@ -2365,7 +2365,7 @@ TEST (ledger, state_receive_change_rollback) nano::state_block receive1 (nano::genesis_account, send1.hash (), rep.pub, nano::genesis_amount, send1.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); ASSERT_FALSE (ledger.rollback (transaction, receive1.hash ())); - ASSERT_FALSE (store->block_exists (transaction, receive1.hash ())); + ASSERT_FALSE (store->block.exists (transaction, receive1.hash ())); ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.account_balance (transaction, nano::genesis_account)); ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::genesis_account)); ASSERT_EQ (0, ledger.weight (rep.pub)); @@ -2864,7 +2864,7 @@ TEST (ledger, unchecked_epoch) node1.block_processor.flush (); { auto transaction (node1.store.tx_begin_read ()); - ASSERT_TRUE (node1.store.block_exists (transaction, epoch1->hash ())); + ASSERT_TRUE (node1.store.block.exists (transaction, epoch1->hash ())); auto unchecked_count (node1.store.unchecked.count (transaction)); ASSERT_EQ (unchecked_count, 0); ASSERT_EQ (unchecked_count, node1.store.unchecked.count (transaction)); @@ -2910,8 +2910,8 @@ TEST (ledger, unchecked_epoch_invalid) node1.block_processor.flush (); { auto transaction (node1.store.tx_begin_read ()); - ASSERT_FALSE (node1.store.block_exists (transaction, epoch1->hash ())); - ASSERT_TRUE (node1.store.block_exists (transaction, epoch2->hash ())); + ASSERT_FALSE (node1.store.block.exists (transaction, epoch1->hash ())); + ASSERT_TRUE (node1.store.block.exists (transaction, epoch2->hash ())); ASSERT_TRUE (node1.active.empty ()); auto unchecked_count (node1.store.unchecked.count (transaction)); ASSERT_EQ (unchecked_count, 0); @@ -2919,7 +2919,7 @@ TEST (ledger, unchecked_epoch_invalid) nano::account_info info; ASSERT_FALSE (node1.store.account.get (transaction, destination.pub, info)); ASSERT_NE (info.epoch (), nano::epoch::epoch_1); - auto epoch2_store (node1.store.block_get (transaction, epoch2->hash ())); + auto epoch2_store (node1.store.block.get (transaction, epoch2->hash ())); ASSERT_NE (nullptr, epoch2_store); ASSERT_EQ (nano::epoch::epoch_0, epoch2_store->sideband ().details.epoch); ASSERT_TRUE (epoch2_store->sideband ().details.is_send); @@ -2958,7 +2958,7 @@ TEST (ledger, unchecked_open) node1.block_processor.flush (); { auto transaction (node1.store.tx_begin_read ()); - ASSERT_TRUE (node1.store.block_exists (transaction, open1->hash ())); + ASSERT_TRUE (node1.store.block.exists (transaction, open1->hash ())); auto unchecked_count (node1.store.unchecked.count (transaction)); ASSERT_EQ (unchecked_count, 0); ASSERT_EQ (unchecked_count, node1.store.unchecked.count (transaction)); @@ -3008,7 +3008,7 @@ TEST (ledger, unchecked_receive) node1.block_processor.flush (); { auto transaction (node1.store.tx_begin_read ()); - ASSERT_TRUE (node1.store.block_exists (transaction, receive1->hash ())); + ASSERT_TRUE (node1.store.block.exists (transaction, receive1->hash ())); auto unchecked_count (node1.store.unchecked.count (transaction)); ASSERT_EQ (unchecked_count, 0); ASSERT_EQ (unchecked_count, node1.store.unchecked.count (transaction)); @@ -3456,32 +3456,32 @@ TEST (ledger, pruning_action) nano::work_pool pool (std::numeric_limits::max ()); nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - ASSERT_TRUE (store->block_exists (transaction, send1.hash ())); - auto send1_stored (store->block_get (transaction, send1.hash ())); + ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); + auto send1_stored (store->block.get (transaction, send1.hash ())); ASSERT_NE (nullptr, send1_stored); ASSERT_EQ (send1, *send1_stored); ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); nano::state_block send2 (nano::genesis_account, send1.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio * 2, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); - ASSERT_TRUE (store->block_exists (transaction, send2.hash ())); + ASSERT_TRUE (store->block.exists (transaction, send2.hash ())); // Pruning action ASSERT_EQ (1, ledger.pruning_action (transaction, send1.hash (), 1)); ASSERT_EQ (0, ledger.pruning_action (transaction, genesis.hash (), 1)); ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); - ASSERT_FALSE (store->block_exists (transaction, send1.hash ())); + ASSERT_FALSE (store->block.exists (transaction, send1.hash ())); ASSERT_TRUE (ledger.block_or_pruned_exists (transaction, send1.hash ())); // Pruned ledger start without proper flags emulation ledger.pruning = false; ASSERT_TRUE (ledger.block_or_pruned_exists (transaction, send1.hash ())); ledger.pruning = true; ASSERT_TRUE (store->pruned.exists (transaction, send1.hash ())); - ASSERT_TRUE (store->block_exists (transaction, genesis.hash ())); - ASSERT_TRUE (store->block_exists (transaction, send2.hash ())); + ASSERT_TRUE (store->block.exists (transaction, genesis.hash ())); + ASSERT_TRUE (store->block.exists (transaction, send2.hash ())); // Receiving pruned block nano::state_block receive1 (nano::genesis_account, send2.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, send1.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send2.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); - ASSERT_TRUE (store->block_exists (transaction, receive1.hash ())); - auto receive1_stored (store->block_get (transaction, receive1.hash ())); + ASSERT_TRUE (store->block.exists (transaction, receive1.hash ())); + auto receive1_stored (store->block.get (transaction, receive1.hash ())); ASSERT_NE (nullptr, receive1_stored); ASSERT_EQ (receive1, *receive1_stored); ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); @@ -3490,13 +3490,13 @@ TEST (ledger, pruning_action) ASSERT_TRUE (receive1_stored->sideband ().details.is_receive); ASSERT_FALSE (receive1_stored->sideband ().details.is_epoch); // Middle block pruning - ASSERT_TRUE (store->block_exists (transaction, send2.hash ())); + ASSERT_TRUE (store->block.exists (transaction, send2.hash ())); ASSERT_EQ (1, ledger.pruning_action (transaction, send2.hash (), 1)); ASSERT_TRUE (store->pruned.exists (transaction, send2.hash ())); - ASSERT_FALSE (store->block_exists (transaction, send2.hash ())); + ASSERT_FALSE (store->block.exists (transaction, send2.hash ())); ASSERT_EQ (store->account.count (transaction), ledger.cache.account_count); ASSERT_EQ (store->pruned.count (transaction), ledger.cache.pruned_count); - ASSERT_EQ (store->block_count (transaction), ledger.cache.block_count - ledger.cache.pruned_count); + ASSERT_EQ (store->block.count (transaction), ledger.cache.block_count - ledger.cache.pruned_count); } TEST (ledger, pruning_large_chain) @@ -3517,23 +3517,23 @@ TEST (ledger, pruning_large_chain) { nano::state_block send (nano::genesis_account, last_hash, nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (last_hash)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); - ASSERT_TRUE (store->block_exists (transaction, send.hash ())); + ASSERT_TRUE (store->block.exists (transaction, send.hash ())); nano::state_block receive (nano::genesis_account, send.hash (), nano::genesis_account, nano::genesis_amount, send.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive).code); - ASSERT_TRUE (store->block_exists (transaction, receive.hash ())); + ASSERT_TRUE (store->block.exists (transaction, receive.hash ())); last_hash = receive.hash (); } ASSERT_EQ (0, store->pruned.count (transaction)); - ASSERT_EQ (send_receive_pairs * 2 + 1, store->block_count (transaction)); + ASSERT_EQ (send_receive_pairs * 2 + 1, store->block.count (transaction)); // Pruning action ASSERT_EQ (send_receive_pairs * 2, ledger.pruning_action (transaction, last_hash, 5)); ASSERT_TRUE (store->pruned.exists (transaction, last_hash)); - ASSERT_TRUE (store->block_exists (transaction, genesis.hash ())); - ASSERT_FALSE (store->block_exists (transaction, last_hash)); + ASSERT_TRUE (store->block.exists (transaction, genesis.hash ())); + ASSERT_FALSE (store->block.exists (transaction, last_hash)); ASSERT_EQ (store->pruned.count (transaction), ledger.cache.pruned_count); - ASSERT_EQ (store->block_count (transaction), ledger.cache.block_count - ledger.cache.pruned_count); + ASSERT_EQ (store->block.count (transaction), ledger.cache.block_count - ledger.cache.pruned_count); ASSERT_EQ (send_receive_pairs * 2, store->pruned.count (transaction)); - ASSERT_EQ (1, store->block_count (transaction)); // Genesis + ASSERT_EQ (1, store->block.count (transaction)); // Genesis } TEST (ledger, pruning_source_rollback) @@ -3555,14 +3555,14 @@ TEST (ledger, pruning_source_rollback) ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); nano::state_block send2 (nano::genesis_account, send1.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio * 2, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); - ASSERT_TRUE (store->block_exists (transaction, send2.hash ())); + ASSERT_TRUE (store->block.exists (transaction, send2.hash ())); // Pruning action ASSERT_EQ (2, ledger.pruning_action (transaction, send1.hash (), 1)); - ASSERT_FALSE (store->block_exists (transaction, send1.hash ())); + ASSERT_FALSE (store->block.exists (transaction, send1.hash ())); ASSERT_TRUE (store->pruned.exists (transaction, send1.hash ())); - ASSERT_FALSE (store->block_exists (transaction, epoch1.hash ())); + ASSERT_FALSE (store->block.exists (transaction, epoch1.hash ())); ASSERT_TRUE (store->pruned.exists (transaction, epoch1.hash ())); - ASSERT_TRUE (store->block_exists (transaction, genesis.hash ())); + ASSERT_TRUE (store->block.exists (transaction, genesis.hash ())); nano::pending_info info; ASSERT_FALSE (store->pending.get (transaction, nano::pending_key (nano::genesis_account, send1.hash ()), info)); ASSERT_EQ (nano::genesis_account, info.source); @@ -3606,19 +3606,19 @@ TEST (ledger, pruning_source_rollback_legacy) nano::keypair key1; nano::send_block send2 (send1.hash (), key1.pub, nano::genesis_amount - 2 * nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); - ASSERT_TRUE (store->block_exists (transaction, send2.hash ())); + ASSERT_TRUE (store->block.exists (transaction, send2.hash ())); ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (key1.pub, send2.hash ()))); nano::send_block send3 (send2.hash (), nano::genesis_account, nano::genesis_amount - 3 * nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send2.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send3).code); - ASSERT_TRUE (store->block_exists (transaction, send3.hash ())); + ASSERT_TRUE (store->block.exists (transaction, send3.hash ())); ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (nano::genesis_account, send3.hash ()))); // Pruning action ASSERT_EQ (2, ledger.pruning_action (transaction, send2.hash (), 1)); - ASSERT_FALSE (store->block_exists (transaction, send2.hash ())); + ASSERT_FALSE (store->block.exists (transaction, send2.hash ())); ASSERT_TRUE (store->pruned.exists (transaction, send2.hash ())); - ASSERT_FALSE (store->block_exists (transaction, send1.hash ())); + ASSERT_FALSE (store->block.exists (transaction, send1.hash ())); ASSERT_TRUE (store->pruned.exists (transaction, send1.hash ())); - ASSERT_TRUE (store->block_exists (transaction, genesis.hash ())); + ASSERT_TRUE (store->block.exists (transaction, genesis.hash ())); nano::pending_info info1; ASSERT_FALSE (store->pending.get (transaction, nano::pending_key (nano::genesis_account, send1.hash ()), info1)); ASSERT_EQ (nano::genesis_account, info1.source); @@ -3685,7 +3685,7 @@ TEST (ledger, pruning_process_error) ASSERT_EQ (2, ledger.cache.block_count); // Pruning action for latest block (not valid action) ASSERT_EQ (1, ledger.pruning_action (transaction, send1.hash (), 1)); - ASSERT_FALSE (store->block_exists (transaction, send1.hash ())); + ASSERT_FALSE (store->block.exists (transaction, send1.hash ())); ASSERT_TRUE (store->pruned.exists (transaction, send1.hash ())); // Attempt to process pruned block again ASSERT_EQ (nano::process_result::old, ledger.process (transaction, send1).code); @@ -3725,21 +3725,21 @@ TEST (ledger, pruning_legacy_blocks) // Pruning action ASSERT_EQ (3, ledger.pruning_action (transaction, change1.hash (), 2)); ASSERT_EQ (1, ledger.pruning_action (transaction, open1.hash (), 1)); - ASSERT_TRUE (store->block_exists (transaction, genesis.hash ())); - ASSERT_FALSE (store->block_exists (transaction, send1.hash ())); + ASSERT_TRUE (store->block.exists (transaction, genesis.hash ())); + ASSERT_FALSE (store->block.exists (transaction, send1.hash ())); ASSERT_TRUE (store->pruned.exists (transaction, send1.hash ())); - ASSERT_FALSE (store->block_exists (transaction, receive1.hash ())); + ASSERT_FALSE (store->block.exists (transaction, receive1.hash ())); ASSERT_TRUE (store->pruned.exists (transaction, receive1.hash ())); - ASSERT_FALSE (store->block_exists (transaction, change1.hash ())); + ASSERT_FALSE (store->block.exists (transaction, change1.hash ())); ASSERT_TRUE (store->pruned.exists (transaction, change1.hash ())); - ASSERT_TRUE (store->block_exists (transaction, send2.hash ())); - ASSERT_FALSE (store->block_exists (transaction, open1.hash ())); + ASSERT_TRUE (store->block.exists (transaction, send2.hash ())); + ASSERT_FALSE (store->block.exists (transaction, open1.hash ())); ASSERT_TRUE (store->pruned.exists (transaction, open1.hash ())); - ASSERT_TRUE (store->block_exists (transaction, send3.hash ())); + ASSERT_TRUE (store->block.exists (transaction, send3.hash ())); ASSERT_EQ (4, ledger.cache.pruned_count); ASSERT_EQ (7, ledger.cache.block_count); ASSERT_EQ (store->pruned.count (transaction), ledger.cache.pruned_count); - ASSERT_EQ (store->block_count (transaction), ledger.cache.block_count - ledger.cache.pruned_count); + ASSERT_EQ (store->block.count (transaction), ledger.cache.block_count - ledger.cache.pruned_count); } TEST (ledger, pruning_safe_functions) @@ -3756,17 +3756,17 @@ TEST (ledger, pruning_safe_functions) nano::work_pool pool (std::numeric_limits::max ()); nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - ASSERT_TRUE (store->block_exists (transaction, send1.hash ())); + ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); nano::state_block send2 (nano::genesis_account, send1.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio * 2, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); - ASSERT_TRUE (store->block_exists (transaction, send2.hash ())); + ASSERT_TRUE (store->block.exists (transaction, send2.hash ())); // Pruning action ASSERT_EQ (1, ledger.pruning_action (transaction, send1.hash (), 1)); - ASSERT_FALSE (store->block_exists (transaction, send1.hash ())); + ASSERT_FALSE (store->block.exists (transaction, send1.hash ())); ASSERT_TRUE (ledger.block_or_pruned_exists (transaction, send1.hash ())); // true for pruned ASSERT_TRUE (store->pruned.exists (transaction, send1.hash ())); - ASSERT_TRUE (store->block_exists (transaction, genesis.hash ())); - ASSERT_TRUE (store->block_exists (transaction, send2.hash ())); + ASSERT_TRUE (store->block.exists (transaction, genesis.hash ())); + ASSERT_TRUE (store->block.exists (transaction, send2.hash ())); // Safe ledger actions bool error (false); ASSERT_EQ (0, ledger.balance_safe (transaction, send1.hash (), error)); @@ -3799,16 +3799,16 @@ TEST (ledger, hash_root_random) nano::work_pool pool (std::numeric_limits::max ()); nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - ASSERT_TRUE (store->block_exists (transaction, send1.hash ())); + ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); nano::state_block send2 (nano::genesis_account, send1.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio * 2, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); - ASSERT_TRUE (store->block_exists (transaction, send2.hash ())); + ASSERT_TRUE (store->block.exists (transaction, send2.hash ())); // Pruning action ASSERT_EQ (1, ledger.pruning_action (transaction, send1.hash (), 1)); - ASSERT_FALSE (store->block_exists (transaction, send1.hash ())); + ASSERT_FALSE (store->block.exists (transaction, send1.hash ())); ASSERT_TRUE (store->pruned.exists (transaction, send1.hash ())); - ASSERT_TRUE (store->block_exists (transaction, genesis.hash ())); - ASSERT_TRUE (store->block_exists (transaction, send2.hash ())); + ASSERT_TRUE (store->block.exists (transaction, genesis.hash ())); + ASSERT_TRUE (store->block.exists (transaction, send2.hash ())); // Test random block including pruned bool done (false); auto iteration (0); @@ -3869,9 +3869,9 @@ TEST (ledger, migrate_lmdb_to_rocksdb) store.pending.put (transaction, nano::pending_key (nano::genesis_account, send->hash ()), nano::pending_info (nano::genesis_account, 100, nano::epoch::epoch_0)); store.pruned.put (transaction, send->hash ()); store.unchecked.put (transaction, nano::genesis_hash, send); - store.version_put (transaction, version); + store.version.put (transaction, version); send->sideband_set ({}); - store.block_put (transaction, send->hash (), *send); + store.block.put (transaction, send->hash (), *send); store.final_vote.put (transaction, send->qualified_root (), nano::block_hash (2)); } @@ -3892,11 +3892,11 @@ TEST (ledger, migrate_lmdb_to_rocksdb) ASSERT_EQ (rocksdb_store.online_weight.count (rocksdb_transaction), 1); - auto block1 = rocksdb_store.block_get (rocksdb_transaction, send->hash ()); + auto block1 = rocksdb_store.block.get (rocksdb_transaction, send->hash ()); ASSERT_EQ (*send, *block1); ASSERT_TRUE (rocksdb_store.peer.exists (rocksdb_transaction, endpoint_key)); - ASSERT_EQ (rocksdb_store.version_get (rocksdb_transaction), version); + ASSERT_EQ (rocksdb_store.version.get (rocksdb_transaction), version); ASSERT_EQ (rocksdb_store.frontier.get (rocksdb_transaction, 2), 5); nano::confirmation_height_info confirmation_height_info; ASSERT_FALSE (rocksdb_store.confirmation_height.get (rocksdb_transaction, nano::genesis_account, confirmation_height_info)); diff --git a/nano/core_test/node.cpp b/nano/core_test/node.cpp index 4542f2c913..8d84bd3997 100644 --- a/nano/core_test/node.cpp +++ b/nano/core_test/node.cpp @@ -113,7 +113,7 @@ TEST (node, representative) auto block1 (system.nodes[0]->rep_block (nano::dev_genesis_key.pub)); { auto transaction (system.nodes[0]->store.tx_begin_read ()); - ASSERT_TRUE (system.nodes[0]->ledger.store.block_exists (transaction, block1)); + ASSERT_TRUE (system.nodes[0]->ledger.store.block.exists (transaction, block1)); } nano::keypair key; ASSERT_TRUE (system.nodes[0]->rep_block (key.pub).is_zero ()); @@ -1179,8 +1179,8 @@ TEST (node, fork_keep) auto winner (*election1->tally ().begin ()); ASSERT_EQ (*send1, *winner.second); ASSERT_EQ (nano::genesis_amount - 100, winner.first); - ASSERT_TRUE (node1.store.block_exists (transaction0, send1->hash ())); - ASSERT_TRUE (node2.store.block_exists (transaction1, send1->hash ())); + ASSERT_TRUE (node1.store.block.exists (transaction0, send1->hash ())); + ASSERT_TRUE (node2.store.block.exists (transaction1, send1->hash ())); } TEST (node, fork_flip) @@ -1353,7 +1353,7 @@ TEST (node, fork_bootstrap_flip) // Insert but don't rebroadcast, simulating settled blocks ASSERT_EQ (nano::process_result::progress, node1.ledger.process (node1.store.tx_begin_write (), *send1).code); ASSERT_EQ (nano::process_result::progress, node2.ledger.process (node2.store.tx_begin_write (), *send2).code); - ASSERT_TRUE (node2.store.block_exists (node2.store.tx_begin_read (), send2->hash ())); + ASSERT_TRUE (node2.store.block.exists (node2.store.tx_begin_read (), send2->hash ())); node2.bootstrap_initiator.bootstrap (node1.network.endpoint ()); // Additionally add new peer to confirm & replace bootstrap block auto again (true); system1.deadline_set (50s); @@ -1361,7 +1361,7 @@ TEST (node, fork_bootstrap_flip) { ASSERT_NO_ERROR (system0.poll ()); ASSERT_NO_ERROR (system1.poll ()); - again = !node2.store.block_exists (node2.store.tx_begin_read (), send1->hash ()); + again = !node2.store.block.exists (node2.store.tx_begin_read (), send1->hash ()); } } @@ -1488,9 +1488,9 @@ TEST (node, fork_open_flip) auto winner (*election1->tally ().begin ()); ASSERT_EQ (*open1, *winner.second); ASSERT_EQ (nano::genesis_amount - 1, winner.first); - ASSERT_TRUE (node1.store.block_exists (transaction1, open1->hash ())); - ASSERT_TRUE (node2.store.block_exists (transaction2, open1->hash ())); - ASSERT_FALSE (node2.store.block_exists (transaction2, open2->hash ())); + ASSERT_TRUE (node1.store.block.exists (transaction1, open1->hash ())); + ASSERT_TRUE (node2.store.block.exists (transaction2, open1->hash ())); + ASSERT_FALSE (node2.store.block.exists (transaction2, open2->hash ())); } TEST (node, coherent_observer) @@ -1499,7 +1499,7 @@ TEST (node, coherent_observer) auto & node1 (*system.nodes[0]); node1.observers.blocks.add ([&node1] (nano::election_status const & status_a, std::vector const &, nano::account const &, nano::uint128_t const &, bool) { auto transaction (node1.store.tx_begin_read ()); - ASSERT_TRUE (node1.store.block_exists (transaction, status_a.winner->hash ())); + ASSERT_TRUE (node1.store.block.exists (transaction, status_a.winner->hash ())); }); system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); nano::keypair key; @@ -3172,8 +3172,8 @@ TEST (node, epoch_conflict_confirm) ASSERT_TIMELY (5s, node0->active.empty ()); { auto transaction (node0->store.tx_begin_read ()); - ASSERT_TRUE (node0->ledger.store.block_exists (transaction, change->hash ())); - ASSERT_TRUE (node0->ledger.store.block_exists (transaction, epoch_open->hash ())); + ASSERT_TRUE (node0->ledger.store.block.exists (transaction, change->hash ())); + ASSERT_TRUE (node0->ledger.store.block.exists (transaction, epoch_open->hash ())); } } @@ -3372,14 +3372,14 @@ TEST (node, block_processor_signatures) node1.block_processor.force (send5); node1.block_processor.flush (); auto transaction (node1.store.tx_begin_read ()); - ASSERT_TRUE (node1.store.block_exists (transaction, send1->hash ())); - ASSERT_TRUE (node1.store.block_exists (transaction, send2->hash ())); - ASSERT_TRUE (node1.store.block_exists (transaction, send3->hash ())); - ASSERT_FALSE (node1.store.block_exists (transaction, send4->hash ())); - ASSERT_FALSE (node1.store.block_exists (transaction, send5->hash ())); - ASSERT_TRUE (node1.store.block_exists (transaction, receive1->hash ())); - ASSERT_TRUE (node1.store.block_exists (transaction, receive2->hash ())); - ASSERT_FALSE (node1.store.block_exists (transaction, receive3->hash ())); + ASSERT_TRUE (node1.store.block.exists (transaction, send1->hash ())); + ASSERT_TRUE (node1.store.block.exists (transaction, send2->hash ())); + ASSERT_TRUE (node1.store.block.exists (transaction, send3->hash ())); + ASSERT_FALSE (node1.store.block.exists (transaction, send4->hash ())); + ASSERT_FALSE (node1.store.block.exists (transaction, send5->hash ())); + ASSERT_TRUE (node1.store.block.exists (transaction, receive1->hash ())); + ASSERT_TRUE (node1.store.block.exists (transaction, receive2->hash ())); + ASSERT_FALSE (node1.store.block.exists (transaction, receive3->hash ())); } /* diff --git a/nano/core_test/processor_service.cpp b/nano/core_test/processor_service.cpp index 146712e7ab..47d856a81f 100644 --- a/nano/core_test/processor_service.cpp +++ b/nano/core_test/processor_service.cpp @@ -1,7 +1,7 @@ #include #include -#include #include +#include #include #include diff --git a/nano/core_test/wallet.cpp b/nano/core_test/wallet.cpp index 7702b18c4c..2d01916e8a 100644 --- a/nano/core_test/wallet.cpp +++ b/nano/core_test/wallet.cpp @@ -185,7 +185,7 @@ TEST (wallet, spend_all_one) auto transaction (node1.store.tx_begin_read ()); node1.store.account.get (transaction, nano::dev_genesis_key.pub, info2); ASSERT_NE (latest1, info2.head); - auto block (node1.store.block_get (transaction, info2.head)); + auto block (node1.store.block.get (transaction, info2.head)); ASSERT_NE (nullptr, block); ASSERT_EQ (latest1, block->previous ()); } @@ -222,7 +222,7 @@ TEST (wallet, spend) auto transaction (node1.store.tx_begin_read ()); node1.store.account.get (transaction, nano::dev_genesis_key.pub, info2); ASSERT_NE (latest1, info2.head); - auto block (node1.store.block_get (transaction, info2.head)); + auto block (node1.store.block.get (transaction, info2.head)); ASSERT_NE (nullptr, block); ASSERT_EQ (latest1, block->previous ()); } @@ -1077,7 +1077,7 @@ TEST (wallet, epoch_2_receive_propagation) if (receive2->difficulty () < node.network_params.network.publish_thresholds.base) { ASSERT_GE (receive2->difficulty (), node.network_params.network.publish_thresholds.epoch_2_receive); - ASSERT_EQ (nano::epoch::epoch_2, node.store.block_version (node.store.tx_begin_read (), receive2->hash ())); + ASSERT_EQ (nano::epoch::epoch_2, node.store.block.version (node.store.tx_begin_read (), receive2->hash ())); ASSERT_EQ (nano::epoch::epoch_2, receive2->sideband ().source_epoch); break; } @@ -1122,7 +1122,7 @@ TEST (wallet, epoch_2_receive_unopened) if (receive1->difficulty () < node.network_params.network.publish_thresholds.base) { ASSERT_GE (receive1->difficulty (), node.network_params.network.publish_thresholds.epoch_2_receive); - ASSERT_EQ (nano::epoch::epoch_2, node.store.block_version (node.store.tx_begin_read (), receive1->hash ())); + ASSERT_EQ (nano::epoch::epoch_2, node.store.block.version (node.store.tx_begin_read (), receive1->hash ())); ASSERT_EQ (nano::epoch::epoch_1, receive1->sideband ().source_epoch); break; } @@ -1232,7 +1232,7 @@ TEST (wallet, receive_pruned) } ASSERT_EQ (1, node2.ledger.cache.pruned_count); ASSERT_TRUE (node2.ledger.block_or_pruned_exists (send1->hash ())); - ASSERT_FALSE (node2.store.block_exists (node2.store.tx_begin_read (), send1->hash ())); + ASSERT_FALSE (node2.store.block.exists (node2.store.tx_begin_read (), send1->hash ())); wallet2.insert_adhoc (key.prv, false); diff --git a/nano/lib/rep_weights.cpp b/nano/lib/rep_weights.cpp index efdccc598d..17968e7863 100644 --- a/nano/lib/rep_weights.cpp +++ b/nano/lib/rep_weights.cpp @@ -1,5 +1,5 @@ #include -#include +#include void nano::rep_weights::representation_add (nano::account const & source_rep_a, nano::uint128_t const & amount_a) { diff --git a/nano/lib/rep_weights.hpp b/nano/lib/rep_weights.hpp index cce5140497..5360afa018 100644 --- a/nano/lib/rep_weights.hpp +++ b/nano/lib/rep_weights.hpp @@ -9,7 +9,7 @@ namespace nano { -class block_store; +class store; class transaction; class rep_weights diff --git a/nano/nano_node/entry.cpp b/nano/nano_node/entry.cpp index b58e8ec807..308b1493e0 100644 --- a/nano/nano_node/entry.cpp +++ b/nano/nano_node/entry.cpp @@ -1418,17 +1418,17 @@ int main (int argc, char * const * argv) auto hash (info.open_block); nano::block_hash calculated_hash (0); - auto block (node->store.block_get (transaction, hash)); // Block data + auto block (node->store.block.get (transaction, hash)); // Block data uint64_t height (0); if (node->ledger.pruning && confirmation_height_info.height != 0) { hash = confirmation_height_info.frontier; - block = node->store.block_get (transaction, hash); + block = node->store.block.get (transaction, hash); // Iteration until pruned block bool pruned_block (false); while (!pruned_block && !block->previous ().is_zero ()) { - auto previous_block (node->store.block_get (transaction, block->previous ())); + auto previous_block (node->store.block.get (transaction, block->previous ())); if (previous_block != nullptr) { hash = previous_block->hash (); @@ -1566,7 +1566,7 @@ int main (int argc, char * const * argv) // Check link epoch version if (sideband.details.is_receive && (!node->ledger.pruning || !node->store.pruned.exists (transaction, block->link ().as_block_hash ()))) { - if (sideband.source_epoch != node->store.block_version (transaction, block->link ().as_block_hash ())) + if (sideband.source_epoch != node->store.block.version (transaction, block->link ().as_block_hash ())) { print_error_message (boost::str (boost::format ("Incorrect source epoch for block %1%\n") % hash.to_string ())); } @@ -1594,11 +1594,11 @@ int main (int argc, char * const * argv) calculated_representative = block->representative (); } // Retrieving successor block hash - hash = node->store.block_successor (transaction, hash); + hash = node->store.block.successor (transaction, hash); // Retrieving block data if (!hash.is_zero ()) { - block = node->store.block_get (transaction, hash); + block = node->store.block.get (transaction, hash); } } // Check if required block exists @@ -1661,7 +1661,7 @@ int main (int argc, char * const * argv) } // Validate total block count - auto ledger_block_count (node->store.block_count (transaction)); + auto ledger_block_count (node->store.block.count (transaction)); if (node->flags.enable_pruning) { block_count += 1; // Add disconnected genesis block @@ -1683,7 +1683,7 @@ int main (int argc, char * const * argv) std::cout << boost::str (boost::format ("%1% pending blocks validated\n") % count); } // Check block existance - auto block (node->store.block_get_no_sideband (transaction, key.hash)); + auto block (node->store.block.get_no_sideband (transaction, key.hash)); bool pruned (false); if (block == nullptr) { @@ -1700,7 +1700,7 @@ int main (int argc, char * const * argv) bool previous_pruned = node->ledger.pruning && node->store.pruned.exists (transaction, block->previous ()); if (previous_pruned) { - block = node->store.block_get (transaction, key.hash); + block = node->store.block.get (transaction, key.hash); } if (auto state = dynamic_cast (block.get ())) { @@ -1808,7 +1808,7 @@ int main (int argc, char * const * argv) while (!hash.is_zero ()) { // Retrieving block data - auto block (source_node->store.block_get_no_sideband (transaction, hash)); + auto block (source_node->store.block.get_no_sideband (transaction, hash)); if (block != nullptr) { ++count; diff --git a/nano/node/active_transactions.cpp b/nano/node/active_transactions.cpp index 789f2302c2..2d2cd18e59 100644 --- a/nano/node/active_transactions.cpp +++ b/nano/node/active_transactions.cpp @@ -5,7 +5,7 @@ #include #include #include -#include +#include #include #include @@ -142,7 +142,7 @@ void nano::active_transactions::confirm_prioritized_frontiers (nano::transaction if (info.block_count > confirmation_height_info.height) { - auto block (this->node.store.block_get (transaction_a, info.head)); + auto block (this->node.store.block.get (transaction_a, info.head)); auto previous_balance (this->node.ledger.balance (transaction_a, block->previous ())); auto inserted_election = this->insert_election_from_frontiers_confirmation (block, cementable_account.account, previous_balance, nano::election_behavior::optimistic); if (inserted_election) @@ -500,12 +500,12 @@ void nano::active_transactions::confirm_expired_frontiers_pessimistically (nano: std::shared_ptr block; if (confirmation_height_info.height == 0) { - block = node.store.block_get (transaction_a, account_info.open_block); + block = node.store.block.get (transaction_a, account_info.open_block); } else { - previous_block = node.store.block_get (transaction_a, confirmation_height_info.frontier); - block = node.store.block_get (transaction_a, previous_block->sideband ().successor); + previous_block = node.store.block.get (transaction_a, confirmation_height_info.frontier); + block = node.store.block.get (transaction_a, previous_block->sideband ().successor); } if (block && !node.confirmation_height_processor.is_processing_block (block->hash ()) && node.ledger.dependents_confirmed (transaction_a, *block)) @@ -812,7 +812,7 @@ nano::election_insertion_result nano::active_transactions::insert_impl (nano::un if (!previous_balance_a.is_initialized () && !block_a->previous ().is_zero ()) { auto transaction (node.store.tx_begin_read ()); - if (node.store.block_exists (transaction, block_a->previous ())) + if (node.store.block.exists (transaction, block_a->previous ())) { previous_balance = node.ledger.balance (transaction, block_a->previous ()); } @@ -1276,7 +1276,7 @@ nano::inactive_cache_status nano::active_transactions::inactive_votes_bootstrap_ if ((status.election_started && !previously_a.election_started) || (status.bootstrap_started && !previously_a.bootstrap_started)) { auto transaction (node.store.tx_begin_read ()); - auto block = node.store.block_get (transaction, hash_a); + auto block = node.store.block.get (transaction, hash_a); if (block && status.election_started && !previously_a.election_started && !node.block_confirmed_or_being_confirmed (transaction, hash_a)) { lock_a.lock (); diff --git a/nano/node/blockprocessor.cpp b/nano/node/blockprocessor.cpp index 1116f919cb..4fb0d03086 100644 --- a/nano/node/blockprocessor.cpp +++ b/nano/node/blockprocessor.cpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include @@ -343,7 +343,7 @@ nano::process_return nano::block_processor::process_one (nano::write_transaction { case nano::process_result::progress: { - release_assert (info_a.account.is_zero () || info_a.account == node.store.block_account_calculated (*block)); + release_assert (info_a.account.is_zero () || info_a.account == node.store.block.account_calculated (*block)); if (node.config.logging.ledger_logging ()) { std::string block_string; diff --git a/nano/node/bootstrap/bootstrap_bulk_pull.cpp b/nano/node/bootstrap/bootstrap_bulk_pull.cpp index 6f9a4d19cb..bb362799e0 100644 --- a/nano/node/bootstrap/bootstrap_bulk_pull.cpp +++ b/nano/node/bootstrap/bootstrap_bulk_pull.cpp @@ -419,7 +419,7 @@ void nano::bulk_pull_server::set_current_end () include_start = false; debug_assert (request != nullptr); auto transaction (connection->node->store.tx_begin_read ()); - if (!connection->node->store.block_exists (transaction, request->end)) + if (!connection->node->store.block.exists (transaction, request->end)) { if (connection->node->config.logging.bulk_pull_logging ()) { @@ -428,7 +428,7 @@ void nano::bulk_pull_server::set_current_end () request->end.clear (); } - if (connection->node->store.block_exists (transaction, request->start.as_block_hash ())) + if (connection->node->store.block.exists (transaction, request->start.as_block_hash ())) { if (connection->node->config.logging.bulk_pull_logging ()) { diff --git a/nano/node/cli.cpp b/nano/node/cli.cpp index 2b75660ff0..f6e82753b0 100644 --- a/nano/node/cli.cpp +++ b/nano/node/cli.cpp @@ -9,7 +9,7 @@ namespace { -void reset_confirmation_heights (nano::write_transaction const & transaction, nano::block_store & store); +void reset_confirmation_heights (nano::write_transaction const & transaction, nano::store & store); bool is_using_rocksdb (boost::filesystem::path const & data_path, boost::program_options::variables_map const & vm, std::error_code & ec); } @@ -1300,7 +1300,7 @@ std::unique_ptr nano::default_inactive_node (boost::filesys namespace { -void reset_confirmation_heights (nano::write_transaction const & transaction, nano::block_store & store) +void reset_confirmation_heights (nano::write_transaction const & transaction, nano::store & store) { // First do a clean sweep store.confirmation_height.clear (transaction); diff --git a/nano/node/confirmation_height_bounded.cpp b/nano/node/confirmation_height_bounded.cpp index 530267d5e8..90d89ce7df 100644 --- a/nano/node/confirmation_height_bounded.cpp +++ b/nano/node/confirmation_height_bounded.cpp @@ -84,7 +84,7 @@ void nano::confirmation_height_bounded::process (std::shared_ptr or } else { - block = ledger.store.block_get (transaction, current); + block = ledger.store.block.get (transaction, current); } if (!block) @@ -229,7 +229,7 @@ nano::block_hash nano::confirmation_height_bounded::get_least_unconfirmed_hash_f { if (block_height_a > confirmation_height_info_a.height) { - auto block (ledger.store.block_get (transaction_a, confirmation_height_info_a.frontier)); + auto block (ledger.store.block.get (transaction_a, confirmation_height_info_a.frontier)); release_assert (block != nullptr); least_unconfirmed_hash = block->sideband ().successor; block_height_a = block->sideband ().height + 1; @@ -257,14 +257,14 @@ bool nano::confirmation_height_bounded::iterate (nano::read_transaction const & // Keep iterating upwards until we either reach the desired block or the second receive. // Once a receive is cemented, we can cement all blocks above it until the next receive, so store those details for later. ++num_blocks; - auto block = ledger.store.block_get (transaction_a, hash); + auto block = ledger.store.block.get (transaction_a, hash); auto source (block->source ()); if (source.is_zero ()) { source = block->link ().as_block_hash (); } - if (!source.is_zero () && !ledger.is_epoch_link (source) && ledger.store.block_exists (transaction_a, source)) + if (!source.is_zero () && !ledger.is_epoch_link (source) && ledger.store.block.exists (transaction_a, source)) { hit_receive = true; reached_target = true; @@ -308,7 +308,7 @@ void nano::confirmation_height_bounded::prepare_iterated_blocks_for_cementing (p if (!preparation_data_a.already_cemented) { // Add the non-receive blocks iterated for this account - auto block_height = (ledger.store.block_account_height (preparation_data_a.transaction, preparation_data_a.top_most_non_receive_block_hash)); + auto block_height = (ledger.store.block.account_height (preparation_data_a.transaction, preparation_data_a.top_most_non_receive_block_hash)); if (block_height > preparation_data_a.confirmation_height_info.height) { confirmed_info confirmed_info_l{ block_height, preparation_data_a.top_most_non_receive_block_hash }; @@ -386,7 +386,7 @@ void nano::confirmation_height_bounded::cement_blocks (nano::write_guard & scope // Extra debug checks nano::confirmation_height_info confirmation_height_info; ledger.store.confirmation_height.get (transaction, account, confirmation_height_info); - auto block (ledger.store.block_get (transaction, confirmed_frontier)); + auto block (ledger.store.block.get (transaction, confirmed_frontier)); debug_assert (block != nullptr); debug_assert (block->sideband ().height == confirmation_height_info.height + num_blocks_cemented); #endif @@ -416,14 +416,14 @@ void nano::confirmation_height_bounded::cement_blocks (nano::write_guard & scope } else { - auto block = ledger.store.block_get (transaction, confirmation_height_info.frontier); + auto block = ledger.store.block.get (transaction, confirmation_height_info.frontier); new_cemented_frontier = block->sideband ().successor; num_blocks_confirmed = pending.top_height - confirmation_height_info.height; start_height = confirmation_height_info.height + 1; } auto total_blocks_cemented = 0; - auto block = ledger.store.block_get (transaction, new_cemented_frontier); + auto block = ledger.store.block.get (transaction, new_cemented_frontier); // Cementing starts from the bottom of the chain and works upwards. This is because chains can have effectively // an infinite number of send/change blocks in a row. We don't want to hold the write transaction open for too long. @@ -490,7 +490,7 @@ void nano::confirmation_height_bounded::cement_blocks (nano::write_guard & scope if (!last_iteration) { new_cemented_frontier = block->sideband ().successor; - block = ledger.store.block_get (transaction, new_cemented_frontier); + block = ledger.store.block.get (transaction, new_cemented_frontier); } else { diff --git a/nano/node/confirmation_height_bounded.hpp b/nano/node/confirmation_height_bounded.hpp index 85c897977f..80bc56a8df 100644 --- a/nano/node/confirmation_height_bounded.hpp +++ b/nano/node/confirmation_height_bounded.hpp @@ -3,7 +3,7 @@ #include #include #include -#include +#include #include diff --git a/nano/node/confirmation_height_processor.hpp b/nano/node/confirmation_height_processor.hpp index 1fbf1d00c8..22d8c26006 100644 --- a/nano/node/confirmation_height_processor.hpp +++ b/nano/node/confirmation_height_processor.hpp @@ -4,8 +4,8 @@ #include #include #include -#include #include +#include #include #include diff --git a/nano/node/confirmation_height_unbounded.cpp b/nano/node/confirmation_height_unbounded.cpp index 98274256ee..827897ac6e 100644 --- a/nano/node/confirmation_height_unbounded.cpp +++ b/nano/node/confirmation_height_unbounded.cpp @@ -222,7 +222,7 @@ void nano::confirmation_height_unbounded::collect_unconfirmed_receive_and_source source = block->link ().as_block_hash (); } - if (!source.is_zero () && !ledger.is_epoch_link (source) && ledger.store.block_exists (transaction_a, source)) + if (!source.is_zero () && !ledger.is_epoch_link (source) && ledger.store.block.exists (transaction_a, source)) { if (!hit_receive && !block_callback_data_a.empty ()) { @@ -380,7 +380,7 @@ void nano::confirmation_height_unbounded::cement_blocks (nano::write_guard & sco auto confirmation_height = confirmation_height_info.height; if (pending.height > confirmation_height) { - auto block = ledger.store.block_get (transaction, pending.hash); + auto block = ledger.store.block.get (transaction, pending.hash); debug_assert (network_params.network.is_dev_network () || ledger.pruning || block != nullptr); debug_assert (network_params.network.is_dev_network () || ledger.pruning || block->sideband ().height == pending.height); @@ -447,7 +447,7 @@ std::shared_ptr nano::confirmation_height_unbounded::get_block_and_ } else { - auto block (ledger.store.block_get (transaction_a, hash_a)); + auto block (ledger.store.block.get (transaction_a, hash_a)); block_cache.emplace (hash_a, block); return block; } diff --git a/nano/node/confirmation_height_unbounded.hpp b/nano/node/confirmation_height_unbounded.hpp index 2297318730..2d4e213acc 100644 --- a/nano/node/confirmation_height_unbounded.hpp +++ b/nano/node/confirmation_height_unbounded.hpp @@ -3,7 +3,7 @@ #include #include #include -#include +#include #include #include diff --git a/nano/node/election.hpp b/nano/node/election.hpp index 234f3700ae..a1cb8bcea2 100644 --- a/nano/node/election.hpp +++ b/nano/node/election.hpp @@ -1,8 +1,8 @@ #pragma once -#include #include #include +#include #include #include diff --git a/nano/node/election_scheduler.cpp b/nano/node/election_scheduler.cpp index 398784e196..0ccf511932 100644 --- a/nano/node/election_scheduler.cpp +++ b/nano/node/election_scheduler.cpp @@ -32,8 +32,8 @@ void nano::election_scheduler::activate (nano::account const & account_a, nano:: if (conf_info.height < account_info.block_count) { debug_assert (conf_info.frontier != account_info.head); - auto hash = conf_info.height == 0 ? account_info.open_block : node.store.block_successor (transaction, conf_info.frontier); - auto block = node.store.block_get (transaction, hash); + auto hash = conf_info.height == 0 ? account_info.open_block : node.store.block.successor (transaction, conf_info.frontier); + auto block = node.store.block.get (transaction, hash); debug_assert (block != nullptr); if (node.ledger.dependents_confirmed (transaction, *block)) { diff --git a/nano/node/gap_cache.cpp b/nano/node/gap_cache.cpp index 6db03b8e42..f10f0855ef 100644 --- a/nano/node/gap_cache.cpp +++ b/nano/node/gap_cache.cpp @@ -1,6 +1,6 @@ #include #include -#include +#include #include diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index c46d99e352..f9fc65752e 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -381,12 +381,12 @@ uint64_t nano::json_handler::difficulty_ledger (nano::block const & block_a) auto previous (block_a.previous ()); if (!previous.is_zero ()) { - block_previous = node.store.block_get (transaction, previous); + block_previous = node.store.block.get (transaction, previous); } // Send check if (block_previous != nullptr) { - details.is_send = node.store.block_balance (transaction, previous) > block_a.balance ().number (); + details.is_send = node.store.block.balance (transaction, previous) > block_a.balance ().number (); details_found = true; } // Epoch check @@ -397,7 +397,7 @@ uint64_t nano::json_handler::difficulty_ledger (nano::block const & block_a) auto link (block_a.link ()); if (!link.is_zero () && !details.is_send) { - auto block_link (node.store.block_get (transaction, link.as_block_hash ())); + auto block_link (node.store.block.get (transaction, link.as_block_hash ())); if (block_link != nullptr && node.store.pending.exists (transaction, nano::pending_key (block_a.account (), link.as_block_hash ()))) { details.epoch = std::max (details.epoch, block_link->sideband ().details.epoch); @@ -654,7 +654,7 @@ void nano::json_handler::account_info () std::shared_ptr confirmed_frontier_block; if (include_confirmed && confirmation_height_info.height > 0) { - confirmed_frontier_block = node.store.block_get (transaction, confirmed_frontier); + confirmed_frontier_block = node.store.block.get (transaction, confirmed_frontier); } if (representative) @@ -668,7 +668,7 @@ void nano::json_handler::account_info () confirmed_representative = confirmed_frontier_block->representative (); if (confirmed_representative.is_zero ()) { - confirmed_representative = node.store.block_get (transaction, node.ledger.representative (transaction, confirmed_frontier))->representative (); + confirmed_representative = node.store.block.get (transaction, node.ledger.representative (transaction, confirmed_frontier))->representative (); } } @@ -1047,7 +1047,7 @@ void nano::json_handler::block_info () if (!ec) { auto transaction (node.store.tx_begin_read ()); - auto block (node.store.block_get (transaction, hash)); + auto block (node.store.block.get (transaction, hash)); if (block != nullptr) { nano::account account (block->account ().is_zero () ? block->sideband ().account : block->account ()); @@ -1098,7 +1098,7 @@ void nano::json_handler::block_confirm () if (!ec) { auto transaction (node.store.tx_begin_read ()); - auto block_l (node.store.block_get (transaction, hash)); + auto block_l (node.store.block.get (transaction, hash)); if (block_l != nullptr) { if (!node.ledger.block_confirmed (transaction, hash)) @@ -1152,7 +1152,7 @@ void nano::json_handler::blocks () nano::block_hash hash; if (!hash.decode_hex (hash_text)) { - auto block (node.store.block_get (transaction, hash)); + auto block (node.store.block.get (transaction, hash)); if (block != nullptr) { if (json_block_l) @@ -1201,7 +1201,7 @@ void nano::json_handler::blocks_info () nano::block_hash hash; if (!hash.decode_hex (hash_text)) { - auto block (node.store.block_get (transaction, hash)); + auto block (node.store.block.get (transaction, hash)); if (block != nullptr) { boost::property_tree::ptree entry; @@ -1250,7 +1250,7 @@ void nano::json_handler::blocks_info () if (source) { nano::block_hash source_hash (node.ledger.block_source (transaction, *block)); - auto block_a (node.store.block_get (transaction, source_hash)); + auto block_a (node.store.block.get (transaction, source_hash)); if (block_a != nullptr) { auto source_account (node.ledger.account (transaction, source_hash)); @@ -1297,7 +1297,7 @@ void nano::json_handler::block_account () if (!ec) { auto transaction (node.store.tx_begin_read ()); - if (node.store.block_exists (transaction, hash)) + if (node.store.block.exists (transaction, hash)) { auto account (node.ledger.account (transaction, hash)); response_l.put ("account", account.to_account ()); @@ -1517,7 +1517,7 @@ void nano::json_handler::block_create () else if (previous_text.is_initialized () && balance_text.is_initialized () && type == "send") { auto transaction (node.store.tx_begin_read ()); - if (node.store.block_exists (transaction, previous) && node.store.block_balance (transaction, previous) != balance.number ()) + if (node.store.block.exists (transaction, previous) && node.store.block.balance (transaction, previous) != balance.number ()) { ec = nano::error_rpc::block_create_balance_mismatch; } @@ -1810,7 +1810,7 @@ void nano::json_handler::chain (bool successors) auto transaction (node.store.tx_begin_read ()); while (!hash.is_zero () && blocks.size () < count) { - auto block_l (node.store.block_get (transaction, hash)); + auto block_l (node.store.block.get (transaction, hash)); if (block_l != nullptr) { if (offset > 0) @@ -1823,7 +1823,7 @@ void nano::json_handler::chain (bool successors) entry.put ("", hash.to_string ()); blocks.push_back (std::make_pair ("", entry)); } - hash = successors ? node.store.block_successor (transaction, hash) : block_l->previous (); + hash = successors ? node.store.block.successor (transaction, hash) : block_l->previous (); } else { @@ -2458,7 +2458,7 @@ void nano::json_handler::account_history () { if (!hash.decode_hex (*head_str)) { - if (node.store.block_exists (transaction, hash)) + if (node.store.block.exists (transaction, hash)) { account = node.ledger.account (transaction, hash); } @@ -2496,7 +2496,7 @@ void nano::json_handler::account_history () boost::property_tree::ptree history; bool output_raw (request.get_optional ("raw") == true); response_l.put ("account", account.to_account ()); - auto block (node.store.block_get (transaction, hash)); + auto block (node.store.block.get (transaction, hash)); while (block != nullptr && count > 0) { if (offset > 0) @@ -2522,8 +2522,8 @@ void nano::json_handler::account_history () --count; } } - hash = reverse ? node.store.block_successor (transaction, hash) : block->previous (); - block = node.store.block_get (transaction, hash); + hash = reverse ? node.store.block.successor (transaction, hash) : block->previous (); + block = node.store.block.get (transaction, hash); } response_l.add_child ("history", history); if (!hash.is_zero ()) @@ -2963,7 +2963,7 @@ void nano::json_handler::pending_exists () if (!ec) { auto transaction (node.store.tx_begin_read ()); - auto block (node.store.block_get (transaction, hash)); + auto block (node.store.block.get (transaction, hash)); if (block != nullptr) { auto exists (false); @@ -2997,7 +2997,7 @@ void nano::json_handler::process () { std::shared_ptr block_state (std::static_pointer_cast (block)); auto transaction (rpc_l->node.store.tx_begin_read ()); - if (!block_state->hashables.previous.is_zero () && !rpc_l->node.store.block_exists (transaction, block_state->hashables.previous)) + if (!block_state->hashables.previous.is_zero () && !rpc_l->node.store.block.exists (transaction, block_state->hashables.previous)) { rpc_l->ec = nano::error_process::gap_previous; } @@ -3426,28 +3426,28 @@ void nano::json_handler::republish () { boost::property_tree::ptree blocks; auto transaction (node.store.tx_begin_read ()); - auto block (node.store.block_get (transaction, hash)); + auto block (node.store.block.get (transaction, hash)); if (block != nullptr) { std::deque> republish_bundle; for (auto i (0); !hash.is_zero () && i < count; ++i) { - block = node.store.block_get (transaction, hash); + block = node.store.block.get (transaction, hash); if (sources != 0) // Republish source chain { nano::block_hash source (node.ledger.block_source (transaction, *block)); - auto block_a (node.store.block_get (transaction, source)); + auto block_a (node.store.block.get (transaction, source)); std::vector hashes; while (block_a != nullptr && hashes.size () < sources) { hashes.push_back (source); source = block_a->previous (); - block_a = node.store.block_get (transaction, source); + block_a = node.store.block.get (transaction, source); } std::reverse (hashes.begin (), hashes.end ()); for (auto & hash_l : hashes) { - block_a = node.store.block_get (transaction, hash_l); + block_a = node.store.block.get (transaction, hash_l); republish_bundle.push_back (std::move (block_a)); boost::property_tree::ptree entry_l; entry_l.put ("", hash_l.to_string ()); @@ -3460,14 +3460,14 @@ void nano::json_handler::republish () blocks.push_back (std::make_pair ("", entry)); if (destinations != 0) // Republish destination chain { - auto block_b (node.store.block_get (transaction, hash)); + auto block_b (node.store.block.get (transaction, hash)); auto destination (node.ledger.block_destination (transaction, *block_b)); if (!destination.is_zero ()) { if (!node.store.pending.exists (transaction, nano::pending_key (destination, hash))) { nano::block_hash previous (node.ledger.latest (transaction, destination)); - auto block_d (node.store.block_get (transaction, previous)); + auto block_d (node.store.block.get (transaction, previous)); nano::block_hash source; std::vector hashes; while (block_d != nullptr && hash != source) @@ -3475,7 +3475,7 @@ void nano::json_handler::republish () hashes.push_back (previous); source = node.ledger.block_source (transaction, *block_d); previous = block_d->previous (); - block_d = node.store.block_get (transaction, previous); + block_d = node.store.block.get (transaction, previous); } std::reverse (hashes.begin (), hashes.end ()); if (hashes.size () > destinations) @@ -3484,7 +3484,7 @@ void nano::json_handler::republish () } for (auto & hash_l : hashes) { - block_d = node.store.block_get (transaction, hash_l); + block_d = node.store.block.get (transaction, hash_l); republish_bundle.push_back (std::move (block_d)); boost::property_tree::ptree entry_l; entry_l.put ("", hash_l.to_string ()); @@ -3493,7 +3493,7 @@ void nano::json_handler::republish () } } } - hash = node.store.block_successor (transaction, hash); + hash = node.store.block.successor (transaction, hash); } node.network.flood_block_many (std::move (republish_bundle), nullptr, 25); response_l.put ("success", ""); // obsolete @@ -4461,7 +4461,7 @@ void nano::json_handler::wallet_history () auto hash (info.head); while (timestamp >= modified_since && !hash.is_zero ()) { - auto block (node.store.block_get (block_transaction, hash)); + auto block (node.store.block.get (block_transaction, hash)); timestamp = block->sideband ().timestamp; if (block != nullptr && timestamp >= modified_since) { @@ -4726,7 +4726,7 @@ void nano::json_handler::wallet_republish () while (!latest.is_zero () && hashes.size () < count) { hashes.push_back (latest); - block = node.store.block_get (block_transaction, latest); + block = node.store.block.get (block_transaction, latest); if (block != nullptr) { latest = block->previous (); @@ -4739,7 +4739,7 @@ void nano::json_handler::wallet_republish () std::reverse (hashes.begin (), hashes.end ()); for (auto & hash : hashes) { - block = node.store.block_get (block_transaction, hash); + block = node.store.block.get (block_transaction, hash); republish_bundle.push_back (std::move (block)); boost::property_tree::ptree entry; entry.put ("", hash.to_string ()); @@ -4887,9 +4887,9 @@ void nano::json_handler::work_generate () { // Fetch account from block if not given auto transaction_l (node.store.tx_begin_read ()); - if (node.store.block_exists (transaction_l, hash)) + if (node.store.block.exists (transaction_l, hash)) { - account = node.store.block_account (transaction_l, hash); + account = node.store.block.account (transaction_l, hash); } } auto secondary_work_peers_l (request.get ("secondary_work_peers", false)); @@ -5207,7 +5207,7 @@ bool block_confirmed (nano::node & node, nano::transaction & transaction, nano:: // This just checks it's not currently undergoing an active transaction else if (!include_only_confirmed) { - auto block (node.store.block_get (transaction, hash)); + auto block (node.store.block.get (transaction, hash)); is_confirmed = (block != nullptr && !node.active.active (*block)); } diff --git a/nano/node/lmdb/lmdb.cpp b/nano/node/lmdb/lmdb.cpp index 86e32fee0e..224070faf8 100644 --- a/nano/node/lmdb/lmdb.cpp +++ b/nano/node/lmdb/lmdb.cpp @@ -41,8 +41,32 @@ void mdb_val::convert_buffer_to_value () } nano::mdb_store::mdb_store (nano::logger_mt & logger_a, boost::filesystem::path const & path_a, nano::txn_tracking_config const & txn_tracking_config_a, std::chrono::milliseconds block_processor_batch_max_time_a, nano::lmdb_config const & lmdb_config_a, bool backup_before_upgrade_a) : - block_store_partial{ unchecked_mdb_store }, + // clang-format off + store_partial{ + block_store_partial, + frontier_store_partial, + account_store_partial, + pending_store_partial, + unchecked_mdb_store, + online_weight_store_partial, + pruned_store_partial, + peer_store_partial, + confirmation_height_store_partial, + final_vote_store_partial, + version_store_partial + }, + // clang-format on + block_store_partial{ *this }, + frontier_store_partial{ *this }, + account_store_partial{ *this }, + pending_store_partial{ *this }, + online_weight_store_partial{ *this }, + pruned_store_partial{ *this }, + peer_store_partial{ *this }, + confirmation_height_store_partial{ *this }, + final_vote_store_partial{ *this }, unchecked_mdb_store{ *this }, + version_store_partial{ *this }, logger (logger_a), env (error, path_a, nano::mdb_env::options::make ().set_config (lmdb_config_a).set_use_no_mem_init (true)), mdb_txn_tracker (logger_a, txn_tracking_config_a, block_processor_batch_max_time_a), @@ -58,7 +82,7 @@ nano::mdb_store::mdb_store (nano::logger_mt & logger_a, boost::filesystem::path is_fresh_db = err != MDB_SUCCESS; if (err == MDB_SUCCESS) { - is_fully_upgraded = (version_get (transaction) == version); + is_fully_upgraded = (version.get (transaction) == version_number); mdb_dbi_close (env, meta_handle); } } @@ -203,7 +227,7 @@ void nano::mdb_store::open_databases (bool & error_a, nano::transaction const & pending_handle = pending_v0_handle; error_a |= mdb_dbi_open (env.tx (transaction_a), "final_votes", flags, &final_votes_handle) != 0; - auto version_l = version_get (transaction_a); + auto version_l = version.get (transaction_a); if (version_l < 19) { // These legacy (and state) block databases are no longer used, but need opening so they can be deleted during an upgrade @@ -242,7 +266,7 @@ void nano::mdb_store::open_databases (bool & error_a, nano::transaction const & bool nano::mdb_store::do_upgrades (nano::write_transaction & transaction_a, bool & needs_vacuuming) { auto error (false); - auto version_l = version_get (transaction_a); + auto version_l = version.get (transaction_a); switch (version_l) { case 1: @@ -409,7 +433,7 @@ void nano::mdb_store::upgrade_v14_to_v15 (nano::write_transaction & transaction_ mdb_put (env.tx (transaction_a), pending_handle, nano::mdb_val (pending_key_pending_info_pair.first), nano::mdb_val (pending_key_pending_info_pair.second), MDB_APPEND); } - version_put (transaction_a, 15); + version.put (transaction_a, 15); logger.always_log ("Finished epoch merge upgrade"); } @@ -423,7 +447,7 @@ void nano::mdb_store::upgrade_v15_to_v16 (nano::write_transaction const & transa release_assert (status == MDB_SUCCESS); representation_handle = 0; } - version_put (transaction_a, 16); + version.put (transaction_a, 16); } void nano::mdb_store::upgrade_v16_to_v17 (nano::write_transaction const & transaction_a) @@ -501,7 +525,7 @@ void nano::mdb_store::upgrade_v16_to_v17 (nano::write_transaction const & transa mdb_put (env.tx (transaction_a), confirmation_height_handle, nano::mdb_val (confirmation_height_info_pair.first), nano::mdb_val (confirmation_height_info_pair.second), MDB_APPEND); } - version_put (transaction_a, 17); + version.put (transaction_a, 17); logger.always_log ("Finished upgrading confirmation height frontiers"); } @@ -563,7 +587,7 @@ void nano::mdb_store::upgrade_v17_to_v18 (nano::write_transaction const & transa auto count_post (count (transaction_a, state_blocks_handle)); release_assert (count_pre == count_post); - version_put (transaction_a, 18); + version.put (transaction_a, 18); logger.always_log ("Finished upgrading the sideband"); } @@ -739,7 +763,7 @@ void nano::mdb_store::upgrade_v18_to_v19 (nano::write_transaction const & transa release_assert (!mdb_dbi_open (env.tx (transaction_a), "vote", MDB_CREATE, &vote)); release_assert (!mdb_drop (env.tx (transaction_a), vote, 1)); - version_put (transaction_a, 19); + version.put (transaction_a, 19); logger.always_log ("Finished upgrading all blocks to new blocks database"); } @@ -747,7 +771,7 @@ void nano::mdb_store::upgrade_v19_to_v20 (nano::write_transaction const & transa { logger.always_log ("Preparing v19 to v20 database upgrade..."); mdb_dbi_open (env.tx (transaction_a), "pruned", MDB_CREATE, &pruned_handle); - version_put (transaction_a, 20); + version.put (transaction_a, 20); logger.always_log ("Finished creating new pruned table"); } @@ -755,7 +779,7 @@ void nano::mdb_store::upgrade_v20_to_v21 (nano::write_transaction const & transa { logger.always_log ("Preparing v20 to v21 database upgrade..."); mdb_dbi_open (env.tx (transaction_a), "final_votes", MDB_CREATE, &final_votes_handle); - version_put (transaction_a, 21); + version.put (transaction_a, 21); logger.always_log ("Finished creating new final_vote table"); } @@ -804,14 +828,6 @@ std::vector nano::unchecked_mdb_store::get (nano::transact nano::unchecked_mdb_store::unchecked_mdb_store (nano::mdb_store & mdb_store_a) : unchecked_store_partial (mdb_store_a){}; -void nano::mdb_store::version_put (nano::write_transaction const & transaction_a, int version_a) -{ - nano::uint256_union version_key (1); - nano::uint256_union version_value (version_a); - auto status (mdb_put (env.tx (transaction_a), meta_handle, nano::mdb_val (version_key), nano::mdb_val (version_value), 0)); - release_assert_success (*this, status); -} - bool nano::mdb_store::exists (nano::transaction const & transaction_a, tables table_a, nano::mdb_val const & key_a) const { nano::mdb_val junk; @@ -1059,7 +1075,7 @@ nano::uint128_t nano::mdb_store::block_balance_v18 (nano::transaction const & tr { auto block (block_get_v18 (transaction_a, hash_a)); release_assert (block); - nano::uint128_t result (block_balance_calculated (block)); + nano::uint128_t result (this->block.balance_calculated (block)); return result; } @@ -1202,5 +1218,4 @@ unsigned nano::mdb_store::max_block_write_batch_num () const } // Explicitly instantiate -template class nano::block_store_partial; -template class nano::unchecked_store_partial; +template class nano::store_partial; diff --git a/nano/node/lmdb/lmdb.hpp b/nano/node/lmdb/lmdb.hpp index 0db4968118..2f0f51c188 100644 --- a/nano/node/lmdb/lmdb.hpp +++ b/nano/node/lmdb/lmdb.hpp @@ -7,9 +7,19 @@ #include #include #include -#include #include +#include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include #include #include @@ -41,19 +51,30 @@ class unchecked_mdb_store : public unchecked_store_partial /** * mdb implementation of the block store */ -class mdb_store : public block_store_partial +class mdb_store : public store_partial { -public: +private: + nano::block_store_partial block_store_partial; + nano::frontier_store_partial frontier_store_partial; + nano::account_store_partial account_store_partial; + nano::pending_store_partial pending_store_partial; + nano::unchecked_mdb_store unchecked_mdb_store; + nano::online_weight_store_partial online_weight_store_partial; + nano::pruned_store_partial pruned_store_partial; + nano::peer_store_partial peer_store_partial; + nano::confirmation_height_store_partial confirmation_height_store_partial; + nano::final_vote_store_partial final_vote_store_partial; + nano::version_store_partial version_store_partial; + friend class nano::unchecked_mdb_store; +public: mdb_store (nano::logger_mt &, boost::filesystem::path const &, nano::txn_tracking_config const & txn_tracking_config_a = nano::txn_tracking_config{}, std::chrono::milliseconds block_processor_batch_max_time_a = std::chrono::milliseconds (5000), nano::lmdb_config const & lmdb_config_a = nano::lmdb_config{}, bool backup_before_upgrade = false); nano::write_transaction tx_begin_write (std::vector const & tables_requiring_lock = {}, std::vector const & tables_no_lock = {}) override; nano::read_transaction tx_begin_read () const override; std::string vendor_get () const override; - void version_put (nano::write_transaction const &, int) override; - void serialize_mdb_tracker (boost::property_tree::ptree &, std::chrono::milliseconds, std::chrono::milliseconds) override; static void create_backup_file (nano::mdb_env &, boost::filesystem::path const &, nano::logger_mt &); @@ -63,8 +84,6 @@ class mdb_store : public block_store_partial unsigned max_block_write_batch_num () const override; private: - nano::unchecked_mdb_store unchecked_mdb_store; - nano::logger_mt & logger; bool error{ false }; @@ -298,5 +317,5 @@ mdb_val::db_val (size_t size_a, void * data_a); template <> void mdb_val::convert_buffer_to_value (); -extern template class block_store_partial; +extern template class store_partial; } diff --git a/nano/node/lmdb/lmdb_env.hpp b/nano/node/lmdb/lmdb_env.hpp index 139124ce09..cf8be76c64 100644 --- a/nano/node/lmdb/lmdb_env.hpp +++ b/nano/node/lmdb/lmdb_env.hpp @@ -2,7 +2,7 @@ #include #include -#include +#include namespace nano { diff --git a/nano/node/lmdb/lmdb_iterator.hpp b/nano/node/lmdb/lmdb_iterator.hpp index 4968d7f2a6..93e2b93961 100644 --- a/nano/node/lmdb/lmdb_iterator.hpp +++ b/nano/node/lmdb/lmdb_iterator.hpp @@ -1,6 +1,6 @@ #pragma once -#include +#include #include diff --git a/nano/node/lmdb/lmdb_txn.cpp b/nano/node/lmdb/lmdb_txn.cpp index b5b1645059..1f6927c5ea 100644 --- a/nano/node/lmdb/lmdb_txn.cpp +++ b/nano/node/lmdb/lmdb_txn.cpp @@ -4,7 +4,7 @@ #include #include #include -#include +#include #include diff --git a/nano/node/lmdb/lmdb_txn.hpp b/nano/node/lmdb/lmdb_txn.hpp index a4f105044c..3ab04b4747 100644 --- a/nano/node/lmdb/lmdb_txn.hpp +++ b/nano/node/lmdb/lmdb_txn.hpp @@ -2,7 +2,7 @@ #include #include -#include +#include #include #include diff --git a/nano/node/lmdb/wallet_value.hpp b/nano/node/lmdb/wallet_value.hpp index 599e8eb582..929ff13d0a 100644 --- a/nano/node/lmdb/wallet_value.hpp +++ b/nano/node/lmdb/wallet_value.hpp @@ -1,7 +1,7 @@ #pragma once #include -#include +#include #include diff --git a/nano/node/node.cpp b/nano/node/node.cpp index be3c76cd7b..284558711b 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -711,7 +711,7 @@ nano::uint128_t nano::node::balance (nano::account const & account_a) std::shared_ptr nano::node::block (nano::block_hash const & hash_a) { auto transaction (store.tx_begin_read ()); - return store.block_get (transaction, hash_a); + return store.block.get (transaction, hash_a); } std::pair nano::node::balance_pending (nano::account const & account_a, bool only_confirmed_a) @@ -985,7 +985,7 @@ bool nano::node::collect_ledger_pruning_targets (std::deque & uint64_t depth (0); while (!hash.is_zero () && depth < max_depth_a) { - auto block (store.block_get (transaction, hash)); + auto block (store.block.get (transaction, hash)); if (block != nullptr) { if (block->sideband ().timestamp > cutoff_time_a || depth == 0) @@ -1317,7 +1317,7 @@ void nano::node::process_confirmed_data (nano::transaction const & transaction_a auto previous (block_a->previous ()); bool error (false); auto previous_balance (ledger.balance_safe (transaction_a, previous, error)); - auto block_balance (store.block_balance_calculated (block_a)); + auto block_balance (store.block.balance_calculated (block_a)); if (hash_a != ledger.network_params.ledger.genesis_account) { if (!error) @@ -1351,7 +1351,7 @@ void nano::node::process_confirmed (nano::election_status const & status_a, uint { auto hash (status_a.winner->hash ()); const auto num_iters = (config.block_processor_batch_max_time / network_params.node.process_confirmed_interval) * 4; - if (auto block_l = ledger.store.block_get (ledger.store.tx_begin_read (), hash)) + if (auto block_l = ledger.store.block.get (ledger.store.tx_begin_read (), hash)) { active.add_recently_confirmed (block_l->qualified_root (), hash); confirmation_height_processor.add (block_l); @@ -1416,7 +1416,7 @@ std::shared_ptr nano::node::shared () int nano::node::store_version () { auto transaction (store.tx_begin_read ()); - return store.version_get (transaction); + return store.version.get (transaction); } bool nano::node::init_error () const @@ -1819,7 +1819,7 @@ nano::node_flags const & nano::inactive_node_flag_defaults () return node_flags; } -std::unique_ptr nano::make_store (nano::logger_mt & logger, boost::filesystem::path const & path, bool read_only, bool add_db_postfix, nano::rocksdb_config const & rocksdb_config, nano::txn_tracking_config const & txn_tracking_config_a, std::chrono::milliseconds block_processor_batch_max_time_a, nano::lmdb_config const & lmdb_config_a, bool backup_before_upgrade) +std::unique_ptr nano::make_store (nano::logger_mt & logger, boost::filesystem::path const & path, bool read_only, bool add_db_postfix, nano::rocksdb_config const & rocksdb_config, nano::txn_tracking_config const & txn_tracking_config_a, std::chrono::milliseconds block_processor_batch_max_time_a, nano::lmdb_config const & lmdb_config_a, bool backup_before_upgrade) { if (rocksdb_config.enable) { diff --git a/nano/node/node.hpp b/nano/node/node.hpp index 5261f8988d..f23eee41cb 100644 --- a/nano/node/node.hpp +++ b/nano/node/node.hpp @@ -163,8 +163,8 @@ class node final : public std::enable_shared_from_this nano::work_pool & work; nano::distributed_work_factory distributed_work; nano::logger_mt logger; - std::unique_ptr store_impl; - nano::block_store & store; + std::unique_ptr store_impl; + nano::store & store; std::unique_ptr wallets_store_impl; nano::wallets_store & wallets_store; nano::gap_cache gap_cache; diff --git a/nano/node/online_reps.cpp b/nano/node/online_reps.cpp index 89b6d98646..f86956fb1c 100644 --- a/nano/node/online_reps.cpp +++ b/nano/node/online_reps.cpp @@ -1,7 +1,7 @@ #include #include -#include #include +#include nano::online_reps::online_reps (nano::ledger & ledger_a, nano::node_config const & config_a) : ledger{ ledger_a }, diff --git a/nano/node/request_aggregator.cpp b/nano/node/request_aggregator.cpp index 882ea03070..a67c930cbc 100644 --- a/nano/node/request_aggregator.cpp +++ b/nano/node/request_aggregator.cpp @@ -8,8 +8,8 @@ #include #include #include -#include #include +#include nano::request_aggregator::request_aggregator (nano::network_constants const & network_constants_a, nano::node_config const & config_a, nano::stat & stats_a, nano::vote_generator & generator_a, nano::vote_generator & final_generator_a, nano::local_vote_history & history_a, nano::ledger & ledger_a, nano::wallets & wallets_a, nano::active_transactions & active_a) : max_delay (network_constants_a.is_dev_network () ? 50 : 300), @@ -192,12 +192,12 @@ std::pair>, std::vector 1) { to_generate_final.push_back (block); - block = ledger.store.block_get (transaction, final_vote_hashes[1]); + block = ledger.store.block.get (transaction, final_vote_hashes[1]); debug_assert (final_vote_hashes.size () == 2); } } @@ -211,7 +211,7 @@ std::pair>, std::vector>, std::vector>, std::vector (blocks_memtable_size_bytes () / (2 * (sizeof (nano::block_type) + nano::state_block::size + nano::block_sideband::size (nano::block_type::state)))) }, @@ -142,8 +166,8 @@ void nano::rocksdb_store::open (bool & error_a, boost::filesystem::path const & if (!error_a) { auto transaction = tx_begin_read (); - auto version_l = version_get (transaction); - if (version_l > version) + auto version_l = version.get (transaction); + if (version_l > version_number) { error_a = true; logger.always_log (boost::str (boost::format ("The version of the ledger (%1%) is too high for this node") % version_l)); @@ -418,13 +442,13 @@ void nano::rocksdb_store::flush_table (nano::tables table_a) db->Flush (rocksdb::FlushOptions{}, table_to_column_family (table_a)); } -void nano::rocksdb_store::version_put (nano::write_transaction const & transaction_a, int version_a) +void nano::version_rocksdb_store::version_put (nano::write_transaction const & transaction_a, int version_a) { debug_assert (transaction_a.contains (tables::meta)); nano::uint256_union version_key (1); nano::uint256_union version_value (version_a); - auto status (put (transaction_a, tables::meta, version_key, nano::rocksdb_val (version_value))); - release_assert (success (status)); + auto status (rocksdb_store.put (transaction_a, tables::meta, version_key, nano::rocksdb_val (version_value))); + release_assert (rocksdb_store.success (status)); } rocksdb::Transaction * nano::rocksdb_store::tx (nano::transaction const & transaction_a) const @@ -525,7 +549,7 @@ uint64_t nano::rocksdb_store::count (nano::transaction const & transaction_a, ta else if (table_a == tables::blocks) { // This is also used in some CLI commands - for (auto i (blocks_begin (transaction_a)), n (blocks_end ()); i != n; ++i) + for (auto i (block.begin (transaction_a)), n (block.end ()); i != n; ++i) { ++sum; } @@ -596,6 +620,10 @@ nano::unchecked_rocksdb_store::unchecked_rocksdb_store (nano::rocksdb_store & ro nano::unchecked_store_partial (rocksdb_store_a), rocksdb_store{ rocksdb_store_a } {}; +nano::version_rocksdb_store::version_rocksdb_store (nano::rocksdb_store & rocksdb_store_a) : + nano::version_store_partial (rocksdb_store_a), + rocksdb_store{ rocksdb_store_a } {}; + std::vector nano::unchecked_rocksdb_store::get (nano::transaction const & transaction_a, nano::block_hash const & hash_a) { auto cf = rocksdb_store.table_to_column_family (tables::unchecked); @@ -919,5 +947,4 @@ nano::rocksdb_store::tombstone_info::tombstone_info (uint64_t num_since_last_flu } // Explicitly instantiate -template class nano::block_store_partial; -//template class nano::unchecked_store_partial; \ No newline at end of file +template class nano::store_partial; diff --git a/nano/node/rocksdb/rocksdb.hpp b/nano/node/rocksdb/rocksdb.hpp index 93fda92024..ecfb2101b4 100644 --- a/nano/node/rocksdb/rocksdb.hpp +++ b/nano/node/rocksdb/rocksdb.hpp @@ -4,9 +4,18 @@ #include #include #include -#include #include +#include +#include +#include +#include +#include +#include +#include +#include #include +#include +#include #include #include @@ -32,13 +41,37 @@ class unchecked_rocksdb_store : public unchecked_store_partial +{ +public: + explicit version_rocksdb_store (nano::rocksdb_store &); + void version_put (nano::write_transaction const &, int); + +private: + nano::rocksdb_store & rocksdb_store; +}; + /** * rocksdb implementation of the block store */ -class rocksdb_store : public block_store_partial +class rocksdb_store : public store_partial { +private: + nano::block_store_partial block_store_partial; + nano::frontier_store_partial frontier_store_partial; + nano::account_store_partial account_store_partial; + nano::pending_store_partial pending_store_partial; + nano::unchecked_rocksdb_store unchecked_rocksdb_store; + nano::online_weight_store_partial online_weight_store_partial; + nano::pruned_store_partial pruned_store_partial; + nano::peer_store_partial peer_store_partial; + nano::confirmation_height_store_partial confirmation_height_store_partial; + nano::final_vote_store_partial final_vote_store_partial; + nano::version_rocksdb_store version_rocksdb_store; + public: friend class nano::unchecked_rocksdb_store; + friend class nano::version_rocksdb_store; explicit rocksdb_store (nano::logger_mt &, boost::filesystem::path const &, nano::rocksdb_config const & = nano::rocksdb_config{}, bool open_read_only = false); @@ -48,7 +81,6 @@ class rocksdb_store : public block_store_partial std::string vendor_get () const override; uint64_t count (nano::transaction const & transaction_a, tables table_a) const override; - void version_put (nano::write_transaction const &, int) override; bool exists (nano::transaction const & transaction_a, tables table_a, nano::rocksdb_val const & key_a) const; int get (nano::transaction const & transaction_a, tables table_a, nano::rocksdb_val const & key_a, nano::rocksdb_val & value_a) const; @@ -79,8 +111,6 @@ class rocksdb_store : public block_store_partial std::string error_string (int status) const override; private: - nano::unchecked_rocksdb_store unchecked_rocksdb_store; - bool error{ false }; nano::logger_mt & logger; // Optimistic transactions are used in write mode @@ -141,5 +171,5 @@ class rocksdb_store : public block_store_partial friend class rocksdb_block_store_tombstone_count_Test; }; -extern template class block_store_partial; +extern template class store_partial; } diff --git a/nano/node/rocksdb/rocksdb_iterator.hpp b/nano/node/rocksdb/rocksdb_iterator.hpp index 263e910b69..2856949e24 100644 --- a/nano/node/rocksdb/rocksdb_iterator.hpp +++ b/nano/node/rocksdb/rocksdb_iterator.hpp @@ -1,6 +1,6 @@ #pragma once -#include +#include #include #include diff --git a/nano/node/rocksdb/rocksdb_txn.hpp b/nano/node/rocksdb/rocksdb_txn.hpp index 14b8565c71..ff17a96999 100644 --- a/nano/node/rocksdb/rocksdb_txn.hpp +++ b/nano/node/rocksdb/rocksdb_txn.hpp @@ -1,6 +1,6 @@ #pragma once -#include +#include #include #include diff --git a/nano/node/telemetry.cpp b/nano/node/telemetry.cpp index 0610d74498..ebe4b6b0e3 100644 --- a/nano/node/telemetry.cpp +++ b/nano/node/telemetry.cpp @@ -4,9 +4,9 @@ #include #include #include -#include #include #include +#include #include diff --git a/nano/node/vote_processor.cpp b/nano/node/vote_processor.cpp index 954419dd93..eb4548d17a 100644 --- a/nano/node/vote_processor.cpp +++ b/nano/node/vote_processor.cpp @@ -9,9 +9,9 @@ #include #include #include -#include #include #include +#include #include diff --git a/nano/node/vote_processor.hpp b/nano/node/vote_processor.hpp index b1eecdd6ee..e61c93f2dc 100644 --- a/nano/node/vote_processor.hpp +++ b/nano/node/vote_processor.hpp @@ -14,7 +14,7 @@ namespace nano { class signature_checker; class active_transactions; -class block_store; +class store; class node_observers; class stats; class node_config; diff --git a/nano/node/voting.cpp b/nano/node/voting.cpp index 1df8d3472e..33438d726f 100644 --- a/nano/node/voting.cpp +++ b/nano/node/voting.cpp @@ -6,8 +6,8 @@ #include #include #include -#include #include +#include #include @@ -193,14 +193,14 @@ void nano::vote_generator::add (nano::root const & root_a, nano::block_hash cons if (is_final) { auto transaction (ledger.store.tx_begin_write ({ tables::final_votes })); - auto block (ledger.store.block_get (transaction, hash_a)); + auto block (ledger.store.block.get (transaction, hash_a)); should_vote = block != nullptr && ledger.dependents_confirmed (transaction, *block) && ledger.store.final_vote.put (transaction, block->qualified_root (), hash_a); debug_assert (block == nullptr || root_a == block->root ()); } else { auto transaction (ledger.store.tx_begin_read ()); - auto block (ledger.store.block_get (transaction, hash_a)); + auto block (ledger.store.block.get (transaction, hash_a)); should_vote = block != nullptr && ledger.dependents_confirmed (transaction, *block); } if (should_vote) diff --git a/nano/node/wallet.cpp b/nano/node/wallet.cpp index 7196b24ddf..0de7edbd5d 100644 --- a/nano/node/wallet.cpp +++ b/nano/node/wallet.cpp @@ -956,7 +956,7 @@ std::shared_ptr nano::wallet::send_action (nano::account const & so if (status == 0) { nano::block_hash hash (result); - block = wallets.node.store.block_get (block_transaction, hash); + block = wallets.node.store.block.get (block_transaction, hash); if (block != nullptr) { cached_block = true; @@ -1195,7 +1195,7 @@ bool nano::wallet::search_pending (nano::transaction const & wallet_transaction_ } else if (!wallets.node.confirmation_height_processor.is_processing_block (hash)) { - auto block (wallets.node.store.block_get (block_transaction, hash)); + auto block (wallets.node.store.block.get (block_transaction, hash)); if (block) { // Request confirmation for block which is not being processed yet @@ -1684,7 +1684,7 @@ void nano::wallets::ongoing_compute_reps () }); } -void nano::wallets::split_if_needed (nano::transaction & transaction_destination, nano::block_store & store_a) +void nano::wallets::split_if_needed (nano::transaction & transaction_destination, nano::store & store_a) { auto store_l (dynamic_cast (&store_a)); if (store_l != nullptr) diff --git a/nano/node/wallet.hpp b/nano/node/wallet.hpp index c52f5f600d..644f772562 100644 --- a/nano/node/wallet.hpp +++ b/nano/node/wallet.hpp @@ -6,8 +6,8 @@ #include #include #include -#include #include +#include #include #include @@ -208,7 +208,7 @@ class wallets final bool check_rep (nano::account const &, nano::uint128_t const &, const bool = true); void compute_reps (); void ongoing_compute_reps (); - void split_if_needed (nano::transaction &, nano::block_store &); + void split_if_needed (nano::transaction &, nano::store &); void move_table (std::string const &, MDB_txn *, MDB_txn *); std::unordered_map> get_wallets (); nano::network_params network_params; diff --git a/nano/qt/qt.cpp b/nano/qt/qt.cpp index 5a038fa11c..17354cdd2b 100644 --- a/nano/qt/qt.cpp +++ b/nano/qt/qt.cpp @@ -624,7 +624,7 @@ void nano_qt::history::refresh () for (auto i (0), n (tx_count->value ()); i < n && !hash.is_zero (); ++i) { QList items; - auto block (ledger.store.block_get (transaction, hash)); + auto block (ledger.store.block.get (transaction, hash)); if (block != nullptr) { block->visit (visitor); @@ -673,13 +673,13 @@ nano_qt::block_viewer::block_viewer (nano_qt::wallet & wallet_a) : if (!hash_l.decode_hex (hash->text ().toStdString ())) { auto transaction (this->wallet.node.store.tx_begin_read ()); - auto block_l (this->wallet.node.store.block_get (transaction, hash_l)); + auto block_l (this->wallet.node.store.block.get (transaction, hash_l)); if (block_l != nullptr) { std::string contents; block_l->serialize_json (contents); block->setPlainText (contents.c_str ()); - auto successor_l (this->wallet.node.store.block_successor (transaction, hash_l)); + auto successor_l (this->wallet.node.store.block.successor (transaction, hash_l)); successor->setText (successor_l.to_string ().c_str ()); } else @@ -698,7 +698,7 @@ nano_qt::block_viewer::block_viewer (nano_qt::wallet & wallet_a) : if (!error) { auto transaction (this->wallet.node.store.tx_begin_read ()); - if (this->wallet.node.store.block_exists (transaction, block)) + if (this->wallet.node.store.block.exists (transaction, block)) { rebroadcast->setEnabled (false); this->wallet.node.background ([this, block] () { @@ -719,11 +719,11 @@ void nano_qt::block_viewer::rebroadcast_action (nano::block_hash const & hash_a) { auto done (true); auto transaction (wallet.node.ledger.store.tx_begin_read ()); - auto block (wallet.node.store.block_get (transaction, hash_a)); + auto block (wallet.node.store.block.get (transaction, hash_a)); if (block != nullptr) { wallet.node.network.flood_block (block); - auto successor (wallet.node.store.block_successor (transaction, hash_a)); + auto successor (wallet.node.store.block.successor (transaction, hash_a)); if (!successor.is_zero ()) { done = false; @@ -2328,7 +2328,7 @@ void nano_qt::block_creation::create_receive () { auto transaction (wallet.node.wallets.tx_begin_read ()); auto block_transaction (wallet.node.store.tx_begin_read ()); - auto block_l (wallet.node.store.block_get (block_transaction, source_l)); + auto block_l (wallet.node.store.block.get (block_transaction, source_l)); if (block_l != nullptr) { auto const & destination (wallet.node.ledger.block_destination (block_transaction, *block_l)); @@ -2493,7 +2493,7 @@ void nano_qt::block_creation::create_open () { auto transaction (wallet.node.wallets.tx_begin_read ()); auto block_transaction (wallet.node.store.tx_begin_read ()); - auto block_l (wallet.node.store.block_get (block_transaction, source_l)); + auto block_l (wallet.node.store.block.get (block_transaction, source_l)); if (block_l != nullptr) { auto const & destination (wallet.node.ledger.block_destination (block_transaction, *block_l)); diff --git a/nano/qt_test/qt.cpp b/nano/qt_test/qt.cpp index e9cf1f3c8e..fe4e02a92e 100644 --- a/nano/qt_test/qt.cpp +++ b/nano/qt_test/qt.cpp @@ -380,7 +380,7 @@ TEST (wallet, process_block) { auto transaction (system.nodes[0]->store.tx_begin_read ()); system.deadline_set (10s); - while (system.nodes[0]->store.block_exists (transaction, send.hash ())) + while (system.nodes[0]->store.block.exists (transaction, send.hash ())) { ASSERT_NO_ERROR (system.poll ()); } diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index cc882adcc8..9a9ad71eac 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -113,7 +113,7 @@ std::shared_ptr add_ipc_enabled_node (nano::system & system) return add_ipc_enabled_node (system, node_config); } -void reset_confirmation_height (nano::block_store & store, nano::account const & account) +void reset_confirmation_height (nano::store & store, nano::account const & account) { auto transaction = store.tx_begin_write (); nano::confirmation_height_info confirmation_height_info; @@ -2431,7 +2431,7 @@ TEST (rpc, version) ASSERT_EQ (200, response1.status); { auto transaction (node1->store.tx_begin_read ()); - ASSERT_EQ (std::to_string (node1->store.version_get (transaction)), response1.json.get ("store_version")); + ASSERT_EQ (std::to_string (node1->store.version.get (transaction)), response1.json.get ("store_version")); } ASSERT_EQ (std::to_string (node1->network_params.protocol.protocol_version), response1.json.get ("protocol_version")); ASSERT_EQ (boost::str (boost::format ("Nano %1%") % NANO_VERSION_STRING), response1.json.get ("node_vendor")); @@ -3291,8 +3291,8 @@ TEST (rpc, account_representative_set) ASSERT_FALSE (hash.decode_hex (block_text1)); ASSERT_FALSE (hash.is_zero ()); auto transaction (node->store.tx_begin_read ()); - ASSERT_TRUE (node->store.block_exists (transaction, hash)); - ASSERT_EQ (rep.pub, node->store.block_get (transaction, hash)->representative ()); + ASSERT_TRUE (node->store.block.exists (transaction, hash)); + ASSERT_EQ (rep.pub, node->store.block.get (transaction, hash)->representative ()); } TEST (rpc, account_representative_set_work_disabled) @@ -5056,7 +5056,7 @@ TEST (rpc, block_info_pruning) { auto transaction (node1.store.tx_begin_write ()); ASSERT_EQ (1, node1.ledger.pruning_action (transaction, send1->hash (), 1)); - ASSERT_TRUE (node1.store.block_exists (transaction, receive1->hash ())); + ASSERT_TRUE (node1.store.block.exists (transaction, receive1->hash ())); } scoped_io_thread_name_change scoped_thread_name_io; nano::node_rpc_config node_rpc_config; @@ -5118,7 +5118,7 @@ TEST (rpc, pruned_exists) { auto transaction (node1.store.tx_begin_write ()); ASSERT_EQ (1, node1.ledger.pruning_action (transaction, send1->hash (), 1)); - ASSERT_TRUE (node1.store.block_exists (transaction, receive1->hash ())); + ASSERT_TRUE (node1.store.block.exists (transaction, receive1->hash ())); } scoped_io_thread_name_change scoped_thread_name_io; nano::node_rpc_config node_rpc_config; @@ -6072,7 +6072,7 @@ TEST (rpc, confirmation_height_currently_processing) std::shared_ptr frontier; { auto transaction = node->store.tx_begin_read (); - frontier = node->store.block_get (transaction, previous_genesis_chain_hash); + frontier = node->store.block.get (transaction, previous_genesis_chain_hash); } boost::property_tree::ptree request; @@ -7469,7 +7469,7 @@ TEST (rpc, receive_unopened) auto send1 (wallet->send_action (nano::dev_genesis_key.pub, key1.pub, node.config.receive_minimum.number () - 1, *node.work_generate_blocking (nano::genesis_hash))); ASSERT_TIMELY (5s, !node.balance (nano::dev_genesis_key.pub) != nano::genesis_amount); ASSERT_FALSE (node.store.account.exists (node.store.tx_begin_read (), key1.pub)); - ASSERT_TRUE (node.store.block_exists (node.store.tx_begin_read (), send1->hash ())); + ASSERT_TRUE (node.store.block.exists (node.store.tx_begin_read (), send1->hash ())); wallet->insert_adhoc (key1.prv); // should not auto receive, amount sent was lower than minimum scoped_io_thread_name_change scoped_thread_name_io; nano::node_rpc_config node_rpc_config; @@ -7503,7 +7503,7 @@ TEST (rpc, receive_unopened) auto send2 (wallet->send_action (nano::dev_genesis_key.pub, key2.pub, node.config.receive_minimum.number () - 1, *node.work_generate_blocking (send1->hash ()))); ASSERT_TIMELY (5s, !node.balance (nano::dev_genesis_key.pub) != prev_amount); ASSERT_FALSE (node.store.account.exists (node.store.tx_begin_read (), key2.pub)); - ASSERT_TRUE (node.store.block_exists (node.store.tx_begin_read (), send2->hash ())); + ASSERT_TRUE (node.store.block.exists (node.store.tx_begin_read (), send2->hash ())); nano::public_key rep; wallet->store.representative_set (node.wallets.tx_begin_write (), rep); wallet->insert_adhoc (key2.prv); // should not auto receive, amount sent was lower than minimum @@ -7542,7 +7542,7 @@ TEST (rpc, receive_work_disabled) ASSERT_TRUE (send1 != nullptr); ASSERT_TIMELY (5s, node.balance (nano::dev_genesis_key.pub) != nano::genesis_amount); ASSERT_FALSE (node.store.account.exists (node.store.tx_begin_read (), key1.pub)); - ASSERT_TRUE (node.store.block_exists (node.store.tx_begin_read (), send1->hash ())); + ASSERT_TRUE (node.store.block.exists (node.store.tx_begin_read (), send1->hash ())); wallet->insert_adhoc (key1.prv); scoped_io_thread_name_change scoped_thread_name_io; nano::node_rpc_config node_rpc_config; @@ -7596,9 +7596,9 @@ TEST (rpc, receive_pruned) } ASSERT_EQ (2, node2.ledger.cache.pruned_count); ASSERT_TRUE (node2.ledger.block_or_pruned_exists (send1->hash ())); - ASSERT_FALSE (node2.store.block_exists (node2.store.tx_begin_read (), send1->hash ())); + ASSERT_FALSE (node2.store.block.exists (node2.store.tx_begin_read (), send1->hash ())); ASSERT_TRUE (node2.ledger.block_or_pruned_exists (send2->hash ())); - ASSERT_FALSE (node2.store.block_exists (node2.store.tx_begin_read (), send2->hash ())); + ASSERT_FALSE (node2.store.block.exists (node2.store.tx_begin_read (), send2->hash ())); ASSERT_TRUE (node2.ledger.block_or_pruned_exists (send3->hash ())); scoped_io_thread_name_change scoped_thread_name_io; diff --git a/nano/secure/CMakeLists.txt b/nano/secure/CMakeLists.txt index 1117371919..e55d8982cd 100644 --- a/nano/secure/CMakeLists.txt +++ b/nano/secure/CMakeLists.txt @@ -39,9 +39,9 @@ add_library( ${PLATFORM_SECURE_SOURCE} ${CMAKE_BINARY_DIR}/bootstrap_weights_live.cpp ${CMAKE_BINARY_DIR}/bootstrap_weights_beta.cpp - blockstore.hpp - blockstore.cpp - blockstore_partial.hpp + store.hpp + store.cpp + store_partial.hpp buffer.hpp common.hpp common.cpp @@ -54,6 +54,7 @@ add_library( versioning.hpp versioning.cpp working.hpp + store/block_store_partial.hpp store/frontier_store_partial.hpp store/account_store_partial.hpp store/pending_store_partial.hpp @@ -62,7 +63,8 @@ add_library( store/peer_store_partial.hpp store/confirmation_height_store_partial.hpp store/unchecked_store_partial.hpp - store/final_vote_store_partial.hpp) + store/final_vote_store_partial.hpp + store/version_store_partial.hpp) target_link_libraries( secure diff --git a/nano/secure/blockstore_partial.hpp b/nano/secure/blockstore_partial.hpp deleted file mode 100644 index 6c22a49571..0000000000 --- a/nano/secure/blockstore_partial.hpp +++ /dev/null @@ -1,498 +0,0 @@ -#pragma once - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include - -#include - -namespace -{ -template -void parallel_traversal (std::function const & action); -} - -namespace nano -{ -template -class block_predecessor_set; - -template -void release_assert_success (block_store_partial const & block_store, const int status) -{ - if (!block_store.success (status)) - { - release_assert (false, block_store.error_string (status)); - } -} - -template -class unchecked_store_partial; - -/** This base class implements the block_store interface functions which have DB agnostic functionality */ -template -class block_store_partial : public block_store -{ - nano::frontier_store_partial frontier_store_partial; - nano::account_store_partial account_store_partial; - nano::pending_store_partial pending_store_partial; - nano::unchecked_store_partial & unchecked_store_partial; - nano::online_weight_store_partial online_weight_store_partial; - nano::pruned_store_partial pruned_store_partial; - nano::peer_store_partial peer_store_partial; - nano::confirmation_height_store_partial confirmation_height_store_partial; - nano::final_vote_store_partial final_vote_store_partial; - - friend void release_assert_success (block_store_partial const & block_store, const int status); - -public: - using block_store::block_exists; - - friend class nano::block_predecessor_set; - friend class nano::frontier_store_partial; - friend class nano::account_store_partial; - friend class nano::pending_store_partial; - friend class nano::unchecked_store_partial; - friend class nano::online_weight_store_partial; - friend class nano::pruned_store_partial; - friend class nano::peer_store_partial; - friend class nano::confirmation_height_store_partial; - friend class nano::final_vote_store_partial; - - block_store_partial (nano::unchecked_store_partial & unchecked_store_partial_a) : - block_store{ frontier_store_partial, account_store_partial, pending_store_partial, unchecked_store_partial_a, online_weight_store_partial, pruned_store_partial, peer_store_partial, confirmation_height_store_partial, final_vote_store_partial }, - frontier_store_partial{ *this }, - account_store_partial{ *this }, - pending_store_partial{ *this }, - unchecked_store_partial (unchecked_store_partial_a), - online_weight_store_partial{ *this }, - pruned_store_partial{ *this }, - peer_store_partial{ *this }, - confirmation_height_store_partial{ *this }, - final_vote_store_partial{ *this } - { - } - - /** - * If using a different store version than the latest then you may need - * to modify some of the objects in the store to be appropriate for the version before an upgrade. - */ - void initialize (nano::write_transaction const & transaction_a, nano::genesis const & genesis_a, nano::ledger_cache & ledger_cache_a) override - { - auto hash_l (genesis_a.hash ()); - debug_assert (account.begin (transaction_a) == account.end ()); - genesis_a.open->sideband_set (nano::block_sideband (network_params.ledger.genesis_account, 0, network_params.ledger.genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); - block_put (transaction_a, hash_l, *genesis_a.open); - ++ledger_cache_a.block_count; - confirmation_height.put (transaction_a, network_params.ledger.genesis_account, nano::confirmation_height_info{ 1, genesis_a.hash () }); - ++ledger_cache_a.cemented_count; - ledger_cache_a.final_votes_confirmation_canary = (network_params.ledger.final_votes_canary_account == network_params.ledger.genesis_account && 1 >= network_params.ledger.final_votes_canary_height); - account.put (transaction_a, network_params.ledger.genesis_account, { hash_l, network_params.ledger.genesis_account, genesis_a.open->hash (), std::numeric_limits::max (), nano::seconds_since_epoch (), 1, nano::epoch::epoch_0 }); - ++ledger_cache_a.account_count; - ledger_cache_a.rep_weights.representation_put (network_params.ledger.genesis_account, std::numeric_limits::max ()); - frontier.put (transaction_a, hash_l, network_params.ledger.genesis_account); - } - - void block_put (nano::write_transaction const & transaction_a, nano::block_hash const & hash_a, nano::block const & block_a) override - { - debug_assert (block_a.sideband ().successor.is_zero () || block_exists (transaction_a, block_a.sideband ().successor)); - std::vector vector; - { - nano::vectorstream stream (vector); - nano::serialize_block (stream, block_a); - block_a.sideband ().serialize (stream, block_a.type ()); - } - block_raw_put (transaction_a, vector, hash_a); - nano::block_predecessor_set predecessor (transaction_a, *this); - block_a.visit (predecessor); - debug_assert (block_a.previous ().is_zero () || block_successor (transaction_a, block_a.previous ()) == hash_a); - } - - // Converts a block hash to a block height - uint64_t block_account_height (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const override - { - auto block = block_get (transaction_a, hash_a); - return block->sideband ().height; - } - - nano::uint128_t block_balance (nano::transaction const & transaction_a, nano::block_hash const & hash_a) override - { - auto block (block_get (transaction_a, hash_a)); - release_assert (block); - nano::uint128_t result (block_balance_calculated (block)); - return result; - } - - std::shared_ptr block_get (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const override - { - auto value (block_raw_get (transaction_a, hash_a)); - std::shared_ptr result; - if (value.size () != 0) - { - nano::bufferstream stream (reinterpret_cast (value.data ()), value.size ()); - nano::block_type type; - auto error (try_read (stream, type)); - release_assert (!error); - result = nano::deserialize_block (stream, type); - release_assert (result != nullptr); - nano::block_sideband sideband; - error = (sideband.deserialize (stream, type)); - release_assert (!error); - result->sideband_set (sideband); - } - return result; - } - - bool block_exists (nano::transaction const & transaction_a, nano::block_hash const & hash_a) override - { - auto junk = block_raw_get (transaction_a, hash_a); - return junk.size () != 0; - } - - std::shared_ptr block_get_no_sideband (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const override - { - auto value (block_raw_get (transaction_a, hash_a)); - std::shared_ptr result; - if (value.size () != 0) - { - nano::bufferstream stream (reinterpret_cast (value.data ()), value.size ()); - result = nano::deserialize_block (stream); - debug_assert (result != nullptr); - } - return result; - } - - bool root_exists (nano::transaction const & transaction_a, nano::root const & root_a) override - { - return block_exists (transaction_a, root_a.as_block_hash ()) || account.exists (transaction_a, root_a.as_account ()); - } - - nano::account block_account (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const override - { - auto block (block_get (transaction_a, hash_a)); - debug_assert (block != nullptr); - return block_account_calculated (*block); - } - - nano::account block_account_calculated (nano::block const & block_a) const override - { - debug_assert (block_a.has_sideband ()); - nano::account result (block_a.account ()); - if (result.is_zero ()) - { - result = block_a.sideband ().account; - } - debug_assert (!result.is_zero ()); - return result; - } - - nano::uint128_t block_balance_calculated (std::shared_ptr const & block_a) const override - { - nano::uint128_t result; - switch (block_a->type ()) - { - case nano::block_type::open: - case nano::block_type::receive: - case nano::block_type::change: - result = block_a->sideband ().balance.number (); - break; - case nano::block_type::send: - result = boost::polymorphic_downcast (block_a.get ())->hashables.balance.number (); - break; - case nano::block_type::state: - result = boost::polymorphic_downcast (block_a.get ())->hashables.balance.number (); - break; - case nano::block_type::invalid: - case nano::block_type::not_a_block: - release_assert (false); - break; - } - return result; - } - - nano::block_hash block_successor (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const override - { - auto value (block_raw_get (transaction_a, hash_a)); - nano::block_hash result; - if (value.size () != 0) - { - debug_assert (value.size () >= result.bytes.size ()); - auto type = block_type_from_raw (value.data ()); - nano::bufferstream stream (reinterpret_cast (value.data ()) + block_successor_offset (transaction_a, value.size (), type), result.bytes.size ()); - auto error (nano::try_read (stream, result.bytes)); - (void)error; - debug_assert (!error); - } - else - { - result.clear (); - } - return result; - } - - void block_successor_clear (nano::write_transaction const & transaction_a, nano::block_hash const & hash_a) override - { - auto value (block_raw_get (transaction_a, hash_a)); - debug_assert (value.size () != 0); - auto type = block_type_from_raw (value.data ()); - std::vector data (static_cast (value.data ()), static_cast (value.data ()) + value.size ()); - std::fill_n (data.begin () + block_successor_offset (transaction_a, value.size (), type), sizeof (nano::block_hash), uint8_t{ 0 }); - block_raw_put (transaction_a, data, hash_a); - } - - nano::store_iterator blocks_end () const override - { - return nano::store_iterator (nullptr); - } - - int version_get (nano::transaction const & transaction_a) const override - { - nano::uint256_union version_key (1); - nano::db_val data; - auto status = get (transaction_a, tables::meta, nano::db_val (version_key), data); - int result (minimum_version); - if (success (status)) - { - nano::uint256_union version_value (data); - debug_assert (version_value.qwords[2] == 0 && version_value.qwords[1] == 0 && version_value.qwords[0] == 0); - result = version_value.number ().convert_to (); - } - return result; - } - - void block_del (nano::write_transaction const & transaction_a, nano::block_hash const & hash_a) override - { - auto status = del (transaction_a, tables::blocks, hash_a); - release_assert_success (*this, status); - } - - nano::epoch block_version (nano::transaction const & transaction_a, nano::block_hash const & hash_a) override - { - auto block = block_get (transaction_a, hash_a); - if (block && block->type () == nano::block_type::state) - { - return block->sideband ().details.epoch; - } - - return nano::epoch::epoch_0; - } - - void block_raw_put (nano::write_transaction const & transaction_a, std::vector const & data, nano::block_hash const & hash_a) override - { - nano::db_val value{ data.size (), (void *)data.data () }; - auto status = put (transaction_a, tables::blocks, hash_a, value); - release_assert_success (*this, status); - } - - bool exists (nano::transaction const & transaction_a, tables table_a, nano::db_val const & key_a) const - { - return static_cast (*this).exists (transaction_a, table_a, key_a); - } - - uint64_t block_count (nano::transaction const & transaction_a) override - { - return count (transaction_a, tables::blocks); - } - - std::shared_ptr block_random (nano::transaction const & transaction_a) override - { - nano::block_hash hash; - nano::random_pool::generate_block (hash.bytes.data (), hash.bytes.size ()); - auto existing = make_iterator> (transaction_a, tables::blocks, nano::db_val (hash)); - auto end (nano::store_iterator> (nullptr)); - if (existing == end) - { - existing = make_iterator> (transaction_a, tables::blocks); - } - debug_assert (existing != end); - return existing->second; - } - - nano::store_iterator blocks_begin (nano::transaction const & transaction_a) const override - { - return make_iterator (transaction_a, tables::blocks); - } - - nano::store_iterator blocks_begin (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const override - { - return make_iterator (transaction_a, tables::blocks, nano::db_val (hash_a)); - } - - void blocks_for_each_par (std::function, nano::store_iterator)> const & action_a) const override - { - parallel_traversal ( - [&action_a, this] (nano::uint256_t const & start, nano::uint256_t const & end, bool const is_last) { - auto transaction (this->tx_begin_read ()); - action_a (transaction, this->blocks_begin (transaction, start), !is_last ? this->blocks_begin (transaction, end) : this->blocks_end ()); - }); - } - - int const minimum_version{ 14 }; - -protected: - nano::network_params network_params; - int const version{ 21 }; - - template - nano::store_iterator make_iterator (nano::transaction const & transaction_a, tables table_a, bool const direction_asc = true) const - { - return static_cast (*this).template make_iterator (transaction_a, table_a, direction_asc); - } - - template - nano::store_iterator make_iterator (nano::transaction const & transaction_a, tables table_a, nano::db_val const & key) const - { - return static_cast (*this).template make_iterator (transaction_a, table_a, key); - } - - nano::db_val block_raw_get (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const - { - nano::db_val result; - auto status = get (transaction_a, tables::blocks, hash_a, result); - release_assert (success (status) || not_found (status)); - return result; - } - - size_t block_successor_offset (nano::transaction const & transaction_a, size_t entry_size_a, nano::block_type type_a) const - { - return entry_size_a - nano::block_sideband::size (type_a); - } - - static nano::block_type block_type_from_raw (void * data_a) - { - // The block type is the first byte - return static_cast ((reinterpret_cast (data_a))[0]); - } - - uint64_t count (nano::transaction const & transaction_a, std::initializer_list dbs_a) const - { - uint64_t total_count = 0; - for (auto db : dbs_a) - { - total_count += count (transaction_a, db); - } - return total_count; - } - - int get (nano::transaction const & transaction_a, tables table_a, nano::db_val const & key_a, nano::db_val & value_a) const - { - return static_cast (*this).get (transaction_a, table_a, key_a, value_a); - } - - int put (nano::write_transaction const & transaction_a, tables table_a, nano::db_val const & key_a, nano::db_val const & value_a) - { - return static_cast (*this).put (transaction_a, table_a, key_a, value_a); - } - - // Put only key without value - int put_key (nano::write_transaction const & transaction_a, tables table_a, nano::db_val const & key_a) - { - return put (transaction_a, table_a, key_a, nano::db_val{ nullptr }); - } - - int del (nano::write_transaction const & transaction_a, tables table_a, nano::db_val const & key_a) - { - return static_cast (*this).del (transaction_a, table_a, key_a); - } - - virtual uint64_t count (nano::transaction const & transaction_a, tables table_a) const = 0; - virtual int drop (nano::write_transaction const & transaction_a, tables table_a) = 0; - virtual bool not_found (int status) const = 0; - virtual bool success (int status) const = 0; - virtual int status_code_not_found () const = 0; - virtual std::string error_string (int status) const = 0; -}; - -/** - * Fill in our predecessors - */ -template -class block_predecessor_set : public nano::block_visitor -{ -public: - block_predecessor_set (nano::write_transaction const & transaction_a, nano::block_store_partial & store_a) : - transaction (transaction_a), - store (store_a) - { - } - virtual ~block_predecessor_set () = default; - void fill_value (nano::block const & block_a) - { - auto hash (block_a.hash ()); - auto value (store.block_raw_get (transaction, block_a.previous ())); - debug_assert (value.size () != 0); - auto type = store.block_type_from_raw (value.data ()); - std::vector data (static_cast (value.data ()), static_cast (value.data ()) + value.size ()); - std::copy (hash.bytes.begin (), hash.bytes.end (), data.begin () + store.block_successor_offset (transaction, value.size (), type)); - store.block_raw_put (transaction, data, block_a.previous ()); - } - void send_block (nano::send_block const & block_a) override - { - fill_value (block_a); - } - void receive_block (nano::receive_block const & block_a) override - { - fill_value (block_a); - } - void open_block (nano::open_block const & block_a) override - { - // Open blocks don't have a predecessor - } - void change_block (nano::change_block const & block_a) override - { - fill_value (block_a); - } - void state_block (nano::state_block const & block_a) override - { - if (!block_a.previous ().is_zero ()) - { - fill_value (block_a); - } - } - nano::write_transaction const & transaction; - nano::block_store_partial & store; -}; -} - -namespace -{ -template -void parallel_traversal (std::function const & action) -{ - // Between 10 and 40 threads, scales well even in low power systems as long as actions are I/O bound - unsigned const thread_count = std::max (10u, std::min (40u, 10 * std::thread::hardware_concurrency ())); - T const value_max{ std::numeric_limits::max () }; - T const split = value_max / thread_count; - std::vector threads; - threads.reserve (thread_count); - for (unsigned thread (0); thread < thread_count; ++thread) - { - T const start = thread * split; - T const end = (thread + 1) * split; - bool const is_last = thread == thread_count - 1; - - threads.emplace_back ([&action, start, end, is_last] { - nano::thread_role::set (nano::thread_role::name::db_parallel_traversal); - action (start, end, is_last); - }); - } - for (auto & thread : threads) - { - thread.join (); - } -} -} diff --git a/nano/secure/common.cpp b/nano/secure/common.cpp index cb693e21e8..e09d05d271 100644 --- a/nano/secure/common.cpp +++ b/nano/secure/common.cpp @@ -1,8 +1,8 @@ #include #include #include -#include #include +#include #include diff --git a/nano/secure/ledger.cpp b/nano/secure/ledger.cpp index 0afeb3cc11..d653dba2a1 100644 --- a/nano/secure/ledger.cpp +++ b/nano/secure/ledger.cpp @@ -2,9 +2,9 @@ #include #include #include -#include #include #include +#include #include @@ -41,10 +41,10 @@ class rollback_visitor : public nano::block_visitor ledger.cache.rep_weights.representation_add (info.representative, pending.amount.number ()); nano::account_info new_info (block_a.hashables.previous, info.representative, info.open_block, ledger.balance (transaction, block_a.hashables.previous), nano::seconds_since_epoch (), info.block_count - 1, nano::epoch::epoch_0); ledger.update_account (transaction, pending.source, info, new_info); - ledger.store.block_del (transaction, hash); + ledger.store.block.del (transaction, hash); ledger.store.frontier.del (transaction, hash); ledger.store.frontier.put (transaction, block_a.hashables.previous, pending.source); - ledger.store.block_successor_clear (transaction, block_a.hashables.previous); + ledger.store.block.successor_clear (transaction, block_a.hashables.previous); ledger.stats.inc (nano::stat::type::rollback, nano::stat::detail::send); } } @@ -62,11 +62,11 @@ class rollback_visitor : public nano::block_visitor ledger.cache.rep_weights.representation_add (info.representative, 0 - amount); nano::account_info new_info (block_a.hashables.previous, info.representative, info.open_block, ledger.balance (transaction, block_a.hashables.previous), nano::seconds_since_epoch (), info.block_count - 1, nano::epoch::epoch_0); ledger.update_account (transaction, destination_account, info, new_info); - ledger.store.block_del (transaction, hash); + ledger.store.block.del (transaction, hash); ledger.store.pending.put (transaction, nano::pending_key (destination_account, block_a.hashables.source), { source_account, amount, nano::epoch::epoch_0 }); ledger.store.frontier.del (transaction, hash); ledger.store.frontier.put (transaction, block_a.hashables.previous, destination_account); - ledger.store.block_successor_clear (transaction, block_a.hashables.previous); + ledger.store.block.successor_clear (transaction, block_a.hashables.previous); ledger.stats.inc (nano::stat::type::rollback, nano::stat::detail::receive); } void open_block (nano::open_block const & block_a) override @@ -80,7 +80,7 @@ class rollback_visitor : public nano::block_visitor ledger.cache.rep_weights.representation_add (block_a.representative (), 0 - amount); nano::account_info new_info; ledger.update_account (transaction, destination_account, new_info, new_info); - ledger.store.block_del (transaction, hash); + ledger.store.block.del (transaction, hash); ledger.store.pending.put (transaction, nano::pending_key (destination_account, block_a.hashables.source), { source_account, amount, nano::epoch::epoch_0 }); ledger.store.frontier.del (transaction, hash); ledger.stats.inc (nano::stat::type::rollback, nano::stat::detail::open); @@ -94,16 +94,16 @@ class rollback_visitor : public nano::block_visitor [[maybe_unused]] auto error (ledger.store.account.get (transaction, account, info)); debug_assert (!error); auto balance (ledger.balance (transaction, block_a.hashables.previous)); - auto block = ledger.store.block_get (transaction, rep_block); + auto block = ledger.store.block.get (transaction, rep_block); release_assert (block != nullptr); auto representative = block->representative (); ledger.cache.rep_weights.representation_add_dual (block_a.representative (), 0 - balance, representative, balance); - ledger.store.block_del (transaction, hash); + ledger.store.block.del (transaction, hash); nano::account_info new_info (block_a.hashables.previous, representative, info.open_block, info.balance, nano::seconds_since_epoch (), info.block_count - 1, nano::epoch::epoch_0); ledger.update_account (transaction, account, info, new_info); ledger.store.frontier.del (transaction, hash); ledger.store.frontier.put (transaction, block_a.hashables.previous, account); - ledger.store.block_successor_clear (transaction, block_a.hashables.previous); + ledger.store.block.successor_clear (transaction, block_a.hashables.previous); ledger.stats.inc (nano::stat::type::rollback, nano::stat::detail::change); } void state_block (nano::state_block const & block_a) override @@ -120,7 +120,7 @@ class rollback_visitor : public nano::block_visitor if (!rep_block_hash.is_zero ()) { // Move existing representation & add in amount delta - auto block (ledger.store.block_get (transaction, rep_block_hash)); + auto block (ledger.store.block.get (transaction, rep_block_hash)); debug_assert (block != nullptr); representative = block->representative (); ledger.cache.rep_weights.representation_add_dual (representative, balance, block_a.representative (), 0 - block_a.hashables.balance.number ()); @@ -155,14 +155,14 @@ class rollback_visitor : public nano::block_visitor } debug_assert (!error); - auto previous_version (ledger.store.block_version (transaction, block_a.hashables.previous)); + auto previous_version (ledger.store.block.version (transaction, block_a.hashables.previous)); nano::account_info new_info (block_a.hashables.previous, representative, info.open_block, balance, nano::seconds_since_epoch (), info.block_count - 1, previous_version); ledger.update_account (transaction, block_a.hashables.account, info, new_info); - auto previous (ledger.store.block_get (transaction, block_a.hashables.previous)); + auto previous (ledger.store.block.get (transaction, block_a.hashables.previous)); if (previous != nullptr) { - ledger.store.block_successor_clear (transaction, block_a.hashables.previous); + ledger.store.block.successor_clear (transaction, block_a.hashables.previous); if (previous->type () < nano::block_type::state) { ledger.store.frontier.put (transaction, block_a.hashables.previous, block_a.hashables.account); @@ -172,7 +172,7 @@ class rollback_visitor : public nano::block_visitor { ledger.stats.inc (nano::stat::type::rollback, nano::stat::detail::open); } - ledger.store.block_del (transaction, hash); + ledger.store.block.del (transaction, hash); } nano::write_transaction const & transaction; nano::ledger & ledger; @@ -208,7 +208,7 @@ bool ledger_processor::validate_epoch_block (nano::state_block const & block_a) nano::amount prev_balance (0); if (!block_a.hashables.previous.is_zero ()) { - result.code = ledger.store.block_exists (transaction, block_a.hashables.previous) ? nano::process_result::progress : nano::process_result::gap_previous; + result.code = ledger.store.block.exists (transaction, block_a.hashables.previous) ? nano::process_result::progress : nano::process_result::gap_previous; if (result.code == nano::process_result::progress) { prev_balance = ledger.balance (transaction, block_a.hashables.previous); @@ -295,7 +295,7 @@ void ledger_processor::state_block_impl (nano::state_block & block_a) result.code = block_a.hashables.previous.is_zero () ? nano::process_result::fork : nano::process_result::progress; // Has this account already been opened? (Ambigious) if (result.code == nano::process_result::progress) { - result.code = ledger.store.block_exists (transaction, block_a.hashables.previous) ? nano::process_result::progress : nano::process_result::gap_previous; // Does the previous block exist in the ledger? (Unambigious) + result.code = ledger.store.block.exists (transaction, block_a.hashables.previous) ? nano::process_result::progress : nano::process_result::gap_previous; // Does the previous block exist in the ledger? (Unambigious) if (result.code == nano::process_result::progress) { is_send = block_a.hashables.balance < info.balance; @@ -351,7 +351,7 @@ void ledger_processor::state_block_impl (nano::state_block & block_a) { ledger.stats.inc (nano::stat::type::ledger, nano::stat::detail::state_block); block_a.sideband_set (nano::block_sideband (block_a.hashables.account /* unused */, 0, 0 /* unused */, info.block_count + 1, nano::seconds_since_epoch (), block_details, source_epoch)); - ledger.store.block_put (transaction, hash, block_a); + ledger.store.block.put (transaction, hash, block_a); if (!info.head.is_zero ()) { @@ -451,7 +451,7 @@ void ledger_processor::epoch_block_impl (nano::state_block & block_a) { ledger.stats.inc (nano::stat::type::ledger, nano::stat::detail::epoch_block); block_a.sideband_set (nano::block_sideband (block_a.hashables.account /* unused */, 0, 0 /* unused */, info.block_count + 1, nano::seconds_since_epoch (), block_details, nano::epoch::epoch_0 /* unused */)); - ledger.store.block_put (transaction, hash, block_a); + ledger.store.block.put (transaction, hash, block_a); nano::account_info new_info (hash, block_a.representative (), info.open_block.is_zero () ? hash : info.open_block, info.balance, nano::seconds_since_epoch (), info.block_count + 1, epoch); ledger.update_account (transaction, block_a.hashables.account, info, new_info); if (!ledger.store.frontier.get (transaction, info.head).is_zero ()) @@ -474,7 +474,7 @@ void ledger_processor::change_block (nano::change_block & block_a) result.code = existing ? nano::process_result::old : nano::process_result::progress; // Have we seen this block before? (Harmless) if (result.code == nano::process_result::progress) { - auto previous (ledger.store.block_get (transaction, block_a.hashables.previous)); + auto previous (ledger.store.block.get (transaction, block_a.hashables.previous)); result.code = previous != nullptr ? nano::process_result::progress : nano::process_result::gap_previous; // Have we seen the previous block already? (Harmless) if (result.code == nano::process_result::progress) { @@ -504,7 +504,7 @@ void ledger_processor::change_block (nano::change_block & block_a) debug_assert (!validate_message (account, hash, block_a.signature)); result.verified = nano::signature_verification::valid; block_a.sideband_set (nano::block_sideband (account, 0, info.balance, info.block_count + 1, nano::seconds_since_epoch (), block_details, nano::epoch::epoch_0 /* unused */)); - ledger.store.block_put (transaction, hash, block_a); + ledger.store.block.put (transaction, hash, block_a); auto balance (ledger.balance (transaction, block_a.hashables.previous)); ledger.cache.rep_weights.representation_add_dual (block_a.representative (), balance, info.representative, 0 - balance); nano::account_info new_info (hash, block_a.representative (), info.open_block, info.balance, nano::seconds_since_epoch (), info.block_count + 1, nano::epoch::epoch_0); @@ -528,7 +528,7 @@ void ledger_processor::send_block (nano::send_block & block_a) result.code = existing ? nano::process_result::old : nano::process_result::progress; // Have we seen this block before? (Harmless) if (result.code == nano::process_result::progress) { - auto previous (ledger.store.block_get (transaction, block_a.hashables.previous)); + auto previous (ledger.store.block.get (transaction, block_a.hashables.previous)); result.code = previous != nullptr ? nano::process_result::progress : nano::process_result::gap_previous; // Have we seen the previous block already? (Harmless) if (result.code == nano::process_result::progress) { @@ -563,7 +563,7 @@ void ledger_processor::send_block (nano::send_block & block_a) auto amount (info.balance.number () - block_a.hashables.balance.number ()); ledger.cache.rep_weights.representation_add (info.representative, 0 - amount); block_a.sideband_set (nano::block_sideband (account, 0, block_a.hashables.balance /* unused */, info.block_count + 1, nano::seconds_since_epoch (), block_details, nano::epoch::epoch_0 /* unused */)); - ledger.store.block_put (transaction, hash, block_a); + ledger.store.block.put (transaction, hash, block_a); nano::account_info new_info (hash, info.representative, info.open_block, block_a.hashables.balance, nano::seconds_since_epoch (), info.block_count + 1, nano::epoch::epoch_0); ledger.update_account (transaction, account, info, new_info); ledger.store.pending.put (transaction, nano::pending_key (block_a.hashables.destination, hash), { account, amount, nano::epoch::epoch_0 }); @@ -587,7 +587,7 @@ void ledger_processor::receive_block (nano::receive_block & block_a) result.code = existing ? nano::process_result::old : nano::process_result::progress; // Have we seen this block already? (Harmless) if (result.code == nano::process_result::progress) { - auto previous (ledger.store.block_get (transaction, block_a.hashables.previous)); + auto previous (ledger.store.block.get (transaction, block_a.hashables.previous)); result.code = previous != nullptr ? nano::process_result::progress : nano::process_result::gap_previous; if (result.code == nano::process_result::progress) { @@ -629,7 +629,7 @@ void ledger_processor::receive_block (nano::receive_block & block_a) { auto new_balance (info.balance.number () + pending.amount.number ()); #ifdef NDEBUG - if (ledger.store.block_exists (transaction, block_a.hashables.source)) + if (ledger.store.block.exists (transaction, block_a.hashables.source)) { nano::account_info source_info; [[maybe_unused]] auto error (ledger.store.account.get (transaction, pending.source, source_info)); @@ -638,7 +638,7 @@ void ledger_processor::receive_block (nano::receive_block & block_a) #endif ledger.store.pending.del (transaction, key); block_a.sideband_set (nano::block_sideband (account, 0, new_balance, info.block_count + 1, nano::seconds_since_epoch (), block_details, nano::epoch::epoch_0 /* unused */)); - ledger.store.block_put (transaction, hash, block_a); + ledger.store.block.put (transaction, hash, block_a); nano::account_info new_info (hash, info.representative, info.open_block, new_balance, nano::seconds_since_epoch (), info.block_count + 1, nano::epoch::epoch_0); ledger.update_account (transaction, account, info, new_info); ledger.cache.rep_weights.representation_add (info.representative, pending.amount.number ()); @@ -655,7 +655,7 @@ void ledger_processor::receive_block (nano::receive_block & block_a) } else { - result.code = ledger.store.block_exists (transaction, block_a.hashables.previous) ? nano::process_result::fork : nano::process_result::gap_previous; // If we have the block but it's not the latest we have a signed fork (Malicious) + result.code = ledger.store.block.exists (transaction, block_a.hashables.previous) ? nano::process_result::fork : nano::process_result::gap_previous; // If we have the block but it's not the latest we have a signed fork (Malicious) } } } @@ -701,7 +701,7 @@ void ledger_processor::open_block (nano::open_block & block_a) if (result.code == nano::process_result::progress) { #ifdef NDEBUG - if (ledger.store.block_exists (transaction, block_a.hashables.source)) + if (ledger.store.block.exists (transaction, block_a.hashables.source)) { nano::account_info source_info; [[maybe_unused]] auto error (ledger.store.account.get (transaction, pending.source, source_info)); @@ -710,7 +710,7 @@ void ledger_processor::open_block (nano::open_block & block_a) #endif ledger.store.pending.del (transaction, key); block_a.sideband_set (nano::block_sideband (block_a.hashables.account, 0, pending.amount, 1, nano::seconds_since_epoch (), block_details, nano::epoch::epoch_0 /* unused */)); - ledger.store.block_put (transaction, hash, block_a); + ledger.store.block.put (transaction, hash, block_a); nano::account_info new_info (hash, block_a.representative (), hash, pending.amount.number (), nano::seconds_since_epoch (), 1, nano::epoch::epoch_0); ledger.update_account (transaction, block_a.hashables.account, info, new_info); ledger.cache.rep_weights.representation_add (block_a.representative (), pending.amount.number ()); @@ -736,7 +736,7 @@ ledger_processor::ledger_processor (nano::ledger & ledger_a, nano::write_transac } } // namespace -nano::ledger::ledger (nano::block_store & store_a, nano::stat & stat_a, nano::generate_cache const & generate_cache_a) : +nano::ledger::ledger (nano::store & store_a, nano::stat & stat_a, nano::generate_cache const & generate_cache_a) : store (store_a), stats (stat_a), check_bootstrap_weights (true) @@ -796,13 +796,13 @@ void nano::ledger::initialize (nano::generate_cache const & generate_cache_a) // Balance for account containing hash nano::uint128_t nano::ledger::balance (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const { - return hash_a.is_zero () ? 0 : store.block_balance (transaction_a, hash_a); + return hash_a.is_zero () ? 0 : store.block.balance (transaction_a, hash_a); } nano::uint128_t nano::ledger::balance_safe (nano::transaction const & transaction_a, nano::block_hash const & hash_a, bool & error_a) const { nano::uint128_t result (0); - if (pruning && !hash_a.is_zero () && !store.block_exists (transaction_a, hash_a)) + if (pruning && !hash_a.is_zero () && !store.block.exists (transaction_a, hash_a)) { error_a = true; result = 0; @@ -875,7 +875,7 @@ nano::process_return nano::ledger::process (nano::write_transaction const & tran nano::block_hash nano::ledger::representative (nano::transaction const & transaction_a, nano::block_hash const & hash_a) { auto result (representative_calculated (transaction_a, hash_a)); - debug_assert (result.is_zero () || store.block_exists (transaction_a, result)); + debug_assert (result.is_zero () || store.block.exists (transaction_a, result)); return result; } @@ -897,7 +897,7 @@ bool nano::ledger::block_or_pruned_exists (nano::transaction const & transaction { return true; } - return store.block_exists (transaction_a, hash_a); + return store.block.exists (transaction_a, hash_a); } std::string nano::ledger::block_text (char const * hash_a) @@ -909,7 +909,7 @@ std::string nano::ledger::block_text (nano::block_hash const & hash_a) { std::string result; auto transaction (store.tx_begin_read ()); - auto block (store.block_get (transaction, hash_a)); + auto block (store.block.get (transaction, hash_a)); if (block != nullptr) { block->serialize_json (result); @@ -924,7 +924,7 @@ bool nano::ledger::is_send (nano::transaction const & transaction_a, nano::state * requires that the previous block exists in the database. * This is because it must retrieve the balance of the previous block. */ - debug_assert (block_a.has_sideband () || block_a.hashables.previous.is_zero () || store.block_exists (transaction_a, block_a.hashables.previous)); + debug_assert (block_a.has_sideband () || block_a.hashables.previous.is_zero () || store.block.exists (transaction_a, block_a.hashables.previous)); bool result (false); if (block_a.has_sideband ()) @@ -968,7 +968,7 @@ nano::block_hash nano::ledger::block_source (nano::transaction const & transacti * passed in exist in the database. This is because it will try * to check account balances to determine if it is a send block. */ - debug_assert (block_a.previous ().is_zero () || store.block_exists (transaction_a, block_a.previous ())); + debug_assert (block_a.previous ().is_zero () || store.block.exists (transaction_a, block_a.previous ())); // If block_a.source () is nonzero, then we have our source. // However, universal blocks will always return zero. @@ -987,7 +987,7 @@ std::pair nano::ledger::hash_root_random (na nano::root root (0); if (!pruning) { - auto block (store.block_random (transaction_a)); + auto block (store.block.random (transaction_a)); hash = block->hash (); root = block->root (); } @@ -1003,7 +1003,7 @@ std::pair nano::ledger::hash_root_random (na } if (hash.is_zero ()) { - auto block (store.block_random (transaction_a)); + auto block (store.block.random (transaction_a)); hash = block->hash (); root = block->root (); } @@ -1035,13 +1035,13 @@ nano::uint128_t nano::ledger::weight (nano::account const & account_a) // Rollback blocks until `block_a' doesn't exist or it tries to penetrate the confirmation height bool nano::ledger::rollback (nano::write_transaction const & transaction_a, nano::block_hash const & block_a, std::vector> & list_a) { - debug_assert (store.block_exists (transaction_a, block_a)); + debug_assert (store.block.exists (transaction_a, block_a)); auto account_l (account (transaction_a, block_a)); - auto block_account_height (store.block_account_height (transaction_a, block_a)); + auto block_account_height (store.block.account_height (transaction_a, block_a)); rollback_visitor rollback (transaction_a, *this, list_a); nano::account_info account_info; auto error (false); - while (!error && store.block_exists (transaction_a, block_a)) + while (!error && store.block.exists (transaction_a, block_a)) { nano::confirmation_height_info confirmation_height_info; store.confirmation_height.get (transaction_a, account_l, confirmation_height_info); @@ -1049,7 +1049,7 @@ bool nano::ledger::rollback (nano::write_transaction const & transaction_a, nano { auto latest_error = store.account.get (transaction_a, account_l, account_info); debug_assert (!latest_error); - auto block (store.block_get (transaction_a, account_info.head)); + auto block (store.block.get (transaction_a, account_info.head)); list_a.push_back (block); block->visit (rollback); error = rollback.error; @@ -1075,21 +1075,21 @@ bool nano::ledger::rollback (nano::write_transaction const & transaction_a, nano // Return account containing hash nano::account nano::ledger::account (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const { - return store.block_account (transaction_a, hash_a); + return store.block.account (transaction_a, hash_a); } nano::account nano::ledger::account_safe (nano::transaction const & transaction_a, nano::block_hash const & hash_a, bool & error_a) const { if (!pruning) { - return store.block_account (transaction_a, hash_a); + return store.block.account (transaction_a, hash_a); } else { - auto block (store.block_get (transaction_a, hash_a)); + auto block (store.block.get (transaction_a, hash_a)); if (block != nullptr) { - return store.block_account_calculated (*block); + return store.block.account_calculated (*block); } else { @@ -1108,7 +1108,7 @@ nano::uint128_t nano::ledger::amount (nano::transaction const & transaction_a, n nano::uint128_t nano::ledger::amount (nano::transaction const & transaction_a, nano::block_hash const & hash_a) { - auto block (store.block_get (transaction_a, hash_a)); + auto block (store.block.get (transaction_a, hash_a)); auto block_balance (balance (transaction_a, hash_a)); auto previous_balance (balance (transaction_a, block->previous ())); return block_balance > previous_balance ? block_balance - previous_balance : previous_balance - block_balance; @@ -1116,7 +1116,7 @@ nano::uint128_t nano::ledger::amount (nano::transaction const & transaction_a, n nano::uint128_t nano::ledger::amount_safe (nano::transaction const & transaction_a, nano::block_hash const & hash_a, bool & error_a) const { - auto block (store.block_get (transaction_a, hash_a)); + auto block (store.block.get (transaction_a, hash_a)); debug_assert (block); auto block_balance (balance (transaction_a, hash_a)); auto previous_balance (balance_safe (transaction_a, block->previous (), error_a)); @@ -1151,7 +1151,7 @@ void nano::ledger::dump_account_chain (nano::account const & account_a, std::ost auto hash (latest (transaction, account_a)); while (!hash.is_zero ()) { - auto block (store.block_get (transaction, hash)); + auto block (store.block.get (transaction, hash)); debug_assert (block != nullptr); stream << hash.to_string () << std::endl; hash = block->previous (); @@ -1162,7 +1162,7 @@ bool nano::ledger::could_fit (nano::transaction const & transaction_a, nano::blo { auto dependencies (dependent_blocks (transaction_a, block_a)); return std::all_of (dependencies.begin (), dependencies.end (), [this, &transaction_a] (nano::block_hash const & hash_a) { - return hash_a.is_zero () || store.block_exists (transaction_a, hash_a); + return hash_a.is_zero () || store.block.exists (transaction_a, hash_a); }); } @@ -1218,7 +1218,7 @@ class dependent_block_visitor : public nano::block_visitor result[0] = block_a.hashables.previous; result[1] = block_a.hashables.link.as_block_hash (); // ledger.is_send will check the sideband first, if block_a has a loaded sideband the check that previous block exists can be skipped - if (ledger.is_epoch_link (block_a.hashables.link) || ((block_a.has_sideband () || ledger.store.block_exists (transaction, block_a.hashables.previous)) && ledger.is_send (transaction, block_a))) + if (ledger.is_epoch_link (block_a.hashables.link) || ((block_a.has_sideband () || ledger.store.block.exists (transaction, block_a.hashables.previous)) && ledger.is_send (transaction, block_a))) { result[1].clear (); } @@ -1292,12 +1292,12 @@ std::shared_ptr nano::ledger::successor (nano::transaction const & if (get_from_previous) { - successor = store.block_successor (transaction_a, root_a.previous ()); + successor = store.block.successor (transaction_a, root_a.previous ()); } std::shared_ptr result; if (!successor.is_zero ()) { - result = store.block_get (transaction_a, successor); + result = store.block.get (transaction_a, successor); } debug_assert (successor.is_zero () || result != nullptr); return result; @@ -1305,17 +1305,17 @@ std::shared_ptr nano::ledger::successor (nano::transaction const & std::shared_ptr nano::ledger::forked_block (nano::transaction const & transaction_a, nano::block const & block_a) { - debug_assert (!store.block_exists (transaction_a, block_a.hash ())); + debug_assert (!store.block.exists (transaction_a, block_a.hash ())); auto root (block_a.root ()); - debug_assert (store.block_exists (transaction_a, root.as_block_hash ()) || store.account.exists (transaction_a, root.as_account ())); - auto result (store.block_get (transaction_a, store.block_successor (transaction_a, root.as_block_hash ()))); + debug_assert (store.block.exists (transaction_a, root.as_block_hash ()) || store.account.exists (transaction_a, root.as_account ())); + auto result (store.block.get (transaction_a, store.block.successor (transaction_a, root.as_block_hash ()))); if (result == nullptr) { nano::account_info info; auto error (store.account.get (transaction_a, root.as_account (), info)); (void)error; debug_assert (!error); - result = store.block_get (transaction_a, info.open_block); + result = store.block.get (transaction_a, info.open_block); debug_assert (result != nullptr); } return result; @@ -1327,7 +1327,7 @@ bool nano::ledger::block_confirmed (nano::transaction const & transaction_a, nan { return true; } - auto block = store.block_get (transaction_a, hash_a); + auto block = store.block.get (transaction_a, hash_a); if (block) { nano::confirmation_height_info confirmation_height_info; @@ -1344,10 +1344,10 @@ uint64_t nano::ledger::pruning_action (nano::write_transaction & transaction_a, nano::block_hash hash (hash_a); while (!hash.is_zero () && hash != network_params.ledger.genesis_hash) { - auto block (store.block_get (transaction_a, hash)); + auto block (store.block.get (transaction_a, hash)); if (block != nullptr) { - store.block_del (transaction_a, hash); + store.block.del (transaction_a, hash); store.pruned.put (transaction_a, hash); hash = block->previous (); ++pruned_count; @@ -1420,7 +1420,7 @@ bool nano::ledger::migrate_lmdb_to_rocksdb (boost::filesystem::path const & data if (!rocksdb_store->init_error ()) { - store.blocks_for_each_par ( + store.block.for_each_par ( [&rocksdb_store] (nano::read_transaction const & /*unused*/, auto i, auto n) { for (; i != n; ++i) { @@ -1432,7 +1432,7 @@ bool nano::ledger::migrate_lmdb_to_rocksdb (boost::filesystem::path const & data nano::serialize_block (stream, *i->second.block); i->second.sideband.serialize (stream, i->second.block->type ()); } - rocksdb_store->block_raw_put (rocksdb_transaction, vector, i->first); + rocksdb_store->block.raw_put (rocksdb_transaction, vector, i->first); } }); @@ -1500,9 +1500,9 @@ bool nano::ledger::migrate_lmdb_to_rocksdb (boost::filesystem::path const & data }); auto lmdb_transaction (store.tx_begin_read ()); - auto version = store.version_get (lmdb_transaction); + auto version = store.version.get (lmdb_transaction); auto rocksdb_transaction (rocksdb_store->tx_begin_write ()); - rocksdb_store->version_put (rocksdb_transaction, version); + rocksdb_store->version.put (rocksdb_transaction, version); for (auto i (store.online_weight.begin (lmdb_transaction)), n (store.online_weight.end ()); i != n; ++i) { @@ -1520,11 +1520,11 @@ bool nano::ledger::migrate_lmdb_to_rocksdb (boost::filesystem::path const & data error |= store.pruned.count (lmdb_transaction) != rocksdb_store->pruned.count (rocksdb_transaction); error |= store.final_vote.count (lmdb_transaction) != rocksdb_store->final_vote.count (rocksdb_transaction); error |= store.online_weight.count (lmdb_transaction) != rocksdb_store->online_weight.count (rocksdb_transaction); - error |= store.version_get (lmdb_transaction) != rocksdb_store->version_get (rocksdb_transaction); + error |= store.version.get (lmdb_transaction) != rocksdb_store->version.get (rocksdb_transaction); // For large tables a random key is used instead and makes sure it exists - auto random_block (store.block_random (lmdb_transaction)); - error |= rocksdb_store->block_get (rocksdb_transaction, random_block->hash ()) == nullptr; + auto random_block (store.block.random (lmdb_transaction)); + error |= rocksdb_store->block.get (rocksdb_transaction, random_block->hash ()) == nullptr; auto account = random_block->account ().is_zero () ? random_block->sideband ().account : random_block->account (); nano::account_info account_info; diff --git a/nano/secure/ledger.hpp b/nano/secure/ledger.hpp index 2dec0af5ea..21b092f633 100644 --- a/nano/secure/ledger.hpp +++ b/nano/secure/ledger.hpp @@ -8,7 +8,7 @@ namespace nano { -class block_store; +class store; class stat; class write_transaction; @@ -26,7 +26,7 @@ class uncemented_info class ledger final { public: - ledger (nano::block_store &, nano::stat &, nano::generate_cache const & = nano::generate_cache ()); + ledger (nano::store &, nano::stat &, nano::generate_cache const & = nano::generate_cache ()); nano::account account (nano::transaction const &, nano::block_hash const &) const; nano::account account_safe (nano::transaction const &, nano::block_hash const &, bool &) const; nano::uint128_t amount (nano::transaction const &, nano::account const &); @@ -69,7 +69,7 @@ class ledger final bool migrate_lmdb_to_rocksdb (boost::filesystem::path const &) const; static nano::uint128_t const unit; nano::network_params network_params; - nano::block_store & store; + nano::store & store; nano::ledger_cache cache; nano::stat & stats; std::unordered_map bootstrap_weights; diff --git a/nano/secure/blockstore.cpp b/nano/secure/store.cpp similarity index 75% rename from nano/secure/blockstore.cpp rename to nano/secure/store.cpp index 5e8711c3fa..e5cc71b6fe 100644 --- a/nano/secure/blockstore.cpp +++ b/nano/secure/store.cpp @@ -1,7 +1,7 @@ #include -#include +#include -nano::representative_visitor::representative_visitor (nano::transaction const & transaction_a, nano::block_store & store_a) : +nano::representative_visitor::representative_visitor (nano::transaction const & transaction_a, nano::store & store_a) : transaction (transaction_a), store (store_a), result (0) @@ -13,7 +13,7 @@ void nano::representative_visitor::compute (nano::block_hash const & hash_a) current = hash_a; while (result.is_zero ()) { - auto block (store.block_get (transaction, current)); + auto block (store.block.get (transaction, current)); debug_assert (block != nullptr); block->visit (*this); } @@ -105,7 +105,21 @@ bool nano::write_transaction::contains (nano::tables table_a) const return impl->contains (table_a); } -nano::block_store::block_store (nano::frontier_store & frontier_store_a, nano::account_store & account_store_a, nano::pending_store & pending_store_a, nano::unchecked_store & unchecked_store_a, nano::online_weight_store & online_weight_store_a, nano::pruned_store & pruned_store_a, nano::peer_store & peer_store_a, nano::confirmation_height_store & confirmation_height_store_a, nano::final_vote_store & final_vote_store_a) : +// clang-format off +nano::store::store ( + nano::block_store & block_store_a, + nano::frontier_store & frontier_store_a, + nano::account_store & account_store_a, + nano::pending_store & pending_store_a, + nano::unchecked_store & unchecked_store_a, + nano::online_weight_store & online_weight_store_a, + nano::pruned_store & pruned_store_a, + nano::peer_store & peer_store_a, + nano::confirmation_height_store & confirmation_height_store_a, + nano::final_vote_store & final_vote_store_a, + nano::version_store & version_store_a +) : + block (block_store_a), frontier (frontier_store_a), account (account_store_a), pending (pending_store_a), @@ -114,6 +128,8 @@ nano::block_store::block_store (nano::frontier_store & frontier_store_a, nano::a pruned (pruned_store_a), peer (peer_store_a), confirmation_height (confirmation_height_store_a), - final_vote (final_vote_store_a) + final_vote (final_vote_store_a), + version (version_store_a) { } +// clang-format on diff --git a/nano/secure/blockstore.hpp b/nano/secure/store.hpp similarity index 90% rename from nano/secure/blockstore.hpp rename to nano/secure/store.hpp index b38086b790..4aa87521d1 100644 --- a/nano/secure/blockstore.hpp +++ b/nano/secure/store.hpp @@ -438,7 +438,7 @@ class db_val }; class transaction; -class block_store; +class store; /** * Determine the representative for this block @@ -446,7 +446,7 @@ class block_store; class representative_visitor final : public nano::block_visitor { public: - representative_visitor (nano::transaction const & transaction_a, nano::block_store & store_a); + representative_visitor (nano::transaction const & transaction_a, nano::store & store_a); ~representative_visitor () = default; void compute (nano::block_hash const & hash_a); void send_block (nano::send_block const & block_a) override; @@ -455,7 +455,7 @@ class representative_visitor final : public nano::block_visitor void change_block (nano::change_block const & block_a) override; void state_block (nano::state_block const & block_a) override; nano::transaction const & transaction; - nano::block_store & store; + nano::store & store; nano::block_hash current; nano::block_hash result; }; @@ -774,58 +774,80 @@ class final_vote_store virtual void for_each_par (std::function, nano::store_iterator)> const & action_a) const = 0; }; +/** + * Manages version storage + */ +class version_store +{ +public: + virtual void put (nano::write_transaction const &, int) = 0; + virtual int get (nano::transaction const &) const = 0; +}; + /** * Manages block storage and iteration */ class block_store { public: - explicit block_store (nano::frontier_store &, nano::account_store &, nano::pending_store &, nano::unchecked_store &, nano::online_weight_store &, nano::pruned_store &, nano::peer_store &, nano::confirmation_height_store &, nano::final_vote_store &); - virtual ~block_store () = default; + virtual void put (nano::write_transaction const &, nano::block_hash const &, nano::block const &) = 0; + virtual void raw_put (nano::write_transaction const &, std::vector const &, nano::block_hash const &) = 0; + virtual nano::block_hash successor (nano::transaction const &, nano::block_hash const &) const = 0; + virtual void successor_clear (nano::write_transaction const &, nano::block_hash const &) = 0; + virtual std::shared_ptr get (nano::transaction const &, nano::block_hash const &) const = 0; + virtual std::shared_ptr get_no_sideband (nano::transaction const &, nano::block_hash const &) const = 0; + virtual std::shared_ptr random (nano::transaction const &) = 0; + virtual void del (nano::write_transaction const &, nano::block_hash const &) = 0; + virtual bool exists (nano::transaction const &, nano::block_hash const &) = 0; + virtual uint64_t count (nano::transaction const &) = 0; + virtual nano::account account (nano::transaction const &, nano::block_hash const &) const = 0; + virtual nano::account account_calculated (nano::block const &) const = 0; + virtual nano::store_iterator begin (nano::transaction const &, nano::block_hash const &) const = 0; + virtual nano::store_iterator begin (nano::transaction const &) const = 0; + virtual nano::store_iterator end () const = 0; + virtual nano::uint128_t balance (nano::transaction const &, nano::block_hash const &) = 0; + virtual nano::uint128_t balance_calculated (std::shared_ptr const &) const = 0; + virtual nano::epoch version (nano::transaction const &, nano::block_hash const &) = 0; + virtual void for_each_par (std::function, nano::store_iterator)> const & action_a) const = 0; + virtual uint64_t account_height (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const = 0; +}; + +/** + * Store manager + */ +class store +{ +public: + // clang-format off + explicit store ( + nano::block_store &, + nano::frontier_store &, + nano::account_store &, + nano::pending_store &, + nano::unchecked_store &, + nano::online_weight_store &, + nano::pruned_store &, + nano::peer_store &, + nano::confirmation_height_store &, + nano::final_vote_store &, + nano::version_store & + ); + // clang-format on + virtual ~store () = default; virtual void initialize (nano::write_transaction const &, nano::genesis const &, nano::ledger_cache &) = 0; - virtual void block_put (nano::write_transaction const &, nano::block_hash const &, nano::block const &) = 0; - virtual void block_raw_put (nano::write_transaction const &, std::vector const &, nano::block_hash const &) = 0; - virtual nano::block_hash block_successor (nano::transaction const &, nano::block_hash const &) const = 0; - virtual void block_successor_clear (nano::write_transaction const &, nano::block_hash const &) = 0; - virtual std::shared_ptr block_get (nano::transaction const &, nano::block_hash const &) const = 0; - virtual std::shared_ptr block_get_no_sideband (nano::transaction const &, nano::block_hash const &) const = 0; - virtual std::shared_ptr block_random (nano::transaction const &) = 0; - virtual void block_del (nano::write_transaction const &, nano::block_hash const &) = 0; - virtual bool block_exists (nano::transaction const &, nano::block_hash const &) = 0; - virtual uint64_t block_count (nano::transaction const &) = 0; virtual bool root_exists (nano::transaction const &, nano::root const &) = 0; - virtual nano::account block_account (nano::transaction const &, nano::block_hash const &) const = 0; - virtual nano::account block_account_calculated (nano::block const &) const = 0; - virtual nano::store_iterator blocks_begin (nano::transaction const &, nano::block_hash const &) const = 0; - virtual nano::store_iterator blocks_begin (nano::transaction const &) const = 0; - virtual nano::store_iterator blocks_end () const = 0; + block_store & block; frontier_store & frontier; account_store & account; pending_store & pending; - - virtual nano::uint128_t block_balance (nano::transaction const &, nano::block_hash const &) = 0; - virtual nano::uint128_t block_balance_calculated (std::shared_ptr const &) const = 0; - virtual nano::epoch block_version (nano::transaction const &, nano::block_hash const &) = 0; - unchecked_store & unchecked; - online_weight_store & online_weight; - - virtual void version_put (nano::write_transaction const &, int) = 0; - virtual int version_get (nano::transaction const &) const = 0; - pruned_store & pruned; - peer_store & peer; - confirmation_height_store & confirmation_height; - - virtual void blocks_for_each_par (std::function, nano::store_iterator)> const & action_a) const = 0; - - virtual uint64_t block_account_height (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const = 0; - final_vote_store & final_vote; + version_store & version; virtual unsigned max_block_write_batch_num () const = 0; @@ -847,7 +869,7 @@ class block_store virtual std::string vendor_get () const = 0; }; -std::unique_ptr make_store (nano::logger_mt & logger, boost::filesystem::path const & path, bool open_read_only = false, bool add_db_postfix = false, nano::rocksdb_config const & rocksdb_config = nano::rocksdb_config{}, nano::txn_tracking_config const & txn_tracking_config_a = nano::txn_tracking_config{}, std::chrono::milliseconds block_processor_batch_max_time_a = std::chrono::milliseconds (5000), nano::lmdb_config const & lmdb_config_a = nano::lmdb_config{}, bool backup_before_upgrade = false); +std::unique_ptr make_store (nano::logger_mt & logger, boost::filesystem::path const & path, bool open_read_only = false, bool add_db_postfix = false, nano::rocksdb_config const & rocksdb_config = nano::rocksdb_config{}, nano::txn_tracking_config const & txn_tracking_config_a = nano::txn_tracking_config{}, std::chrono::milliseconds block_processor_batch_max_time_a = std::chrono::milliseconds (5000), nano::lmdb_config const & lmdb_config_a = nano::lmdb_config{}, bool backup_before_upgrade = false); } namespace std diff --git a/nano/secure/store/account_store_partial.hpp b/nano/secure/store/account_store_partial.hpp index cd285eaa77..696fbe8b9c 100644 --- a/nano/secure/store/account_store_partial.hpp +++ b/nano/secure/store/account_store_partial.hpp @@ -1,6 +1,6 @@ #pragma once -#include +#include namespace { @@ -11,39 +11,39 @@ void parallel_traversal (std::function namespace nano { template -class block_store_partial; +class store_partial; template -void release_assert_success (block_store_partial const & block_store, const int status); +void release_assert_success (store_partial const &, const int); template class account_store_partial : public account_store { private: - nano::block_store_partial & block_store; + nano::store_partial & store; - friend void release_assert_success (block_store_partial const & block_store, const int status); + friend void release_assert_success (store_partial const &, const int); public: - explicit account_store_partial (nano::block_store_partial & block_store_a) : - block_store (block_store_a){}; + explicit account_store_partial (nano::store_partial & store_a) : + store (store_a){}; void put (nano::write_transaction const & transaction_a, nano::account const & account_a, nano::account_info const & info_a) override { // Check we are still in sync with other tables nano::db_val info (info_a); - auto status = block_store.put (transaction_a, tables::accounts, account_a, info); - release_assert_success (block_store, status); + auto status = store.put (transaction_a, tables::accounts, account_a, info); + release_assert_success (store, status); } bool get (nano::transaction const & transaction_a, nano::account const & account_a, nano::account_info & info_a) override { nano::db_val value; nano::db_val account (account_a); - auto status1 (block_store.get (transaction_a, tables::accounts, account, value)); - release_assert (block_store.success (status1) || block_store.not_found (status1)); + auto status1 (store.get (transaction_a, tables::accounts, account, value)); + release_assert (store.success (status1) || store.not_found (status1)); bool result (true); - if (block_store.success (status1)) + if (store.success (status1)) { nano::bufferstream stream (reinterpret_cast (value.data ()), value.size ()); result = info_a.deserialize (stream); @@ -53,8 +53,8 @@ class account_store_partial : public account_store void del (nano::write_transaction const & transaction_a, nano::account const & account_a) override { - auto status = block_store.del (transaction_a, tables::accounts, account_a); - release_assert_success (block_store, status); + auto status = store.del (transaction_a, tables::accounts, account_a); + release_assert_success (store, status); } bool exists (nano::transaction const & transaction_a, nano::account const & account_a) override @@ -65,22 +65,22 @@ class account_store_partial : public account_store size_t count (nano::transaction const & transaction_a) override { - return block_store.count (transaction_a, tables::accounts); + return store.count (transaction_a, tables::accounts); } nano::store_iterator begin (nano::transaction const & transaction_a, nano::account const & account_a) const override { - return block_store.template make_iterator (transaction_a, tables::accounts, nano::db_val (account_a)); + return store.template make_iterator (transaction_a, tables::accounts, nano::db_val (account_a)); } nano::store_iterator begin (nano::transaction const & transaction_a) const override { - return block_store.template make_iterator (transaction_a, tables::accounts); + return store.template make_iterator (transaction_a, tables::accounts); } nano::store_iterator rbegin (nano::transaction const & transaction_a) const override { - return block_store.template make_iterator (transaction_a, tables::accounts, false); + return store.template make_iterator (transaction_a, tables::accounts, false); } nano::store_iterator end () const override @@ -92,7 +92,7 @@ class account_store_partial : public account_store { parallel_traversal ( [&action_a, this] (nano::uint256_t const & start, nano::uint256_t const & end, bool const is_last) { - auto transaction (this->block_store.tx_begin_read ()); + auto transaction (this->store.tx_begin_read ()); action_a (transaction, this->begin (transaction, start), !is_last ? this->begin (transaction, end) : this->end ()); }); } diff --git a/nano/secure/store/block_store_partial.hpp b/nano/secure/store/block_store_partial.hpp new file mode 100644 index 0000000000..e35ccb379a --- /dev/null +++ b/nano/secure/store/block_store_partial.hpp @@ -0,0 +1,313 @@ +#pragma once + +#include + +namespace +{ +template +void parallel_traversal (std::function const & action); +} + +namespace nano +{ +template +class store_partial; + +template +class block_predecessor_set; + +template +void release_assert_success (store_partial const &, const int); + +template +class block_store_partial : public block_store +{ +protected: + nano::store_partial & store; + + friend class nano::block_predecessor_set; + +public: + explicit block_store_partial (nano::store_partial & store_a) : + store (store_a){}; + + void put (nano::write_transaction const & transaction_a, nano::block_hash const & hash_a, nano::block const & block_a) override + { + debug_assert (block_a.sideband ().successor.is_zero () || exists (transaction_a, block_a.sideband ().successor)); + std::vector vector; + { + nano::vectorstream stream (vector); + nano::serialize_block (stream, block_a); + block_a.sideband ().serialize (stream, block_a.type ()); + } + raw_put (transaction_a, vector, hash_a); + nano::block_predecessor_set predecessor (transaction_a, *this); + block_a.visit (predecessor); + debug_assert (block_a.previous ().is_zero () || successor (transaction_a, block_a.previous ()) == hash_a); + } + + void raw_put (nano::write_transaction const & transaction_a, std::vector const & data, nano::block_hash const & hash_a) override + { + nano::db_val value{ data.size (), (void *)data.data () }; + auto status = store.put (transaction_a, tables::blocks, hash_a, value); + release_assert_success (store, status); + } + + nano::block_hash successor (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const override + { + auto value (block_raw_get (transaction_a, hash_a)); + nano::block_hash result; + if (value.size () != 0) + { + debug_assert (value.size () >= result.bytes.size ()); + auto type = block_type_from_raw (value.data ()); + nano::bufferstream stream (reinterpret_cast (value.data ()) + block_successor_offset (transaction_a, value.size (), type), result.bytes.size ()); + auto error (nano::try_read (stream, result.bytes)); + (void)error; + debug_assert (!error); + } + else + { + result.clear (); + } + return result; + } + + void successor_clear (nano::write_transaction const & transaction_a, nano::block_hash const & hash_a) override + { + auto value (block_raw_get (transaction_a, hash_a)); + debug_assert (value.size () != 0); + auto type = block_type_from_raw (value.data ()); + std::vector data (static_cast (value.data ()), static_cast (value.data ()) + value.size ()); + std::fill_n (data.begin () + block_successor_offset (transaction_a, value.size (), type), sizeof (nano::block_hash), uint8_t{ 0 }); + raw_put (transaction_a, data, hash_a); + } + + std::shared_ptr get (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const override + { + auto value (block_raw_get (transaction_a, hash_a)); + std::shared_ptr result; + if (value.size () != 0) + { + nano::bufferstream stream (reinterpret_cast (value.data ()), value.size ()); + nano::block_type type; + auto error (try_read (stream, type)); + release_assert (!error); + result = nano::deserialize_block (stream, type); + release_assert (result != nullptr); + nano::block_sideband sideband; + error = (sideband.deserialize (stream, type)); + release_assert (!error); + result->sideband_set (sideband); + } + return result; + } + + std::shared_ptr get_no_sideband (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const override + { + auto value (block_raw_get (transaction_a, hash_a)); + std::shared_ptr result; + if (value.size () != 0) + { + nano::bufferstream stream (reinterpret_cast (value.data ()), value.size ()); + result = nano::deserialize_block (stream); + debug_assert (result != nullptr); + } + return result; + } + + std::shared_ptr random (nano::transaction const & transaction_a) override + { + nano::block_hash hash; + nano::random_pool::generate_block (hash.bytes.data (), hash.bytes.size ()); + auto existing = store.template make_iterator> (transaction_a, tables::blocks, nano::db_val (hash)); + auto end (nano::store_iterator> (nullptr)); + if (existing == end) + { + existing = store.template make_iterator> (transaction_a, tables::blocks); + } + debug_assert (existing != end); + return existing->second; + } + + void del (nano::write_transaction const & transaction_a, nano::block_hash const & hash_a) override + { + auto status = store.del (transaction_a, tables::blocks, hash_a); + release_assert_success (store, status); + } + + bool exists (nano::transaction const & transaction_a, nano::block_hash const & hash_a) override + { + auto junk = block_raw_get (transaction_a, hash_a); + return junk.size () != 0; + } + + uint64_t count (nano::transaction const & transaction_a) override + { + return store.count (transaction_a, tables::blocks); + } + + nano::account account (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const override + { + auto block (get (transaction_a, hash_a)); + debug_assert (block != nullptr); + return account_calculated (*block); + } + + nano::account account_calculated (nano::block const & block_a) const override + { + debug_assert (block_a.has_sideband ()); + nano::account result (block_a.account ()); + if (result.is_zero ()) + { + result = block_a.sideband ().account; + } + debug_assert (!result.is_zero ()); + return result; + } + + nano::store_iterator begin (nano::transaction const & transaction_a) const override + { + return store.template make_iterator (transaction_a, tables::blocks); + } + + nano::store_iterator begin (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const override + { + return store.template make_iterator (transaction_a, tables::blocks, nano::db_val (hash_a)); + } + + nano::store_iterator end () const override + { + return nano::store_iterator (nullptr); + } + + nano::uint128_t balance (nano::transaction const & transaction_a, nano::block_hash const & hash_a) override + { + auto block (get (transaction_a, hash_a)); + release_assert (block); + nano::uint128_t result (balance_calculated (block)); + return result; + } + + nano::uint128_t balance_calculated (std::shared_ptr const & block_a) const override + { + nano::uint128_t result; + switch (block_a->type ()) + { + case nano::block_type::open: + case nano::block_type::receive: + case nano::block_type::change: + result = block_a->sideband ().balance.number (); + break; + case nano::block_type::send: + result = boost::polymorphic_downcast (block_a.get ())->hashables.balance.number (); + break; + case nano::block_type::state: + result = boost::polymorphic_downcast (block_a.get ())->hashables.balance.number (); + break; + case nano::block_type::invalid: + case nano::block_type::not_a_block: + release_assert (false); + break; + } + return result; + } + + nano::epoch version (nano::transaction const & transaction_a, nano::block_hash const & hash_a) override + { + auto block = get (transaction_a, hash_a); + if (block && block->type () == nano::block_type::state) + { + return block->sideband ().details.epoch; + } + + return nano::epoch::epoch_0; + } + + void for_each_par (std::function, nano::store_iterator)> const & action_a) const override + { + parallel_traversal ( + [&action_a, this] (nano::uint256_t const & start, nano::uint256_t const & end, bool const is_last) { + auto transaction (this->store.tx_begin_read ()); + action_a (transaction, this->begin (transaction, start), !is_last ? this->begin (transaction, end) : this->end ()); + }); + } + + // Converts a block hash to a block height + uint64_t account_height (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const override + { + auto block = get (transaction_a, hash_a); + return block->sideband ().height; + } + +protected: + nano::db_val block_raw_get (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const + { + nano::db_val result; + auto status = store.get (transaction_a, tables::blocks, hash_a, result); + release_assert (store.success (status) || store.not_found (status)); + return result; + } + + size_t block_successor_offset (nano::transaction const & transaction_a, size_t entry_size_a, nano::block_type type_a) const + { + return entry_size_a - nano::block_sideband::size (type_a); + } + + static nano::block_type block_type_from_raw (void * data_a) + { + // The block type is the first byte + return static_cast ((reinterpret_cast (data_a))[0]); + } +}; + +/** + * Fill in our predecessors + */ +template +class block_predecessor_set : public nano::block_visitor +{ +public: + block_predecessor_set (nano::write_transaction const & transaction_a, nano::block_store_partial & block_store_a) : + transaction (transaction_a), + block_store (block_store_a) + { + } + virtual ~block_predecessor_set () = default; + void fill_value (nano::block const & block_a) + { + auto hash (block_a.hash ()); + auto value (block_store.block_raw_get (transaction, block_a.previous ())); + debug_assert (value.size () != 0); + auto type = block_store.block_type_from_raw (value.data ()); + std::vector data (static_cast (value.data ()), static_cast (value.data ()) + value.size ()); + std::copy (hash.bytes.begin (), hash.bytes.end (), data.begin () + block_store.block_successor_offset (transaction, value.size (), type)); + block_store.raw_put (transaction, data, block_a.previous ()); + } + void send_block (nano::send_block const & block_a) override + { + fill_value (block_a); + } + void receive_block (nano::receive_block const & block_a) override + { + fill_value (block_a); + } + void open_block (nano::open_block const & block_a) override + { + // Open blocks don't have a predecessor + } + void change_block (nano::change_block const & block_a) override + { + fill_value (block_a); + } + void state_block (nano::state_block const & block_a) override + { + if (!block_a.previous ().is_zero ()) + { + fill_value (block_a); + } + } + nano::write_transaction const & transaction; + nano::block_store_partial & block_store; +}; +} diff --git a/nano/secure/store/confirmation_height_store_partial.hpp b/nano/secure/store/confirmation_height_store_partial.hpp index d9df74065b..488d96d8c6 100644 --- a/nano/secure/store/confirmation_height_store_partial.hpp +++ b/nano/secure/store/confirmation_height_store_partial.hpp @@ -1,6 +1,6 @@ #pragma once -#include +#include namespace { @@ -11,37 +11,37 @@ void parallel_traversal (std::function namespace nano { template -class block_store_partial; +class store_partial; template -void release_assert_success (block_store_partial const & block_store, const int status); +void release_assert_success (store_partial const &, const int); template class confirmation_height_store_partial : public confirmation_height_store { private: - nano::block_store_partial & block_store; + nano::store_partial & store; - friend void release_assert_success (block_store_partial const & block_store, const int status); + friend void release_assert_success (store_partial const &, const int); public: - explicit confirmation_height_store_partial (nano::block_store_partial & block_store_a) : - block_store (block_store_a){}; + explicit confirmation_height_store_partial (nano::store_partial & store_a) : + store (store_a){}; void put (nano::write_transaction const & transaction_a, nano::account const & account_a, nano::confirmation_height_info const & confirmation_height_info_a) override { nano::db_val confirmation_height_info (confirmation_height_info_a); - auto status = block_store.put (transaction_a, tables::confirmation_height, account_a, confirmation_height_info); - release_assert_success (block_store, status); + auto status = store.put (transaction_a, tables::confirmation_height, account_a, confirmation_height_info); + release_assert_success (store, status); } bool get (nano::transaction const & transaction_a, nano::account const & account_a, nano::confirmation_height_info & confirmation_height_info_a) override { nano::db_val value; - auto status = block_store.get (transaction_a, tables::confirmation_height, nano::db_val (account_a), value); - release_assert (block_store.success (status) || block_store.not_found (status)); + auto status = store.get (transaction_a, tables::confirmation_height, nano::db_val (account_a), value); + release_assert (store.success (status) || store.not_found (status)); bool result (true); - if (block_store.success (status)) + if (store.success (status)) { nano::bufferstream stream (reinterpret_cast (value.data ()), value.size ()); result = confirmation_height_info_a.deserialize (stream); @@ -57,18 +57,18 @@ class confirmation_height_store_partial : public confirmation_height_store bool exists (nano::transaction const & transaction_a, nano::account const & account_a) const override { - return block_store.exists (transaction_a, tables::confirmation_height, nano::db_val (account_a)); + return store.exists (transaction_a, tables::confirmation_height, nano::db_val (account_a)); } void del (nano::write_transaction const & transaction_a, nano::account const & account_a) override { - auto status (block_store.del (transaction_a, tables::confirmation_height, nano::db_val (account_a))); - release_assert_success (block_store, status); + auto status (store.del (transaction_a, tables::confirmation_height, nano::db_val (account_a))); + release_assert_success (store, status); } uint64_t count (nano::transaction const & transaction_a) override { - return block_store.count (transaction_a, tables::confirmation_height); + return store.count (transaction_a, tables::confirmation_height); } void clear (nano::write_transaction const & transaction_a, nano::account const & account_a) override @@ -78,17 +78,17 @@ class confirmation_height_store_partial : public confirmation_height_store void clear (nano::write_transaction const & transaction_a) override { - block_store.drop (transaction_a, nano::tables::confirmation_height); + store.drop (transaction_a, nano::tables::confirmation_height); } nano::store_iterator begin (nano::transaction const & transaction_a, nano::account const & account_a) const override { - return block_store.template make_iterator (transaction_a, tables::confirmation_height, nano::db_val (account_a)); + return store.template make_iterator (transaction_a, tables::confirmation_height, nano::db_val (account_a)); } nano::store_iterator begin (nano::transaction const & transaction_a) const override { - return block_store.template make_iterator (transaction_a, tables::confirmation_height); + return store.template make_iterator (transaction_a, tables::confirmation_height); } nano::store_iterator end () const override @@ -100,7 +100,7 @@ class confirmation_height_store_partial : public confirmation_height_store { parallel_traversal ( [&action_a, this] (nano::uint256_t const & start, nano::uint256_t const & end, bool const is_last) { - auto transaction (this->block_store.tx_begin_read ()); + auto transaction (this->store.tx_begin_read ()); action_a (transaction, this->begin (transaction, start), !is_last ? this->begin (transaction, end) : this->end ()); }); } diff --git a/nano/secure/store/final_vote_store_partial.hpp b/nano/secure/store/final_vote_store_partial.hpp index e02c17b0d5..ecef1ca656 100644 --- a/nano/secure/store/final_vote_store_partial.hpp +++ b/nano/secure/store/final_vote_store_partial.hpp @@ -1,6 +1,6 @@ #pragma once -#include +#include namespace { @@ -11,37 +11,37 @@ void parallel_traversal (std::function namespace nano { template -class block_store_partial; +class store_partial; template -void release_assert_success (block_store_partial const & block_store, const int status); +void release_assert_success (store_partial const & store, const int status); template class final_vote_store_partial : public final_vote_store { private: - nano::block_store_partial & block_store; + nano::store_partial & store; - friend void release_assert_success (block_store_partial const & block_store, const int status); + friend void release_assert_success (store_partial const &, const int); public: - explicit final_vote_store_partial (nano::block_store_partial & block_store_a) : - block_store (block_store_a){}; + explicit final_vote_store_partial (nano::store_partial & store_a) : + store (store_a){}; bool put (nano::write_transaction const & transaction_a, nano::qualified_root const & root_a, nano::block_hash const & hash_a) override { nano::db_val value; - auto status = block_store.get (transaction_a, tables::final_votes, nano::db_val (root_a), value); - release_assert (block_store.success (status) || block_store.not_found (status)); + auto status = store.get (transaction_a, tables::final_votes, nano::db_val (root_a), value); + release_assert (store.success (status) || store.not_found (status)); bool result (true); - if (block_store.success (status)) + if (store.success (status)) { result = static_cast (value) == hash_a; } else { - status = block_store.put (transaction_a, tables::final_votes, root_a, hash_a); - release_assert_success (block_store, status); + status = store.put (transaction_a, tables::final_votes, root_a, hash_a); + release_assert_success (store, status); } return result; } @@ -67,14 +67,14 @@ class final_vote_store_partial : public final_vote_store for (auto & final_vote_qualified_root : final_vote_qualified_roots) { - auto status (block_store.del (transaction_a, tables::final_votes, nano::db_val (final_vote_qualified_root))); - release_assert_success (block_store, status); + auto status (store.del (transaction_a, tables::final_votes, nano::db_val (final_vote_qualified_root))); + release_assert_success (store, status); } } size_t count (nano::transaction const & transaction_a) const override { - return block_store.count (transaction_a, tables::final_votes); + return store.count (transaction_a, tables::final_votes); } void clear (nano::write_transaction const & transaction_a, nano::root const & root_a) override @@ -84,17 +84,17 @@ class final_vote_store_partial : public final_vote_store void clear (nano::write_transaction const & transaction_a) override { - block_store.drop (transaction_a, nano::tables::final_votes); + store.drop (transaction_a, nano::tables::final_votes); } nano::store_iterator begin (nano::transaction const & transaction_a, nano::qualified_root const & root_a) const override { - return block_store.template make_iterator (transaction_a, tables::final_votes, nano::db_val (root_a)); + return store.template make_iterator (transaction_a, tables::final_votes, nano::db_val (root_a)); } nano::store_iterator begin (nano::transaction const & transaction_a) const override { - return block_store.template make_iterator (transaction_a, tables::final_votes); + return store.template make_iterator (transaction_a, tables::final_votes); } nano::store_iterator end () const override @@ -106,7 +106,7 @@ class final_vote_store_partial : public final_vote_store { parallel_traversal ( [&action_a, this] (nano::uint512_t const & start, nano::uint512_t const & end, bool const is_last) { - auto transaction (this->block_store.tx_begin_read ()); + auto transaction (this->store.tx_begin_read ()); action_a (transaction, this->begin (transaction, start), !is_last ? this->begin (transaction, end) : this->end ()); }); } diff --git a/nano/secure/store/frontier_store_partial.hpp b/nano/secure/store/frontier_store_partial.hpp index 7b8f0543b4..9bec58444c 100644 --- a/nano/secure/store/frontier_store_partial.hpp +++ b/nano/secure/store/frontier_store_partial.hpp @@ -1,6 +1,6 @@ #pragma once -#include +#include namespace { @@ -11,37 +11,37 @@ void parallel_traversal (std::function namespace nano { template -class block_store_partial; +class store_partial; template -void release_assert_success (block_store_partial const & block_store, const int status); +void release_assert_success (store_partial const & store, const int status); template class frontier_store_partial : public frontier_store { private: - nano::block_store_partial & block_store; + nano::store_partial & store; - friend void release_assert_success (block_store_partial const & block_store, const int status); + friend void release_assert_success (store_partial const &, const int); public: - explicit frontier_store_partial (nano::block_store_partial & block_store_a) : - block_store (block_store_a){}; + explicit frontier_store_partial (nano::store_partial & store_a) : + store (store_a){}; void put (nano::write_transaction const & transaction_a, nano::block_hash const & block_a, nano::account const & account_a) override { nano::db_val account (account_a); - auto status (block_store.put (transaction_a, tables::frontiers, block_a, account)); - release_assert_success (block_store, status); + auto status (store.put (transaction_a, tables::frontiers, block_a, account)); + release_assert_success (store, status); } nano::account get (nano::transaction const & transaction_a, nano::block_hash const & block_a) const override { nano::db_val value; - auto status (block_store.get (transaction_a, tables::frontiers, nano::db_val (block_a), value)); - release_assert (block_store.success (status) || block_store.not_found (status)); + auto status (store.get (transaction_a, tables::frontiers, nano::db_val (block_a), value)); + release_assert (store.success (status) || store.not_found (status)); nano::account result (0); - if (block_store.success (status)) + if (store.success (status)) { result = static_cast (value); } @@ -50,18 +50,18 @@ class frontier_store_partial : public frontier_store void del (nano::write_transaction const & transaction_a, nano::block_hash const & block_a) override { - auto status (block_store.del (transaction_a, tables::frontiers, block_a)); - release_assert_success (block_store, status); + auto status (store.del (transaction_a, tables::frontiers, block_a)); + release_assert_success (store, status); } nano::store_iterator begin (nano::transaction const & transaction_a) const override { - return block_store.template make_iterator (transaction_a, tables::frontiers); + return store.template make_iterator (transaction_a, tables::frontiers); } nano::store_iterator begin (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const override { - return block_store.template make_iterator (transaction_a, tables::frontiers, nano::db_val (hash_a)); + return store.template make_iterator (transaction_a, tables::frontiers, nano::db_val (hash_a)); } nano::store_iterator end () const override @@ -73,7 +73,7 @@ class frontier_store_partial : public frontier_store { parallel_traversal ( [&action_a, this] (nano::uint256_t const & start, nano::uint256_t const & end, bool const is_last) { - auto transaction (this->block_store.tx_begin_read ()); + auto transaction (this->store.tx_begin_read ()); action_a (transaction, this->begin (transaction, start), !is_last ? this->begin (transaction, end) : this->end ()); }); } diff --git a/nano/secure/store/online_weight_partial.hpp b/nano/secure/store/online_weight_partial.hpp index 0e2895ba4c..e8c84e76d5 100644 --- a/nano/secure/store/online_weight_partial.hpp +++ b/nano/secure/store/online_weight_partial.hpp @@ -1,48 +1,48 @@ #pragma once -#include +#include namespace nano { template -class block_store_partial; +class store_partial; template -void release_assert_success (block_store_partial const & block_store, const int status); +void release_assert_success (store_partial const &, const int); template class online_weight_store_partial : public online_weight_store { private: - nano::block_store_partial & block_store; + nano::store_partial & store; - friend void release_assert_success (block_store_partial const & block_store, const int status); + friend void release_assert_success (store_partial const &, const int); public: - explicit online_weight_store_partial (nano::block_store_partial & block_store_a) : - block_store (block_store_a){}; + explicit online_weight_store_partial (nano::store_partial & store_a) : + store (store_a){}; void put (nano::write_transaction const & transaction_a, uint64_t time_a, nano::amount const & amount_a) override { nano::db_val value (amount_a); - auto status (block_store.put (transaction_a, tables::online_weight, time_a, value)); - release_assert_success (block_store, status); + auto status (store.put (transaction_a, tables::online_weight, time_a, value)); + release_assert_success (store, status); } void del (nano::write_transaction const & transaction_a, uint64_t time_a) override { - auto status (block_store.del (transaction_a, tables::online_weight, time_a)); - release_assert_success (block_store, status); + auto status (store.del (transaction_a, tables::online_weight, time_a)); + release_assert_success (store, status); } nano::store_iterator begin (nano::transaction const & transaction_a) const override { - return block_store.template make_iterator (transaction_a, tables::online_weight); + return store.template make_iterator (transaction_a, tables::online_weight); } nano::store_iterator rbegin (nano::transaction const & transaction_a) const override { - return block_store.template make_iterator (transaction_a, tables::online_weight, false); + return store.template make_iterator (transaction_a, tables::online_weight, false); } nano::store_iterator end () const override @@ -52,13 +52,13 @@ class online_weight_store_partial : public online_weight_store size_t count (nano::transaction const & transaction_a) const override { - return block_store.count (transaction_a, tables::online_weight); + return store.count (transaction_a, tables::online_weight); } void clear (nano::write_transaction const & transaction_a) override { - auto status (block_store.drop (transaction_a, tables::online_weight)); - release_assert_success (block_store, status); + auto status (store.drop (transaction_a, tables::online_weight)); + release_assert_success (store, status); } }; diff --git a/nano/secure/store/peer_store_partial.hpp b/nano/secure/store/peer_store_partial.hpp index f17c1a9791..ec0407977e 100644 --- a/nano/secure/store/peer_store_partial.hpp +++ b/nano/secure/store/peer_store_partial.hpp @@ -1,6 +1,6 @@ #pragma once -#include +#include namespace { @@ -11,54 +11,54 @@ void parallel_traversal (std::function namespace nano { template -class block_store_partial; +class store_partial; template -void release_assert_success (block_store_partial const & block_store, const int status); +void release_assert_success (store_partial const &, const int); template class peer_store_partial : public peer_store { private: - nano::block_store_partial & block_store; + nano::store_partial & store; - friend void release_assert_success (block_store_partial const & block_store, const int status); + friend void release_assert_success (store_partial const &, const int); public: - explicit peer_store_partial (nano::block_store_partial & block_store_a) : - block_store (block_store_a){}; + explicit peer_store_partial (nano::store_partial & store_a) : + store (store_a){}; void put (nano::write_transaction const & transaction_a, nano::endpoint_key const & endpoint_a) override { - auto status = block_store.put_key (transaction_a, tables::peers, endpoint_a); - release_assert_success (block_store, status); + auto status = store.put_key (transaction_a, tables::peers, endpoint_a); + release_assert_success (store, status); } void del (nano::write_transaction const & transaction_a, nano::endpoint_key const & endpoint_a) override { - auto status (block_store.del (transaction_a, tables::peers, endpoint_a)); - release_assert_success (block_store, status); + auto status (store.del (transaction_a, tables::peers, endpoint_a)); + release_assert_success (store, status); } bool exists (nano::transaction const & transaction_a, nano::endpoint_key const & endpoint_a) const override { - return block_store.exists (transaction_a, tables::peers, nano::db_val (endpoint_a)); + return store.exists (transaction_a, tables::peers, nano::db_val (endpoint_a)); } size_t count (nano::transaction const & transaction_a) const override { - return block_store.count (transaction_a, tables::peers); + return store.count (transaction_a, tables::peers); } void clear (nano::write_transaction const & transaction_a) override { - auto status = block_store.drop (transaction_a, tables::peers); - release_assert_success (block_store, status); + auto status = store.drop (transaction_a, tables::peers); + release_assert_success (store, status); } nano::store_iterator begin (nano::transaction const & transaction_a) const override { - return block_store.template make_iterator (transaction_a, tables::peers); + return store.template make_iterator (transaction_a, tables::peers); } nano::store_iterator end () const override diff --git a/nano/secure/store/pending_store_partial.hpp b/nano/secure/store/pending_store_partial.hpp index bfe1502cc1..85489dce32 100644 --- a/nano/secure/store/pending_store_partial.hpp +++ b/nano/secure/store/pending_store_partial.hpp @@ -1,6 +1,6 @@ #pragma once -#include +#include namespace { @@ -11,44 +11,44 @@ void parallel_traversal (std::function namespace nano { template -class block_store_partial; +class store_partial; template -void release_assert_success (block_store_partial const & block_store, const int status); +void release_assert_success (store_partial const &, const int); template class pending_store_partial : public pending_store { private: - nano::block_store_partial & block_store; + nano::store_partial & store; - friend void release_assert_success (block_store_partial const & block_store, const int status); + friend void release_assert_success (store_partial const &, const int); public: - explicit pending_store_partial (nano::block_store_partial & block_store_a) : - block_store (block_store_a){}; + explicit pending_store_partial (nano::store_partial & store_a) : + store (store_a){}; void put (nano::write_transaction const & transaction_a, nano::pending_key const & key_a, nano::pending_info const & pending_info_a) override { nano::db_val pending (pending_info_a); - auto status = block_store.put (transaction_a, tables::pending, key_a, pending); - release_assert_success (block_store, status); + auto status = store.put (transaction_a, tables::pending, key_a, pending); + release_assert_success (store, status); } void del (nano::write_transaction const & transaction_a, nano::pending_key const & key_a) override { - auto status = block_store.del (transaction_a, tables::pending, key_a); - release_assert_success (block_store, status); + auto status = store.del (transaction_a, tables::pending, key_a); + release_assert_success (store, status); } bool get (nano::transaction const & transaction_a, nano::pending_key const & key_a, nano::pending_info & pending_a) override { nano::db_val value; nano::db_val key (key_a); - auto status1 = block_store.get (transaction_a, tables::pending, key, value); - release_assert (block_store.success (status1) || block_store.not_found (status1)); + auto status1 = store.get (transaction_a, tables::pending, key, value); + release_assert (store.success (status1) || store.not_found (status1)); bool result (true); - if (block_store.success (status1)) + if (store.success (status1)) { nano::bufferstream stream (reinterpret_cast (value.data ()), value.size ()); result = pending_a.deserialize (stream); @@ -70,12 +70,12 @@ class pending_store_partial : public pending_store nano::store_iterator begin (nano::transaction const & transaction_a, nano::pending_key const & key_a) const override { - return block_store.template make_iterator (transaction_a, tables::pending, nano::db_val (key_a)); + return store.template make_iterator (transaction_a, tables::pending, nano::db_val (key_a)); } nano::store_iterator begin (nano::transaction const & transaction_a) const override { - return block_store.template make_iterator (transaction_a, tables::pending); + return store.template make_iterator (transaction_a, tables::pending); } nano::store_iterator end () const override @@ -91,7 +91,7 @@ class pending_store_partial : public pending_store nano::uint512_union union_end (end); nano::pending_key key_start (union_start.uint256s[0].number (), union_start.uint256s[1].number ()); nano::pending_key key_end (union_end.uint256s[0].number (), union_end.uint256s[1].number ()); - auto transaction (this->block_store.tx_begin_read ()); + auto transaction (this->store.tx_begin_read ()); action_a (transaction, this->begin (transaction, key_start), !is_last ? this->begin (transaction, key_end) : this->end ()); }); } diff --git a/nano/secure/store/pruned_store_partial.hpp b/nano/secure/store/pruned_store_partial.hpp index 910a6c756b..eedd017b29 100644 --- a/nano/secure/store/pruned_store_partial.hpp +++ b/nano/secure/store/pruned_store_partial.hpp @@ -1,6 +1,6 @@ #pragma once -#include +#include namespace { @@ -11,72 +11,72 @@ void parallel_traversal (std::function namespace nano { template -class block_store_partial; +class store_partial; template -void release_assert_success (block_store_partial const & block_store, const int status); +void release_assert_success (store_partial const &, const int); template class pruned_store_partial : public pruned_store { private: - nano::block_store_partial & block_store; + nano::store_partial & store; - friend void release_assert_success (block_store_partial const & block_store, const int status); + friend void release_assert_success (store_partial const &, const int); public: - explicit pruned_store_partial (nano::block_store_partial & block_store_a) : - block_store (block_store_a){}; + explicit pruned_store_partial (nano::store_partial & store_a) : + store (store_a){}; void put (nano::write_transaction const & transaction_a, nano::block_hash const & hash_a) override { - auto status = block_store.put_key (transaction_a, tables::pruned, hash_a); - release_assert_success (block_store, status); + auto status = store.put_key (transaction_a, tables::pruned, hash_a); + release_assert_success (store, status); } void del (nano::write_transaction const & transaction_a, nano::block_hash const & hash_a) override { - auto status = block_store.del (transaction_a, tables::pruned, hash_a); - release_assert_success (block_store, status); + auto status = store.del (transaction_a, tables::pruned, hash_a); + release_assert_success (store, status); } bool exists (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const override { - return block_store.exists (transaction_a, tables::pruned, nano::db_val (hash_a)); + return store.exists (transaction_a, tables::pruned, nano::db_val (hash_a)); } nano::block_hash random (nano::transaction const & transaction_a) override { nano::block_hash random_hash; nano::random_pool::generate_block (random_hash.bytes.data (), random_hash.bytes.size ()); - auto existing = block_store.template make_iterator> (transaction_a, tables::pruned, nano::db_val (random_hash)); + auto existing = store.template make_iterator> (transaction_a, tables::pruned, nano::db_val (random_hash)); auto end (nano::store_iterator> (nullptr)); if (existing == end) { - existing = block_store.template make_iterator> (transaction_a, tables::pruned); + existing = store.template make_iterator> (transaction_a, tables::pruned); } return existing != end ? existing->first : 0; } size_t count (nano::transaction const & transaction_a) const override { - return block_store.count (transaction_a, tables::pruned); + return store.count (transaction_a, tables::pruned); } void clear (nano::write_transaction const & transaction_a) override { - auto status = block_store.drop (transaction_a, tables::pruned); - release_assert_success (block_store, status); + auto status = store.drop (transaction_a, tables::pruned); + release_assert_success (store, status); } nano::store_iterator begin (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const override { - return block_store.template make_iterator (transaction_a, tables::pruned, nano::db_val (hash_a)); + return store.template make_iterator (transaction_a, tables::pruned, nano::db_val (hash_a)); } nano::store_iterator begin (nano::transaction const & transaction_a) const override { - return block_store.template make_iterator (transaction_a, tables::pruned); + return store.template make_iterator (transaction_a, tables::pruned); } nano::store_iterator end () const override @@ -88,10 +88,10 @@ class pruned_store_partial : public pruned_store { parallel_traversal ( [&action_a, this] (nano::uint256_t const & start, nano::uint256_t const & end, bool const is_last) { - auto transaction (this->block_store.tx_begin_read ()); + auto transaction (this->store.tx_begin_read ()); action_a (transaction, this->begin (transaction, start), !is_last ? this->begin (transaction, end) : this->end ()); }); } }; -} \ No newline at end of file +} diff --git a/nano/secure/store/unchecked_store_partial.hpp b/nano/secure/store/unchecked_store_partial.hpp index 86dd3247e3..d1f20bdfbd 100644 --- a/nano/secure/store/unchecked_store_partial.hpp +++ b/nano/secure/store/unchecked_store_partial.hpp @@ -1,6 +1,6 @@ #pragma once -#include +#include namespace { @@ -11,34 +11,34 @@ void parallel_traversal (std::function namespace nano { template -class block_store_partial; +class store_partial; template -void release_assert_success (block_store_partial const & block_store, const int status); +void release_assert_success (store_partial const &, const int); template class unchecked_store_partial : public unchecked_store { private: - nano::block_store_partial & block_store; + nano::store_partial & store; - friend void release_assert_success (block_store_partial const & block_store, const int status); + friend void release_assert_success (store_partial const &, const int); public: - unchecked_store_partial (nano::block_store_partial & block_store_a) : - block_store (block_store_a){}; + unchecked_store_partial (nano::store_partial & store_a) : + store (store_a){}; void clear (nano::write_transaction const & transaction_a) override { - auto status = block_store.drop (transaction_a, tables::unchecked); - release_assert_success (block_store, status); + auto status = store.drop (transaction_a, tables::unchecked); + release_assert_success (store, status); } void put (nano::write_transaction const & transaction_a, nano::unchecked_key const & key_a, nano::unchecked_info const & info_a) override { nano::db_val info (info_a); - auto status (block_store.put (transaction_a, tables::unchecked, key_a, info)); - release_assert_success (block_store, status); + auto status (store.put (transaction_a, tables::unchecked, key_a, info)); + release_assert_success (store, status); } void put (nano::write_transaction const & transaction_a, nano::block_hash const & hash_a, std::shared_ptr const & block_a) override @@ -51,15 +51,15 @@ class unchecked_store_partial : public unchecked_store bool exists (nano::transaction const & transaction_a, nano::unchecked_key const & unchecked_key_a) override { nano::db_val value; - auto status (block_store.get (transaction_a, tables::unchecked, nano::db_val (unchecked_key_a), value)); - release_assert (block_store.success (status) || block_store.not_found (status)); - return (block_store.success (status)); + auto status (store.get (transaction_a, tables::unchecked, nano::db_val (unchecked_key_a), value)); + release_assert (store.success (status) || store.not_found (status)); + return (store.success (status)); } void del (nano::write_transaction const & transaction_a, nano::unchecked_key const & key_a) override { - auto status (block_store.del (transaction_a, tables::unchecked, key_a)); - release_assert_success (block_store, status); + auto status (store.del (transaction_a, tables::unchecked, key_a)); + release_assert_success (store, status); } nano::store_iterator end () const override @@ -69,17 +69,17 @@ class unchecked_store_partial : public unchecked_store nano::store_iterator begin (nano::transaction const & transaction_a) const override { - return block_store.template make_iterator (transaction_a, tables::unchecked); + return store.template make_iterator (transaction_a, tables::unchecked); } nano::store_iterator begin (nano::transaction const & transaction_a, nano::unchecked_key const & key_a) const override { - return block_store.template make_iterator (transaction_a, tables::unchecked, nano::db_val (key_a)); + return store.template make_iterator (transaction_a, tables::unchecked, nano::db_val (key_a)); } size_t count (nano::transaction const & transaction_a) override { - return block_store.count (transaction_a, tables::unchecked); + return store.count (transaction_a, tables::unchecked); } void for_each_par (std::function, nano::store_iterator)> const & action_a) const override @@ -88,7 +88,7 @@ class unchecked_store_partial : public unchecked_store [&action_a, this] (nano::uint512_t const & start, nano::uint512_t const & end, bool const is_last) { nano::unchecked_key key_start (start); nano::unchecked_key key_end (end); - auto transaction (this->block_store.tx_begin_read ()); + auto transaction (this->store.tx_begin_read ()); action_a (transaction, this->begin (transaction, key_start), !is_last ? this->begin (transaction, key_end) : this->end ()); }); } diff --git a/nano/secure/store/version_store_partial.hpp b/nano/secure/store/version_store_partial.hpp new file mode 100644 index 0000000000..a6f8384d48 --- /dev/null +++ b/nano/secure/store/version_store_partial.hpp @@ -0,0 +1,47 @@ +#pragma once + +#include + +namespace nano +{ +template +class store_partial; + +template +void release_assert_success (store_partial const &, const int); + +template +class version_store_partial : public version_store +{ +protected: + nano::store_partial & store; + +public: + explicit version_store_partial (nano::store_partial & store_a) : + store (store_a){}; + + void put (nano::write_transaction const & transaction_a, int version_a) override + { + nano::uint256_union version_key (1); + nano::uint256_union version_value (version_a); + auto status (store.put (transaction_a, tables::meta, nano::db_val (version_key), nano::db_val (version_value))); + release_assert_success (store, status); + } + + int get (nano::transaction const & transaction_a) const override + { + nano::uint256_union version_key (1); + nano::db_val data; + auto status = store.get (transaction_a, tables::meta, nano::db_val (version_key), data); + int result (store.minimum_version); + if (store.success (status)) + { + nano::uint256_union version_value (data); + debug_assert (version_value.qwords[2] == 0 && version_value.qwords[1] == 0 && version_value.qwords[0] == 0); + result = version_value.number ().convert_to (); + } + return result; + } +}; + +} diff --git a/nano/secure/store_partial.hpp b/nano/secure/store_partial.hpp new file mode 100644 index 0000000000..6f7388ed7d --- /dev/null +++ b/nano/secure/store_partial.hpp @@ -0,0 +1,217 @@ +#pragma once + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include + +class store_partial; +namespace +{ +template +void parallel_traversal (std::function const & action); +} + +namespace nano +{ +template +class block_predecessor_set; + +template +void release_assert_success (store_partial const & store, const int status) +{ + if (!store.success (status)) + { + release_assert (false, store.error_string (status)); + } +} + +template +class account_store_partial; + +template +class unchecked_store_partial; + +template +class block_store_partial; + +/** This base class implements the store interface functions which have DB agnostic functionality. It also maps all the store classes. */ +template +class store_partial : public store +{ + friend void release_assert_success (store_partial const &, const int); + friend class nano::block_store_partial; + friend class nano::frontier_store_partial; + friend class nano::account_store_partial; + friend class nano::pending_store_partial; + friend class nano::unchecked_store_partial; + friend class nano::online_weight_store_partial; + friend class nano::pruned_store_partial; + friend class nano::peer_store_partial; + friend class nano::confirmation_height_store_partial; + friend class nano::final_vote_store_partial; + friend class nano::version_store_partial; + +public: + // clang-format off + store_partial ( + nano::block_store_partial & block_store_partial_a, + nano::frontier_store_partial & frontier_store_partial_a, + nano::account_store_partial & account_store_partial_a, + nano::pending_store_partial & pending_store_partial_a, + nano::unchecked_store_partial & unchecked_store_partial_a, + nano::online_weight_store_partial & online_weight_store_partial_a, + nano::pruned_store_partial & pruned_store_partial_a, + nano::peer_store_partial & peer_store_partial_a, + nano::confirmation_height_store_partial & confirmation_height_store_partial_a, + nano::final_vote_store_partial & final_vote_store_partial_a, + nano::version_store_partial & version_store_partial_a) : + store{ + block_store_partial_a, + frontier_store_partial_a, + account_store_partial_a, + pending_store_partial_a, + unchecked_store_partial_a, + online_weight_store_partial_a, + pruned_store_partial_a, + peer_store_partial_a, + confirmation_height_store_partial_a, + final_vote_store_partial_a, + version_store_partial_a + } + {} + // clang-format on + + /** + * If using a different store version than the latest then you may need + * to modify some of the objects in the store to be appropriate for the version before an upgrade. + */ + void initialize (nano::write_transaction const & transaction_a, nano::genesis const & genesis_a, nano::ledger_cache & ledger_cache_a) override + { + auto hash_l (genesis_a.hash ()); + debug_assert (account.begin (transaction_a) == account.end ()); + genesis_a.open->sideband_set (nano::block_sideband (network_params.ledger.genesis_account, 0, network_params.ledger.genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); + block.put (transaction_a, hash_l, *genesis_a.open); + ++ledger_cache_a.block_count; + confirmation_height.put (transaction_a, network_params.ledger.genesis_account, nano::confirmation_height_info{ 1, genesis_a.hash () }); + ++ledger_cache_a.cemented_count; + ledger_cache_a.final_votes_confirmation_canary = (network_params.ledger.final_votes_canary_account == network_params.ledger.genesis_account && 1 >= network_params.ledger.final_votes_canary_height); + account.put (transaction_a, network_params.ledger.genesis_account, { hash_l, network_params.ledger.genesis_account, genesis_a.open->hash (), std::numeric_limits::max (), nano::seconds_since_epoch (), 1, nano::epoch::epoch_0 }); + ++ledger_cache_a.account_count; + ledger_cache_a.rep_weights.representation_put (network_params.ledger.genesis_account, std::numeric_limits::max ()); + frontier.put (transaction_a, hash_l, network_params.ledger.genesis_account); + } + + bool root_exists (nano::transaction const & transaction_a, nano::root const & root_a) override + { + return block.exists (transaction_a, root_a.as_block_hash ()) || account.exists (transaction_a, root_a.as_account ()); + } + + bool exists (nano::transaction const & transaction_a, tables table_a, nano::db_val const & key_a) const + { + return static_cast (*this).exists (transaction_a, table_a, key_a); + } + + int const minimum_version{ 14 }; + +protected: + nano::network_params network_params; + int const version_number{ 21 }; + + template + nano::store_iterator make_iterator (nano::transaction const & transaction_a, tables table_a, bool const direction_asc = true) const + { + return static_cast (*this).template make_iterator (transaction_a, table_a, direction_asc); + } + + template + nano::store_iterator make_iterator (nano::transaction const & transaction_a, tables table_a, nano::db_val const & key) const + { + return static_cast (*this).template make_iterator (transaction_a, table_a, key); + } + + uint64_t count (nano::transaction const & transaction_a, std::initializer_list dbs_a) const + { + uint64_t total_count = 0; + for (auto db : dbs_a) + { + total_count += count (transaction_a, db); + } + return total_count; + } + + int get (nano::transaction const & transaction_a, tables table_a, nano::db_val const & key_a, nano::db_val & value_a) const + { + return static_cast (*this).get (transaction_a, table_a, key_a, value_a); + } + + int put (nano::write_transaction const & transaction_a, tables table_a, nano::db_val const & key_a, nano::db_val const & value_a) + { + return static_cast (*this).put (transaction_a, table_a, key_a, value_a); + } + + // Put only key without value + int put_key (nano::write_transaction const & transaction_a, tables table_a, nano::db_val const & key_a) + { + return this->put (transaction_a, table_a, key_a, nano::db_val{ nullptr }); + } + + int del (nano::write_transaction const & transaction_a, tables table_a, nano::db_val const & key_a) + { + return static_cast (*this).del (transaction_a, table_a, key_a); + } + + virtual uint64_t count (nano::transaction const & transaction_a, tables table_a) const = 0; + virtual int drop (nano::write_transaction const & transaction_a, tables table_a) = 0; + virtual bool not_found (int status) const = 0; + virtual bool success (int status) const = 0; + virtual int status_code_not_found () const = 0; + virtual std::string error_string (int status) const = 0; +}; +} + +namespace +{ +template +void parallel_traversal (std::function const & action) +{ + // Between 10 and 40 threads, scales well even in low power systems as long as actions are I/O bound + unsigned const thread_count = std::max (10u, std::min (40u, 10 * std::thread::hardware_concurrency ())); + T const value_max{ std::numeric_limits::max () }; + T const split = value_max / thread_count; + std::vector threads; + threads.reserve (thread_count); + for (unsigned thread (0); thread < thread_count; ++thread) + { + T const start = thread * split; + T const end = (thread + 1) * split; + bool const is_last = thread == thread_count - 1; + + threads.emplace_back ([&action, start, end, is_last] { + nano::thread_role::set (nano::thread_role::name::db_parallel_traversal); + action (start, end, is_last); + }); + } + for (auto & thread : threads) + { + thread.join (); + } +} +} diff --git a/nano/slow_test/node.cpp b/nano/slow_test/node.cpp index 7d99116671..a66019994b 100644 --- a/nano/slow_test/node.cpp +++ b/nano/slow_test/node.cpp @@ -73,7 +73,7 @@ TEST (system, receive_while_synchronizing) node1->workers.add_timed_task (std::chrono::steady_clock::now () + std::chrono::milliseconds (200), ([&system, &key] () { auto hash (system.wallet (0)->send_sync (nano::dev_genesis_key.pub, key.pub, system.nodes[0]->config.receive_minimum.number ())); auto transaction (system.nodes[0]->store.tx_begin_read ()); - auto block (system.nodes[0]->store.block_get (transaction, hash)); + auto block (system.nodes[0]->store.block.get (transaction, hash)); std::string block_text; block->serialize_json (block_text); })); @@ -1851,7 +1851,7 @@ TEST (node, wallet_create_block_confirm_conflicts) // Call block confirm on the top level send block which will confirm everything underneath on both accounts. { - auto block = node->store.block_get (node->store.tx_begin_read (), latest); + auto block = node->store.block.get (node->store.tx_begin_read (), latest); node->scheduler.manual (block); auto election = node->active.election (block->qualified_root ()); ASSERT_NE (nullptr, election); diff --git a/nano/test_common/system.cpp b/nano/test_common/system.cpp index 98f4ba9d3c..793d450735 100644 --- a/nano/test_common/system.cpp +++ b/nano/test_common/system.cpp @@ -357,7 +357,7 @@ void nano::system::generate_receive (nano::node & node_a) if (i != node_a.store.pending.end ()) { nano::pending_key const & send_hash (i->first); - send_block = node_a.store.block_get (transaction, send_hash.hash); + send_block = node_a.store.block.get (transaction, send_hash.hash); } } if (send_block != nullptr) From c047074a492076164573dc4107eb84969e1f45dc Mon Sep 17 00:00:00 2001 From: clemahieu Date: Tue, 15 Jun 2021 10:52:29 +0200 Subject: [PATCH 047/346] Removing redundant check in telemetry limiter. Time points are default constructed at the lowest time point which will already pass the duration check making it redundant. (#3326) --- nano/node/bootstrap/bootstrap_server.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/nano/node/bootstrap/bootstrap_server.cpp b/nano/node/bootstrap/bootstrap_server.cpp index 4af458105e..a463d62471 100644 --- a/nano/node/bootstrap/bootstrap_server.cpp +++ b/nano/node/bootstrap/bootstrap_server.cpp @@ -246,9 +246,8 @@ void nano::bootstrap_server::receive_header_action (boost::system::error_code co if (is_realtime_connection ()) { // Only handle telemetry requests if they are outside of the cutoff time - auto is_very_first_message = last_telemetry_req == std::chrono::steady_clock::time_point{}; auto cache_exceeded = std::chrono::steady_clock::now () >= last_telemetry_req + nano::telemetry_cache_cutoffs::network_to_time (node->network_params.network); - if (is_very_first_message || cache_exceeded) + if (cache_exceeded) { last_telemetry_req = std::chrono::steady_clock::now (); add_request (std::make_unique (header)); From e286a647816cf3a3213cdc3aaf7f51200abe2d4a Mon Sep 17 00:00:00 2001 From: dsiganos Date: Tue, 15 Jun 2021 09:52:58 +0100 Subject: [PATCH 048/346] Fix for active_transactions.pessimistic_elections unit test (#3328) This assert was sometimes failing: ASSERT_TIMELY (10s, node.active.active (send->qualified_root ())); We think the original intention was to check "send2" and not "send". send2 should become active for an election after its parent gets confirmed. --- nano/core_test/active_transactions.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nano/core_test/active_transactions.cpp b/nano/core_test/active_transactions.cpp index 5898a09b02..1d54565a49 100644 --- a/nano/core_test/active_transactions.cpp +++ b/nano/core_test/active_transactions.cpp @@ -1261,7 +1261,7 @@ TEST (active_transactions, pessimistic_elections) } // Activation of cemented frontier successor should get started after the first pessimistic block is confirmed - ASSERT_TIMELY (10s, node.active.active (send->qualified_root ())); + ASSERT_TIMELY (10s, node.active.active (send2->qualified_root ())); node.active.confirm_expired_frontiers_pessimistically (node.store.tx_begin_read (), 100, election_count); ASSERT_EQ (1, election_count); From d6dfeaf190e47a90c1bd6fddbd37234f8fc06f0c Mon Sep 17 00:00:00 2001 From: Shryder Date: Tue, 15 Jun 2021 18:15:40 +0100 Subject: [PATCH 049/346] Improve delegators rpc by adding "count", "head", and "threshold" parameters (#3330) (#3333) This commit allows the 'delegators' RPC to limit the response by a 'count' and start the search at a 'start'. The response from 'delegators' can be potentially large and this lets the requestor stream the response in smaller chunks. --- nano/node/json_handler.cpp | 29 +++++++--- nano/rpc_test/rpc.cpp | 111 +++++++++++++++++++++++++++++++++++++ 2 files changed, 132 insertions(+), 8 deletions(-) diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index f9fc65752e..0b858ea6ce 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -2068,20 +2068,33 @@ void nano::json_handler::database_txn_tracker () void nano::json_handler::delegators () { - auto account (account_impl ()); + auto representative (account_impl ()); + auto count (count_optional_impl (1024)); + auto threshold (threshold_optional_impl ()); + auto start_account_text (request.get_optional ("start")); + + nano::account start_account (0); + if (!ec && start_account_text.is_initialized ()) + { + start_account = account_impl (start_account_text.get ()); + } + if (!ec) { - boost::property_tree::ptree delegators; auto transaction (node.store.tx_begin_read ()); - for (auto i (node.store.account.begin (transaction)), n (node.store.account.end ()); i != n; ++i) + boost::property_tree::ptree delegators; + for (auto i (node.store.account.begin (transaction, start_account.number () + 1)), n (node.store.account.end ()); i != n && delegators.size () < count; ++i) { nano::account_info const & info (i->second); - if (info.representative == account) + if (info.representative == representative) { - std::string balance; - nano::uint128_union (info.balance).encode_dec (balance); - nano::account const & account (i->first); - delegators.put (account.to_account (), balance); + if (info.balance.number () >= threshold.number ()) + { + std::string balance; + nano::uint128_union (info.balance).encode_dec (balance); + nano::account const & delegator (i->first); + delegators.put (delegator.to_account (), balance); + } } } response_l.add_child ("delegators", delegators); diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index 9a9ad71eac..1e056d7308 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -4633,6 +4633,117 @@ TEST (rpc, delegators) ASSERT_EQ ("340282366920938463463374607431768211355", delegators.get (key.pub.to_account ())); } +TEST (rpc, delegators_parameters) +{ + nano::system system; + auto & node1 = *add_ipc_enabled_node (system); + nano::keypair key; + auto latest (node1.latest (nano::dev_genesis_key.pub)); + nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1.work_generate_blocking (latest)); + node1.process (send); + nano::open_block open (send.hash (), nano::dev_genesis_key.pub, key.pub, key.prv, key.pub, *node1.work_generate_blocking (key.pub)); + ASSERT_EQ (nano::process_result::progress, node1.process (open).code); + + scoped_io_thread_name_change scoped_thread_name_io; + nano::node_rpc_config node_rpc_config; + nano::ipc::ipc_server ipc_server (node1, node_rpc_config); + nano::rpc_config rpc_config (nano::get_available_port (), true); + rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; + nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); + nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); + rpc.start (); + + // Test with "count" = 2 + boost::property_tree::ptree request; + request.put ("action", "delegators"); + request.put ("account", nano::dev_genesis_key.pub.to_account ()); + request.put ("count", 2); + test_response response (request, rpc.config.port, system.io_ctx); + ASSERT_TIMELY (5s, response.status != 0); + ASSERT_EQ (200, response.status); + auto & delegators_node (response.json.get_child ("delegators")); + boost::property_tree::ptree delegators; + for (auto i (delegators_node.begin ()), n (delegators_node.end ()); i != n; ++i) + { + delegators.put ((i->first), (i->second.get (""))); + } + ASSERT_EQ (2, delegators.size ()); + ASSERT_EQ ("100", delegators.get (nano::dev_genesis_key.pub.to_account ())); + ASSERT_EQ ("340282366920938463463374607431768211355", delegators.get (key.pub.to_account ())); + + // Test with "count" = 1 + request.put ("count", 1); + test_response response2 (request, rpc.config.port, system.io_ctx); + ASSERT_TIMELY (5s, response2.status != 0); + ASSERT_EQ (200, response2.status); + auto & delegators_node2 (response2.json.get_child ("delegators")); + boost::property_tree::ptree delegators2; + for (auto i (delegators_node2.begin ()), n (delegators_node2.end ()); i != n; ++i) + { + delegators2.put ((i->first), (i->second.get (""))); + } + ASSERT_EQ (1, delegators2.size ()); + // What is first in ledger by public key? + if (nano::dev_genesis_key.pub.number () < key.pub.number ()) + { + ASSERT_EQ ("100", delegators2.get (nano::dev_genesis_key.pub.to_account ())); + } + else + { + ASSERT_EQ ("340282366920938463463374607431768211355", delegators2.get (key.pub.to_account ())); + } + + // Test with "threshold" + request.put ("count", 1024); + request.put ("threshold", 101); // higher than remaining genesis balance + test_response response3 (request, rpc.config.port, system.io_ctx); + ASSERT_TIMELY (5s, response3.status != 0); + ASSERT_EQ (200, response3.status); + auto & delegators_node3 (response3.json.get_child ("delegators")); + boost::property_tree::ptree delegators3; + for (auto i (delegators_node3.begin ()), n (delegators_node3.end ()); i != n; ++i) + { + delegators3.put ((i->first), (i->second.get (""))); + } + ASSERT_EQ (1, delegators3.size ()); + ASSERT_EQ ("340282366920938463463374607431768211355", delegators3.get (key.pub.to_account ())); + + // Test with "start" before last account + request.put ("threshold", 0); + auto last_account (key.pub); + if (nano::dev_genesis_key.pub.number () > key.pub.number ()) + { + last_account = nano::dev_genesis_key.pub; + } + request.put ("start", nano::account (last_account.number () - 1).to_account ()); + + test_response response4 (request, rpc.config.port, system.io_ctx); + ASSERT_TIMELY (5s, response4.status != 0); + ASSERT_EQ (200, response4.status); + auto & delegators_node4 (response4.json.get_child ("delegators")); + boost::property_tree::ptree delegators4; + for (auto i (delegators_node4.begin ()), n (delegators_node4.end ()); i != n; ++i) + { + delegators4.put ((i->first), (i->second.get (""))); + } + ASSERT_EQ (1, delegators4.size ()); + boost::optional balance (delegators4.get_optional (last_account.to_account ())); + ASSERT_TRUE (balance.is_initialized ()); + + // Test with "start" equal to last account + request.put ("start", last_account.to_account ()); + test_response response5 (request, rpc.config.port, system.io_ctx); + ASSERT_TIMELY (5s, response5.status != 0); + ASSERT_EQ (200, response5.status); + auto & delegators_node5 (response5.json.get_child ("delegators")); + boost::property_tree::ptree delegators5; + for (auto i (delegators_node5.begin ()), n (delegators_node5.end ()); i != n; ++i) + { + delegators5.put ((i->first), (i->second.get (""))); + } + ASSERT_EQ (0, delegators5.size ()); +} + TEST (rpc, delegators_count) { nano::system system; From 96ccbda1a82ec26479b73575c437c7a9bd4dae04 Mon Sep 17 00:00:00 2001 From: dsiganos Date: Wed, 16 Jun 2021 01:24:50 +0100 Subject: [PATCH 050/346] Fix unit test deferred dependent elections (#3338) The test was not calling election scheduler flush when it should. --- nano/core_test/node.cpp | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/nano/core_test/node.cpp b/nano/core_test/node.cpp index 8d84bd3997..41d6237b41 100644 --- a/nano/core_test/node.cpp +++ b/nano/core_test/node.cpp @@ -4574,6 +4574,7 @@ TEST (node, deferred_dependent_elections) node.process_local (open); node.process_local (send2); node.block_processor.flush (); + node.scheduler.flush (); ASSERT_TRUE (node.block (open->hash ())); ASSERT_TRUE (node.block (send2->hash ())); ASSERT_FALSE (node.active.active (open->qualified_root ())); @@ -4585,6 +4586,7 @@ TEST (node, deferred_dependent_elections) node.work_generate_blocking (*open, open->difficulty () + 1); node.process_local (open); node.block_processor.flush (); + node.scheduler.flush (); ASSERT_FALSE (node.active.active (open->qualified_root ())); // It is however possible to manually start an election from elsewhere @@ -4598,6 +4600,7 @@ TEST (node, deferred_dependent_elections) ASSERT_FALSE (node.active.active (open->qualified_root ())); node.process_local (open); node.block_processor.flush (); + node.scheduler.flush (); ASSERT_FALSE (node.active.active (open->qualified_root ())); // Frontier confirmation also starts elections @@ -4635,6 +4638,7 @@ TEST (node, deferred_dependent_elections) ASSERT_FALSE (node.block (receive->hash ())); node.process_local (receive); node.block_processor.flush (); + node.scheduler.flush (); ASSERT_TRUE (node.block (receive->hash ())); ASSERT_FALSE (node.active.active (receive->qualified_root ())); @@ -4642,6 +4646,7 @@ TEST (node, deferred_dependent_elections) ASSERT_EQ (nano::process_result::fork, node.process (*fork).code); node.process_local (fork); node.block_processor.flush (); + node.scheduler.flush (); ASSERT_FALSE (node.active.active (receive->qualified_root ())); // Confirming the other dependency allows starting an election from a fork From cb34acc3aa37924bc1f5b845a86b3e2900f6ffeb Mon Sep 17 00:00:00 2001 From: dsiganos Date: Wed, 16 Jun 2021 14:50:35 +0100 Subject: [PATCH 051/346] Fix code formatting (#3341) --- nano/core_test/telemetry.cpp | 2 +- nano/core_test/websocket.cpp | 2 +- nano/rpc_test/rpc.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/nano/core_test/telemetry.cpp b/nano/core_test/telemetry.cpp index 13792edfc2..4f3b819800 100644 --- a/nano/core_test/telemetry.cpp +++ b/nano/core_test/telemetry.cpp @@ -1,6 +1,6 @@ #include -#include #include +#include #include #include diff --git a/nano/core_test/websocket.cpp b/nano/core_test/websocket.cpp index 412a9f5325..a98b479974 100644 --- a/nano/core_test/websocket.cpp +++ b/nano/core_test/websocket.cpp @@ -1,7 +1,7 @@ #include #include -#include #include +#include #include #include diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index 1e056d7308..4dfd95d6d4 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -7,8 +7,8 @@ #include #include #include -#include #include +#include #include #include From 6ee3cee1210c14014720b54fa98bc84f72eaac01 Mon Sep 17 00:00:00 2001 From: dsiganos Date: Wed, 16 Jun 2021 18:07:55 +0100 Subject: [PATCH 052/346] Fix counting of voting representatives #3339 (#3340) The function rep wallets::rep_check() did not check for duplicates when adding a voting representative and the count of voting representatives could therefore be much bigger than the reality. --- nano/node/wallet.cpp | 41 +++++++++++++++++++++++++---------------- 1 file changed, 25 insertions(+), 16 deletions(-) diff --git a/nano/node/wallet.cpp b/nano/node/wallet.cpp index 0de7edbd5d..648e7d2855 100644 --- a/nano/node/wallet.cpp +++ b/nano/node/wallet.cpp @@ -1630,24 +1630,33 @@ nano::wallet_representatives nano::wallets::reps () const bool nano::wallets::check_rep (nano::account const & account_a, nano::uint128_t const & half_principal_weight_a, const bool acquire_lock_a) { - bool result (false); - auto weight (node.ledger.weight (account_a)); - if (weight >= node.config.vote_minimum.number ()) + auto weight = node.ledger.weight (account_a); + + if (weight < node.config.vote_minimum.number ()) { - nano::unique_lock lock; - if (acquire_lock_a) - { - lock = nano::unique_lock (reps_cache_mutex); - } - result = true; - representatives.accounts.insert (account_a); - ++representatives.voting; - if (weight >= half_principal_weight_a) - { - ++representatives.half_principal; - } + return false; // account not a representative } - return result; + + nano::unique_lock lock; + if (acquire_lock_a) + { + lock = nano::unique_lock (reps_cache_mutex); + } + + auto insert_result = representatives.accounts.insert (account_a); + if (!insert_result.second) + { + return false; // account already exists + } + + ++representatives.voting; + + if (weight >= half_principal_weight_a) + { + ++representatives.half_principal; + } + + return true; } void nano::wallets::compute_reps () From 77dae8a7c1e614b030c8660bcdbc2d935a03b43c Mon Sep 17 00:00:00 2001 From: Sergey Kroshnin Date: Wed, 16 Jun 2021 20:08:08 +0300 Subject: [PATCH 053/346] Add "successor" field to RPC "block_info" & "blocks_info" (#3337) To simplify ledger walk with RPC & potentially explorers --- nano/node/json_handler.cpp | 2 ++ nano/rpc_test/rpc.cpp | 43 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+) diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index 0b858ea6ce..a3833b5cde 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -1062,6 +1062,7 @@ void nano::json_handler::block_info () response_l.put ("balance", balance.convert_to ()); response_l.put ("height", std::to_string (block->sideband ().height)); response_l.put ("local_timestamp", std::to_string (block->sideband ().timestamp)); + response_l.put ("successor", block->sideband ().successor.to_string ()); auto confirmed (node.ledger.block_confirmed (transaction, hash)); response_l.put ("confirmed", confirmed); @@ -1217,6 +1218,7 @@ void nano::json_handler::blocks_info () entry.put ("balance", balance.convert_to ()); entry.put ("height", std::to_string (block->sideband ().height)); entry.put ("local_timestamp", std::to_string (block->sideband ().timestamp)); + entry.put ("successor", block->sideband ().successor.to_string ()); auto confirmed (node.ledger.block_confirmed (transaction, hash)); entry.put ("confirmed", confirmed); diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index 4dfd95d6d4..e2df5e7467 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -5048,6 +5048,8 @@ TEST (rpc, blocks_info) std::string balance_text (blocks.second.get ("balance")); ASSERT_EQ (nano::genesis_amount.convert_to (), balance_text); ASSERT_TRUE (blocks.second.get ("confirmed")); // Genesis block is confirmed by default + std::string successor_text (blocks.second.get ("successor")); + ASSERT_EQ (nano::block_hash (0).to_string (), successor_text); // Genesis block doesn't have successor yet } }; boost::property_tree::ptree request; @@ -5142,6 +5144,45 @@ TEST (rpc, blocks_info_subtype) ASSERT_EQ (receive_subtype, "receive"); auto change_subtype (blocks.get_child (change->hash ().to_string ()).get ("subtype")); ASSERT_EQ (change_subtype, "change"); + // Successor fields + auto send_successor (blocks.get_child (send->hash ().to_string ()).get ("successor")); + ASSERT_EQ (send_successor, receive->hash ().to_string ()); + auto receive_successor (blocks.get_child (receive->hash ().to_string ()).get ("successor")); + ASSERT_EQ (receive_successor, change->hash ().to_string ()); + auto change_successor (blocks.get_child (change->hash ().to_string ()).get ("successor")); + ASSERT_EQ (change_successor, nano::block_hash (0).to_string ()); // Change block doesn't have successor yet +} + +TEST (rpc, block_info_successor) +{ + nano::system system; + auto & node1 = *add_ipc_enabled_node (system); + nano::keypair key; + auto latest (node1.latest (nano::dev_genesis_key.pub)); + nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1.work_generate_blocking (latest)); + node1.process (send); + scoped_io_thread_name_change scoped_thread_name_io; + nano::node_rpc_config node_rpc_config; + nano::ipc::ipc_server ipc_server (node1, node_rpc_config); + nano::rpc_config rpc_config (nano::get_available_port (), true); + rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; + nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); + nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); + rpc.start (); + boost::property_tree::ptree request; + request.put ("action", "block_info"); + request.put ("hash", latest.to_string ()); + test_response response (request, rpc.config.port, system.io_ctx); + ASSERT_TIMELY (5s, response.status != 0); + ASSERT_EQ (200, response.status); + + // Make sure send block is successor of genesis + std::string successor_text (response.json.get ("successor")); + ASSERT_EQ (successor_text, send.hash ().to_string ()); + std::string account_text (response.json.get ("block_account")); + ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), account_text); + std::string amount_text (response.json.get ("amount")); + ASSERT_EQ (nano::genesis_amount.convert_to (), amount_text); } TEST (rpc, block_info_pruning) @@ -5204,6 +5245,8 @@ TEST (rpc, block_info_pruning) std::string balance_text (response2.json.get ("balance")); ASSERT_EQ (nano::genesis_amount.convert_to (), balance_text); ASSERT_TRUE (response2.json.get ("confirmed")); + std::string successor_text (response2.json.get ("successor")); + ASSERT_EQ (successor_text, nano::block_hash (0).to_string ()); // receive1 block doesn't have successor yet } TEST (rpc, pruned_exists) From baa7f4386a2c9967e6a8f64c034b04910b39a6ba Mon Sep 17 00:00:00 2001 From: Shryder Date: Wed, 16 Jun 2021 18:08:27 +0100 Subject: [PATCH 054/346] Fix RPC "active_difficulty" returning empty string as "difficulty_trend" (#3323) (#3343) * Fix RPC "active_difficulty" returning empty string as "difficulty_trend" (#3323) * Change active_difficulty test unit accordingly --- nano/node/json_handler.cpp | 10 ++++++++-- nano/rpc_test/rpc.cpp | 2 +- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index a3833b5cde..c9c804cfbe 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -1024,8 +1024,14 @@ void nano::json_handler::active_difficulty () response_l.put ("multiplier", 1.0); if (include_trend) { - boost::property_tree::ptree trend_entry_l; - response_l.add_child ("difficulty_trend", trend_entry_l); + boost::property_tree::ptree difficulty_trend_l; + + // To keep this RPC backwards-compatible + boost::property_tree::ptree entry; + entry.put ("", "1.000000000000000"); + difficulty_trend_l.push_back (std::make_pair ("", entry)); + + response_l.add_child ("difficulty_trend", difficulty_trend_l); } response_errors (); } diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index e2df5e7467..00c9d8c824 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -7159,7 +7159,7 @@ TEST (rpc, active_difficulty) auto trend_opt (response.json.get_child_optional ("difficulty_trend")); ASSERT_TRUE (trend_opt.is_initialized ()); auto & trend (trend_opt.get ()); - ASSERT_EQ (0, trend.size ()); + ASSERT_EQ (1, trend.size ()); } } From b5c1925e29697b6b8c8b468c9f39e8dd39d0da36 Mon Sep 17 00:00:00 2001 From: dsiganos Date: Wed, 16 Jun 2021 23:32:32 +0100 Subject: [PATCH 055/346] Fix unit test node vote republish (#3344) * Fix for unit test node.vote_republish The test was not allowing enough time for the block to become active. * Code improvements to test node.vote_republish --- nano/core_test/node.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/nano/core_test/node.cpp b/nano/core_test/node.cpp index 41d6237b41..bdeaa65a5e 100644 --- a/nano/core_test/node.cpp +++ b/nano/core_test/node.cpp @@ -2917,6 +2917,7 @@ TEST (node, vote_republish) auto & node1 (*system.nodes[0]); auto & node2 (*system.nodes[1]); nano::keypair key2; + // by not setting a private key on node1's wallet, it is stopped from voting system.wallet (1)->insert_adhoc (key2.prv); nano::genesis genesis; nano::send_block_builder builder; @@ -2936,10 +2937,10 @@ TEST (node, vote_republish) .build_shared (); node1.process_active (send1); ASSERT_TIMELY (5s, node2.block (send1->hash ())); - node1.active.publish (send2); + node1.process_active (send2); auto vote (std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, std::numeric_limits::max (), send2)); ASSERT_TRUE (node1.active.active (*send1)); - ASSERT_TRUE (node2.active.active (*send1)); + ASSERT_TIMELY (10s, node2.active.active (*send1)); node1.vote_processor.vote (vote, std::make_shared (node1)); ASSERT_TIMELY (10s, node1.block (send2->hash ())); ASSERT_TIMELY (10s, node2.block (send2->hash ())); From bdb7555f8e12e490bbfdcb126371eb058e864450 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Thu, 17 Jun 2021 10:24:50 +0200 Subject: [PATCH 056/346] This test starts several node instances which can be slow to start, especially with TEST_USE_ROCKSDB=1. This would cause connections to be cleaned up before the substantial ASSERTs were checked. (#3336) This adds a flag to disable connection cleanup assuming that all network connections will remain live. --- nano/core_test/network.cpp | 6 +++--- nano/node/network.cpp | 5 ++++- nano/node/nodeconfig.hpp | 1 + 3 files changed, 8 insertions(+), 4 deletions(-) diff --git a/nano/core_test/network.cpp b/nano/core_test/network.cpp index 6b17ef89b7..01b8e9877e 100644 --- a/nano/core_test/network.cpp +++ b/nano/core_test/network.cpp @@ -899,11 +899,11 @@ TEST (network, replace_port) TEST (network, peer_max_tcp_attempts) { - nano::system system (1); - auto node (system.nodes[0]); // Add nodes that can accept TCP connection, but not node ID handshake nano::node_flags node_flags; - node_flags.disable_tcp_realtime = true; + node_flags.disable_connection_cleanup = true; + nano::system system; + auto node = system.add_node (node_flags); for (auto i (0); i < node->network_params.node.max_peers_per_ip; ++i) { auto node2 (std::make_shared (system.io_ctx, nano::get_available_port (), nano::unique_path (), system.logging, system.work, node_flags)); diff --git a/nano/node/network.cpp b/nano/node/network.cpp index 60ae608d6a..8c82635c19 100644 --- a/nano/node/network.cpp +++ b/nano/node/network.cpp @@ -105,7 +105,10 @@ nano::network::~network () void nano::network::start () { - ongoing_cleanup (); + if (!node.flags.disable_connection_cleanup) + { + ongoing_cleanup (); + } ongoing_syn_cookie_cleanup (); if (!node.flags.disable_udp) { diff --git a/nano/node/nodeconfig.hpp b/nano/node/nodeconfig.hpp index 607febde46..07b1f02c11 100644 --- a/nano/node/nodeconfig.hpp +++ b/nano/node/nodeconfig.hpp @@ -148,6 +148,7 @@ class node_flags final bool enable_pruning{ false }; bool fast_bootstrap{ false }; bool read_only{ false }; + bool disable_connection_cleanup{ false }; nano::confirmation_height_mode confirmation_height_processor_mode{ nano::confirmation_height_mode::automatic }; nano::generate_cache generate_cache; bool inactive_node{ false }; From b14cdd5aa67de155f1da9151a64eb48905f162e4 Mon Sep 17 00:00:00 2001 From: dsiganos Date: Thu, 17 Jun 2021 14:03:06 +0100 Subject: [PATCH 057/346] fix unit test socket.max_connections (#3345) There were race conditions in the way counters were checked and callbacks were handled. --- nano/core_test/socket.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/nano/core_test/socket.cpp b/nano/core_test/socket.cpp index 7114f26a94..c8e68c2186 100644 --- a/nano/core_test/socket.cpp +++ b/nano/core_test/socket.cpp @@ -63,8 +63,8 @@ TEST (socket, max_connections) }; ASSERT_TIMELY (5s, get_tcp_accept_failures () == 1); - ASSERT_EQ (get_tcp_accept_successes (), 2); - ASSERT_EQ (connection_attempts, 3); + ASSERT_TIMELY (5s, get_tcp_accept_successes () == 2); + ASSERT_TIMELY (5s, connection_attempts == 3); // create space for one socket and fill the connections table again @@ -77,8 +77,8 @@ TEST (socket, max_connections) client5->async_connect (dst_endpoint, connect_handler); ASSERT_TIMELY (5s, get_tcp_accept_failures () == 2); - ASSERT_EQ (get_tcp_accept_successes (), 3); - ASSERT_EQ (connection_attempts, 5); + ASSERT_TIMELY (5s, get_tcp_accept_successes () == 3); + ASSERT_TIMELY (5s, connection_attempts == 5); // close all existing sockets and fill the connections table again // start counting form 1 because 0 is the already closed socket @@ -97,9 +97,9 @@ TEST (socket, max_connections) client8->async_connect (dst_endpoint, connect_handler); ASSERT_TIMELY (5s, get_tcp_accept_failures () == 3); - ASSERT_EQ (get_tcp_accept_successes (), 5); - ASSERT_EQ (connection_attempts, 8); // connections initiated by the client - ASSERT_EQ (server_sockets.size (), 5); // connections accepted by the server + ASSERT_TIMELY (5s, get_tcp_accept_successes () == 5); + ASSERT_TIMELY (5s, connection_attempts == 8); // connections initiated by the client + ASSERT_TIMELY (5s, server_sockets.size () == 5); // connections accepted by the server node->stop (); runner.stop_event_processing (); From b6dcf1de5477d6daeb2d70eb82736455ad0d99a7 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Tue, 22 Jun 2021 14:43:11 +0200 Subject: [PATCH 058/346] This renames bootstrap_server_type to socket::type and moves the type declaration on to the socket class since this is a socket-related property, not necessarily related to bootstrapping. (#3350) --- nano/node/bootstrap/bootstrap_server.cpp | 20 ++++++++++---------- nano/node/bootstrap/bootstrap_server.hpp | 9 +-------- nano/node/network.cpp | 2 +- nano/node/socket.hpp | 7 +++++++ nano/node/transport/tcp.cpp | 10 +++++----- nano/node/transport/tcp.hpp | 5 ++--- 6 files changed, 26 insertions(+), 27 deletions(-) diff --git a/nano/node/bootstrap/bootstrap_server.cpp b/nano/node/bootstrap/bootstrap_server.cpp index a463d62471..88eebff677 100644 --- a/nano/node/bootstrap/bootstrap_server.cpp +++ b/nano/node/bootstrap/bootstrap_server.cpp @@ -111,11 +111,11 @@ nano::bootstrap_server::~bootstrap_server () { node->logger.try_log ("Exiting incoming TCP/bootstrap server"); } - if (type == nano::bootstrap_server_type::bootstrap) + if (type == nano::socket::type_t::bootstrap) { --node->bootstrap.bootstrap_count; } - else if (type == nano::bootstrap_server_type::realtime) + else if (type == nano::socket::type_t::realtime) { --node->bootstrap.realtime_count; // Clear temporary channel @@ -524,7 +524,7 @@ void nano::bootstrap_server::receive_node_id_handshake_action (boost::system::er auto request (std::make_unique (error, stream, header_a)); if (!error) { - if (type == nano::bootstrap_server_type::undefined && !node->flags.disable_tcp_realtime) + if (type == nano::socket::type_t::undefined && !node->flags.disable_tcp_realtime) { add_request (std::unique_ptr (request.release ())); } @@ -696,7 +696,7 @@ class request_response_visitor : public nano::message_visitor if (!connection->node->network.syn_cookies.validate (nano::transport::map_tcp_to_endpoint (connection->remote_endpoint), node_id, message_a.response->second) && node_id != connection->node->node_id.pub) { connection->remote_node_id = node_id; - connection->type = nano::bootstrap_server_type::realtime; + connection->type = nano::socket::type_t::realtime; ++connection->node->bootstrap.realtime_count; connection->finish_request_async (); } @@ -711,8 +711,8 @@ class request_response_visitor : public nano::message_visitor connection->finish_request_async (); } nano::account node_id (connection->remote_node_id); - nano::bootstrap_server_type type (connection->type); - debug_assert (node_id.is_zero () || type == nano::bootstrap_server_type::realtime); + nano::socket::type_t type (connection->type); + debug_assert (node_id.is_zero () || type == nano::socket::type_t::realtime); connection->node->network.tcp_message_manager.put_message (nano::tcp_message_item{ std::make_shared (message_a), connection->remote_endpoint, connection->remote_node_id, connection->socket, connection->type }); } std::shared_ptr connection; @@ -753,15 +753,15 @@ void nano::bootstrap_server::run_next (nano::unique_lock & lock_a) bool nano::bootstrap_server::is_bootstrap_connection () { - if (type == nano::bootstrap_server_type::undefined && !node->flags.disable_bootstrap_listener && node->bootstrap.bootstrap_count < node->config.bootstrap_connections_max) + if (type == nano::socket::type_t::undefined && !node->flags.disable_bootstrap_listener && node->bootstrap.bootstrap_count < node->config.bootstrap_connections_max) { ++node->bootstrap.bootstrap_count; - type = nano::bootstrap_server_type::bootstrap; + type = nano::socket::type_t::bootstrap; } - return type == nano::bootstrap_server_type::bootstrap; + return type == nano::socket::type_t::bootstrap; } bool nano::bootstrap_server::is_realtime_connection () { - return type == nano::bootstrap_server_type::realtime || type == nano::bootstrap_server_type::realtime_response_server; + return type == nano::socket::type_t::realtime || type == nano::socket::type_t::realtime_response_server; } diff --git a/nano/node/bootstrap/bootstrap_server.hpp b/nano/node/bootstrap/bootstrap_server.hpp index b024062146..767b7e79de 100644 --- a/nano/node/bootstrap/bootstrap_server.hpp +++ b/nano/node/bootstrap/bootstrap_server.hpp @@ -34,13 +34,6 @@ class bootstrap_listener final std::unique_ptr collect_container_info (bootstrap_listener & bootstrap_listener, std::string const & name); class message; -enum class bootstrap_server_type -{ - undefined, - bootstrap, - realtime, - realtime_response_server // special type for tcp channel response server -}; class bootstrap_server final : public std::enable_shared_from_this { public: @@ -71,7 +64,7 @@ class bootstrap_server final : public std::enable_shared_from_this> requests; std::atomic stopped{ false }; - std::atomic type{ nano::bootstrap_server_type::undefined }; + std::atomic type{ nano::socket::type_t::undefined }; // Remote enpoint used to remove response channel even after socket closing nano::tcp_endpoint remote_endpoint{ boost::asio::ip::address_v6::any (), 0 }; nano::account remote_node_id{ 0 }; diff --git a/nano/node/network.cpp b/nano/node/network.cpp index 8c82635c19..a2a28305bd 100644 --- a/nano/node/network.cpp +++ b/nano/node/network.cpp @@ -925,7 +925,7 @@ nano::tcp_message_item nano::tcp_message_manager::get_message () } else { - result = nano::tcp_message_item{ std::make_shared (), nano::tcp_endpoint (boost::asio::ip::address_v6::any (), 0), 0, nullptr, nano::bootstrap_server_type::undefined }; + result = nano::tcp_message_item{ std::make_shared (), nano::tcp_endpoint (boost::asio::ip::address_v6::any (), 0), 0, nullptr, nano::socket::type_t::undefined }; } lock.unlock (); producer_condition.notify_one (); diff --git a/nano/node/socket.hpp b/nano/node/socket.hpp index 95fd68b576..6d71d278ef 100644 --- a/nano/node/socket.hpp +++ b/nano/node/socket.hpp @@ -33,6 +33,13 @@ class socket : public std::enable_shared_from_this friend class server_socket; public: + enum class type_t + { + undefined, + bootstrap, + realtime, + realtime_response_server // special type for tcp channel response server + }; /** * Constructor * @param node Owning node diff --git a/nano/node/transport/tcp.cpp b/nano/node/transport/tcp.cpp index 47c45352a9..964f11abde 100644 --- a/nano/node/transport/tcp.cpp +++ b/nano/node/transport/tcp.cpp @@ -288,7 +288,7 @@ void nano::transport::tcp_channels::process_messages () } } -void nano::transport::tcp_channels::process_message (nano::message const & message_a, nano::tcp_endpoint const & endpoint_a, nano::account const & node_id_a, std::shared_ptr const & socket_a, nano::bootstrap_server_type type_a) +void nano::transport::tcp_channels::process_message (nano::message const & message_a, nano::tcp_endpoint const & endpoint_a, nano::account const & node_id_a, std::shared_ptr const & socket_a, nano::socket::type_t type_a) { if (!stopped && message_a.header.version_using >= protocol_constants ().protocol_version_min ()) { @@ -315,9 +315,9 @@ void nano::transport::tcp_channels::process_message (nano::message const & messa temporary_channel->set_node_id (node_id_a); temporary_channel->set_network_version (message_a.header.version_using); temporary_channel->temporary = true; - debug_assert (type_a == nano::bootstrap_server_type::realtime || type_a == nano::bootstrap_server_type::realtime_response_server); + debug_assert (type_a == nano::socket::type_t::realtime || type_a == nano::socket::type_t::realtime_response_server); // Don't insert temporary channels for response_server - if (type_a == nano::bootstrap_server_type::realtime) + if (type_a == nano::socket::type_t::realtime) { insert (temporary_channel, socket_a, nullptr); } @@ -327,7 +327,7 @@ void nano::transport::tcp_channels::process_message (nano::message const & messa { // Initial node_id_handshake request without node ID debug_assert (message_a.header.type == nano::message_type::node_id_handshake); - debug_assert (type_a == nano::bootstrap_server_type::undefined); + debug_assert (type_a == nano::socket::type_t::undefined); node.stats.inc (nano::stat::type::message, nano::stat::detail::node_id_handshake, nano::stat::dir::in); } } @@ -691,7 +691,7 @@ void nano::transport::tcp_channels::start_tcp_receive_node_id (std::shared_ptrtype = nano::bootstrap_server_type::realtime_response_server; + response_server->type = nano::socket::type_t::realtime_response_server; response_server->remote_node_id = channel_a->get_node_id (); response_server->receive (); node_l->network.tcp_channels.remove_node_id_handshake_socket (socket_l); diff --git a/nano/node/transport/tcp.hpp b/nano/node/transport/tcp.hpp index d6531ef170..e9241059b1 100644 --- a/nano/node/transport/tcp.hpp +++ b/nano/node/transport/tcp.hpp @@ -17,7 +17,6 @@ namespace mi = boost::multi_index; namespace nano { class bootstrap_server; -enum class bootstrap_server_type; class tcp_message_item final { public: @@ -25,7 +24,7 @@ class tcp_message_item final nano::tcp_endpoint endpoint; nano::account node_id; std::shared_ptr socket; - nano::bootstrap_server_type type; + nano::socket::type_t type; }; namespace transport { @@ -93,7 +92,7 @@ namespace transport void start (); void stop (); void process_messages (); - void process_message (nano::message const &, nano::tcp_endpoint const &, nano::account const &, std::shared_ptr const &, nano::bootstrap_server_type); + void process_message (nano::message const &, nano::tcp_endpoint const &, nano::account const &, std::shared_ptr const &, nano::socket::type_t); bool max_ip_connections (nano::tcp_endpoint const &); // Should we reach out to this endpoint with a keepalive message bool reachout (nano::endpoint const &); From 3fefa73dd4fb1b1b49e0bad8590ecb7d45b49e46 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Tue, 22 Jun 2021 14:43:23 +0200 Subject: [PATCH 059/346] This disallows passing in a nullptr socket in to bootstrap_server. This was only done in tests so it didn't reflect actual usage. (#3351) --- nano/core_test/bootstrap.cpp | 48 ++++++++++++------------ nano/node/bootstrap/bootstrap_server.cpp | 1 + 2 files changed, 25 insertions(+), 24 deletions(-) diff --git a/nano/core_test/bootstrap.cpp b/nano/core_test/bootstrap.cpp index b0b4034c34..7f83abde2d 100644 --- a/nano/core_test/bootstrap.cpp +++ b/nano/core_test/bootstrap.cpp @@ -11,7 +11,7 @@ using namespace std::chrono_literals; TEST (bulk_pull, no_address) { nano::system system (1); - auto connection (std::make_shared (nullptr, system.nodes[0])); + auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); auto req = std::make_unique (); req->start = 1; req->end = 2; @@ -24,7 +24,7 @@ TEST (bulk_pull, no_address) TEST (bulk_pull, genesis_to_end) { nano::system system (1); - auto connection (std::make_shared (nullptr, system.nodes[0])); + auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); auto req = std::make_unique (); req->start = nano::dev_genesis_key.pub; req->end.clear (); @@ -38,7 +38,7 @@ TEST (bulk_pull, genesis_to_end) TEST (bulk_pull, no_end) { nano::system system (1); - auto connection (std::make_shared (nullptr, system.nodes[0])); + auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); auto req = std::make_unique (); req->start = nano::dev_genesis_key.pub; req->end = 1; @@ -63,7 +63,7 @@ TEST (bulk_pull, end_not_owned) open.signature = nano::sign_message (key2.prv, key2.pub, open.hash ()); system.nodes[0]->work_generate_blocking (open); ASSERT_EQ (nano::process_result::progress, system.nodes[0]->process (open).code); - auto connection (std::make_shared (nullptr, system.nodes[0])); + auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); nano::genesis genesis; auto req = std::make_unique (); req->start = key2.pub; @@ -76,7 +76,7 @@ TEST (bulk_pull, end_not_owned) TEST (bulk_pull, none) { nano::system system (1); - auto connection (std::make_shared (nullptr, system.nodes[0])); + auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); nano::genesis genesis; auto req = std::make_unique (); req->start = nano::dev_genesis_key.pub; @@ -90,7 +90,7 @@ TEST (bulk_pull, none) TEST (bulk_pull, get_next_on_open) { nano::system system (1); - auto connection (std::make_shared (nullptr, system.nodes[0])); + auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); auto req = std::make_unique (); req->start = nano::dev_genesis_key.pub; req->end.clear (); @@ -106,7 +106,7 @@ TEST (bulk_pull, get_next_on_open) TEST (bulk_pull, by_block) { nano::system system (1); - auto connection (std::make_shared (nullptr, system.nodes[0])); + auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); nano::genesis genesis; auto req = std::make_unique (); req->start = genesis.hash (); @@ -124,7 +124,7 @@ TEST (bulk_pull, by_block) TEST (bulk_pull, by_block_single) { nano::system system (1); - auto connection (std::make_shared (nullptr, system.nodes[0])); + auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); nano::genesis genesis; auto req = std::make_unique (); req->start = genesis.hash (); @@ -150,7 +150,7 @@ TEST (bulk_pull, count_limit) auto receive1 (std::make_shared (send1->hash (), send1->hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send1->hash ()))); ASSERT_EQ (nano::process_result::progress, node0->process (*receive1).code); - auto connection (std::make_shared (nullptr, node0)); + auto connection (std::make_shared (std::make_shared (*node0), node0)); auto req = std::make_unique (); req->start = receive1->hash (); req->set_count_present (true); @@ -1426,7 +1426,7 @@ TEST (frontier_req_response, DISABLED_destruction) TEST (frontier_req, begin) { nano::system system (1); - auto connection (std::make_shared (nullptr, system.nodes[0])); + auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); auto req = std::make_unique (); req->start.clear (); req->age = std::numeric_limitsage)>::max (); @@ -1441,7 +1441,7 @@ TEST (frontier_req, begin) TEST (frontier_req, end) { nano::system system (1); - auto connection (std::make_shared (nullptr, system.nodes[0])); + auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); auto req = std::make_unique (); req->start = nano::dev_genesis_key.pub.number () + 1; req->age = std::numeric_limitsage)>::max (); @@ -1484,7 +1484,7 @@ TEST (frontier_req, count) node1->work_generate_blocking (*receive1); ASSERT_EQ (nano::process_result::progress, node1->process (*receive1).code); - auto connection (std::make_shared (nullptr, node1)); + auto connection (std::make_shared (std::make_shared (*node1), node1)); auto req = std::make_unique (); req->start.clear (); req->age = std::numeric_limitsage)>::max (); @@ -1498,7 +1498,7 @@ TEST (frontier_req, count) TEST (frontier_req, time_bound) { nano::system system (1); - auto connection (std::make_shared (nullptr, system.nodes[0])); + auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); auto req = std::make_unique (); req->start.clear (); req->age = 1; @@ -1512,7 +1512,7 @@ TEST (frontier_req, time_bound) req2->start.clear (); req2->age = 1; req2->count = std::numeric_limitscount)>::max (); - auto connection2 (std::make_shared (nullptr, system.nodes[0])); + auto connection2 (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); connection2->requests.push (std::unique_ptr{}); auto request2 (std::make_shared (connection, std::move (req2))); ASSERT_TRUE (request2->current.is_zero ()); @@ -1521,7 +1521,7 @@ TEST (frontier_req, time_bound) TEST (frontier_req, time_cutoff) { nano::system system (1); - auto connection (std::make_shared (nullptr, system.nodes[0])); + auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); auto req = std::make_unique (); req->start.clear (); req->age = 3; @@ -1537,7 +1537,7 @@ TEST (frontier_req, time_cutoff) req2->start.clear (); req2->age = 3; req2->count = std::numeric_limitscount)>::max (); - auto connection2 (std::make_shared (nullptr, system.nodes[0])); + auto connection2 (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); connection2->requests.push (std::unique_ptr{}); auto request2 (std::make_shared (connection, std::move (req2))); ASSERT_TRUE (request2->frontier.is_zero ()); @@ -1612,7 +1612,7 @@ TEST (frontier_req, confirmed_frontier) ASSERT_EQ (nano::process_result::progress, node1->process (*receive2).code); // Request for all accounts (confirmed only) - auto connection (std::make_shared (nullptr, node1)); + auto connection (std::make_shared (std::make_shared (*node1), node1)); auto req = std::make_unique (); req->start.clear (); req->age = std::numeric_limitsage)>::max (); @@ -1626,7 +1626,7 @@ TEST (frontier_req, confirmed_frontier) ASSERT_EQ (genesis.hash (), request->frontier); // Request starting with account before genesis (confirmed only) - auto connection2 (std::make_shared (nullptr, node1)); + auto connection2 (std::make_shared (std::make_shared (*node1), node1)); auto req2 = std::make_unique (); req2->start = key_before_genesis.pub; req2->age = std::numeric_limitsage)>::max (); @@ -1640,7 +1640,7 @@ TEST (frontier_req, confirmed_frontier) ASSERT_EQ (genesis.hash (), request2->frontier); // Request starting with account after genesis (confirmed only) - auto connection3 (std::make_shared (nullptr, node1)); + auto connection3 (std::make_shared (std::make_shared (*node1), node1)); auto req3 = std::make_unique (); req3->start = key_after_genesis.pub; req3->age = std::numeric_limitsage)>::max (); @@ -1654,7 +1654,7 @@ TEST (frontier_req, confirmed_frontier) ASSERT_TRUE (request3->frontier.is_zero ()); // Request for all accounts (unconfirmed blocks) - auto connection4 (std::make_shared (nullptr, node1)); + auto connection4 (std::make_shared (std::make_shared (*node1), node1)); auto req4 = std::make_unique (); req4->start.clear (); req4->age = std::numeric_limitsage)>::max (); @@ -1666,7 +1666,7 @@ TEST (frontier_req, confirmed_frontier) ASSERT_EQ (receive1->hash (), request4->frontier); // Request starting with account after genesis (unconfirmed blocks) - auto connection5 (std::make_shared (nullptr, node1)); + auto connection5 (std::make_shared (std::make_shared (*node1), node1)); auto req5 = std::make_unique (); req5->start = key_after_genesis.pub; req5->age = std::numeric_limitsage)>::max (); @@ -1680,7 +1680,7 @@ TEST (frontier_req, confirmed_frontier) // Confirm account before genesis (confirmed only) nano::blocks_confirm (*node1, { send1, receive1 }, true); ASSERT_TIMELY (5s, node1->block_confirmed (send1->hash ()) && node1->block_confirmed (receive1->hash ())); - auto connection6 (std::make_shared (nullptr, node1)); + auto connection6 (std::make_shared (std::make_shared (*node1), node1)); auto req6 = std::make_unique (); req6->start = key_before_genesis.pub; req6->age = std::numeric_limitsage)>::max (); @@ -1696,7 +1696,7 @@ TEST (frontier_req, confirmed_frontier) // Confirm account after genesis (confirmed only) nano::blocks_confirm (*node1, { send2, receive2 }, true); ASSERT_TIMELY (5s, node1->block_confirmed (send2->hash ()) && node1->block_confirmed (receive2->hash ())); - auto connection7 (std::make_shared (nullptr, node1)); + auto connection7 (std::make_shared (std::make_shared (*node1), node1)); auto req7 = std::make_unique (); req7->start = key_after_genesis.pub; req7->age = std::numeric_limitsage)>::max (); @@ -1871,7 +1871,7 @@ TEST (bulk_pull_account, basics) auto send2 (system.wallet (0)->send_action (nano::genesis_account, key1.pub, 10)); auto send3 (system.wallet (0)->send_action (nano::genesis_account, key1.pub, 2)); ASSERT_TIMELY (5s, system.nodes[0]->balance (key1.pub) == 25); - auto connection (std::make_shared (nullptr, system.nodes[0])); + auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); { auto req = std::make_unique (); diff --git a/nano/node/bootstrap/bootstrap_server.cpp b/nano/node/bootstrap/bootstrap_server.cpp index 88eebff677..606a91f1b1 100644 --- a/nano/node/bootstrap/bootstrap_server.cpp +++ b/nano/node/bootstrap/bootstrap_server.cpp @@ -102,6 +102,7 @@ nano::bootstrap_server::bootstrap_server (std::shared_ptr const & socket (socket_a), node (node_a) { + debug_assert (socket_a != nullptr); receive_buffer->resize (1024); } From cd8e01722f475fae53ab2775d8055c43577817ca Mon Sep 17 00:00:00 2001 From: Sergey Kroshnin Date: Tue, 22 Jun 2021 17:09:25 +0300 Subject: [PATCH 060/346] Simplify RPC tests initialization (#3347) * Add add_rpc () function * RPC context class * Change to fix reference to local binding --- nano/rpc_test/rpc.cpp | 3012 ++++++++++++----------------------------- 1 file changed, 889 insertions(+), 2123 deletions(-) diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index 00c9d8c824..c362d0c731 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -17,6 +17,7 @@ #include #include +#include using namespace std::chrono_literals; @@ -154,6 +155,37 @@ class scoped_io_thread_name_change nano::thread_role::set (nano::thread_role::name::io); } }; + +class rpc_context +{ +public: + rpc_context (std::unique_ptr & ipc_server_a, std::unique_ptr & ipc_rpc_processor_a, std::unique_ptr & node_rpc_config_a, std::unique_ptr & io_scope_a) + { + ipc_server = std::move (ipc_server_a); + ipc_rpc_processor = std::move (ipc_rpc_processor_a); + node_rpc_config = std::move (node_rpc_config_a); + io_scope = std::move (io_scope_a); + } + + std::unique_ptr ipc_server; + std::unique_ptr ipc_rpc_processor; + std::unique_ptr node_rpc_config; + std::unique_ptr io_scope; +}; + +std::tuple, std::unique_ptr> add_rpc (nano::system & system, std::shared_ptr const & node_a) +{ + auto scoped_thread_name_io (std::make_unique ()); + auto node_rpc_config (std::make_unique ()); + auto ipc_server (std::make_unique (*node_a, *node_rpc_config)); + nano::rpc_config rpc_config (nano::get_available_port (), true); + rpc_config.rpc_process.ipc_port = node_a->config.ipc_config.transport_tcp.port; + auto ipc_rpc_processor (std::make_unique (system.io_ctx, rpc_config)); + auto rpc (std::make_shared (system.io_ctx, rpc_config, *ipc_rpc_processor)); + rpc->start (); + auto rpc_ctx (std::make_unique (ipc_server, ipc_rpc_processor, node_rpc_config, scoped_thread_name_io)); + return std::make_tuple (rpc, std::move (rpc_ctx)); +} } TEST (rpc, wrapped_task) @@ -199,14 +231,7 @@ TEST (rpc, account_balance) ASSERT_EQ (nano::process_result::progress, node->process (*send1).code); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "account_balance"); @@ -214,7 +239,7 @@ TEST (rpc, account_balance) // The send and pending should be unconfirmed { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::string balance_text (response.json.get ("balance")); @@ -225,7 +250,7 @@ TEST (rpc, account_balance) request.put ("include_only_confirmed", false); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::string balance_text (response.json.get ("balance")); @@ -239,18 +264,11 @@ TEST (rpc, account_block_count) { nano::system system; auto node = add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, context] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "account_block_count"); request.put ("account", nano::dev_genesis_key.pub.to_account ()); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::string block_count_text (response.json.get ("block_count")); @@ -261,18 +279,11 @@ TEST (rpc, account_create) { nano::system system; auto node = add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "account_create"); request.put ("wallet", node->wallets.items.begin ()->first.to_string ()); - test_response response0 (request, rpc.config.port, system.io_ctx); + test_response response0 (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response0.status != 0); ASSERT_EQ (200, response0.status); auto account_text0 (response0.json.get ("account")); @@ -281,7 +292,7 @@ TEST (rpc, account_create) ASSERT_TRUE (system.wallet (0)->exists (account0)); constexpr uint64_t max_index (std::numeric_limits::max ()); request.put ("index", max_index); - test_response response1 (request, rpc.config.port, system.io_ctx); + test_response response1 (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (10s, response1.status != 0); ASSERT_EQ (200, response1.status); auto account_text1 (response1.json.get ("account")); @@ -289,7 +300,7 @@ TEST (rpc, account_create) ASSERT_FALSE (account1.decode_account (account_text1)); ASSERT_TRUE (system.wallet (0)->exists (account1)); request.put ("index", max_index + 1); - test_response response2 (request, rpc.config.port, system.io_ctx); + test_response response2 (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response2.status != 0); ASSERT_EQ (200, response2.status); ASSERT_EQ (std::error_code (nano::error_common::invalid_index).message (), response2.json.get ("error")); @@ -299,22 +310,15 @@ TEST (rpc, account_weight) { nano::keypair key; nano::system system; - auto & node1 = *add_ipc_enabled_node (system); - nano::block_hash latest (node1.latest (nano::dev_genesis_key.pub)); - nano::change_block block (latest, key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1.work_generate_blocking (latest)); - ASSERT_EQ (nano::process_result::progress, node1.process (block).code); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto node1 = add_ipc_enabled_node (system); + nano::block_hash latest (node1->latest (nano::dev_genesis_key.pub)); + nano::change_block block (latest, key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); + ASSERT_EQ (nano::process_result::progress, node1->process (block).code); + auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request; request.put ("action", "account_weight"); request.put ("account", key.pub.to_account ()); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::string balance_text (response.json.get ("weight")); @@ -326,21 +330,14 @@ TEST (rpc, wallet_contains) nano::system system; auto node = add_ipc_enabled_node (system); system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; std::string wallet; node->wallets.items.begin ()->first.encode_hex (wallet); request.put ("wallet", wallet); request.put ("action", "wallet_contains"); request.put ("account", nano::dev_genesis_key.pub.to_account ()); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::string exists_text (response.json.get ("exists")); @@ -351,21 +348,14 @@ TEST (rpc, wallet_doesnt_contain) { nano::system system; auto node = add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; std::string wallet; node->wallets.items.begin ()->first.encode_hex (wallet); request.put ("wallet", wallet); request.put ("action", "wallet_contains"); request.put ("account", nano::dev_genesis_key.pub.to_account ()); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::string exists_text (response.json.get ("exists")); @@ -376,19 +366,11 @@ TEST (rpc, validate_account_number) { nano::system system; auto node = add_ipc_enabled_node (system); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "validate_account_number"); request.put ("account", nano::dev_genesis_key.pub.to_account ()); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); std::string exists_text (response.json.get ("valid")); ASSERT_EQ ("1", exists_text); @@ -398,22 +380,14 @@ TEST (rpc, validate_account_invalid) { nano::system system; auto node = add_ipc_enabled_node (system); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); std::string account; nano::dev_genesis_key.pub.encode_account (account); account[0] ^= 0x1; boost::property_tree::ptree request; request.put ("action", "validate_account_number"); request.put ("account", account); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::string exists_text (response.json.get ("valid")); @@ -425,14 +399,7 @@ TEST (rpc, send) nano::system system; auto node = add_ipc_enabled_node (system); system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; std::string wallet; node->wallets.items.begin ()->first.encode_hex (wallet); @@ -442,7 +409,7 @@ TEST (rpc, send) request.put ("destination", nano::dev_genesis_key.pub.to_account ()); request.put ("amount", "100"); ASSERT_EQ (node->balance (nano::dev_genesis_key.pub), nano::genesis_amount); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (10s, response.status != 0); ASSERT_EQ (200, response.status); std::string block_text (response.json.get ("block")); @@ -457,14 +424,7 @@ TEST (rpc, send_fail) { nano::system system; auto node = add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; std::string wallet; node->wallets.items.begin ()->first.encode_hex (wallet); @@ -473,7 +433,7 @@ TEST (rpc, send_fail) request.put ("source", nano::dev_genesis_key.pub.to_account ()); request.put ("destination", nano::dev_genesis_key.pub.to_account ()); request.put ("amount", "100"); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (10s, response.status != 0); ASSERT_EQ (std::error_code (nano::error_common::account_not_found_wallet).message (), response.json.get ("error")); } @@ -483,14 +443,7 @@ TEST (rpc, send_work) nano::system system; auto node = add_ipc_enabled_node (system); system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; std::string wallet; node->wallets.items.begin ()->first.encode_hex (wallet); @@ -500,12 +453,12 @@ TEST (rpc, send_work) request.put ("destination", nano::dev_genesis_key.pub.to_account ()); request.put ("amount", "100"); request.put ("work", "1"); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (10s, response.status != 0); ASSERT_EQ (std::error_code (nano::error_common::invalid_work).message (), response.json.get ("error")); request.erase ("work"); request.put ("work", nano::to_string_hex (*node->work_generate_blocking (node->latest (nano::dev_genesis_key.pub)))); - test_response response2 (request, rpc.config.port, system.io_ctx); + test_response response2 (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (10s, response2.status != 0); ASSERT_EQ (200, response2.status); std::string block_text (response2.json.get ("block")); @@ -520,26 +473,19 @@ TEST (rpc, send_work_disabled) nano::system system; nano::node_config node_config (nano::get_available_port (), system.logging); node_config.work_threads = 0; - auto & node = *add_ipc_enabled_node (system, node_config); + auto node = add_ipc_enabled_node (system, node_config); system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; std::string wallet; - node.wallets.items.begin ()->first.encode_hex (wallet); + node->wallets.items.begin ()->first.encode_hex (wallet); request.put ("wallet", wallet); request.put ("action", "send"); request.put ("source", nano::dev_genesis_key.pub.to_account ()); request.put ("destination", nano::dev_genesis_key.pub.to_account ()); request.put ("amount", "100"); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (10s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_EQ (std::error_code (nano::error_common::disabled_work_generation).message (), response.json.get ("error")); @@ -551,14 +497,7 @@ TEST (rpc, send_idempotent) nano::system system; auto node = add_ipc_enabled_node (system); system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; std::string wallet; node->wallets.items.begin ()->first.encode_hex (wallet); @@ -568,7 +507,7 @@ TEST (rpc, send_idempotent) request.put ("destination", nano::account (0).to_account ()); request.put ("amount", (nano::genesis_amount - (nano::genesis_amount / 4)).convert_to ()); request.put ("id", "123abc"); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::string block_text (response.json.get ("block")); @@ -576,7 +515,7 @@ TEST (rpc, send_idempotent) ASSERT_FALSE (block.decode_hex (block_text)); ASSERT_TRUE (node->ledger.block_or_pruned_exists (block)); ASSERT_EQ (node->balance (nano::dev_genesis_key.pub), nano::genesis_amount / 4); - test_response response2 (request, rpc.config.port, system.io_ctx); + test_response response2 (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response2.status != 0); ASSERT_EQ (200, response2.status); ASSERT_EQ ("", response2.json.get ("error", "")); @@ -584,7 +523,7 @@ TEST (rpc, send_idempotent) ASSERT_EQ (node->balance (nano::dev_genesis_key.pub), nano::genesis_amount / 4); request.erase ("id"); request.put ("id", "456def"); - test_response response3 (request, rpc.config.port, system.io_ctx); + test_response response3 (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response3.status != 0); ASSERT_EQ (200, response3.status); ASSERT_EQ (std::error_code (nano::error_common::insufficient_balance).message (), response3.json.get ("error")); @@ -593,29 +532,22 @@ TEST (rpc, send_idempotent) TEST (rpc, send_epoch_2) { nano::system system; - auto & node = *add_ipc_enabled_node (system); + auto node = add_ipc_enabled_node (system); // Upgrade the genesis account to epoch 2 - ASSERT_NE (nullptr, system.upgrade_genesis_epoch (node, nano::epoch::epoch_1)); - ASSERT_NE (nullptr, system.upgrade_genesis_epoch (node, nano::epoch::epoch_2)); + ASSERT_NE (nullptr, system.upgrade_genesis_epoch (*node, nano::epoch::epoch_1)); + ASSERT_NE (nullptr, system.upgrade_genesis_epoch (*node, nano::epoch::epoch_2)); system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv, false); auto target_difficulty = nano::work_threshold (nano::work_version::work_1, nano::block_details (nano::epoch::epoch_2, true, false, false)); - ASSERT_LT (node.network_params.network.publish_thresholds.entry, target_difficulty); - auto min_difficulty = node.network_params.network.publish_thresholds.entry; + ASSERT_LT (node->network_params.network.publish_thresholds.entry, target_difficulty); + auto min_difficulty = node->network_params.network.publish_thresholds.entry; - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; std::string wallet; - node.wallets.items.begin ()->first.encode_hex (wallet); + node->wallets.items.begin ()->first.encode_hex (wallet); request.put ("wallet", wallet); request.put ("action", "send"); request.put ("source", nano::dev_genesis_key.pub.to_account ()); @@ -626,7 +558,7 @@ TEST (rpc, send_epoch_2) auto insufficient = system.work_generate_limited (nano::genesis_hash, min_difficulty, target_difficulty); request.put ("work", nano::to_string_hex (insufficient)); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::error_code ec (nano::error_common::invalid_work); @@ -639,22 +571,15 @@ TEST (rpc, send_ipc_random_id) { nano::system system; auto node = add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; + auto [rpc, rpc_ctx] = add_rpc (system, node); std::atomic got_request{ false }; - node_rpc_config.set_request_callback ([&got_request] (boost::property_tree::ptree const & request_a) { + rpc_ctx->node_rpc_config->set_request_callback ([&got_request] (boost::property_tree::ptree const & request_a) { EXPECT_TRUE (request_a.count ("id")); got_request = true; }); - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); boost::property_tree::ptree request; request.put ("action", "send"); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (10s, response.status != 0); ASSERT_EQ (1, response.json.count ("error")); ASSERT_EQ ("Unable to parse JSON", response.json.get ("error")); @@ -665,33 +590,18 @@ TEST (rpc, stop) { nano::system system; auto node = add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "stop"); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); - ; } TEST (rpc, wallet_add) { nano::system system; auto node = add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); nano::keypair key1; std::string key_text; key1.prv.encode_hex (key_text); @@ -701,7 +611,7 @@ TEST (rpc, wallet_add) request.put ("wallet", wallet); request.put ("action", "wallet_add"); request.put ("key", key_text); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::string account_text1 (response.json.get ("account")); @@ -713,20 +623,13 @@ TEST (rpc, wallet_password_valid) { nano::system system; auto node = add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; std::string wallet; node->wallets.items.begin ()->first.encode_hex (wallet); request.put ("wallet", wallet); request.put ("action", "password_valid"); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::string account_text1 (response.json.get ("valid")); @@ -737,26 +640,19 @@ TEST (rpc, wallet_password_change) { nano::system system; auto node = add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; std::string wallet; node->wallets.items.begin ()->first.encode_hex (wallet); request.put ("wallet", wallet); request.put ("action", "password_change"); request.put ("password", "test"); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::string account_text1 (response.json.get ("changed")); ASSERT_EQ (account_text1, "1"); - scoped_thread_name_io.reset (); + rpc_ctx->io_scope->reset (); auto transaction (system.wallet (0)->wallets.tx_begin_write ()); ASSERT_TRUE (system.wallet (0)->store.valid_password (transaction)); ASSERT_TRUE (system.wallet (0)->enter_password (transaction, "")); @@ -769,7 +665,7 @@ TEST (rpc, wallet_password_enter) { nano::system system; auto node = add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; + auto [rpc, rpc_ctx] = add_rpc (system, node); nano::raw_key password_l; password_l.clear (); system.deadline_set (10s); @@ -778,20 +674,13 @@ TEST (rpc, wallet_password_enter) ASSERT_NO_ERROR (system.poll ()); system.wallet (0)->store.password.value (password_l); } - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); boost::property_tree::ptree request; std::string wallet; node->wallets.items.begin ()->first.encode_hex (wallet); request.put ("wallet", wallet); request.put ("action", "password_enter"); request.put ("password", ""); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::string account_text1 (response.json.get ("valid")); @@ -802,20 +691,13 @@ TEST (rpc, wallet_representative) { nano::system system; auto node = add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; std::string wallet; node->wallets.items.begin ()->first.encode_hex (wallet); request.put ("wallet", wallet); request.put ("action", "wallet_representative"); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::string account_text1 (response.json.get ("representative")); @@ -826,14 +708,7 @@ TEST (rpc, wallet_representative_set) { nano::system system; auto node = add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; std::string wallet; node->wallets.items.begin ()->first.encode_hex (wallet); @@ -841,7 +716,7 @@ TEST (rpc, wallet_representative_set) nano::keypair key; request.put ("action", "wallet_representative_set"); request.put ("representative", key.pub.to_account ()); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); auto transaction (node->wallets.tx_begin_read ()); @@ -853,14 +728,7 @@ TEST (rpc, wallet_representative_set_force) nano::system system; auto node = add_ipc_enabled_node (system); system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; std::string wallet; node->wallets.items.begin ()->first.encode_hex (wallet); @@ -869,7 +737,7 @@ TEST (rpc, wallet_representative_set_force) request.put ("action", "wallet_representative_set"); request.put ("representative", key.pub.to_account ()); request.put ("update_existing_accounts", true); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); { @@ -896,20 +764,13 @@ TEST (rpc, account_list) nano::keypair key2; system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); system.wallet (0)->insert_adhoc (key2.prv); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; std::string wallet; node->wallets.items.begin ()->first.encode_hex (wallet); request.put ("wallet", wallet); request.put ("action", "account_list"); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); auto & accounts_node (response.json.get_child ("accounts")); @@ -933,20 +794,13 @@ TEST (rpc, wallet_key_valid) nano::system system; auto node = add_ipc_enabled_node (system); system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; std::string wallet; node->wallets.items.begin ()->first.encode_hex (wallet); request.put ("wallet", wallet); request.put ("action", "wallet_key_valid"); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::string exists_text (response.json.get ("valid")); @@ -957,17 +811,10 @@ TEST (rpc, wallet_create) { nano::system system; auto node = add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "wallet_create"); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::string wallet_text (response.json.get ("wallet")); @@ -980,22 +827,15 @@ TEST (rpc, wallet_create_seed) { nano::system system; auto node = add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; nano::raw_key seed; nano::random_pool::generate_block (seed.bytes.data (), seed.bytes.size ()); auto prv = nano::deterministic_key (seed, 0); auto pub (nano::pub_key (prv)); - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "wallet_create"); request.put ("seed", seed.to_string ()); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (10s, response.status != 0); ASSERT_EQ (200, response.status); std::string wallet_text (response.json.get ("wallet")); @@ -1022,23 +862,16 @@ TEST (rpc, wallet_export) nano::system system; auto node = add_ipc_enabled_node (system); system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "wallet_export"); request.put ("wallet", node->wallets.items.begin ()->first.to_string ()); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::string wallet_json (response.json.get ("json")); bool error (false); - scoped_thread_name_io.reset (); + rpc_ctx->io_scope->reset (); auto transaction (node->wallets.tx_begin_write ()); nano::kdf kdf; nano::wallet_store store (error, kdf, transaction, nano::genesis_account, 1, "0", wallet_json); @@ -1051,19 +884,12 @@ TEST (rpc, wallet_destroy) nano::system system; auto node = add_ipc_enabled_node (system); system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - scoped_io_thread_name_change scoped_thread_name_io; + auto [rpc, rpc_ctx] = add_rpc (system, node); auto wallet_id (node->wallets.items.begin ()->first); - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); boost::property_tree::ptree request; request.put ("action", "wallet_destroy"); request.put ("wallet", wallet_id.to_string ()); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_EQ (node->wallets.items.end (), node->wallets.items.find (wallet_id)); @@ -1080,14 +906,7 @@ TEST (rpc, account_move) auto source_id = nano::random_wallet_id (); auto source (node->wallets.create (source_id)); source->insert_adhoc (key.prv); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "account_move"); request.put ("wallet", wallet_id.to_string ()); @@ -1097,7 +916,7 @@ TEST (rpc, account_move) entry.put ("", key.pub.to_account ()); keys.push_back (std::make_pair ("", entry)); request.add_child ("accounts", keys); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_EQ ("1", response.json.get ("moved")); @@ -1111,18 +930,11 @@ TEST (rpc, block) { nano::system system; auto node = add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "block"); request.put ("hash", node->latest (nano::genesis_account).to_string ()); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); auto contents (response.json.get ("contents")); @@ -1134,19 +946,12 @@ TEST (rpc, block_account) { nano::system system; auto node = add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); nano::genesis genesis; boost::property_tree::ptree request; request.put ("action", "block_account"); request.put ("hash", genesis.hash ().to_string ()); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::string account_text (response.json.get ("account")); @@ -1164,19 +969,12 @@ TEST (rpc, chain) ASSERT_FALSE (genesis.is_zero ()); auto block (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, 1)); ASSERT_NE (nullptr, block); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "chain"); request.put ("block", block->hash ().to_string ()); request.put ("count", std::to_string (std::numeric_limits::max ())); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); auto & blocks_node (response.json.get_child ("blocks")); @@ -1200,19 +998,12 @@ TEST (rpc, chain_limit) ASSERT_FALSE (genesis.is_zero ()); auto block (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, 1)); ASSERT_NE (nullptr, block); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "chain"); request.put ("block", block->hash ().to_string ()); request.put ("count", 1); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); auto & blocks_node (response.json.get_child ("blocks")); @@ -1235,20 +1026,13 @@ TEST (rpc, chain_offset) ASSERT_FALSE (genesis.is_zero ()); auto block (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, 1)); ASSERT_NE (nullptr, block); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "chain"); request.put ("block", block->hash ().to_string ()); request.put ("count", std::to_string (std::numeric_limits::max ())); request.put ("offset", 1); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); auto & blocks_node (response.json.get_child ("blocks")); @@ -1278,20 +1062,13 @@ TEST (rpc, frontier) node->store.account.put (transaction, key.pub, nano::account_info (hash, 0, 0, 0, 0, 0, nano::epoch::epoch_0)); } } - scoped_io_thread_name_change scoped_thread_name_io; nano::keypair key; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "frontiers"); request.put ("account", nano::account (0).to_account ()); request.put ("count", std::to_string (std::numeric_limits::max ())); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); auto & frontiers_node (response.json.get_child ("frontiers")); @@ -1325,21 +1102,13 @@ TEST (rpc, frontier_limited) node->store.account.put (transaction, key.pub, nano::account_info (hash, 0, 0, 0, 0, 0, nano::epoch::epoch_0)); } } - - scoped_io_thread_name_change scoped_thread_name_io; nano::keypair key; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "frontiers"); request.put ("account", nano::account (0).to_account ()); request.put ("count", std::to_string (100)); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); auto & frontiers_node (response.json.get_child ("frontiers")); @@ -1363,20 +1132,13 @@ TEST (rpc, frontier_startpoint) node->store.account.put (transaction, key.pub, nano::account_info (hash, 0, 0, 0, 0, 0, nano::epoch::epoch_0)); } } - scoped_io_thread_name_change scoped_thread_name_io; nano::keypair key; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "frontiers"); request.put ("account", source.begin ()->first.to_account ()); request.put ("count", std::to_string (1)); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); auto & frontiers_node (response.json.get_child ("frontiers")); @@ -1405,19 +1167,12 @@ TEST (rpc, history) ASSERT_EQ (nano::process_result::progress, node0->ledger.process (transaction, ureceive).code); ASSERT_EQ (nano::process_result::progress, node0->ledger.process (transaction, uchange).code); } - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node0, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node0->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node0); boost::property_tree::ptree request; request.put ("action", "history"); request.put ("hash", uchange.hash ().to_string ()); request.put ("count", 100); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::vector> history_l; @@ -1471,20 +1226,13 @@ TEST (rpc, account_history) ASSERT_EQ (nano::process_result::progress, node0->ledger.process (transaction, ureceive).code); ASSERT_EQ (nano::process_result::progress, node0->ledger.process (transaction, uchange).code); } - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node0, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node0->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node0); { boost::property_tree::ptree request; request.put ("action", "account_history"); request.put ("account", nano::genesis_account.to_account ()); request.put ("count", 100); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (10s, response.status != 0); ASSERT_EQ (200, response.status); std::vector> history_l; @@ -1528,7 +1276,7 @@ TEST (rpc, account_history) request.put ("account", nano::genesis_account.to_account ()); request.put ("reverse", true); request.put ("count", 1); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (10s, response.status != 0); ASSERT_EQ (200, response.status); auto & history_node (response.json.get_child ("history")); @@ -1538,12 +1286,12 @@ TEST (rpc, account_history) } // Test filtering - scoped_thread_name_io.reset (); + rpc_ctx->io_scope->reset (); auto account2 (system.wallet (0)->deterministic_insert ()); auto send2 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, account2, node0->config.receive_minimum.number ())); ASSERT_NE (nullptr, send2); auto receive2 (system.wallet (0)->receive_action (send2->hash (), account2, node0->config.receive_minimum.number (), send2->link ().as_account ())); - scoped_thread_name_io.renew (); + rpc_ctx->io_scope->renew (); // Test filter for send state blocks ASSERT_NE (nullptr, receive2); { @@ -1556,7 +1304,7 @@ TEST (rpc, account_history) filtered_accounts.push_back (std::make_pair ("", other_account)); request.add_child ("account_filter", filtered_accounts); request.put ("count", 100); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (10s, response.status != 0); auto history_node (response.json.get_child ("history")); ASSERT_EQ (history_node.size (), 2); @@ -1572,7 +1320,7 @@ TEST (rpc, account_history) filtered_accounts.push_back (std::make_pair ("", other_account)); request.add_child ("account_filter", filtered_accounts); request.put ("count", 100); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (10s, response.status != 0); auto history_node (response.json.get_child ("history")); ASSERT_EQ (history_node.size (), 1); @@ -1590,19 +1338,12 @@ TEST (rpc, history_count) ASSERT_NE (nullptr, send); auto receive (system.wallet (0)->receive_action (send->hash (), nano::dev_genesis_key.pub, node->config.receive_minimum.number (), send->link ().as_account ())); ASSERT_NE (nullptr, receive); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "history"); request.put ("hash", receive->hash ().to_string ()); request.put ("count", 1); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); auto & history_node (response.json.get_child ("history")); @@ -1675,18 +1416,12 @@ TEST (rpc, history_pruning) auto transaction (node0->store.tx_begin_write ()); ASSERT_EQ (1, node0->ledger.pruning_action (transaction, change->hash (), 1)); } - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node0, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node0->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node0); boost::property_tree::ptree request; request.put ("action", "history"); request.put ("hash", send->hash ().to_string ()); request.put ("count", 100); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::vector> history_l; @@ -1704,14 +1439,16 @@ TEST (rpc, history_pruning) ASSERT_EQ (send->hash ().to_string (), std::get<3> (history_l[0])); // Pruning action { + rpc_ctx->io_scope->reset (); auto transaction (node0->store.tx_begin_write ()); ASSERT_EQ (1, node0->ledger.pruning_action (transaction, send->hash (), 1)); + rpc_ctx->io_scope->renew (); } boost::property_tree::ptree request2; request2.put ("action", "history"); request2.put ("hash", receive->hash ().to_string ()); request2.put ("count", 100); - test_response response2 (request2, rpc.config.port, system.io_ctx); + test_response response2 (request2, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response2.status != 0); ASSERT_EQ (200, response2.status); history_l.clear (); @@ -1731,14 +1468,16 @@ TEST (rpc, history_pruning) ASSERT_EQ (receive->hash ().to_string (), std::get<3> (history_l[0])); // Pruning action { + rpc_ctx->io_scope->reset (); auto transaction (node0->store.tx_begin_write ()); ASSERT_EQ (1, node0->ledger.pruning_action (transaction, receive->hash (), 1)); + rpc_ctx->io_scope->renew (); } boost::property_tree::ptree request3; request3.put ("action", "history"); request3.put ("hash", uchange->hash ().to_string ()); request3.put ("count", 100); - test_response response3 (request3, rpc.config.port, system.io_ctx); + test_response response3 (request3, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response3.status != 0); ASSERT_EQ (200, response3.status); history_l.clear (); @@ -1761,34 +1500,27 @@ TEST (rpc, history_pruning) TEST (rpc, process_block) { nano::system system; - auto & node1 = *add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; + auto node1 = add_ipc_enabled_node (system); + auto [rpc, rpc_ctx] = add_rpc (system, node1); nano::keypair key; - auto latest (node1.latest (nano::dev_genesis_key.pub)); - nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1.work_generate_blocking (latest)); - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto latest (node1->latest (nano::dev_genesis_key.pub)); + nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); boost::property_tree::ptree request; request.put ("action", "process"); std::string json; send.serialize_json (json); request.put ("block", json); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); - ASSERT_TIMELY (10s, node1.latest (nano::dev_genesis_key.pub) == send.hash ()); + ASSERT_TIMELY (10s, node1->latest (nano::dev_genesis_key.pub) == send.hash ()); std::string send_hash (response.json.get ("hash")); ASSERT_EQ (send.hash ().to_string (), send_hash); } request.put ("json_block", true); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::error_code ec (nano::error_blocks::invalid_block); @@ -1799,25 +1531,18 @@ TEST (rpc, process_block) TEST (rpc, process_json_block) { nano::system system; - auto & node1 = *add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; + auto node1 = add_ipc_enabled_node (system); + auto [rpc, rpc_ctx] = add_rpc (system, node1); nano::keypair key; - auto latest (node1.latest (nano::dev_genesis_key.pub)); - nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1.work_generate_blocking (latest)); - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto latest (node1->latest (nano::dev_genesis_key.pub)); + nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); boost::property_tree::ptree request; request.put ("action", "process"); boost::property_tree::ptree block_node; send.serialize_json (block_node); request.add_child ("block", block_node); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::error_code ec (nano::error_blocks::invalid_block); @@ -1825,10 +1550,10 @@ TEST (rpc, process_json_block) } request.put ("json_block", true); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); - ASSERT_TIMELY (10s, node1.latest (nano::dev_genesis_key.pub) == send.hash ()); + ASSERT_TIMELY (10s, node1->latest (nano::dev_genesis_key.pub) == send.hash ()); std::string send_hash (response.json.get ("hash")); ASSERT_EQ (send.hash ().to_string (), send_hash); } @@ -1837,18 +1562,11 @@ TEST (rpc, process_json_block) TEST (rpc, process_block_async) { nano::system system; - auto & node1 = *add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; + auto node1 = add_ipc_enabled_node (system); + auto [rpc, rpc_ctx] = add_rpc (system, node1); nano::keypair key; - auto latest (node1.latest (nano::dev_genesis_key.pub)); - nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1.work_generate_blocking (latest)); - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto latest (node1->latest (nano::dev_genesis_key.pub)); + nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); boost::property_tree::ptree request; request.put ("action", "process"); request.put ("async", "true"); @@ -1857,7 +1575,7 @@ TEST (rpc, process_block_async) request.put ("block", json); request.put ("json_block", true); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::error_code ec (nano::error_blocks::invalid_block); @@ -1865,7 +1583,7 @@ TEST (rpc, process_block_async) } request.put ("json_block", false); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::error_code ec (nano::error_common::is_not_state_block); @@ -1877,36 +1595,29 @@ TEST (rpc, process_block_async) state_send->serialize_json (json1); request.put ("block", json1); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_EQ ("1", response.json.get ("started")); - ASSERT_TIMELY (10s, node1.latest (nano::dev_genesis_key.pub) == state_send->hash ()); + ASSERT_TIMELY (10s, node1->latest (nano::dev_genesis_key.pub) == state_send->hash ()); } } TEST (rpc, process_block_no_work) { nano::system system; - auto & node1 = *add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; + auto node1 = add_ipc_enabled_node (system); + auto [rpc, rpc_ctx] = add_rpc (system, node1); nano::keypair key; - auto latest (node1.latest (nano::dev_genesis_key.pub)); - nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1.work_generate_blocking (latest)); + auto latest (node1->latest (nano::dev_genesis_key.pub)); + nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); send.block_work_set (0); - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); boost::property_tree::ptree request; request.put ("action", "process"); std::string json; send.serialize_json (json); request.put ("block", json); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_FALSE (response.json.get ("error", "").empty ()); @@ -1917,24 +1628,17 @@ TEST (rpc, process_republish) nano::system system (2); auto & node1 (*system.nodes[0]); auto & node2 (*system.nodes[1]); - auto & node3 = *add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; + auto node3 = add_ipc_enabled_node (system); + auto [rpc, rpc_ctx] = add_rpc (system, node3); nano::keypair key; auto latest (node1.latest (nano::dev_genesis_key.pub)); - nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node3.work_generate_blocking (latest)); - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node3, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node3.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node3->work_generate_blocking (latest)); boost::property_tree::ptree request; request.put ("action", "process"); std::string json; send.serialize_json (json); request.put ("block", json); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_TIMELY (10s, node2.latest (nano::dev_genesis_key.pub) == send.hash ()); @@ -1943,37 +1647,30 @@ TEST (rpc, process_republish) TEST (rpc, process_subtype_send) { nano::system system; - auto & node1 = *add_ipc_enabled_node (system); + auto node1 = add_ipc_enabled_node (system); system.add_node (); - scoped_io_thread_name_change scoped_thread_name_io; + auto [rpc, rpc_ctx] = add_rpc (system, node1); nano::keypair key; - auto latest (node1.latest (nano::dev_genesis_key.pub)); - nano::state_block send (nano::genesis_account, latest, nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1.work_generate_blocking (latest)); - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto latest (node1->latest (nano::dev_genesis_key.pub)); + nano::state_block send (nano::genesis_account, latest, nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); boost::property_tree::ptree request; request.put ("action", "process"); std::string json; send.serialize_json (json); request.put ("block", json); request.put ("subtype", "receive"); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::error_code ec (nano::error_rpc::invalid_subtype_balance); ASSERT_EQ (response.json.get ("error"), ec.message ()); request.put ("subtype", "change"); - test_response response2 (request, rpc.config.port, system.io_ctx); + test_response response2 (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (10s, response2.status != 0); ASSERT_EQ (200, response2.status); ASSERT_EQ (response2.json.get ("error"), ec.message ()); request.put ("subtype", "send"); - test_response response3 (request, rpc.config.port, system.io_ctx); + test_response response3 (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (10s, response3.status != 0); ASSERT_EQ (200, response3.status); ASSERT_EQ (send.hash ().to_string (), response3.json.get ("hash")); @@ -1983,41 +1680,34 @@ TEST (rpc, process_subtype_send) TEST (rpc, process_subtype_open) { nano::system system; - auto & node1 = *add_ipc_enabled_node (system); + auto node1 = add_ipc_enabled_node (system); auto & node2 = *system.add_node (); nano::keypair key; - auto latest (node1.latest (nano::dev_genesis_key.pub)); - auto send = std::make_shared (nano::genesis_account, latest, nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1.work_generate_blocking (latest)); - ASSERT_EQ (nano::process_result::progress, node1.process (*send).code); + auto latest (node1->latest (nano::dev_genesis_key.pub)); + auto send = std::make_shared (nano::genesis_account, latest, nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); + ASSERT_EQ (nano::process_result::progress, node1->process (*send).code); ASSERT_EQ (nano::process_result::progress, node2.process (*send).code); - scoped_io_thread_name_change scoped_thread_name_io; - node1.scheduler.manual (send); - nano::state_block open (key.pub, 0, key.pub, nano::Gxrb_ratio, send->hash (), key.prv, key.pub, *node1.work_generate_blocking (key.pub)); - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node1); + node1->scheduler.manual (send); + nano::state_block open (key.pub, 0, key.pub, nano::Gxrb_ratio, send->hash (), key.prv, key.pub, *node1->work_generate_blocking (key.pub)); boost::property_tree::ptree request; request.put ("action", "process"); std::string json; open.serialize_json (json); request.put ("block", json); request.put ("subtype", "send"); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::error_code ec (nano::error_rpc::invalid_subtype_balance); ASSERT_EQ (response.json.get ("error"), ec.message ()); request.put ("subtype", "epoch"); - test_response response2 (request, rpc.config.port, system.io_ctx); + test_response response2 (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (10s, response2.status != 0); ASSERT_EQ (200, response2.status); ASSERT_EQ (response2.json.get ("error"), ec.message ()); request.put ("subtype", "open"); - test_response response3 (request, rpc.config.port, system.io_ctx); + test_response response3 (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (10s, response3.status != 0); ASSERT_EQ (200, response3.status); ASSERT_EQ (open.hash ().to_string (), response3.json.get ("hash")); @@ -2027,41 +1717,34 @@ TEST (rpc, process_subtype_open) TEST (rpc, process_subtype_receive) { nano::system system; - auto & node1 = *add_ipc_enabled_node (system); + auto node1 = add_ipc_enabled_node (system); auto & node2 = *system.add_node (); - auto latest (node1.latest (nano::dev_genesis_key.pub)); - auto send = std::make_shared (nano::genesis_account, latest, nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1.work_generate_blocking (latest)); - ASSERT_EQ (nano::process_result::progress, node1.process (*send).code); + auto latest (node1->latest (nano::dev_genesis_key.pub)); + auto send = std::make_shared (nano::genesis_account, latest, nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); + ASSERT_EQ (nano::process_result::progress, node1->process (*send).code); ASSERT_EQ (nano::process_result::progress, node2.process (*send).code); - scoped_io_thread_name_change scoped_thread_name_io; - node1.scheduler.manual (send); - nano::state_block receive (nano::dev_genesis_key.pub, send->hash (), nano::dev_genesis_key.pub, nano::genesis_amount, send->hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1.work_generate_blocking (send->hash ())); - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node1); + node1->scheduler.manual (send); + nano::state_block receive (nano::dev_genesis_key.pub, send->hash (), nano::dev_genesis_key.pub, nano::genesis_amount, send->hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (send->hash ())); boost::property_tree::ptree request; request.put ("action", "process"); std::string json; receive.serialize_json (json); request.put ("block", json); request.put ("subtype", "send"); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::error_code ec (nano::error_rpc::invalid_subtype_balance); ASSERT_EQ (response.json.get ("error"), ec.message ()); request.put ("subtype", "open"); - test_response response2 (request, rpc.config.port, system.io_ctx); + test_response response2 (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (10s, response2.status != 0); ASSERT_EQ (200, response2.status); ec = nano::error_rpc::invalid_subtype_previous; ASSERT_EQ (response2.json.get ("error"), ec.message ()); request.put ("subtype", "receive"); - test_response response3 (request, rpc.config.port, system.io_ctx); + test_response response3 (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (10s, response3.status != 0); ASSERT_EQ (200, response3.status); ASSERT_EQ (receive.hash ().to_string (), response3.json.get ("hash")); @@ -2071,29 +1754,22 @@ TEST (rpc, process_subtype_receive) TEST (rpc, process_ledger_insufficient_work) { nano::system system; - auto & node = *add_ipc_enabled_node (system); - ASSERT_LT (node.network_params.network.publish_thresholds.entry, node.network_params.network.publish_thresholds.epoch_1); - auto latest (node.latest (nano::dev_genesis_key.pub)); - auto min_difficulty = node.network_params.network.publish_thresholds.entry; - auto max_difficulty = node.network_params.network.publish_thresholds.epoch_1; + auto node = add_ipc_enabled_node (system); + auto [rpc, rpc_ctx] = add_rpc (system, node); + ASSERT_LT (node->network_params.network.publish_thresholds.entry, node->network_params.network.publish_thresholds.epoch_1); + auto latest (node->latest (nano::dev_genesis_key.pub)); + auto min_difficulty = node->network_params.network.publish_thresholds.entry; + auto max_difficulty = node->network_params.network.publish_thresholds.epoch_1; nano::state_block send (nano::genesis_account, latest, nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, system.work_generate_limited (latest, min_difficulty, max_difficulty)); ASSERT_LT (send.difficulty (), max_difficulty); ASSERT_GE (send.difficulty (), min_difficulty); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); boost::property_tree::ptree request; request.put ("action", "process"); std::string json; send.serialize_json (json); request.put ("block", json); request.put ("subtype", "send"); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::error_code ec (nano::error_process::insufficient_work); @@ -2108,14 +1784,7 @@ TEST (rpc, keepalive) auto node1 (std::make_shared (system.io_ctx, nano::get_available_port (), nano::unique_path (), system.logging, system.work)); node1->start (); system.nodes.push_back (node1); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node0, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node0->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node0); boost::property_tree::ptree request; request.put ("action", "keepalive"); auto address (boost::str (boost::format ("%1%") % node1->network.endpoint ().address ())); @@ -2124,7 +1793,7 @@ TEST (rpc, keepalive) request.put ("port", port); ASSERT_EQ (nullptr, node0->network.udp_channels.channel (node1->network.endpoint ())); ASSERT_EQ (0, node0->network.size ()); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); system.deadline_set (10s); @@ -2142,19 +1811,12 @@ TEST (rpc, peers) auto node = add_ipc_enabled_node (system); auto port = nano::get_available_port (); system.add_node (nano::node_config (port, system.logging)); - scoped_io_thread_name_change scoped_thread_name_io; nano::endpoint endpoint (boost::asio::ip::make_address_v6 ("fc00::1"), 4000); node->network.udp_channels.insert (endpoint, node->network_params.protocol.protocol_version); - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "peers"); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); auto & peers_node (response.json.get_child ("peers")); @@ -2170,22 +1832,15 @@ TEST (rpc, peers_node_id) { nano::system system; auto node = add_ipc_enabled_node (system); - auto port = nano::get_available_port (); - system.add_node (nano::node_config (port, system.logging)); - scoped_io_thread_name_change scoped_thread_name_io; - nano::endpoint endpoint (boost::asio::ip::make_address_v6 ("fc00::1"), 4000); - node->network.udp_channels.insert (endpoint, node->network_params.protocol.protocol_version); - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto port = nano::get_available_port (); + system.add_node (nano::node_config (port, system.logging)); + nano::endpoint endpoint (boost::asio::ip::make_address_v6 ("fc00::1"), 4000); + node->network.udp_channels.insert (endpoint, node->network_params.protocol.protocol_version); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "peers"); request.put ("peer_details", true); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); auto & peers_node (response.json.get_child ("peers")); @@ -2207,23 +1862,16 @@ TEST (rpc, pending) nano::keypair key1; system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); auto block1 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key1.pub, 100)); - scoped_io_thread_name_change scoped_thread_name_io; node->scheduler.flush (); ASSERT_TIMELY (5s, !node->active.active (*block1)); ASSERT_TIMELY (5s, node->ledger.cache.cemented_count == 2 && node->confirmation_height_processor.current ().is_zero () && node->confirmation_height_processor.awaiting_processing_size () == 0); - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "pending"); request.put ("account", key1.pub.to_account ()); request.put ("count", "100"); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); auto & blocks_node (response.json.get_child ("blocks")); @@ -2233,7 +1881,7 @@ TEST (rpc, pending) } request.put ("sorting", "true"); // Sorting test { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); auto & blocks_node (response.json.get_child ("blocks")); @@ -2245,7 +1893,7 @@ TEST (rpc, pending) } request.put ("threshold", "100"); // Threshold test { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); auto & blocks_node (response.json.get_child ("blocks")); @@ -2267,7 +1915,7 @@ TEST (rpc, pending) } request.put ("threshold", "101"); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (10s, response.status != 0); ASSERT_EQ (200, response.status); auto & blocks_node (response.json.get_child ("blocks")); @@ -2277,7 +1925,7 @@ TEST (rpc, pending) request.put ("source", "true"); request.put ("min_version", "true"); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); auto & blocks_node (response.json.get_child ("blocks")); @@ -2300,31 +1948,31 @@ TEST (rpc, pending) request.put ("source", "false"); request.put ("min_version", "false"); - auto check_block_response_count = [&system, &request, &rpc] (size_t size) { - test_response response (request, rpc.config.port, system.io_ctx); + auto check_block_response_count_l = [&system, &request, rpc = rpc] (size_t size) { + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_EQ (size, response.json.get_child ("blocks").size ()); }; - check_block_response_count (1); - scoped_thread_name_io.reset (); + check_block_response_count_l (1); + rpc_ctx->io_scope->reset (); reset_confirmation_height (system.nodes.front ()->store, block1->account ()); - scoped_thread_name_io.renew (); - check_block_response_count (0); + rpc_ctx->io_scope->renew (); + check_block_response_count_l (0); request.put ("include_only_confirmed", "false"); - scoped_thread_name_io.renew (); - check_block_response_count (1); + rpc_ctx->io_scope->renew (); + check_block_response_count_l (1); request.put ("include_only_confirmed", "true"); // Sorting with a smaller count than total should give absolute sorted amounts - scoped_thread_name_io.reset (); + rpc_ctx->io_scope->reset (); node->store.confirmation_height.put (node->store.tx_begin_write (), nano::dev_genesis_key.pub, { 2, block1->hash () }); auto block2 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key1.pub, 200)); auto block3 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key1.pub, 300)); auto block4 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key1.pub, 400)); - scoped_thread_name_io.renew (); + rpc_ctx->io_scope->renew (); ASSERT_TIMELY (10s, node->ledger.account_pending (node->store.tx_begin_read (), key1.pub) == 1000); ASSERT_TIMELY (5s, !node->active.active (*block4)); @@ -2333,7 +1981,7 @@ TEST (rpc, pending) request.put ("count", "2"); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); auto & blocks_node (response.json.get_child ("blocks")); @@ -2352,23 +2000,16 @@ TEST (rpc, pending_burn) nano::account burn (0); system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); auto block1 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, burn, 100)); - scoped_io_thread_name_change scoped_thread_name_io; + auto [rpc, rpc_ctx] = add_rpc (system, node); node->scheduler.flush (); ASSERT_TIMELY (5s, !node->active.active (*block1)); ASSERT_TIMELY (5s, node->ledger.cache.cemented_count == 2 && node->confirmation_height_processor.current ().is_zero () && node->confirmation_height_processor.awaiting_processing_size () == 0); - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); boost::property_tree::ptree request; request.put ("action", "pending"); request.put ("account", burn.to_account ()); request.put ("count", "100"); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); auto & blocks_node (response.json.get_child ("blocks")); @@ -2390,18 +2031,11 @@ TEST (rpc, search_pending) auto transaction (node->store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, block).code); } - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "search_pending"); request.put ("wallet", wallet); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_TIMELY (10s, node->balance (nano::dev_genesis_key.pub) == nano::genesis_amount); @@ -2411,20 +2045,10 @@ TEST (rpc, version) { nano::system system; auto node1 = add_ipc_enabled_node (system); - nano::keypair key; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - system.wallet (0)->insert_adhoc (key.prv); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node1->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request1; request1.put ("action", "version"); - test_response response1 (request1, rpc.config.port, system.io_ctx); + test_response response1 (request1, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response1.status != 0); ASSERT_EQ (200, response1.status); ASSERT_EQ ("1", response1.json.get ("rpc_version")); @@ -2460,23 +2084,13 @@ TEST (rpc, work_generate) { nano::system system; auto node = add_ipc_enabled_node (system); - nano::keypair key; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - system.wallet (0)->insert_adhoc (key.prv); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); nano::block_hash hash (1); boost::property_tree::ptree request; request.put ("action", "work_generate"); request.put ("hash", hash.to_string ()); - auto verify_response = [node, &rpc, &system] (auto & request, auto & hash) { - test_response response (request, rpc.config.port, system.io_ctx); + auto verify_response = [node, rpc = rpc, &system] (auto & request, auto & hash) { + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_EQ (hash.to_string (), response.json.get ("hash")); @@ -2501,15 +2115,8 @@ TEST (rpc, work_generate_difficulty) nano::system system; nano::node_config node_config (nano::get_available_port (), system.logging); node_config.max_work_generate_multiplier = 1000; - auto node = add_ipc_enabled_node (system, node_config); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto node = add_ipc_enabled_node (system); + auto [rpc, rpc_ctx] = add_rpc (system, node); nano::block_hash hash (1); boost::property_tree::ptree request; request.put ("action", "work_generate"); @@ -2517,7 +2124,7 @@ TEST (rpc, work_generate_difficulty) { uint64_t difficulty (0xfff0000000000000); request.put ("difficulty", nano::to_string_hex (difficulty)); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (10s, response.status != 0); ASSERT_EQ (200, response.status); auto work_text (response.json.get ("work")); @@ -2536,7 +2143,7 @@ TEST (rpc, work_generate_difficulty) { uint64_t difficulty (0xffff000000000000); request.put ("difficulty", nano::to_string_hex (difficulty)); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (20s, response.status != 0); ASSERT_EQ (200, response.status); auto work_text (response.json.get ("work")); @@ -2548,7 +2155,7 @@ TEST (rpc, work_generate_difficulty) { uint64_t difficulty (node->max_work_generate_difficulty (nano::work_version::work_1) + 1); request.put ("difficulty", nano::to_string_hex (difficulty)); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::error_code ec (nano::error_rpc::difficulty_limit); @@ -2562,14 +2169,7 @@ TEST (rpc, work_generate_multiplier) nano::node_config node_config (nano::get_available_port (), system.logging); node_config.max_work_generate_multiplier = 100; auto node = add_ipc_enabled_node (system, node_config); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); nano::block_hash hash (1); boost::property_tree::ptree request; request.put ("action", "work_generate"); @@ -2580,7 +2180,7 @@ TEST (rpc, work_generate_multiplier) request.put ("difficulty", nano::to_string_hex (0xff00000000000000)); double multiplier{ 100.0 }; request.put ("multiplier", multiplier); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (10s, response.status != 0); ASSERT_EQ (200, response.status); auto work_text (response.json.get_optional ("work")); @@ -2597,7 +2197,7 @@ TEST (rpc, work_generate_multiplier) } { request.put ("multiplier", -1.5); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::error_code ec (nano::error_rpc::bad_multiplier_format); @@ -2606,7 +2206,7 @@ TEST (rpc, work_generate_multiplier) { double max_multiplier (nano::difficulty::to_multiplier (node->max_work_generate_difficulty (nano::work_version::work_1), node->default_difficulty (nano::work_version::work_1))); request.put ("multiplier", max_multiplier + 1); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::error_code ec (nano::error_rpc::difficulty_limit); @@ -2618,14 +2218,7 @@ TEST (rpc, work_generate_block_high) { nano::system system; auto node = add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); nano::keypair key; nano::state_block block (key.pub, 0, nano::dev_genesis_key.pub, nano::Gxrb_ratio, 123, key.prv, key.pub, *node->work_generate_blocking (key.pub)); nano::block_hash hash (block.root ().as_block_hash ()); @@ -2638,7 +2231,7 @@ TEST (rpc, work_generate_block_high) block.serialize_json (json); request.add_child ("block", json); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_EQ (1, response.json.count ("error")); @@ -2650,14 +2243,7 @@ TEST (rpc, work_generate_block_low) { nano::system system; auto node = add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); nano::keypair key; nano::state_block block (key.pub, 0, nano::dev_genesis_key.pub, nano::Gxrb_ratio, 123, key.prv, key.pub, 0); auto threshold (node->default_difficulty (block.work_version ())); @@ -2673,7 +2259,7 @@ TEST (rpc, work_generate_block_low) block.serialize_json (json); request.put ("block", json); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (10s, response.status != 0); ASSERT_EQ (200, response.status); auto work_text (response.json.get_optional ("work")); @@ -2694,14 +2280,7 @@ TEST (rpc, work_generate_block_root_mismatch) { nano::system system; auto node = add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); nano::keypair key; nano::state_block block (key.pub, 0, nano::dev_genesis_key.pub, nano::Gxrb_ratio, 123, key.prv, key.pub, *node->work_generate_blocking (key.pub)); nano::block_hash hash (1); @@ -2713,7 +2292,7 @@ TEST (rpc, work_generate_block_root_mismatch) block.serialize_json (json); request.put ("block", json); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_EQ (1, response.json.count ("error")); @@ -2733,18 +2312,11 @@ TEST (rpc, work_generate_block_ledger_epoch_2) system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); auto send_block (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, nano::Gxrb_ratio)); ASSERT_NE (nullptr, send_block); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); nano::state_block block (key.pub, 0, nano::dev_genesis_key.pub, nano::Gxrb_ratio, send_block->hash (), key.prv, key.pub, 0); auto threshold (nano::work_threshold (block.work_version (), nano::block_details (nano::epoch::epoch_2, false, true, false))); block.block_work_set (system.work_generate_limited (block.root ().as_block_hash (), 1, threshold - 1)); nano::block_hash hash (block.root ().as_block_hash ()); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "work_generate"); request.put ("hash", hash.to_string ()); @@ -2756,7 +2328,7 @@ TEST (rpc, work_generate_block_ledger_epoch_2) auto iteration (0); while (!finished) { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (10s, response.status != 0); ASSERT_EQ (200, response.status); auto work_text (response.json.get_optional ("work")); @@ -2777,18 +2349,8 @@ TEST (rpc, work_generate_block_ledger_epoch_2) TEST (rpc, work_cancel) { nano::system system; - auto & node1 = *add_ipc_enabled_node (system); - nano::keypair key; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - system.wallet (0)->insert_adhoc (key.prv); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto node1 = add_ipc_enabled_node (system); + auto [rpc, rpc_ctx] = add_rpc (system, node1); nano::block_hash hash1 (1); boost::property_tree::ptree request1; request1.put ("action", "work_cancel"); @@ -2797,10 +2359,10 @@ TEST (rpc, work_cancel) system.deadline_set (10s); while (!done) { - system.work.generate (nano::work_version::work_1, hash1, node1.network_params.network.publish_thresholds.base, [&done] (boost::optional work_a) { + system.work.generate (nano::work_version::work_1, hash1, node1->network_params.network.publish_thresholds.base, [&done] (boost::optional work_a) { done = !work_a; }); - test_response response1 (request1, rpc.config.port, system.io_ctx); + test_response response1 (request1, rpc->config.port, system.io_ctx); std::error_code ec; ASSERT_TIMELY (10s, response1.status != 0); ASSERT_EQ (200, response1.status); @@ -2813,20 +2375,10 @@ TEST (rpc, work_cancel) TEST (rpc, work_peer_bad) { nano::system system; - auto & node1 = *add_ipc_enabled_node (system); + auto node1 = add_ipc_enabled_node (system); auto & node2 = *system.add_node (); - nano::keypair key; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - system.wallet (0)->insert_adhoc (key.prv); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); node2.config.work_peers.push_back (std::make_pair (boost::asio::ip::address_v6::any ().to_string (), 0)); + auto [rpc, rpc_ctx] = add_rpc (system, node1); nano::block_hash hash1 (1); std::atomic work (0); node2.work_generate (nano::work_version::work_1, hash1, node2.network_params.network.publish_thresholds.base, [&work] (boost::optional work_a) { @@ -2839,23 +2391,13 @@ TEST (rpc, work_peer_bad) TEST (rpc, work_peer_one) { nano::system system; - auto & node1 = *add_ipc_enabled_node (system); + auto node1 = add_ipc_enabled_node (system); auto & node2 = *system.add_node (); - nano::keypair key; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - system.wallet (0)->insert_adhoc (key.prv); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); - node2.config.work_peers.push_back (std::make_pair (node1.network.endpoint ().address ().to_string (), rpc.config.port)); + auto [rpc, rpc_ctx] = add_rpc (system, node1); + node2.config.work_peers.push_back (std::make_pair (node1->network.endpoint ().address ().to_string (), rpc->config.port)); nano::keypair key1; std::atomic work (0); - node2.work_generate (nano::work_version::work_1, key1.pub, node1.network_params.network.publish_thresholds.base, [&work] (boost::optional work_a) { + node2.work_generate (nano::work_version::work_1, key1.pub, node1->network_params.network.publish_thresholds.base, [&work] (boost::optional work_a) { ASSERT_TRUE (work_a.is_initialized ()); work = *work_a; }); @@ -2869,30 +2411,15 @@ TEST (rpc, work_peer_many) nano::system system3 (1); nano::system system4 (1); auto & node1 (*system1.nodes[0]); - auto & node2 = *add_ipc_enabled_node (system2); - auto & node3 = *add_ipc_enabled_node (system3); - auto & node4 = *add_ipc_enabled_node (system4); - nano::keypair key; - nano::rpc_config config2 (nano::get_available_port (), true); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server2 (node2, node_rpc_config); - nano::ipc_rpc_processor ipc_rpc_processor2 (system2.io_ctx, config2); - nano::rpc rpc2 (system2.io_ctx, config2, ipc_rpc_processor2); - rpc2.start (); - nano::rpc_config config3 (nano::get_available_port (), true); - nano::ipc::ipc_server ipc_server3 (node3, node_rpc_config); - nano::ipc_rpc_processor ipc_rpc_processor3 (system3.io_ctx, config3); - nano::rpc rpc3 (system3.io_ctx, config3, ipc_rpc_processor3); - rpc3.start (); - nano::rpc_config config4 (nano::get_available_port (), true); - nano::ipc::ipc_server ipc_server4 (node4, node_rpc_config); - nano::ipc_rpc_processor ipc_rpc_processor4 (system4.io_ctx, config4); - nano::rpc rpc4 (system2.io_ctx, config4, ipc_rpc_processor4); - rpc4.start (); - node1.config.work_peers.push_back (std::make_pair (node2.network.endpoint ().address ().to_string (), rpc2.config.port)); - node1.config.work_peers.push_back (std::make_pair (node3.network.endpoint ().address ().to_string (), rpc3.config.port)); - node1.config.work_peers.push_back (std::make_pair (node4.network.endpoint ().address ().to_string (), rpc4.config.port)); + auto node2 = add_ipc_enabled_node (system2); + auto node3 = add_ipc_enabled_node (system3); + auto node4 = add_ipc_enabled_node (system4); + auto [rpc2, rpc_ctx_2] = add_rpc (system2, node2); + auto [rpc3, rpc_ctx_3] = add_rpc (system3, node3); + auto [rpc4, rpc_ctx_4] = add_rpc (system4, node4); + node1.config.work_peers.push_back (std::make_pair (node2->network.endpoint ().address ().to_string (), rpc2->config.port)); + node1.config.work_peers.push_back (std::make_pair (node3->network.endpoint ().address ().to_string (), rpc3->config.port)); + node1.config.work_peers.push_back (std::make_pair (node4->network.endpoint ().address ().to_string (), rpc4->config.port)); std::array, 10> works; for (auto i (0); i < works.size (); ++i) @@ -2916,21 +2443,14 @@ TEST (rpc, work_version_invalid) { nano::system system; auto node = add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); nano::block_hash hash (1); boost::property_tree::ptree request; request.put ("action", "work_generate"); request.put ("hash", hash.to_string ()); request.put ("version", "work_invalid"); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_EQ (1, response.json.count ("error")); @@ -2938,7 +2458,7 @@ TEST (rpc, work_version_invalid) } request.put ("action", "work_validate"); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_EQ (1, response.json.count ("error")); @@ -2950,19 +2470,12 @@ TEST (rpc, block_count) { { nano::system system; - auto & node1 = *add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto node1 = add_ipc_enabled_node (system); + auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request1; request1.put ("action", "block_count"); { - test_response response1 (request1, rpc.config.port, system.io_ctx); + test_response response1 (request1, rpc->config.port, system.io_ctx); ASSERT_TIMELY (10s, response1.status != 0); ASSERT_EQ (200, response1.status); ASSERT_EQ ("1", response1.json.get ("count")); @@ -2974,18 +2487,12 @@ TEST (rpc, block_count) // Should be able to get all counts even when enable_control is false. { nano::system system; - auto & node1 = *add_ipc_enabled_node (system); - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config; - rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto node1 = add_ipc_enabled_node (system); + auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request1; request1.put ("action", "block_count"); { - test_response response1 (request1, rpc.config.port, system.io_ctx); + test_response response1 (request1, rpc->config.port, system.io_ctx); ASSERT_TIMELY (10s, response1.status != 0); ASSERT_EQ (200, response1.status); ASSERT_EQ ("1", response1.json.get ("count")); @@ -3003,32 +2510,25 @@ TEST (rpc, block_count_pruning) node_config.enable_voting = false; // Remove after allowing pruned voting nano::node_flags node_flags; node_flags.enable_pruning = true; - auto & node1 = *add_ipc_enabled_node (system, node_config, node_flags); - auto latest (node1.latest (nano::dev_genesis_key.pub)); - auto send1 (std::make_shared (latest, nano::dev_genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1.work_generate_blocking (latest))); - node1.process_active (send1); - auto receive1 (std::make_shared (send1->hash (), send1->hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1.work_generate_blocking (send1->hash ()))); - node1.process_active (receive1); - node1.block_processor.flush (); + auto node1 = add_ipc_enabled_node (system, node_config, node_flags); + auto latest (node1->latest (nano::dev_genesis_key.pub)); + auto send1 (std::make_shared (latest, nano::dev_genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest))); + node1->process_active (send1); + auto receive1 (std::make_shared (send1->hash (), send1->hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (send1->hash ()))); + node1->process_active (receive1); + node1->block_processor.flush (); system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - ASSERT_TIMELY (5s, node1.ledger.cache.cemented_count == 3 && node1.confirmation_height_processor.current ().is_zero () && node1.confirmation_height_processor.awaiting_processing_size () == 0); + ASSERT_TIMELY (5s, node1->ledger.cache.cemented_count == 3 && node1->confirmation_height_processor.current ().is_zero () && node1->confirmation_height_processor.awaiting_processing_size () == 0); // Pruning action { - auto transaction (node1.store.tx_begin_write ()); - ASSERT_EQ (1, node1.ledger.pruning_action (transaction, send1->hash (), 1)); + auto transaction (node1->store.tx_begin_write ()); + ASSERT_EQ (1, node1->ledger.pruning_action (transaction, send1->hash (), 1)); } - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request1; request1.put ("action", "block_count"); { - test_response response1 (request1, rpc.config.port, system.io_ctx); + test_response response1 (request1, rpc->config.port, system.io_ctx); ASSERT_TIMELY (10s, response1.status != 0); ASSERT_EQ (200, response1.status); ASSERT_EQ ("3", response1.json.get ("count")); @@ -3042,18 +2542,11 @@ TEST (rpc, block_count_pruning) TEST (rpc, frontier_count) { nano::system system; - auto & node1 = *add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto node1 = add_ipc_enabled_node (system); + auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request1; request1.put ("action", "frontier_count"); - test_response response1 (request1, rpc.config.port, system.io_ctx); + test_response response1 (request1, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response1.status != 0); ASSERT_EQ (200, response1.status); ASSERT_EQ ("1", response1.json.get ("count")); @@ -3062,18 +2555,11 @@ TEST (rpc, frontier_count) TEST (rpc, account_count) { nano::system system; - auto & node1 = *add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto node1 = add_ipc_enabled_node (system); + auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request1; request1.put ("action", "account_count"); - test_response response1 (request1, rpc.config.port, system.io_ctx); + test_response response1 (request1, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response1.status != 0); ASSERT_EQ (200, response1.status); ASSERT_EQ ("1", response1.json.get ("count")); @@ -3082,34 +2568,27 @@ TEST (rpc, account_count) TEST (rpc, available_supply) { nano::system system; - auto & node1 = *add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto node1 = add_ipc_enabled_node (system); + auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request1; request1.put ("action", "available_supply"); - test_response response1 (request1, rpc.config.port, system.io_ctx); + test_response response1 (request1, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response1.status != 0); ASSERT_EQ (200, response1.status); ASSERT_EQ ("0", response1.json.get ("available")); - scoped_thread_name_io.reset (); + rpc_ctx->io_scope->reset (); system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); nano::keypair key; auto block (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, 1)); - scoped_thread_name_io.renew (); - test_response response2 (request1, rpc.config.port, system.io_ctx); + rpc_ctx->io_scope->renew (); + test_response response2 (request1, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response2.status != 0); ASSERT_EQ (200, response2.status); ASSERT_EQ ("1", response2.json.get ("available")); - scoped_thread_name_io.reset (); + rpc_ctx->io_scope->reset (); auto block2 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, 0, 100)); // Sending to burning 0 account - scoped_thread_name_io.renew (); - test_response response3 (request1, rpc.config.port, system.io_ctx); + rpc_ctx->io_scope->renew (); + test_response response3 (request1, rpc->config.port, system.io_ctx); system.deadline_set (5s); ASSERT_TIMELY (10s, response3.status != 0); ASSERT_EQ (200, response3.status); @@ -3119,19 +2598,12 @@ TEST (rpc, available_supply) TEST (rpc, mrai_to_raw) { nano::system system; - auto & node1 = *add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto node1 = add_ipc_enabled_node (system); + auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request1; request1.put ("action", "mrai_to_raw"); request1.put ("amount", "1"); - test_response response1 (request1, rpc.config.port, system.io_ctx); + test_response response1 (request1, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response1.status != 0); ASSERT_EQ (200, response1.status); ASSERT_EQ (nano::Mxrb_ratio.convert_to (), response1.json.get ("amount")); @@ -3140,19 +2612,12 @@ TEST (rpc, mrai_to_raw) TEST (rpc, mrai_from_raw) { nano::system system; - auto & node1 = *add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto node1 = add_ipc_enabled_node (system); + auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request1; request1.put ("action", "mrai_from_raw"); request1.put ("amount", nano::Mxrb_ratio.convert_to ()); - test_response response1 (request1, rpc.config.port, system.io_ctx); + test_response response1 (request1, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response1.status != 0); ASSERT_EQ (200, response1.status); ASSERT_EQ ("1", response1.json.get ("amount")); @@ -3161,19 +2626,12 @@ TEST (rpc, mrai_from_raw) TEST (rpc, krai_to_raw) { nano::system system; - auto & node1 = *add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto node1 = add_ipc_enabled_node (system); + auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request1; request1.put ("action", "krai_to_raw"); request1.put ("amount", "1"); - test_response response1 (request1, rpc.config.port, system.io_ctx); + test_response response1 (request1, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response1.status != 0); ASSERT_EQ (200, response1.status); ASSERT_EQ (nano::kxrb_ratio.convert_to (), response1.json.get ("amount")); @@ -3182,19 +2640,12 @@ TEST (rpc, krai_to_raw) TEST (rpc, krai_from_raw) { nano::system system; - auto & node1 = *add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto node1 = add_ipc_enabled_node (system); + auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request1; request1.put ("action", "krai_from_raw"); request1.put ("amount", nano::kxrb_ratio.convert_to ()); - test_response response1 (request1, rpc.config.port, system.io_ctx); + test_response response1 (request1, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response1.status != 0); ASSERT_EQ (200, response1.status); ASSERT_EQ ("1", response1.json.get ("amount")); @@ -3203,19 +2654,12 @@ TEST (rpc, krai_from_raw) TEST (rpc, nano_to_raw) { nano::system system; - auto & node1 = *add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto node1 = add_ipc_enabled_node (system); + auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request1; request1.put ("action", "nano_to_raw"); request1.put ("amount", "1"); - test_response response1 (request1, rpc.config.port, system.io_ctx); + test_response response1 (request1, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response1.status != 0); ASSERT_EQ (200, response1.status); ASSERT_EQ (nano::xrb_ratio.convert_to (), response1.json.get ("amount")); @@ -3224,19 +2668,12 @@ TEST (rpc, nano_to_raw) TEST (rpc, nano_from_raw) { nano::system system; - auto & node1 = *add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto node1 = add_ipc_enabled_node (system); + auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request1; request1.put ("action", "nano_from_raw"); request1.put ("amount", nano::xrb_ratio.convert_to ()); - test_response response1 (request1, rpc.config.port, system.io_ctx); + test_response response1 (request1, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response1.status != 0); ASSERT_EQ (200, response1.status); ASSERT_EQ ("1", response1.json.get ("amount")); @@ -3246,18 +2683,11 @@ TEST (rpc, account_representative) { nano::system system; auto node = add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("account", nano::genesis_account.to_account ()); request.put ("action", "account_representative"); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::string account_text1 (response.json.get ("representative")); @@ -3269,21 +2699,14 @@ TEST (rpc, account_representative_set) nano::system system; auto node = add_ipc_enabled_node (system); system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; nano::keypair rep; request.put ("account", nano::genesis_account.to_account ()); request.put ("representative", rep.pub.to_account ()); request.put ("wallet", node->wallets.items.begin ()->first.to_string ()); request.put ("action", "account_representative_set"); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::string block_text1 (response.json.get ("block")); @@ -3300,24 +2723,17 @@ TEST (rpc, account_representative_set_work_disabled) nano::system system; nano::node_config node_config (nano::get_available_port (), system.logging); node_config.work_threads = 0; - auto & node = *add_ipc_enabled_node (system, node_config); + auto node = add_ipc_enabled_node (system, node_config); system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; nano::keypair rep; request.put ("account", nano::genesis_account.to_account ()); request.put ("representative", rep.pub.to_account ()); - request.put ("wallet", node.wallets.items.begin ()->first.to_string ()); + request.put ("wallet", node->wallets.items.begin ()->first.to_string ()); request.put ("action", "account_representative_set"); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (10s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_EQ (std::error_code (nano::error_common::disabled_work_generation).message (), response.json.get ("error")); @@ -3327,29 +2743,22 @@ TEST (rpc, account_representative_set_work_disabled) TEST (rpc, account_representative_set_epoch_2) { nano::system system; - auto & node = *add_ipc_enabled_node (system); + auto node = add_ipc_enabled_node (system); // Upgrade the genesis account to epoch 2 - ASSERT_NE (nullptr, system.upgrade_genesis_epoch (node, nano::epoch::epoch_1)); - ASSERT_NE (nullptr, system.upgrade_genesis_epoch (node, nano::epoch::epoch_2)); + ASSERT_NE (nullptr, system.upgrade_genesis_epoch (*node, nano::epoch::epoch_1)); + ASSERT_NE (nullptr, system.upgrade_genesis_epoch (*node, nano::epoch::epoch_2)); system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv, false); auto target_difficulty = nano::work_threshold (nano::work_version::work_1, nano::block_details (nano::epoch::epoch_2, false, false, false)); - ASSERT_LT (node.network_params.network.publish_thresholds.entry, target_difficulty); - auto min_difficulty = node.network_params.network.publish_thresholds.entry; + ASSERT_LT (node->network_params.network.publish_thresholds.entry, target_difficulty); + auto min_difficulty = node->network_params.network.publish_thresholds.entry; - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; std::string wallet; - node.wallets.items.begin ()->first.encode_hex (wallet); + node->wallets.items.begin ()->first.encode_hex (wallet); request.put ("wallet", wallet); request.put ("action", "account_representative_set"); request.put ("account", nano::dev_genesis_key.pub.to_account ()); @@ -3359,7 +2768,7 @@ TEST (rpc, account_representative_set_epoch_2) auto insufficient = system.work_generate_limited (nano::genesis_hash, min_difficulty, target_difficulty); request.put ("work", nano::to_string_hex (insufficient)); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::error_code ec (nano::error_common::invalid_work); @@ -3377,21 +2786,14 @@ TEST (rpc, bootstrap) nano::send_block send (latest, nano::genesis_account, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system1.nodes[0]->work_generate_blocking (latest)); { auto transaction (system1.nodes[0]->store.tx_begin_write ()); - ASSERT_EQ (nano::process_result::progress, system1.nodes[0]->ledger.process (transaction, send).code); - } - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system0.io_ctx, rpc_config); - nano::rpc rpc (system0.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + ASSERT_EQ (nano::process_result::progress, system1.nodes[0]->ledger.process (transaction, send).code); + } + auto [rpc, rpc_ctx] = add_rpc (system0, node); boost::property_tree::ptree request; request.put ("action", "bootstrap"); request.put ("address", "::ffff:127.0.0.1"); request.put ("port", system1.nodes[0]->network.endpoint ().port ()); - test_response response (request, rpc.config.port, system0.io_ctx); + test_response response (request, rpc->config.port, system0.io_ctx); while (response.status == 0) { system0.poll (); @@ -3409,20 +2811,13 @@ TEST (rpc, account_remove) nano::system system0; auto node = add_ipc_enabled_node (system0); auto key1 (system0.wallet (0)->deterministic_insert ()); - scoped_io_thread_name_change scoped_thread_name_io; ASSERT_TRUE (system0.wallet (0)->exists (key1)); - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system0.io_ctx, rpc_config); - nano::rpc rpc (system0.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system0, node); boost::property_tree::ptree request; request.put ("action", "account_remove"); - request.put ("wallet", system0.nodes[0]->wallets.items.begin ()->first.to_string ()); + request.put ("wallet", node->wallets.items.begin ()->first.to_string ()); request.put ("account", key1.to_account ()); - test_response response (request, rpc.config.port, system0.io_ctx); + test_response response (request, rpc->config.port, system0.io_ctx); while (response.status == 0) { system0.poll (); @@ -3434,17 +2829,10 @@ TEST (rpc, representatives) { nano::system system0; auto node = add_ipc_enabled_node (system0); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system0.io_ctx, rpc_config); - nano::rpc rpc (system0.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system0, node); boost::property_tree::ptree request; request.put ("action", "representatives"); - test_response response (request, rpc.config.port, system0.io_ctx); + test_response response (request, rpc->config.port, system0.io_ctx); while (response.status == 0) { system0.poll (); @@ -3467,23 +2855,16 @@ TEST (rpc, wallet_seed) { nano::system system; auto node = add_ipc_enabled_node (system); + auto [rpc, rpc_ctx] = add_rpc (system, node); nano::raw_key seed; { auto transaction (node->wallets.tx_begin_read ()); system.wallet (0)->store.seed (seed, transaction); } - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); boost::property_tree::ptree request; request.put ("action", "wallet_seed"); request.put ("wallet", node->wallets.items.begin ()->first.to_string ()); - test_response response (request, rpc_config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); { @@ -3496,30 +2877,23 @@ TEST (rpc, wallet_change_seed) { nano::system system0; auto node = add_ipc_enabled_node (system0); + auto [rpc, rpc_ctx] = add_rpc (system0, node); nano::raw_key seed; nano::random_pool::generate_block (seed.bytes.data (), seed.bytes.size ()); { - auto transaction (system0.nodes[0]->wallets.tx_begin_read ()); + auto transaction (node->wallets.tx_begin_read ()); nano::raw_key seed0; nano::random_pool::generate_block (seed0.bytes.data (), seed0.bytes.size ()); system0.wallet (0)->store.seed (seed0, transaction); ASSERT_NE (seed, seed0); } - scoped_io_thread_name_change scoped_thread_name_io; auto prv = nano::deterministic_key (seed, 0); auto pub (nano::pub_key (prv)); - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system0.io_ctx, rpc_config); - nano::rpc rpc (system0.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); boost::property_tree::ptree request; request.put ("action", "wallet_change_seed"); - request.put ("wallet", system0.nodes[0]->wallets.items.begin ()->first.to_string ()); + request.put ("wallet", node->wallets.items.begin ()->first.to_string ()); request.put ("seed", seed.to_string ()); - test_response response (request, rpc.config.port, system0.io_ctx); + test_response response (request, rpc->config.port, system0.io_ctx); system0.deadline_set (5s); while (response.status == 0) { @@ -3527,7 +2901,7 @@ TEST (rpc, wallet_change_seed) } ASSERT_EQ (200, response.status); { - auto transaction (system0.nodes[0]->wallets.tx_begin_read ()); + auto transaction (node->wallets.tx_begin_read ()); nano::raw_key seed0; system0.wallet (0)->store.seed (seed0, transaction); ASSERT_EQ (seed, seed0); @@ -3545,18 +2919,11 @@ TEST (rpc, wallet_frontiers) nano::system system0; auto node = add_ipc_enabled_node (system0); system0.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system0.io_ctx, rpc_config); - nano::rpc rpc (system0.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system0, node); boost::property_tree::ptree request; request.put ("action", "wallet_frontiers"); - request.put ("wallet", system0.nodes[0]->wallets.items.begin ()->first.to_string ()); - test_response response (request, rpc.config.port, system0.io_ctx); + request.put ("wallet", node->wallets.items.begin ()->first.to_string ()); + test_response response (request, rpc->config.port, system0.io_ctx); while (response.status == 0) { system0.poll (); @@ -3569,32 +2936,22 @@ TEST (rpc, wallet_frontiers) frontiers.push_back (nano::account (i->second.get (""))); } ASSERT_EQ (1, frontiers.size ()); - ASSERT_EQ (system0.nodes[0]->latest (nano::genesis_account), frontiers[0]); + ASSERT_EQ (node->latest (nano::genesis_account), frontiers[0]); } TEST (rpc, work_validate) { nano::system system; - auto & node1 = *add_ipc_enabled_node (system); - nano::keypair key; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - system.wallet (0)->insert_adhoc (key.prv); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto node1 = add_ipc_enabled_node (system); + auto [rpc, rpc_ctx] = add_rpc (system, node1); nano::block_hash hash (1); - uint64_t work1 (*node1.work_generate_blocking (hash)); + uint64_t work1 (*node1->work_generate_blocking (hash)); boost::property_tree::ptree request; request.put ("action", "work_validate"); request.put ("hash", hash.to_string ()); request.put ("work", nano::to_string_hex (work1)); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_EQ (0, response.json.count ("valid")); @@ -3603,14 +2960,14 @@ TEST (rpc, work_validate) std::string difficulty_text (response.json.get ("difficulty")); uint64_t difficulty; ASSERT_FALSE (nano::from_string_hex (difficulty_text, difficulty)); - ASSERT_GE (difficulty, node1.default_difficulty (nano::work_version::work_1)); + ASSERT_GE (difficulty, node1->default_difficulty (nano::work_version::work_1)); double multiplier (response.json.get ("multiplier")); - ASSERT_NEAR (multiplier, nano::difficulty::to_multiplier (difficulty, node1.default_difficulty (nano::work_version::work_1)), 1e-6); + ASSERT_NEAR (multiplier, nano::difficulty::to_multiplier (difficulty, node1->default_difficulty (nano::work_version::work_1)), 1e-6); } uint64_t work2 (0); request.put ("work", nano::to_string_hex (work2)); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_EQ (0, response.json.count ("valid")); @@ -3619,16 +2976,16 @@ TEST (rpc, work_validate) std::string difficulty_text (response.json.get ("difficulty")); uint64_t difficulty; ASSERT_FALSE (nano::from_string_hex (difficulty_text, difficulty)); - ASSERT_GE (node1.default_difficulty (nano::work_version::work_1), difficulty); + ASSERT_GE (node1->default_difficulty (nano::work_version::work_1), difficulty); double multiplier (response.json.get ("multiplier")); - ASSERT_NEAR (multiplier, nano::difficulty::to_multiplier (difficulty, node1.default_difficulty (nano::work_version::work_1)), 1e-6); + ASSERT_NEAR (multiplier, nano::difficulty::to_multiplier (difficulty, node1->default_difficulty (nano::work_version::work_1)), 1e-6); } auto result_difficulty (nano::work_difficulty (nano::work_version::work_1, hash, work1)); - ASSERT_GE (result_difficulty, node1.default_difficulty (nano::work_version::work_1)); + ASSERT_GE (result_difficulty, node1->default_difficulty (nano::work_version::work_1)); request.put ("work", nano::to_string_hex (work1)); request.put ("difficulty", nano::to_string_hex (result_difficulty)); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_TRUE (response.json.get ("valid")); @@ -3639,17 +2996,17 @@ TEST (rpc, work_validate) request.put ("work", nano::to_string_hex (work1)); request.put ("difficulty", nano::to_string_hex (difficulty4)); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_EQ (result_difficulty >= difficulty4, response.json.get ("valid")); - ASSERT_EQ (result_difficulty >= node1.default_difficulty (nano::work_version::work_1), response.json.get ("valid_all")); - ASSERT_EQ (result_difficulty >= node1.network_params.network.publish_thresholds.epoch_2_receive, response.json.get ("valid_all")); + ASSERT_EQ (result_difficulty >= node1->default_difficulty (nano::work_version::work_1), response.json.get ("valid_all")); + ASSERT_EQ (result_difficulty >= node1->network_params.network.publish_thresholds.epoch_2_receive, response.json.get ("valid_all")); } - uint64_t work3 (*node1.work_generate_blocking (hash, difficulty4)); + uint64_t work3 (*node1->work_generate_blocking (hash, difficulty4)); request.put ("work", nano::to_string_hex (work3)); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_TRUE (response.json.get ("valid")); @@ -3666,20 +3023,13 @@ TEST (rpc, work_validate_epoch_2) ASSERT_NE (nullptr, epoch1); ASSERT_EQ (node->network_params.network.publish_thresholds.epoch_2, node->network_params.network.publish_thresholds.base); auto work = system.work_generate_limited (epoch1->hash (), node->network_params.network.publish_thresholds.epoch_1, node->network_params.network.publish_thresholds.base); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "work_validate"); request.put ("hash", epoch1->hash ().to_string ()); request.put ("work", nano::to_string_hex (work)); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_EQ (0, response.json.count ("valid")); @@ -3692,11 +3042,11 @@ TEST (rpc, work_validate_epoch_2) ASSERT_NEAR (multiplier, nano::difficulty::to_multiplier (difficulty, node->network_params.network.publish_thresholds.epoch_2), 1e-6); }; // After upgrading, the higher difficulty is used to validate and calculate the multiplier - scoped_thread_name_io.reset (); + rpc_ctx->io_scope->reset (); ASSERT_NE (nullptr, system.upgrade_genesis_epoch (*node, nano::epoch::epoch_2)); - scoped_thread_name_io.renew (); + rpc_ctx->io_scope->renew (); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_EQ (0, response.json.count ("valid")); @@ -3720,19 +3070,12 @@ TEST (rpc, successors) ASSERT_FALSE (genesis.is_zero ()); auto block (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, 1)); ASSERT_NE (nullptr, block); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "successors"); request.put ("block", genesis.to_string ()); request.put ("count", std::to_string (std::numeric_limits::max ())); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); auto & blocks_node (response.json.get_child ("blocks")); @@ -3747,7 +3090,7 @@ TEST (rpc, successors) // RPC chain "reverse" option request.put ("action", "chain"); request.put ("reverse", "true"); - test_response response2 (request, rpc.config.port, system.io_ctx); + test_response response2 (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (10s, response2.status != 0); ASSERT_EQ (200, response2.status); ASSERT_EQ (response.json, response2.json); @@ -3764,17 +3107,10 @@ TEST (rpc, bootstrap_any) auto transaction (system1.nodes[0]->store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, system1.nodes[0]->ledger.process (transaction, send).code); } - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system0.io_ctx, rpc_config); - nano::rpc rpc (system0.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system0, node); boost::property_tree::ptree request; request.put ("action", "bootstrap_any"); - test_response response (request, rpc.config.port, system0.io_ctx); + test_response response (request, rpc->config.port, system0.io_ctx); while (response.status == 0) { system0.poll (); @@ -3788,25 +3124,18 @@ TEST (rpc, republish) nano::system system; nano::keypair key; nano::genesis genesis; - auto & node1 = *add_ipc_enabled_node (system); + auto node1 = add_ipc_enabled_node (system); system.add_node (); - auto latest (node1.latest (nano::dev_genesis_key.pub)); - nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1.work_generate_blocking (latest)); - node1.process (send); - nano::open_block open (send.hash (), key.pub, key.pub, key.prv, key.pub, *node1.work_generate_blocking (key.pub)); - ASSERT_EQ (nano::process_result::progress, node1.process (open).code); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto latest (node1->latest (nano::dev_genesis_key.pub)); + nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); + node1->process (send); + nano::open_block open (send.hash (), key.pub, key.pub, key.prv, key.pub, *node1->work_generate_blocking (key.pub)); + ASSERT_EQ (nano::process_result::progress, node1->process (open).code); + auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request; request.put ("action", "republish"); request.put ("hash", send.hash ().to_string ()); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_TIMELY (10s, system.nodes[1]->balance (nano::dev_genesis_key.pub) != nano::genesis_amount); @@ -3821,7 +3150,7 @@ TEST (rpc, republish) request.put ("hash", genesis.hash ().to_string ()); request.put ("count", 1); - test_response response1 (request, rpc.config.port, system.io_ctx); + test_response response1 (request, rpc->config.port, system.io_ctx); system.deadline_set (5s); ASSERT_TIMELY (5s, response1.status != 0); ASSERT_EQ (200, response1.status); @@ -3836,7 +3165,7 @@ TEST (rpc, republish) request.put ("hash", open.hash ().to_string ()); request.put ("sources", 2); - test_response response2 (request, rpc.config.port, system.io_ctx); + test_response response2 (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (10s, response2.status != 0); ASSERT_EQ (200, response2.status); blocks_node = response2.json.get_child ("blocks"); @@ -3863,19 +3192,12 @@ TEST (rpc, deterministic_key) nano::account account0 (system0.wallet (0)->deterministic_insert ()); nano::account account1 (system0.wallet (0)->deterministic_insert ()); nano::account account2 (system0.wallet (0)->deterministic_insert ()); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system0.io_ctx, rpc_config); - nano::rpc rpc (system0.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system0, node); boost::property_tree::ptree request; request.put ("action", "deterministic_key"); request.put ("seed", seed.to_string ()); request.put ("index", "0"); - test_response response0 (request, rpc.config.port, system0.io_ctx); + test_response response0 (request, rpc->config.port, system0.io_ctx); while (response0.status == 0) { system0.poll (); @@ -3884,7 +3206,7 @@ TEST (rpc, deterministic_key) std::string validate_text (response0.json.get ("account")); ASSERT_EQ (account0.to_account (), validate_text); request.put ("index", "2"); - test_response response1 (request, rpc.config.port, system0.io_ctx); + test_response response1 (request, rpc->config.port, system0.io_ctx); while (response1.status == 0) { system0.poll (); @@ -3899,14 +3221,7 @@ TEST (rpc, accounts_balances) { nano::system system; auto node = add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "accounts_balances"); boost::property_tree::ptree entry; @@ -3914,7 +3229,7 @@ TEST (rpc, accounts_balances) entry.put ("", nano::dev_genesis_key.pub.to_account ()); peers_l.push_back (std::make_pair ("", entry)); request.add_child ("accounts", peers_l); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); for (auto & balances : response.json.get_child ("balances")) @@ -3933,14 +3248,7 @@ TEST (rpc, accounts_frontiers) nano::system system; auto node = add_ipc_enabled_node (system); system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "accounts_frontiers"); boost::property_tree::ptree entry; @@ -3948,7 +3256,7 @@ TEST (rpc, accounts_frontiers) entry.put ("", nano::dev_genesis_key.pub.to_account ()); peers_l.push_back (std::make_pair ("", entry)); request.add_child ("accounts", peers_l); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); for (auto & frontiers : response.json.get_child ("frontiers")) @@ -3967,17 +3275,11 @@ TEST (rpc, accounts_pending) nano::keypair key1; system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); auto block1 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key1.pub, 100)); - scoped_io_thread_name_change scoped_thread_name_io; node->scheduler.flush (); ASSERT_TIMELY (5s, !node->active.active (*block1)); ASSERT_TIMELY (5s, node->ledger.cache.cemented_count == 2 && node->confirmation_height_processor.current ().is_zero () && node->confirmation_height_processor.awaiting_processing_size () == 0); - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "accounts_pending"); boost::property_tree::ptree entry; @@ -3987,7 +3289,7 @@ TEST (rpc, accounts_pending) request.add_child ("accounts", peers_l); request.put ("count", "100"); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); for (auto & blocks : response.json.get_child ("blocks")) @@ -4000,7 +3302,7 @@ TEST (rpc, accounts_pending) } request.put ("sorting", "true"); // Sorting test { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); for (auto & blocks : response.json.get_child ("blocks")) @@ -4015,7 +3317,7 @@ TEST (rpc, accounts_pending) } request.put ("threshold", "100"); // Threshold test { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::unordered_map blocks; @@ -4038,7 +3340,7 @@ TEST (rpc, accounts_pending) } request.put ("source", "true"); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::unordered_map amounts; @@ -4059,28 +3361,21 @@ TEST (rpc, accounts_pending) ASSERT_EQ (sources[block1->hash ()], nano::dev_genesis_key.pub); } - check_block_response_count (system, rpc, request, 1); - scoped_thread_name_io.reset (); + check_block_response_count (system, *rpc, request, 1); + rpc_ctx->io_scope->reset (); reset_confirmation_height (system.nodes.front ()->store, block1->account ()); - scoped_thread_name_io.renew (); - check_block_response_count (system, rpc, request, 0); + rpc_ctx->io_scope->renew (); + check_block_response_count (system, *rpc, request, 0); request.put ("include_only_confirmed", "false"); - scoped_thread_name_io.renew (); - check_block_response_count (system, rpc, request, 1); + rpc_ctx->io_scope->renew (); + check_block_response_count (system, *rpc, request, 1); } TEST (rpc, blocks) { nano::system system; auto node = add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "blocks"); boost::property_tree::ptree entry; @@ -4088,7 +3383,7 @@ TEST (rpc, blocks) entry.put ("", node->latest (nano::genesis_account).to_string ()); peers_l.push_back (std::make_pair ("", entry)); request.add_child ("hashes", peers_l); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); for (auto & blocks : response.json.get_child ("blocks")) @@ -4131,18 +3426,11 @@ TEST (rpc, wallet_info) system.wallet (0)->store.erase (transaction, account); } account = system.wallet (0)->deterministic_insert (); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "wallet_info"); request.put ("wallet", node->wallets.items.begin ()->first.to_string ()); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::string balance_text (response.json.get ("balance")); @@ -4168,18 +3456,11 @@ TEST (rpc, wallet_balances) nano::system system0; auto node = add_ipc_enabled_node (system0); system0.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system0.io_ctx, rpc_config); - nano::rpc rpc (system0.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system0, node); boost::property_tree::ptree request; request.put ("action", "wallet_balances"); request.put ("wallet", system0.nodes[0]->wallets.items.begin ()->first.to_string ()); - test_response response (request, rpc.config.port, system0.io_ctx); + test_response response (request, rpc->config.port, system0.io_ctx); while (response.status == 0) { system0.poll (); @@ -4195,12 +3476,12 @@ TEST (rpc, wallet_balances) ASSERT_EQ ("0", pending_text); } nano::keypair key; - scoped_thread_name_io.reset (); + rpc_ctx->io_scope->reset (); system0.wallet (0)->insert_adhoc (key.prv); auto send (system0.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, 1)); - scoped_thread_name_io.renew (); + rpc_ctx->io_scope->renew (); request.put ("threshold", "2"); - test_response response1 (request, rpc.config.port, system0.io_ctx); + test_response response1 (request, rpc->config.port, system0.io_ctx); while (response1.status == 0) { system0.poll (); @@ -4225,21 +3506,15 @@ TEST (rpc, pending_exists) system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); auto hash0 (node->latest (nano::genesis_account)); auto block1 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key1.pub, 100)); - scoped_io_thread_name_change scoped_thread_name_io; node->scheduler.flush (); ASSERT_TIMELY (5s, !node->active.active (*block1)); ASSERT_TIMELY (5s, node->ledger.cache.cemented_count == 2 && node->confirmation_height_processor.current ().is_zero () && node->confirmation_height_processor.awaiting_processing_size () == 0); - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; - auto pending_exists = [&system, &request, &rpc] (const char * exists_a) { - test_response response0 (request, rpc.config.port, system.io_ctx); + auto pending_exists = [&system, &request, rpc = rpc] (const char * exists_a) { + test_response response0 (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (10s, response0.status != 0); ASSERT_EQ (200, response0.status); std::string exists_text (response0.json.get ("exists")); @@ -4255,12 +3530,12 @@ TEST (rpc, pending_exists) pending_exists ("1"); pending_exists ("1"); - scoped_thread_name_io.reset (); + rpc_ctx->io_scope->reset (); reset_confirmation_height (node->store, block1->account ()); - scoped_thread_name_io.renew (); + rpc_ctx->io_scope->renew (); pending_exists ("0"); request.put ("include_only_confirmed", "false"); - scoped_thread_name_io.renew (); + rpc_ctx->io_scope->renew (); pending_exists ("1"); } @@ -4273,7 +3548,6 @@ TEST (rpc, wallet_pending) system0.wallet (0)->insert_adhoc (key1.prv); auto iterations (0); auto block1 (system0.wallet (0)->send_action (nano::dev_genesis_key.pub, key1.pub, 100)); - scoped_io_thread_name_change scoped_thread_name_io; node->scheduler.flush (); while (node->active.active (*block1) || node->ledger.cache.cemented_count < 2 || !node->confirmation_height_processor.current ().is_zero () || node->confirmation_height_processor.awaiting_processing_size () != 0) { @@ -4281,18 +3555,13 @@ TEST (rpc, wallet_pending) ++iterations; ASSERT_LT (iterations, 200); } - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system0.io_ctx, rpc_config); - nano::rpc rpc (system0.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + + auto [rpc, rpc_ctx] = add_rpc (system0, node); boost::property_tree::ptree request; request.put ("action", "wallet_pending"); request.put ("wallet", node->wallets.items.begin ()->first.to_string ()); request.put ("count", "100"); - test_response response (request, rpc.config.port, system0.io_ctx); + test_response response (request, rpc->config.port, system0.io_ctx); while (response.status == 0) { system0.poll (); @@ -4307,7 +3576,7 @@ TEST (rpc, wallet_pending) ASSERT_EQ (block1->hash (), hash1); } request.put ("threshold", "100"); // Threshold test - test_response response0 (request, rpc.config.port, system0.io_ctx); + test_response response0 (request, rpc->config.port, system0.io_ctx); while (response0.status == 0) { system0.poll (); @@ -4334,7 +3603,7 @@ TEST (rpc, wallet_pending) } ASSERT_EQ (blocks[block1->hash ()], 100); request.put ("threshold", "101"); - test_response response1 (request, rpc.config.port, system0.io_ctx); + test_response response1 (request, rpc->config.port, system0.io_ctx); while (response1.status == 0) { system0.poll (); @@ -4345,7 +3614,7 @@ TEST (rpc, wallet_pending) request.put ("threshold", "0"); request.put ("source", "true"); request.put ("min_version", "true"); - test_response response2 (request, rpc.config.port, system0.io_ctx); + test_response response2 (request, rpc->config.port, system0.io_ctx); while (response2.status == 0) { system0.poll (); @@ -4370,12 +3639,12 @@ TEST (rpc, wallet_pending) ASSERT_EQ (amounts[block1->hash ()], 100); ASSERT_EQ (sources[block1->hash ()], nano::dev_genesis_key.pub); - check_block_response_count (system0, rpc, request, 1); - scoped_thread_name_io.reset (); + check_block_response_count (system0, *rpc, request, 1); + rpc_ctx->io_scope->reset (); reset_confirmation_height (system0.nodes.front ()->store, block1->account ()); - scoped_thread_name_io.renew (); + rpc_ctx->io_scope->renew (); { - test_response response (request, rpc.config.port, system0.io_ctx); + test_response response (request, rpc->config.port, system0.io_ctx); system0.deadline_set (5s); while (response.status == 0) { @@ -4385,25 +3654,18 @@ TEST (rpc, wallet_pending) ASSERT_EQ (0, response.json.get_child ("blocks").size ()); } request.put ("include_only_confirmed", "false"); - scoped_thread_name_io.renew (); - check_block_response_count (system0, rpc, request, 1); + rpc_ctx->io_scope->renew (); + check_block_response_count (system0, *rpc, request, 1); } TEST (rpc, receive_minimum) { nano::system system; auto node = add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "receive_minimum"); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::string amount (response.json.get ("amount")); @@ -4414,19 +3676,12 @@ TEST (rpc, receive_minimum_set) { nano::system system; auto node = add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "receive_minimum_set"); request.put ("amount", "100"); ASSERT_NE (node->config.receive_minimum.to_string_dec (), "100"); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::string success (response.json.get ("success")); @@ -4440,19 +3695,12 @@ TEST (rpc, work_get) auto node = add_ipc_enabled_node (system); system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); system.wallet (0)->work_cache_blocking (nano::dev_genesis_key.pub, node->latest (nano::dev_genesis_key.pub)); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "work_get"); request.put ("wallet", node->wallets.items.begin ()->first.to_string ()); request.put ("account", nano::dev_genesis_key.pub.to_account ()); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::string work_text (response.json.get ("work")); @@ -4468,18 +3716,11 @@ TEST (rpc, wallet_work_get) auto node = add_ipc_enabled_node (system); system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); system.wallet (0)->work_cache_blocking (nano::dev_genesis_key.pub, node->latest (nano::dev_genesis_key.pub)); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "wallet_work_get"); request.put ("wallet", node->wallets.items.begin ()->first.to_string ()); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); auto transaction (node->wallets.tx_begin_read ()); @@ -4499,21 +3740,14 @@ TEST (rpc, work_set) nano::system system; auto node = add_ipc_enabled_node (system); system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + auto [rpc, rpc_ctx] = add_rpc (system, node); uint64_t work0 (100); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); boost::property_tree::ptree request; request.put ("action", "work_set"); request.put ("wallet", node->wallets.items.begin ()->first.to_string ()); request.put ("account", nano::dev_genesis_key.pub.to_account ()); request.put ("work", nano::to_string_hex (work0)); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::string success (response.json.get ("success")); @@ -4535,17 +3769,10 @@ TEST (rpc, search_pending_all) auto transaction (node->store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, block).code); } - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "search_pending_all"); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_TIMELY (10s, node->balance (nano::dev_genesis_key.pub) == nano::genesis_amount); @@ -4554,7 +3781,7 @@ TEST (rpc, search_pending_all) TEST (rpc, wallet_republish) { nano::system system; - auto & node1 = *add_ipc_enabled_node (system); + auto node1 = add_ipc_enabled_node (system); nano::genesis genesis; nano::keypair key; while (key.pub < nano::dev_genesis_key.pub) @@ -4565,24 +3792,17 @@ TEST (rpc, wallet_republish) } system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); system.wallet (0)->insert_adhoc (key.prv); - auto latest (node1.latest (nano::dev_genesis_key.pub)); - nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1.work_generate_blocking (latest)); - node1.process (send); - nano::open_block open (send.hash (), key.pub, key.pub, key.prv, key.pub, *node1.work_generate_blocking (key.pub)); - ASSERT_EQ (nano::process_result::progress, node1.process (open).code); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto latest (node1->latest (nano::dev_genesis_key.pub)); + nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); + node1->process (send); + nano::open_block open (send.hash (), key.pub, key.pub, key.prv, key.pub, *node1->work_generate_blocking (key.pub)); + ASSERT_EQ (nano::process_result::progress, node1->process (open).code); + auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request; request.put ("action", "wallet_republish"); - request.put ("wallet", node1.wallets.items.begin ()->first.to_string ()); + request.put ("wallet", node1->wallets.items.begin ()->first.to_string ()); request.put ("count", 1); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); auto & blocks_node (response.json.get_child ("blocks")); @@ -4599,27 +3819,20 @@ TEST (rpc, wallet_republish) TEST (rpc, delegators) { nano::system system; - auto & node1 = *add_ipc_enabled_node (system); + auto node1 = add_ipc_enabled_node (system); nano::keypair key; system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); system.wallet (0)->insert_adhoc (key.prv); - auto latest (node1.latest (nano::dev_genesis_key.pub)); - nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1.work_generate_blocking (latest)); - node1.process (send); - nano::open_block open (send.hash (), nano::dev_genesis_key.pub, key.pub, key.prv, key.pub, *node1.work_generate_blocking (key.pub)); - ASSERT_EQ (nano::process_result::progress, node1.process (open).code); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto latest (node1->latest (nano::dev_genesis_key.pub)); + nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); + node1->process (send); + nano::open_block open (send.hash (), nano::dev_genesis_key.pub, key.pub, key.prv, key.pub, *node1->work_generate_blocking (key.pub)); + ASSERT_EQ (nano::process_result::progress, node1->process (open).code); + auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request; request.put ("action", "delegators"); request.put ("account", nano::dev_genesis_key.pub.to_account ()); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); auto & delegators_node (response.json.get_child ("delegators")); @@ -4636,29 +3849,21 @@ TEST (rpc, delegators) TEST (rpc, delegators_parameters) { nano::system system; - auto & node1 = *add_ipc_enabled_node (system); + auto node1 = add_ipc_enabled_node (system); nano::keypair key; - auto latest (node1.latest (nano::dev_genesis_key.pub)); - nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1.work_generate_blocking (latest)); - node1.process (send); - nano::open_block open (send.hash (), nano::dev_genesis_key.pub, key.pub, key.prv, key.pub, *node1.work_generate_blocking (key.pub)); - ASSERT_EQ (nano::process_result::progress, node1.process (open).code); - - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto latest (node1->latest (nano::dev_genesis_key.pub)); + nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); + node1->process (send); + nano::open_block open (send.hash (), nano::dev_genesis_key.pub, key.pub, key.prv, key.pub, *node1->work_generate_blocking (key.pub)); + ASSERT_EQ (nano::process_result::progress, node1->process (open).code); + auto [rpc, rpc_ctx] = add_rpc (system, node1); // Test with "count" = 2 boost::property_tree::ptree request; request.put ("action", "delegators"); request.put ("account", nano::dev_genesis_key.pub.to_account ()); request.put ("count", 2); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); auto & delegators_node (response.json.get_child ("delegators")); @@ -4673,7 +3878,7 @@ TEST (rpc, delegators_parameters) // Test with "count" = 1 request.put ("count", 1); - test_response response2 (request, rpc.config.port, system.io_ctx); + test_response response2 (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response2.status != 0); ASSERT_EQ (200, response2.status); auto & delegators_node2 (response2.json.get_child ("delegators")); @@ -4696,7 +3901,7 @@ TEST (rpc, delegators_parameters) // Test with "threshold" request.put ("count", 1024); request.put ("threshold", 101); // higher than remaining genesis balance - test_response response3 (request, rpc.config.port, system.io_ctx); + test_response response3 (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response3.status != 0); ASSERT_EQ (200, response3.status); auto & delegators_node3 (response3.json.get_child ("delegators")); @@ -4717,7 +3922,7 @@ TEST (rpc, delegators_parameters) } request.put ("start", nano::account (last_account.number () - 1).to_account ()); - test_response response4 (request, rpc.config.port, system.io_ctx); + test_response response4 (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response4.status != 0); ASSERT_EQ (200, response4.status); auto & delegators_node4 (response4.json.get_child ("delegators")); @@ -4732,7 +3937,7 @@ TEST (rpc, delegators_parameters) // Test with "start" equal to last account request.put ("start", last_account.to_account ()); - test_response response5 (request, rpc.config.port, system.io_ctx); + test_response response5 (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response5.status != 0); ASSERT_EQ (200, response5.status); auto & delegators_node5 (response5.json.get_child ("delegators")); @@ -4747,27 +3952,20 @@ TEST (rpc, delegators_parameters) TEST (rpc, delegators_count) { nano::system system; - auto & node1 = *add_ipc_enabled_node (system); + auto node1 = add_ipc_enabled_node (system); nano::keypair key; system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); system.wallet (0)->insert_adhoc (key.prv); - auto latest (node1.latest (nano::dev_genesis_key.pub)); - nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1.work_generate_blocking (latest)); - node1.process (send); - nano::open_block open (send.hash (), nano::dev_genesis_key.pub, key.pub, key.prv, key.pub, *node1.work_generate_blocking (key.pub)); - ASSERT_EQ (nano::process_result::progress, node1.process (open).code); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto latest (node1->latest (nano::dev_genesis_key.pub)); + nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); + node1->process (send); + nano::open_block open (send.hash (), nano::dev_genesis_key.pub, key.pub, key.prv, key.pub, *node1->work_generate_blocking (key.pub)); + ASSERT_EQ (nano::process_result::progress, node1->process (open).code); + auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request; request.put ("action", "delegators_count"); request.put ("account", nano::dev_genesis_key.pub.to_account ()); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::string count (response.json.get ("count")); @@ -4780,15 +3978,8 @@ TEST (rpc, account_info) nano::keypair key; nano::genesis genesis; - auto & node1 = *add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto node1 = add_ipc_enabled_node (system); + auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request; request.put ("action", "account_info"); @@ -4796,7 +3987,7 @@ TEST (rpc, account_info) // Test for a non existing account { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); auto error (response.json.get_optional ("error")); @@ -4804,22 +3995,22 @@ TEST (rpc, account_info) ASSERT_EQ (error.get (), std::error_code (nano::error_common::account_not_found).message ()); } - scoped_thread_name_io.reset (); + rpc_ctx->io_scope->reset (); system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); system.wallet (0)->insert_adhoc (key.prv); - auto latest (node1.latest (nano::dev_genesis_key.pub)); - nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1.work_generate_blocking (latest)); - node1.process (send); + auto latest (node1->latest (nano::dev_genesis_key.pub)); + nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); + node1->process (send); auto time (nano::seconds_since_epoch ()); { - auto transaction = node1.store.tx_begin_write (); - node1.store.confirmation_height.put (transaction, nano::dev_genesis_key.pub, { 1, genesis.hash () }); + auto transaction = node1->store.tx_begin_write (); + node1->store.confirmation_height.put (transaction, nano::dev_genesis_key.pub, { 1, genesis.hash () }); } - scoped_thread_name_io.renew (); + rpc_ctx->io_scope->renew (); request.put ("account", nano::dev_genesis_key.pub.to_account ()); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); @@ -4853,7 +4044,7 @@ TEST (rpc, account_info) request.put ("pending", "1"); request.put ("representative", "1"); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); std::string weight2 (response.json.get ("weight")); ASSERT_EQ ("100", weight2); @@ -4864,26 +4055,26 @@ TEST (rpc, account_info) } // Test for confirmed only blocks - scoped_thread_name_io.reset (); + rpc_ctx->io_scope->reset (); nano::keypair key1; { - latest = node1.latest (nano::dev_genesis_key.pub); - nano::send_block send1 (latest, key1.pub, 50, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1.work_generate_blocking (latest)); - node1.process (send1); - nano::send_block send2 (send1.hash (), key1.pub, 25, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1.work_generate_blocking (send1.hash ())); - node1.process (send2); + latest = node1->latest (nano::dev_genesis_key.pub); + nano::send_block send1 (latest, key1.pub, 50, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); + node1->process (send1); + nano::send_block send2 (send1.hash (), key1.pub, 25, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (send1.hash ())); + node1->process (send2); - nano::state_block state_change (nano::dev_genesis_key.pub, send2.hash (), key1.pub, 25, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1.work_generate_blocking (send2.hash ())); - node1.process (state_change); + nano::state_block state_change (nano::dev_genesis_key.pub, send2.hash (), key1.pub, 25, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (send2.hash ())); + node1->process (state_change); - nano::open_block open (send1.hash (), nano::dev_genesis_key.pub, key1.pub, key1.prv, key1.pub, *node1.work_generate_blocking (key1.pub)); - node1.process (open); + nano::open_block open (send1.hash (), nano::dev_genesis_key.pub, key1.pub, key1.prv, key1.pub, *node1->work_generate_blocking (key1.pub)); + node1->process (open); } - scoped_thread_name_io.renew (); + rpc_ctx->io_scope->renew (); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); std::string balance (response.json.get ("balance")); ASSERT_EQ ("25", balance); @@ -4891,7 +4082,7 @@ TEST (rpc, account_info) request.put ("include_confirmed", true); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); auto balance (response.json.get ("balance")); ASSERT_EQ ("25", balance); @@ -4913,7 +4104,7 @@ TEST (rpc, account_info) request.put ("account", key1.pub.to_account ()); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); std::string pending (response.json.get ("pending")); ASSERT_EQ ("25", pending); @@ -4923,7 +4114,7 @@ TEST (rpc, account_info) request.put ("include_confirmed", false); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); std::string pending (response.json.get ("pending")); ASSERT_EQ ("25", pending); @@ -4950,29 +4141,22 @@ TEST (rpc, account_info) TEST (rpc, json_block_input) { nano::system system; - auto & node1 = *add_ipc_enabled_node (system); + auto node1 = add_ipc_enabled_node (system); nano::keypair key; system.wallet (0)->insert_adhoc (key.prv); - nano::state_block send (nano::genesis_account, node1.latest (nano::dev_genesis_key.pub), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + nano::state_block send (nano::genesis_account, node1->latest (nano::dev_genesis_key.pub), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0); + auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request; request.put ("action", "sign"); request.put ("json_block", "true"); std::string wallet; - node1.wallets.items.begin ()->first.encode_hex (wallet); + node1->wallets.items.begin ()->first.encode_hex (wallet); request.put ("wallet", wallet); request.put ("account", key.pub.to_account ()); boost::property_tree::ptree json; send.serialize_json (json); request.add_child ("block", json); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (10s, response.status != 0); ASSERT_EQ (200, response.status); @@ -4989,26 +4173,17 @@ TEST (rpc, json_block_input) TEST (rpc, json_block_output) { nano::system system; - auto & node1 = *add_ipc_enabled_node (system); + auto node1 = add_ipc_enabled_node (system); nano::keypair key; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - system.wallet (0)->insert_adhoc (key.prv); - auto latest (node1.latest (nano::dev_genesis_key.pub)); - nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1.work_generate_blocking (latest)); - node1.process (send); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto latest (node1->latest (nano::dev_genesis_key.pub)); + nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); + node1->process (send); + auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request; request.put ("action", "block_info"); request.put ("json_block", "true"); request.put ("hash", send.hash ().to_string ()); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); @@ -5022,14 +4197,7 @@ TEST (rpc, blocks_info) { nano::system system; auto node = add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); auto check_blocks = [node] (test_response & response) { for (auto & blocks : response.json.get_child ("blocks")) { @@ -5060,7 +4228,7 @@ TEST (rpc, blocks_info) hashes.push_back (std::make_pair ("", entry)); request.add_child ("hashes", hashes); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); check_blocks (response); @@ -5071,14 +4239,14 @@ TEST (rpc, blocks_info) request.erase ("hashes"); request.add_child ("hashes", hashes); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_EQ (std::error_code (nano::error_blocks::not_found).message (), response.json.get ("error")); } request.put ("include_not_found", "true"); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); check_blocks (response); @@ -5089,7 +4257,7 @@ TEST (rpc, blocks_info) request.put ("source", "true"); request.put ("pending", "1"); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); for (auto & blocks : response.json.get_child ("blocks")) @@ -5105,7 +4273,7 @@ TEST (rpc, blocks_info) TEST (rpc, blocks_info_subtype) { nano::system system; - auto & node1 = *add_ipc_enabled_node (system); + auto node1 = add_ipc_enabled_node (system); nano::keypair key; system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); system.wallet (0)->insert_adhoc (key.prv); @@ -5115,14 +4283,7 @@ TEST (rpc, blocks_info_subtype) ASSERT_NE (nullptr, receive); auto change (system.wallet (0)->change_action (nano::dev_genesis_key.pub, key.pub)); ASSERT_NE (nullptr, change); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request; request.put ("action", "blocks_info"); boost::property_tree::ptree hashes; @@ -5134,7 +4295,7 @@ TEST (rpc, blocks_info_subtype) entry.put ("", change->hash ().to_string ()); hashes.push_back (std::make_pair ("", entry)); request.add_child ("hashes", hashes); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); auto & blocks (response.json.get_child ("blocks")); ASSERT_EQ (3, blocks.size ()); @@ -5156,23 +4317,16 @@ TEST (rpc, blocks_info_subtype) TEST (rpc, block_info_successor) { nano::system system; - auto & node1 = *add_ipc_enabled_node (system); + auto node1 = add_ipc_enabled_node (system); nano::keypair key; - auto latest (node1.latest (nano::dev_genesis_key.pub)); - nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1.work_generate_blocking (latest)); - node1.process (send); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto latest (node1->latest (nano::dev_genesis_key.pub)); + nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); + node1->process (send); + auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request; request.put ("action", "block_info"); request.put ("hash", latest.to_string ()); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); @@ -5195,34 +4349,27 @@ TEST (rpc, block_info_pruning) node_config1.enable_voting = false; // Remove after allowing pruned voting nano::node_flags node_flags; node_flags.enable_pruning = true; - auto & node1 = *add_ipc_enabled_node (system, node_config1, node_flags); - auto latest (node1.latest (nano::dev_genesis_key.pub)); - auto send1 (std::make_shared (latest, nano::dev_genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1.work_generate_blocking (latest))); - node1.process_active (send1); - auto receive1 (std::make_shared (send1->hash (), send1->hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1.work_generate_blocking (send1->hash ()))); - node1.process_active (receive1); - node1.block_processor.flush (); + auto node1 = add_ipc_enabled_node (system, node_config1, node_flags); + auto latest (node1->latest (nano::dev_genesis_key.pub)); + auto send1 (std::make_shared (latest, nano::dev_genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest))); + node1->process_active (send1); + auto receive1 (std::make_shared (send1->hash (), send1->hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (send1->hash ()))); + node1->process_active (receive1); + node1->block_processor.flush (); system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - ASSERT_TIMELY (5s, node1.ledger.cache.cemented_count == 3 && node1.confirmation_height_processor.current ().is_zero () && node1.confirmation_height_processor.awaiting_processing_size () == 0); + ASSERT_TIMELY (5s, node1->ledger.cache.cemented_count == 3 && node1->confirmation_height_processor.current ().is_zero () && node1->confirmation_height_processor.awaiting_processing_size () == 0); // Pruning action { - auto transaction (node1.store.tx_begin_write ()); - ASSERT_EQ (1, node1.ledger.pruning_action (transaction, send1->hash (), 1)); - ASSERT_TRUE (node1.store.block.exists (transaction, receive1->hash ())); + auto transaction (node1->store.tx_begin_write ()); + ASSERT_EQ (1, node1->ledger.pruning_action (transaction, send1->hash (), 1)); + ASSERT_TRUE (node1->store.block.exists (transaction, receive1->hash ())); } - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node1); // Pruned block boost::property_tree::ptree request; request.put ("action", "block_info"); request.put ("hash", send1->hash ().to_string ()); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_EQ (std::error_code (nano::error_blocks::not_found).message (), response.json.get ("error")); @@ -5231,7 +4378,7 @@ TEST (rpc, block_info_pruning) request2.put ("action", "block_info"); request2.put ("json_block", "true"); request2.put ("hash", receive1->hash ().to_string ()); - test_response response2 (request2, rpc.config.port, system.io_ctx); + test_response response2 (request2, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response2.status != 0); ASSERT_EQ (200, response2.status); std::string account_text (response2.json.get ("block_account")); @@ -5259,34 +4406,27 @@ TEST (rpc, pruned_exists) node_config1.enable_voting = false; // Remove after allowing pruned voting nano::node_flags node_flags; node_flags.enable_pruning = true; - auto & node1 = *add_ipc_enabled_node (system, node_config1, node_flags); - auto latest (node1.latest (nano::dev_genesis_key.pub)); - auto send1 (std::make_shared (latest, nano::dev_genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1.work_generate_blocking (latest))); - node1.process_active (send1); - auto receive1 (std::make_shared (send1->hash (), send1->hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1.work_generate_blocking (send1->hash ()))); - node1.process_active (receive1); - node1.block_processor.flush (); + auto node1 = add_ipc_enabled_node (system, node_config1, node_flags); + auto latest (node1->latest (nano::dev_genesis_key.pub)); + auto send1 (std::make_shared (latest, nano::dev_genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest))); + node1->process_active (send1); + auto receive1 (std::make_shared (send1->hash (), send1->hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (send1->hash ()))); + node1->process_active (receive1); + node1->block_processor.flush (); system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - ASSERT_TIMELY (5s, node1.ledger.cache.cemented_count == 3 && node1.confirmation_height_processor.current ().is_zero () && node1.confirmation_height_processor.awaiting_processing_size () == 0); + ASSERT_TIMELY (5s, node1->ledger.cache.cemented_count == 3 && node1->confirmation_height_processor.current ().is_zero () && node1->confirmation_height_processor.awaiting_processing_size () == 0); // Pruning action { - auto transaction (node1.store.tx_begin_write ()); - ASSERT_EQ (1, node1.ledger.pruning_action (transaction, send1->hash (), 1)); - ASSERT_TRUE (node1.store.block.exists (transaction, receive1->hash ())); + auto transaction (node1->store.tx_begin_write ()); + ASSERT_EQ (1, node1->ledger.pruning_action (transaction, send1->hash (), 1)); + ASSERT_TRUE (node1->store.block.exists (transaction, receive1->hash ())); } - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node1); // Pruned block boost::property_tree::ptree request; request.put ("action", "pruned_exists"); request.put ("hash", send1->hash ().to_string ()); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_TRUE (response.json.get ("exists")); @@ -5294,7 +4434,7 @@ TEST (rpc, pruned_exists) boost::property_tree::ptree request2; request2.put ("action", "pruned_exists"); request2.put ("hash", receive1->hash ().to_string ()); - test_response response2 (request2, rpc.config.port, system.io_ctx); + test_response response2 (request2, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response2.status != 0); ASSERT_EQ (200, response2.status); ASSERT_FALSE (response2.json.get ("exists")); @@ -5303,28 +4443,20 @@ TEST (rpc, pruned_exists) TEST (rpc, work_peers_all) { nano::system system; - auto & node1 = *add_ipc_enabled_node (system); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto node1 = add_ipc_enabled_node (system); + auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request; request.put ("action", "work_peer_add"); request.put ("address", "::1"); request.put ("port", "0"); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::string success (response.json.get ("success", "")); ASSERT_TRUE (success.empty ()); boost::property_tree::ptree request1; request1.put ("action", "work_peers"); - test_response response1 (request1, rpc.config.port, system.io_ctx); + test_response response1 (request1, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response1.status != 0); ASSERT_EQ (200, response1.status); auto & peers_node (response1.json.get_child ("work_peers")); @@ -5337,12 +4469,12 @@ TEST (rpc, work_peers_all) ASSERT_EQ ("::1:0", peers[0]); boost::property_tree::ptree request2; request2.put ("action", "work_peers_clear"); - test_response response2 (request2, rpc.config.port, system.io_ctx); + test_response response2 (request2, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response2.status != 0); ASSERT_EQ (200, response2.status); success = response2.json.get ("success", ""); ASSERT_TRUE (success.empty ()); - test_response response3 (request1, rpc.config.port, system.io_ctx); + test_response response3 (request1, rpc->config.port, system.io_ctx); system.deadline_set (5s); ASSERT_TIMELY (10s, response3.status != 0); ASSERT_EQ (200, response3.status); @@ -5355,33 +4487,22 @@ TEST (rpc, ledger) nano::system system; auto node = add_ipc_enabled_node (system); nano::keypair key; - nano::genesis genesis; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - system.wallet (0)->insert_adhoc (key.prv); - auto & node1 (*system.nodes[0]); - auto latest (node1.latest (nano::dev_genesis_key.pub)); + auto latest (node->latest (nano::dev_genesis_key.pub)); auto genesis_balance (nano::genesis_amount); auto send_amount (genesis_balance - 100); genesis_balance -= send_amount; - nano::send_block send (latest, key.pub, genesis_balance, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1.work_generate_blocking (latest)); - node1.process (send); - nano::open_block open (send.hash (), nano::dev_genesis_key.pub, key.pub, key.prv, key.pub, *node1.work_generate_blocking (key.pub)); - ASSERT_EQ (nano::process_result::progress, node1.process (open).code); + nano::send_block send (latest, key.pub, genesis_balance, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node->work_generate_blocking (latest)); + node->process (send); + nano::open_block open (send.hash (), nano::dev_genesis_key.pub, key.pub, key.prv, key.pub, *node->work_generate_blocking (key.pub)); + ASSERT_EQ (nano::process_result::progress, node->process (open).code); auto time (nano::seconds_since_epoch ()); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "ledger"); request.put ("sorting", true); request.put ("count", "1"); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); for (auto & account : response.json.get_child ("accounts")) { @@ -5412,7 +4533,7 @@ TEST (rpc, ledger) request.put ("pending", true); request.put ("representative", true); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); for (auto & account : response.json.get_child ("accounts")) { @@ -5431,7 +4552,7 @@ TEST (rpc, ledger) request.put ("count", 2); request.put ("threshold", genesis_balance + 1); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); auto & accounts (response.json.get_child ("accounts")); ASSERT_EQ (1, accounts.size ()); @@ -5442,16 +4563,16 @@ TEST (rpc, ledger) } auto send2_amount (50); genesis_balance -= send2_amount; - nano::send_block send2 (send.hash (), key.pub, genesis_balance, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1.work_generate_blocking (send.hash ())); - scoped_thread_name_io.reset (); - node1.process (send2); - scoped_thread_name_io.renew (); + nano::send_block send2 (send.hash (), key.pub, genesis_balance, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node->work_generate_blocking (send.hash ())); + rpc_ctx->io_scope->reset (); + node->process (send2); + rpc_ctx->io_scope->renew (); // When asking for pending, pending amount is taken into account for threshold so the account must show up request.put ("count", 2); request.put ("threshold", (send_amount + send2_amount).convert_to ()); request.put ("pending", true); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); auto & accounts (response.json.get_child ("accounts")); ASSERT_EQ (1, accounts.size ()); @@ -5468,19 +4589,12 @@ TEST (rpc, accounts_create) { nano::system system; auto node = add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "accounts_create"); request.put ("wallet", node->wallets.items.begin ()->first.to_string ()); request.put ("count", "8"); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); auto & accounts (response.json.get_child ("accounts")); @@ -5497,34 +4611,26 @@ TEST (rpc, accounts_create) TEST (rpc, block_create) { nano::system system; - auto & node1 = *add_ipc_enabled_node (system); + auto node1 = add_ipc_enabled_node (system); nano::keypair key; - nano::genesis genesis; system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); system.wallet (0)->insert_adhoc (key.prv); - auto latest (node1.latest (nano::dev_genesis_key.pub)); - auto send_work = *node1.work_generate_blocking (latest); + auto latest (node1->latest (nano::dev_genesis_key.pub)); + auto send_work = *node1->work_generate_blocking (latest); nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, send_work); - auto open_work = *node1.work_generate_blocking (key.pub); + auto open_work = *node1->work_generate_blocking (key.pub); nano::open_block open (send.hash (), nano::dev_genesis_key.pub, key.pub, key.prv, key.pub, open_work); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request; request.put ("action", "block_create"); request.put ("type", "send"); - request.put ("wallet", node1.wallets.items.begin ()->first.to_string ()); + request.put ("wallet", node1->wallets.items.begin ()->first.to_string ()); request.put ("account", nano::dev_genesis_key.pub.to_account ()); request.put ("previous", latest.to_string ()); request.put ("amount", "340282366920938463463374607431768211355"); request.put ("destination", key.pub.to_account ()); request.put ("work", nano::to_string_hex (send_work)); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::string send_hash (response.json.get ("hash")); @@ -5537,9 +4643,9 @@ TEST (rpc, block_create) boost::property_tree::read_json (block_stream, block_l); auto send_block (nano::deserialize_block_json (block_l)); ASSERT_EQ (send.hash (), send_block->hash ()); - scoped_thread_name_io.reset (); - node1.process (send); - scoped_thread_name_io.renew (); + rpc_ctx->io_scope->reset (); + node1->process (send); + rpc_ctx->io_scope->renew (); boost::property_tree::ptree request1; request1.put ("action", "block_create"); request1.put ("type", "open"); @@ -5549,7 +4655,7 @@ TEST (rpc, block_create) request1.put ("representative", nano::dev_genesis_key.pub.to_account ()); request1.put ("source", send.hash ().to_string ()); request1.put ("work", nano::to_string_hex (open_work)); - test_response response1 (request1, rpc.config.port, system.io_ctx); + test_response response1 (request1, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response1.status != 0); ASSERT_EQ (200, response1.status); std::string open_hash (response1.json.get ("hash")); @@ -5559,20 +4665,20 @@ TEST (rpc, block_create) boost::property_tree::read_json (block_stream1, block_l); auto open_block (nano::deserialize_block_json (block_l)); ASSERT_EQ (open.hash (), open_block->hash ()); - scoped_thread_name_io.reset (); - ASSERT_EQ (nano::process_result::progress, node1.process (open).code); - scoped_thread_name_io.renew (); + rpc_ctx->io_scope->reset (); + ASSERT_EQ (nano::process_result::progress, node1->process (open).code); + rpc_ctx->io_scope->renew (); request1.put ("representative", key.pub.to_account ()); - test_response response2 (request1, rpc.config.port, system.io_ctx); + test_response response2 (request1, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response2.status != 0); ASSERT_EQ (200, response2.status); std::string open2_hash (response2.json.get ("hash")); ASSERT_NE (open.hash ().to_string (), open2_hash); // different blocks with wrong representative - auto change_work = *node1.work_generate_blocking (open.hash ()); + auto change_work = *node1->work_generate_blocking (open.hash ()); nano::change_block change (open.hash (), key.pub, key.prv, key.pub, change_work); request1.put ("type", "change"); request1.put ("work", nano::to_string_hex (change_work)); - test_response response4 (request1, rpc.config.port, system.io_ctx); + test_response response4 (request1, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response4.status != 0); ASSERT_EQ (200, response4.status); std::string change_hash (response4.json.get ("hash")); @@ -5582,20 +4688,20 @@ TEST (rpc, block_create) boost::property_tree::read_json (block_stream4, block_l); auto change_block (nano::deserialize_block_json (block_l)); ASSERT_EQ (change.hash (), change_block->hash ()); - scoped_thread_name_io.reset (); - ASSERT_EQ (nano::process_result::progress, node1.process (change).code); - nano::send_block send2 (send.hash (), key.pub, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1.work_generate_blocking (send.hash ())); - ASSERT_EQ (nano::process_result::progress, node1.process (send2).code); - scoped_thread_name_io.renew (); + rpc_ctx->io_scope->reset (); + ASSERT_EQ (nano::process_result::progress, node1->process (change).code); + nano::send_block send2 (send.hash (), key.pub, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (send.hash ())); + ASSERT_EQ (nano::process_result::progress, node1->process (send2).code); + rpc_ctx->io_scope->renew (); boost::property_tree::ptree request2; request2.put ("action", "block_create"); request2.put ("type", "receive"); - request2.put ("wallet", node1.wallets.items.begin ()->first.to_string ()); + request2.put ("wallet", node1->wallets.items.begin ()->first.to_string ()); request2.put ("account", key.pub.to_account ()); request2.put ("source", send2.hash ().to_string ()); request2.put ("previous", change.hash ().to_string ()); - request2.put ("work", nano::to_string_hex (*node1.work_generate_blocking (change.hash ()))); - test_response response5 (request2, rpc.config.port, system.io_ctx); + request2.put ("work", nano::to_string_hex (*node1->work_generate_blocking (change.hash ()))); + test_response response5 (request2, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response5.status != 0); ASSERT_EQ (200, response5.status); std::string receive_hash (response4.json.get ("hash")); @@ -5604,8 +4710,8 @@ TEST (rpc, block_create) boost::property_tree::read_json (block_stream5, block_l); auto receive_block (nano::deserialize_block_json (block_l)); ASSERT_EQ (receive_hash, receive_block->hash ().to_string ()); - node1.process_active (std::move (receive_block)); - latest = node1.latest (key.pub); + node1->process_active (std::move (receive_block)); + latest = node1->latest (key.pub); ASSERT_EQ (receive_hash, latest.to_string ()); } @@ -5616,6 +4722,7 @@ TEST (rpc, block_create_state) nano::keypair key; nano::genesis genesis; system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "block_create"); request.put ("type", "state"); @@ -5626,15 +4733,7 @@ TEST (rpc, block_create_state) request.put ("balance", (nano::genesis_amount - nano::Gxrb_ratio).convert_to ()); request.put ("link", key.pub.to_account ()); request.put ("work", nano::to_string_hex (*node->work_generate_blocking (genesis.hash ()))); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::string state_hash (response.json.get ("hash")); @@ -5646,7 +4745,7 @@ TEST (rpc, block_create_state) ASSERT_NE (nullptr, state_block); ASSERT_EQ (nano::block_type::state, state_block->type ()); ASSERT_EQ (state_hash, state_block->hash ().to_string ()); - scoped_thread_name_io.reset (); + rpc_ctx->io_scope->reset (); auto process_result (node->process (*state_block)); ASSERT_EQ (nano::process_result::progress, process_result.code); } @@ -5660,6 +4759,7 @@ TEST (rpc, block_create_state_open) system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); auto send_block (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, nano::Gxrb_ratio)); ASSERT_NE (nullptr, send_block); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "block_create"); request.put ("type", "state"); @@ -5670,15 +4770,7 @@ TEST (rpc, block_create_state_open) request.put ("balance", nano::Gxrb_ratio.convert_to ()); request.put ("link", send_block->hash ().to_string ()); request.put ("work", nano::to_string_hex (*node->work_generate_blocking (key.pub))); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::string state_hash (response.json.get ("hash")); @@ -5693,7 +4785,7 @@ TEST (rpc, block_create_state_open) auto difficulty (state_block->difficulty ()); ASSERT_GT (difficulty, nano::work_threshold (state_block->work_version (), nano::block_details (nano::epoch::epoch_0, false, true, false))); ASSERT_TRUE (node->latest (key.pub).is_zero ()); - scoped_thread_name_io.reset (); + rpc_ctx->io_scope->reset (); auto process_result (node->process (*state_block)); ASSERT_EQ (nano::process_result::progress, process_result.code); ASSERT_EQ (state_block->sideband ().details.epoch, nano::epoch::epoch_0); @@ -5704,8 +4796,6 @@ TEST (rpc, block_create_state_open) // Missing "work" parameter should cause work to be generated for us. TEST (rpc, block_create_state_request_work) { - nano::genesis genesis; - // Test work generation for state blocks both with and without previous (in the latter // case, the account will be used for work generation) std::unique_ptr epoch2; @@ -5721,9 +4811,8 @@ TEST (rpc, block_create_state_request_work) nano::system system; auto node = add_ipc_enabled_node (system); nano::keypair key; - nano::genesis genesis; system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - scoped_io_thread_name_change scoped_thread_name_io; + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "block_create"); request.put ("type", "state"); @@ -5733,14 +4822,7 @@ TEST (rpc, block_create_state_request_work) request.put ("balance", (nano::genesis_amount - nano::Gxrb_ratio).convert_to ()); request.put ("link", key.pub.to_account ()); request.put ("previous", previous); - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); boost::property_tree::ptree block_l; @@ -5757,12 +4839,12 @@ TEST (rpc, block_create_open_epoch_v2) nano::system system; auto node = add_ipc_enabled_node (system); nano::keypair key; - nano::genesis genesis; system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); ASSERT_NE (nullptr, system.upgrade_genesis_epoch (*node, nano::epoch::epoch_1)); ASSERT_NE (nullptr, system.upgrade_genesis_epoch (*node, nano::epoch::epoch_2)); auto send_block (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, nano::Gxrb_ratio)); ASSERT_NE (nullptr, send_block); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "block_create"); request.put ("type", "state"); @@ -5772,15 +4854,7 @@ TEST (rpc, block_create_open_epoch_v2) request.put ("representative", nano::dev_genesis_key.pub.to_account ()); request.put ("balance", nano::Gxrb_ratio.convert_to ()); request.put ("link", send_block->hash ().to_string ()); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::string state_hash (response.json.get ("hash")); @@ -5795,7 +4869,7 @@ TEST (rpc, block_create_open_epoch_v2) auto difficulty (state_block->difficulty ()); ASSERT_GT (difficulty, nano::work_threshold (state_block->work_version (), nano::block_details (nano::epoch::epoch_2, false, true, false))); ASSERT_TRUE (node->latest (key.pub).is_zero ()); - scoped_thread_name_io.reset (); + rpc_ctx->io_scope->reset (); auto process_result (node->process (*state_block)); ASSERT_EQ (nano::process_result::progress, process_result.code); ASSERT_EQ (state_block->sideband ().details.epoch, nano::epoch::epoch_2); @@ -5808,7 +4882,6 @@ TEST (rpc, block_create_receive_epoch_v2) nano::system system; auto node = add_ipc_enabled_node (system); nano::keypair key; - nano::genesis genesis; system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); ASSERT_NE (nullptr, system.upgrade_genesis_epoch (*node, nano::epoch::epoch_1)); auto send_block (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, nano::Gxrb_ratio)); @@ -5817,6 +4890,7 @@ TEST (rpc, block_create_receive_epoch_v2) ASSERT_EQ (nano::process_result::progress, node->process (open).code); ASSERT_NE (nullptr, system.upgrade_genesis_epoch (*node, nano::epoch::epoch_2)); auto send_block_2 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, nano::Gxrb_ratio)); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "block_create"); request.put ("type", "state"); @@ -5826,15 +4900,7 @@ TEST (rpc, block_create_receive_epoch_v2) request.put ("representative", nano::dev_genesis_key.pub.to_account ()); request.put ("balance", (2 * nano::Gxrb_ratio).convert_to ()); request.put ("link", send_block_2->hash ().to_string ()); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::string state_hash (response.json.get ("hash")); @@ -5848,7 +4914,7 @@ TEST (rpc, block_create_receive_epoch_v2) ASSERT_EQ (state_hash, state_block->hash ().to_string ()); auto difficulty (state_block->difficulty ()); ASSERT_GT (difficulty, nano::work_threshold (state_block->work_version (), nano::block_details (nano::epoch::epoch_2, false, true, false))); - scoped_thread_name_io.reset (); + rpc_ctx->io_scope->reset (); auto process_result (node->process (*state_block)); ASSERT_EQ (nano::process_result::progress, process_result.code); ASSERT_EQ (state_block->sideband ().details.epoch, nano::epoch::epoch_2); @@ -5861,7 +4927,6 @@ TEST (rpc, block_create_send_epoch_v2) nano::system system; auto node = add_ipc_enabled_node (system); nano::keypair key; - nano::genesis genesis; system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); ASSERT_NE (nullptr, system.upgrade_genesis_epoch (*node, nano::epoch::epoch_1)); ASSERT_NE (nullptr, system.upgrade_genesis_epoch (*node, nano::epoch::epoch_2)); @@ -5869,6 +4934,7 @@ TEST (rpc, block_create_send_epoch_v2) ASSERT_NE (nullptr, send_block); nano::state_block open (key.pub, 0, nano::dev_genesis_key.pub, nano::Gxrb_ratio, send_block->hash (), key.prv, key.pub, *node->work_generate_blocking (key.pub)); ASSERT_EQ (nano::process_result::progress, node->process (open).code); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "block_create"); request.put ("type", "state"); @@ -5878,15 +4944,7 @@ TEST (rpc, block_create_send_epoch_v2) request.put ("representative", nano::dev_genesis_key.pub.to_account ()); request.put ("balance", 0); request.put ("link", nano::dev_genesis_key.pub.to_string ()); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::string state_hash (response.json.get ("hash")); @@ -5900,7 +4958,7 @@ TEST (rpc, block_create_send_epoch_v2) ASSERT_EQ (state_hash, state_block->hash ().to_string ()); auto difficulty (state_block->difficulty ()); ASSERT_GT (difficulty, nano::work_threshold (state_block->work_version (), nano::block_details (nano::epoch::epoch_2, true, false, false))); - scoped_thread_name_io.reset (); + rpc_ctx->io_scope->reset (); auto process_result (node->process (*state_block)); ASSERT_EQ (nano::process_result::progress, process_result.code); ASSERT_EQ (state_block->sideband ().details.epoch, nano::epoch::epoch_2); @@ -5911,24 +4969,17 @@ TEST (rpc, block_create_send_epoch_v2) TEST (rpc, block_hash) { nano::system system; - auto & node1 = *add_ipc_enabled_node (system); + auto node1 = add_ipc_enabled_node (system); + auto [rpc, rpc_ctx] = add_rpc (system, node1); nano::keypair key; - auto latest (node1.latest (nano::dev_genesis_key.pub)); - nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1.work_generate_blocking (latest)); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto latest (node1->latest (nano::dev_genesis_key.pub)); + nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); boost::property_tree::ptree request; request.put ("action", "block_hash"); std::string json; send.serialize_json (json); request.put ("block", json); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::string send_hash (response.json.get ("hash")); @@ -5939,14 +4990,7 @@ TEST (rpc, wallet_lock) { nano::system system; auto node = add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; std::string wallet; node->wallets.items.begin ()->first.encode_hex (wallet); @@ -5956,7 +5000,7 @@ TEST (rpc, wallet_lock) } request.put ("wallet", wallet); request.put ("action", "wallet_lock"); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::string account_text1 (response.json.get ("locked")); @@ -5969,20 +5013,13 @@ TEST (rpc, wallet_locked) { nano::system system; auto node = add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; std::string wallet; node->wallets.items.begin ()->first.encode_hex (wallet); request.put ("wallet", wallet); request.put ("action", "wallet_locked"); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::string account_text1 (response.json.get ("locked")); @@ -5993,22 +5030,15 @@ TEST (rpc, wallet_create_fail) { nano::system system; auto node = add_ipc_enabled_node (system); - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); // lmdb_max_dbs should be removed once the wallet store is refactored to support more wallets. for (int i = 0; i < 127; i++) { node->wallets.create (nano::random_wallet_id ()); } - rpc.start (); - scoped_io_thread_name_change scoped_thread_name_io; + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "wallet_create"); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (std::error_code (nano::error_common::wallet_lmdb_max_dbs).message (), response.json.get ("error")); } @@ -6016,30 +5046,22 @@ TEST (rpc, wallet_create_fail) TEST (rpc, wallet_ledger) { nano::system system; - auto & node1 = *add_ipc_enabled_node (system); + auto node1 = add_ipc_enabled_node (system); nano::keypair key; - nano::genesis genesis; system.wallet (0)->insert_adhoc (key.prv); - auto latest (node1.latest (nano::dev_genesis_key.pub)); - nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1.work_generate_blocking (latest)); - node1.process (send); - nano::open_block open (send.hash (), nano::dev_genesis_key.pub, key.pub, key.prv, key.pub, *node1.work_generate_blocking (key.pub)); - ASSERT_EQ (nano::process_result::progress, node1.process (open).code); + auto latest (node1->latest (nano::dev_genesis_key.pub)); + nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); + node1->process (send); + nano::open_block open (send.hash (), nano::dev_genesis_key.pub, key.pub, key.prv, key.pub, *node1->work_generate_blocking (key.pub)); + ASSERT_EQ (nano::process_result::progress, node1->process (open).code); auto time (nano::seconds_since_epoch ()); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request; request.put ("action", "wallet_ledger"); - request.put ("wallet", node1.wallets.items.begin ()->first.to_string ()); + request.put ("wallet", node1->wallets.items.begin ()->first.to_string ()); request.put ("sorting", "1"); request.put ("count", "1"); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); for (auto & accounts : response.json.get_child ("accounts")) { @@ -6068,7 +5090,7 @@ TEST (rpc, wallet_ledger) request.put ("weight", "true"); request.put ("pending", "1"); request.put ("representative", "false"); - test_response response2 (request, rpc.config.port, system.io_ctx); + test_response response2 (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response2.status != 0); for (auto & accounts : response2.json.get_child ("accounts")) { @@ -6087,14 +5109,7 @@ TEST (rpc, wallet_add_watch) { nano::system system; auto node = add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; std::string wallet; node->wallets.items.begin ()->first.encode_hex (wallet); @@ -6105,7 +5120,7 @@ TEST (rpc, wallet_add_watch) entry.put ("", nano::dev_genesis_key.pub.to_account ()); peers_l.push_back (std::make_pair ("", entry)); request.add_child ("accounts", peers_l); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::string success (response.json.get ("success")); @@ -6119,7 +5134,7 @@ TEST (rpc, wallet_add_watch) request.erase ("accounts"); request.add_child ("accounts", peers_l); - test_response response_error (request, rpc.config.port, system.io_ctx); + test_response response_error (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response_error.status != 0); ASSERT_EQ (200, response_error.status); std::error_code ec (nano::error_common::bad_public_key); @@ -6136,19 +5151,12 @@ TEST (rpc, online_reps) ASSERT_EQ (node2->online_reps.online (), 0); auto send_block (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, nano::Gxrb_ratio)); ASSERT_NE (nullptr, send_block); - scoped_io_thread_name_change scoped_thread_name_io; ASSERT_TIMELY (10s, !node2->online_reps.list ().empty ()); ASSERT_EQ (node2->online_reps.online (), nano::genesis_amount - nano::Gxrb_ratio); - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*system.nodes[1], node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node2->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node2); boost::property_tree::ptree request; request.put ("action", "representatives_online"); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); auto representatives (response.json.get_child ("representatives")); @@ -6160,7 +5168,7 @@ TEST (rpc, online_reps) ASSERT_TIMELY (5s, node2->block (send_block->hash ())); //Test weight option request.put ("weight", "true"); - test_response response2 (request, rpc.config.port, system.io_ctx); + test_response response2 (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response2.status != 0); auto representatives2 (response2.json.get_child ("representatives")); auto item2 (representatives2.begin ()); @@ -6169,20 +5177,20 @@ TEST (rpc, online_reps) auto weight2 (item2->second.get ("weight")); ASSERT_EQ (node2->weight (nano::dev_genesis_key.pub).convert_to (), weight2); //Test accounts filter - scoped_thread_name_io.reset (); + rpc_ctx->io_scope->reset (); auto new_rep (system.wallet (1)->deterministic_insert ()); auto send (system.wallet (0)->send_action (nano::dev_genesis_key.pub, new_rep, node1->config.receive_minimum.number ())); - scoped_thread_name_io.renew (); + rpc_ctx->io_scope->renew (); ASSERT_NE (nullptr, send); ASSERT_TIMELY (10s, node2->block (send->hash ())); - scoped_thread_name_io.reset (); + rpc_ctx->io_scope->reset (); auto receive (system.wallet (1)->receive_action (send->hash (), new_rep, node1->config.receive_minimum.number (), send->link ().as_account ())); - scoped_thread_name_io.renew (); + rpc_ctx->io_scope->renew (); ASSERT_NE (nullptr, receive); ASSERT_TIMELY (5s, node2->block (receive->hash ())); - scoped_thread_name_io.reset (); + rpc_ctx->io_scope->reset (); auto change (system.wallet (0)->change_action (nano::dev_genesis_key.pub, new_rep)); - scoped_thread_name_io.renew (); + rpc_ctx->io_scope->renew (); ASSERT_NE (nullptr, change); ASSERT_TIMELY (5s, node2->block (change->hash ())); ASSERT_TIMELY (5s, node2->online_reps.list ().size () == 2); @@ -6191,7 +5199,7 @@ TEST (rpc, online_reps) boost::property_tree::ptree filtered_accounts; filtered_accounts.push_back (std::make_pair ("", child_rep)); request.add_child ("accounts", filtered_accounts); - test_response response3 (request, rpc.config.port, system.io_ctx); + test_response response3 (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (10s, response3.status != 0); auto representatives3 (response3.json.get_child ("representatives")); auto item3 (representatives3.begin ()); @@ -6221,8 +5229,6 @@ TEST (rpc, confirmation_height_currently_processing) previous_genesis_chain_hash = send.hash (); } - scoped_io_thread_name_change scoped_thread_name_io; - std::shared_ptr frontier; { auto transaction = node->store.tx_begin_read (); @@ -6232,13 +5238,7 @@ TEST (rpc, confirmation_height_currently_processing) boost::property_tree::ptree request; request.put ("action", "confirmation_height_currently_processing"); - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); // Begin process for confirming the block (and setting confirmation height) { @@ -6250,7 +5250,7 @@ TEST (rpc, confirmation_height_currently_processing) // Make the request { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (10s, response.status != 0); ASSERT_EQ (200, response.status); auto hash (response.json.get ("hash")); @@ -6263,7 +5263,7 @@ TEST (rpc, confirmation_height_currently_processing) // Make the same request, it should now return an error { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (10s, response.status != 0); ASSERT_EQ (200, response.status); std::error_code ec (nano::error_rpc::confirmation_height_not_processing); @@ -6279,18 +5279,11 @@ TEST (rpc, confirmation_history) system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); ASSERT_TRUE (node->active.list_recently_cemented ().empty ()); auto block (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, nano::Gxrb_ratio)); - scoped_io_thread_name_change scoped_thread_name_io; ASSERT_TIMELY (10s, !node->active.list_recently_cemented ().empty ()); - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "confirmation_history"); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); auto representatives (response.json.get_child ("confirmations")); @@ -6321,19 +5314,12 @@ TEST (rpc, confirmation_history_hash) auto send1 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, nano::Gxrb_ratio)); auto send2 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, nano::Gxrb_ratio)); auto send3 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, nano::Gxrb_ratio)); - scoped_io_thread_name_change scoped_thread_name_io; ASSERT_TIMELY (10s, node->active.list_recently_cemented ().size () == 3); - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "confirmation_history"); request.put ("hash", send2->hash ().to_string ()); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); auto representatives (response.json.get_child ("confirmations")); @@ -6357,23 +5343,16 @@ TEST (rpc, block_confirm) auto node = add_ipc_enabled_node (system); system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); nano::genesis genesis; - auto send1 (std::make_shared (nano::dev_genesis_key.pub, genesis.hash (), nano::dev_genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node->work_generate_blocking (genesis.hash ()))); - { - auto transaction (node->store.tx_begin_write ()); - ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, *send1).code); - } - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto send1 (std::make_shared (nano::dev_genesis_key.pub, genesis.hash (), nano::dev_genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node->work_generate_blocking (genesis.hash ()))); + { + auto transaction (node->store.tx_begin_write ()); + ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, *send1).code); + } + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "block_confirm"); request.put ("hash", send1->hash ().to_string ()); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_EQ ("1", response.json.get ("started")); @@ -6384,18 +5363,11 @@ TEST (rpc, block_confirm_absent) nano::system system; auto node = add_ipc_enabled_node (system); system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "block_confirm"); request.put ("hash", "0"); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_EQ (std::error_code (nano::error_blocks::not_found).message (), response.json.get ("error")); @@ -6418,18 +5390,11 @@ TEST (rpc, block_confirm_confirmed) ASSERT_TRUE (node->ledger.block_confirmed (transaction, genesis.hash ())); } ASSERT_EQ (0, node->stats.count (nano::stat::type::error, nano::stat::detail::http_callback, nano::stat::dir::out)); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "block_confirm"); request.put ("hash", genesis.hash ().to_string ()); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_EQ ("1", response.json.get ("started")); @@ -6448,17 +5413,10 @@ TEST (rpc, node_id) { nano::system system; auto node = add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "node_id"); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_EQ (node->node_id.prv.to_string (), response.json.get ("private")); @@ -6470,20 +5428,13 @@ TEST (rpc, stats_clear) { nano::system system; auto node = add_ipc_enabled_node (system); + auto [rpc, rpc_ctx] = add_rpc (system, node); nano::keypair key; - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); node->stats.inc (nano::stat::type::ledger, nano::stat::dir::in); ASSERT_EQ (1, node->stats.count (nano::stat::type::ledger, nano::stat::dir::in)); boost::property_tree::ptree request; request.put ("action", "stats_clear"); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); std::string success (response.json.get ("success")); ASSERT_TRUE (success.empty ()); @@ -6494,25 +5445,19 @@ TEST (rpc, stats_clear) TEST (rpc, unchecked) { nano::system system; - auto & node = *add_ipc_enabled_node (system); + auto node = add_ipc_enabled_node (system); + auto [rpc, rpc_ctx] = add_rpc (system, node); nano::keypair key; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); auto open (std::make_shared (key.pub, 0, key.pub, 1, key.pub, key.prv, key.pub, *system.work.generate (key.pub))); auto open2 (std::make_shared (key.pub, 0, key.pub, 2, key.pub, key.prv, key.pub, *system.work.generate (key.pub))); - node.process_active (open); - node.process_active (open2); - node.block_processor.flush (); + node->process_active (open); + node->process_active (open2); + node->block_processor.flush (); boost::property_tree::ptree request; request.put ("action", "unchecked"); request.put ("count", 2); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); auto & blocks (response.json.get_child ("blocks")); @@ -6522,7 +5467,7 @@ TEST (rpc, unchecked) } request.put ("json_block", true); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); auto & blocks (response.json.get_child ("blocks")); @@ -6535,23 +5480,17 @@ TEST (rpc, unchecked) TEST (rpc, unchecked_get) { nano::system system; - auto & node = *add_ipc_enabled_node (system); + auto node = add_ipc_enabled_node (system); + auto [rpc, rpc_ctx] = add_rpc (system, node); nano::keypair key; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); auto open (std::make_shared (key.pub, 0, key.pub, 1, key.pub, key.prv, key.pub, *system.work.generate (key.pub))); - node.process_active (open); - node.block_processor.flush (); + node->process_active (open); + node->block_processor.flush (); boost::property_tree::ptree request; request.put ("action", "unchecked_get"); request.put ("hash", open->hash ().to_string ()); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_EQ (1, response.json.count ("contents")); @@ -6560,7 +5499,7 @@ TEST (rpc, unchecked_get) } request.put ("json_block", true); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); auto & contents (response.json.get_child ("contents")); @@ -6573,28 +5512,22 @@ TEST (rpc, unchecked_get) TEST (rpc, unchecked_clear) { nano::system system; - auto & node = *add_ipc_enabled_node (system); + auto node = add_ipc_enabled_node (system); + auto [rpc, rpc_ctx] = add_rpc (system, node); nano::keypair key; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); auto open (std::make_shared (key.pub, 0, key.pub, 1, key.pub, key.prv, key.pub, *system.work.generate (key.pub))); - node.process_active (open); - node.block_processor.flush (); + node->process_active (open); + node->block_processor.flush (); boost::property_tree::ptree request; { - ASSERT_EQ (node.store.unchecked.count (node.store.tx_begin_read ()), 1); + ASSERT_EQ (node->store.unchecked.count (node->store.tx_begin_read ()), 1); } request.put ("action", "unchecked_clear"); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); - ASSERT_TIMELY (10s, node.store.unchecked.count (node.store.tx_begin_read ()) == 0); + ASSERT_TIMELY (10s, node->store.unchecked.count (node->store.tx_begin_read ()) == 0); } TEST (rpc, unopened) @@ -6609,18 +5542,11 @@ TEST (rpc, unopened) ASSERT_NE (nullptr, send); auto send2 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, account2, 10)); ASSERT_NE (nullptr, send2); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); { boost::property_tree::ptree request; request.put ("action", "unopened"); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); auto & accounts (response.json.get_child ("accounts")); @@ -6633,7 +5559,7 @@ TEST (rpc, unopened) boost::property_tree::ptree request; request.put ("action", "unopened"); request.put ("account", account2.to_account ()); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); auto & accounts (response.json.get_child ("accounts")); @@ -6645,7 +5571,7 @@ TEST (rpc, unopened) boost::property_tree::ptree request; request.put ("action", "unopened"); request.put ("account", nano::account (account2.number () + 1).to_account ()); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); auto & accounts (response.json.get_child ("accounts")); @@ -6656,7 +5582,7 @@ TEST (rpc, unopened) boost::property_tree::ptree request; request.put ("action", "unopened"); request.put ("count", "1"); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); auto & accounts (response.json.get_child ("accounts")); @@ -6668,7 +5594,7 @@ TEST (rpc, unopened) boost::property_tree::ptree request; request.put ("action", "unopened"); request.put ("threshold", 5); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); auto & accounts (response.json.get_child ("accounts")); @@ -6686,17 +5612,10 @@ TEST (rpc, unopened_burn) ASSERT_FALSE (genesis.is_zero ()); auto send (system.wallet (0)->send_action (nano::dev_genesis_key.pub, nano::burn_account, 1)); ASSERT_NE (nullptr, send); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "unopened"); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); auto & accounts (response.json.get_child ("accounts")); @@ -6707,17 +5626,10 @@ TEST (rpc, unopened_no_accounts) { nano::system system; auto node = add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "unopened"); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); auto & accounts (response.json.get_child ("accounts")); @@ -6728,18 +5640,11 @@ TEST (rpc, uptime) { nano::system system; auto node = add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "uptime"); std::this_thread::sleep_for (std::chrono::seconds (1)); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_LE (1, response.json.get ("seconds")); @@ -6763,18 +5668,11 @@ TEST (rpc, wallet_history) auto send2 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, node->config.receive_minimum.number ())); ASSERT_NE (nullptr, send2); system.deadline_set (10s); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "wallet_history"); request.put ("wallet", node->wallets.items.begin ()->first.to_string ()); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::vector> history_l; @@ -6813,28 +5711,21 @@ TEST (rpc, wallet_history) TEST (rpc, sign_hash) { nano::system system; - auto & node1 = *add_ipc_enabled_node (system); + auto node1 = add_ipc_enabled_node (system); nano::keypair key; - nano::state_block send (nano::genesis_account, node1.latest (nano::dev_genesis_key.pub), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + nano::state_block send (nano::genesis_account, node1->latest (nano::dev_genesis_key.pub), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0); + auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request; request.put ("action", "sign"); request.put ("hash", send.hash ().to_string ()); request.put ("key", key.prv.to_string ()); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (10s, response.status != 0); ASSERT_EQ (200, response.status); std::error_code ec (nano::error_rpc::sign_hash_disabled); ASSERT_EQ (response.json.get ("error"), ec.message ()); - node_rpc_config.enable_sign_hash = true; - test_response response2 (request, rpc.config.port, system.io_ctx); + rpc_ctx->node_rpc_config->enable_sign_hash = true; + test_response response2 (request, rpc->config.port, system.io_ctx); system.deadline_set (10s); ASSERT_TIMELY (10s, response2.status != 0); ASSERT_EQ (200, response2.status); @@ -6847,28 +5738,21 @@ TEST (rpc, sign_hash) TEST (rpc, sign_block) { nano::system system; - auto & node1 = *add_ipc_enabled_node (system); + auto node1 = add_ipc_enabled_node (system); nano::keypair key; system.wallet (0)->insert_adhoc (key.prv); - nano::state_block send (nano::genesis_account, node1.latest (nano::dev_genesis_key.pub), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + nano::state_block send (nano::genesis_account, node1->latest (nano::dev_genesis_key.pub), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0); + auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request; request.put ("action", "sign"); std::string wallet; - node1.wallets.items.begin ()->first.encode_hex (wallet); + node1->wallets.items.begin ()->first.encode_hex (wallet); request.put ("wallet", wallet); request.put ("account", key.pub.to_account ()); std::string json; send.serialize_json (json); request.put ("block", json); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (10s, response.status != 0); ASSERT_EQ (200, response.status); auto contents (response.json.get ("block")); @@ -6885,13 +5769,7 @@ TEST (rpc, memory_stats) { nano::system system; auto node = add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); + auto [rpc, rpc_ctx] = add_rpc (system, node); // Preliminary test adding to the vote uniquer and checking json output is correct nano::keypair key; @@ -6900,12 +5778,11 @@ TEST (rpc, memory_stats) hashes.push_back (block->hash ()); auto vote (std::make_shared (key.pub, key.prv, 0, hashes)); node->vote_uniquer.unique (vote); - rpc.start (); boost::property_tree::ptree request; request.put ("action", "stats"); request.put ("type", "objects"); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); @@ -6914,7 +5791,7 @@ TEST (rpc, memory_stats) request.put ("type", "database"); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_TRUE (!response.json.empty ()); @@ -6925,29 +5802,22 @@ TEST (rpc, block_confirmed) { nano::system system; auto node = add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "block_info"); request.put ("hash", "bad_hash1337"); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_EQ (std::error_code (nano::error_blocks::invalid_block_hash).message (), response.json.get ("error")); request.put ("hash", "0"); - test_response response1 (request, rpc.config.port, system.io_ctx); + test_response response1 (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response1.status != 0); ASSERT_EQ (200, response1.status); ASSERT_EQ (std::error_code (nano::error_blocks::not_found).message (), response1.json.get ("error")); - scoped_thread_name_io.reset (); + rpc_ctx->io_scope->reset (); nano::keypair key; // Open an account directly in the ledger @@ -6960,12 +5830,12 @@ TEST (rpc, block_confirmed) nano::open_block open1 (send1.hash (), nano::genesis_account, key.pub, key.prv, key.pub, *system.work.generate (key.pub)); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, open1).code); } - scoped_thread_name_io.renew (); + rpc_ctx->io_scope->renew (); // This should not be confirmed nano::block_hash latest (node->latest (nano::dev_genesis_key.pub)); request.put ("hash", latest.to_string ()); - test_response response2 (request, rpc.config.port, system.io_ctx); + test_response response2 (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response2.status != 0); ASSERT_EQ (200, response2.status); @@ -6985,7 +5855,7 @@ TEST (rpc, block_confirmed) // Requesting confirmation for this should now succeed request.put ("hash", send->hash ().to_string ()); - test_response response3 (request, rpc.config.port, system.io_ctx); + test_response response3 (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response3.status != 0); ASSERT_EQ (200, response3.status); ASSERT_TRUE (response3.json.get ("confirmed")); @@ -7003,19 +5873,12 @@ TEST (rpc, database_txn_tracker) { nano::system system; auto node = add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "database_txn_tracker"); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::error_code ec (nano::error_common::tracking_not_enabled); @@ -7028,18 +5891,11 @@ TEST (rpc, database_txn_tracker) nano::node_config node_config (nano::get_available_port (), system.logging); node_config.diagnostics_config.txn_tracking.enable = true; auto node = add_ipc_enabled_node (system, node_config); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; - auto check_not_correct_amount = [&system, &request, &rpc_port = rpc.config.port] () { - test_response response (request, rpc_port, system.io_ctx); + auto check_not_correct_amount = [&system, &request, rpc = rpc] () { + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); std::error_code ec (nano::error_common::invalid_amount); @@ -7078,7 +5934,7 @@ TEST (rpc, database_txn_tracker) // Adjust minimum read time so that it can detect the read transaction being opened request.put ("min_read_time", "1000"); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); // It can take a long time to generate stack traces ASSERT_TIMELY (60s, response.status != 0); ASSERT_EQ (200, response.status); @@ -7113,20 +5969,13 @@ TEST (rpc, active_difficulty) { nano::system system; auto node = add_ipc_enabled_node (system); + auto [rpc, rpc_ctx] = add_rpc (system, node); ASSERT_EQ (node->default_difficulty (nano::work_version::work_1), node->network_params.network.publish_thresholds.epoch_2); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); boost::property_tree::ptree request; request.put ("action", "active_difficulty"); auto expected_multiplier{ 1.0 }; { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); auto network_minimum_text (response.json.get ("network_minimum")); @@ -7154,7 +6003,7 @@ TEST (rpc, active_difficulty) // Test include_trend optional request.put ("include_trend", true); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); auto trend_opt (response.json.get_child_optional ("difficulty_trend")); ASSERT_TRUE (trend_opt.is_initialized ()); @@ -7284,17 +6133,11 @@ TEST (rpc, deprecated_account_format) { nano::system system; auto node = add_ipc_enabled_node (system); - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "account_info"); request.put ("account", nano::dev_genesis_key.pub.to_account ()); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); boost::optional deprecated_account_format (response.json.get_optional ("deprecated_account_format")); @@ -7302,7 +6145,7 @@ TEST (rpc, deprecated_account_format) std::string account_text (nano::dev_genesis_key.pub.to_account ()); account_text[4] = '-'; request.put ("account", account_text); - test_response response2 (request, rpc.config.port, system.io_ctx); + test_response response2 (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response2.status != 0); ASSERT_EQ (200, response2.status); std::string frontier (response.json.get ("frontier")); @@ -7338,22 +6181,16 @@ TEST (rpc, epoch_upgrade) ASSERT_EQ (info.epoch (), nano::epoch::epoch_0); } } - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "epoch_upgrade"); request.put ("epoch", 1); request.put ("key", epoch_signer.prv.to_string ()); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_EQ ("1", response.json.get ("started")); - test_response response_fail (request, rpc.config.port, system.io_ctx); + test_response response_fail (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response_fail.status != 0); ASSERT_EQ (200, response_fail.status); ASSERT_EQ ("0", response_fail.json.get ("started")); @@ -7373,6 +6210,7 @@ TEST (rpc, epoch_upgrade) ASSERT_FALSE (node->store.account.exists (transaction, 0)); } + rpc_ctx->io_scope->reset (); // Epoch 2 upgrade auto genesis_latest (node->latest (nano::dev_genesis_key.pub)); auto send5 (std::make_shared (nano::dev_genesis_key.pub, genesis_latest, nano::dev_genesis_key.pub, nano::genesis_amount - 5, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (genesis_latest))); // to burn (0) @@ -7390,8 +6228,9 @@ TEST (rpc, epoch_upgrade) ASSERT_EQ (nano::epoch::epoch_1, info.epoch); } + rpc_ctx->io_scope->renew (); request.put ("epoch", 2); - test_response response2 (request, rpc.config.port, system.io_ctx); + test_response response2 (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response2.status != 0); ASSERT_EQ (200, response2.status); ASSERT_EQ ("1", response2.json.get ("started")); @@ -7442,19 +6281,13 @@ TEST (rpc, epoch_upgrade_multithreaded) ASSERT_EQ (info.epoch (), nano::epoch::epoch_0); } } - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "epoch_upgrade"); request.put ("threads", 2); request.put ("epoch", 1); request.put ("key", epoch_signer.prv.to_string ()); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_EQ ("1", response.json.get ("started")); @@ -7474,6 +6307,7 @@ TEST (rpc, epoch_upgrade_multithreaded) ASSERT_FALSE (node->store.account.exists (transaction, 0)); } + rpc_ctx->io_scope->reset (); // Epoch 2 upgrade auto genesis_latest (node->latest (nano::dev_genesis_key.pub)); auto send5 (std::make_shared (nano::dev_genesis_key.pub, genesis_latest, nano::dev_genesis_key.pub, nano::genesis_amount - 5, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (genesis_latest))); // to burn (0) @@ -7491,8 +6325,9 @@ TEST (rpc, epoch_upgrade_multithreaded) ASSERT_EQ (nano::epoch::epoch_1, info.epoch); } + rpc_ctx->io_scope->renew (); request.put ("epoch", 2); - test_response response2 (request, rpc.config.port, system.io_ctx); + test_response response2 (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response2.status != 0); ASSERT_EQ (200, response2.status); ASSERT_EQ ("1", response2.json.get ("started")); @@ -7533,17 +6368,11 @@ TEST (rpc, account_lazy_start) node_config.ipc_config.transport_tcp.port = nano::get_available_port (); auto node2 = system.add_node (node_config, node_flags); node2->network.udp_channels.insert (node1->network.endpoint (), node1->network_params.protocol.protocol_version); - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (*node2, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node_config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node2); boost::property_tree::ptree request; request.put ("action", "account_info"); request.put ("account", key.pub.to_account ()); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); boost::optional account_error (response.json.get_optional ("error")); @@ -7559,43 +6388,36 @@ TEST (rpc, account_lazy_start) TEST (rpc, receive) { nano::system system; - auto & node = *add_ipc_enabled_node (system); + auto node = add_ipc_enabled_node (system); auto wallet = system.wallet (0); std::string wallet_text; - node.wallets.items.begin ()->first.encode_hex (wallet_text); + node->wallets.items.begin ()->first.encode_hex (wallet_text); wallet->insert_adhoc (nano::dev_genesis_key.prv); nano::keypair key1; wallet->insert_adhoc (key1.prv); - auto send1 (wallet->send_action (nano::dev_genesis_key.pub, key1.pub, node.config.receive_minimum.number (), *node.work_generate_blocking (nano::genesis_hash))); - ASSERT_TIMELY (5s, node.balance (nano::dev_genesis_key.pub) != nano::genesis_amount); - ASSERT_TIMELY (10s, !node.store.account.exists (node.store.tx_begin_read (), key1.pub)); + auto send1 (wallet->send_action (nano::dev_genesis_key.pub, key1.pub, node->config.receive_minimum.number (), *node->work_generate_blocking (nano::genesis_hash))); + ASSERT_TIMELY (5s, node->balance (nano::dev_genesis_key.pub) != nano::genesis_amount); + ASSERT_TIMELY (10s, !node->store.account.exists (node->store.tx_begin_read (), key1.pub)); // Send below minimum receive amount - auto send2 (wallet->send_action (nano::dev_genesis_key.pub, key1.pub, node.config.receive_minimum.number () - 1, *node.work_generate_blocking (send1->hash ()))); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto send2 (wallet->send_action (nano::dev_genesis_key.pub, key1.pub, node->config.receive_minimum.number () - 1, *node->work_generate_blocking (send1->hash ()))); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "receive"); request.put ("wallet", wallet_text); request.put ("account", key1.pub.to_account ()); request.put ("block", send2->hash ().to_string ()); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); auto receive_text (response.json.get ("block")); nano::account_info info; - ASSERT_FALSE (node.store.account.get (node.store.tx_begin_read (), key1.pub, info)); + ASSERT_FALSE (node->store.account.get (node->store.tx_begin_read (), key1.pub, info)); ASSERT_EQ (info.head, receive_text); } // Trying to receive the same block should fail with unreceivable { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_EQ (std::error_code (nano::error_process::unreceivable).message (), response.json.get ("error")); @@ -7603,7 +6425,7 @@ TEST (rpc, receive) // Trying to receive a non-existing block should fail request.put ("block", nano::block_hash (send2->hash ().number () + 1).to_string ()); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_EQ (std::error_code (nano::error_blocks::not_found).message (), response.json.get ("error")); @@ -7613,64 +6435,57 @@ TEST (rpc, receive) TEST (rpc, receive_unopened) { nano::system system; - auto & node = *add_ipc_enabled_node (system); + auto node = add_ipc_enabled_node (system); auto wallet = system.wallet (0); std::string wallet_text; - node.wallets.items.begin ()->first.encode_hex (wallet_text); + node->wallets.items.begin ()->first.encode_hex (wallet_text); wallet->insert_adhoc (nano::dev_genesis_key.prv); // Test receiving for unopened account nano::keypair key1; - auto send1 (wallet->send_action (nano::dev_genesis_key.pub, key1.pub, node.config.receive_minimum.number () - 1, *node.work_generate_blocking (nano::genesis_hash))); - ASSERT_TIMELY (5s, !node.balance (nano::dev_genesis_key.pub) != nano::genesis_amount); - ASSERT_FALSE (node.store.account.exists (node.store.tx_begin_read (), key1.pub)); - ASSERT_TRUE (node.store.block.exists (node.store.tx_begin_read (), send1->hash ())); + auto send1 (wallet->send_action (nano::dev_genesis_key.pub, key1.pub, node->config.receive_minimum.number () - 1, *node->work_generate_blocking (nano::genesis_hash))); + ASSERT_TIMELY (5s, !node->balance (nano::dev_genesis_key.pub) != nano::genesis_amount); + ASSERT_FALSE (node->store.account.exists (node->store.tx_begin_read (), key1.pub)); + ASSERT_TRUE (node->store.block.exists (node->store.tx_begin_read (), send1->hash ())); wallet->insert_adhoc (key1.prv); // should not auto receive, amount sent was lower than minimum - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "receive"); request.put ("wallet", wallet_text); request.put ("account", key1.pub.to_account ()); request.put ("block", send1->hash ().to_string ()); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); auto receive_text (response.json.get ("block")); nano::account_info info; - ASSERT_FALSE (node.store.account.get (node.store.tx_begin_read (), key1.pub, info)); + ASSERT_FALSE (node->store.account.get (node->store.tx_begin_read (), key1.pub, info)); ASSERT_EQ (info.head, info.open_block); ASSERT_EQ (info.head.to_string (), receive_text); ASSERT_EQ (info.representative, nano::dev_genesis_key.pub); } - scoped_thread_name_io.reset (); + rpc_ctx->io_scope->reset (); // Test receiving for an unopened with a different wallet representative nano::keypair key2; - auto prev_amount (node.balance (nano::dev_genesis_key.pub)); - auto send2 (wallet->send_action (nano::dev_genesis_key.pub, key2.pub, node.config.receive_minimum.number () - 1, *node.work_generate_blocking (send1->hash ()))); - ASSERT_TIMELY (5s, !node.balance (nano::dev_genesis_key.pub) != prev_amount); - ASSERT_FALSE (node.store.account.exists (node.store.tx_begin_read (), key2.pub)); - ASSERT_TRUE (node.store.block.exists (node.store.tx_begin_read (), send2->hash ())); + auto prev_amount (node->balance (nano::dev_genesis_key.pub)); + auto send2 (wallet->send_action (nano::dev_genesis_key.pub, key2.pub, node->config.receive_minimum.number () - 1, *node->work_generate_blocking (send1->hash ()))); + ASSERT_TIMELY (5s, !node->balance (nano::dev_genesis_key.pub) != prev_amount); + ASSERT_FALSE (node->store.account.exists (node->store.tx_begin_read (), key2.pub)); + ASSERT_TRUE (node->store.block.exists (node->store.tx_begin_read (), send2->hash ())); nano::public_key rep; - wallet->store.representative_set (node.wallets.tx_begin_write (), rep); + wallet->store.representative_set (node->wallets.tx_begin_write (), rep); wallet->insert_adhoc (key2.prv); // should not auto receive, amount sent was lower than minimum - scoped_thread_name_io.renew (); + rpc_ctx->io_scope->renew (); request.put ("account", key2.pub.to_account ()); request.put ("block", send2->hash ().to_string ()); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); auto receive_text (response.json.get ("block")); nano::account_info info; - ASSERT_FALSE (node.store.account.get (node.store.tx_begin_read (), key2.pub, info)); + ASSERT_FALSE (node->store.account.get (node->store.tx_begin_read (), key2.pub, info)); ASSERT_EQ (info.head, info.open_block); ASSERT_EQ (info.head.to_string (), receive_text); ASSERT_EQ (info.representative, rep); @@ -7684,35 +6499,28 @@ TEST (rpc, receive_work_disabled) auto & worker_node = *system.add_node (config); config.peering_port = nano::get_available_port (); config.work_threads = 0; - auto & node = *add_ipc_enabled_node (system, config); + auto node = add_ipc_enabled_node (system, config); auto wallet = system.wallet (1); std::string wallet_text; - node.wallets.items.begin ()->first.encode_hex (wallet_text); + node->wallets.items.begin ()->first.encode_hex (wallet_text); wallet->insert_adhoc (nano::dev_genesis_key.prv); nano::keypair key1; nano::genesis genesis; ASSERT_TRUE (worker_node.work_generation_enabled ()); - auto send1 (wallet->send_action (nano::dev_genesis_key.pub, key1.pub, node.config.receive_minimum.number () - 1, *worker_node.work_generate_blocking (genesis.hash ()), false)); + auto send1 (wallet->send_action (nano::dev_genesis_key.pub, key1.pub, node->config.receive_minimum.number () - 1, *worker_node.work_generate_blocking (genesis.hash ()), false)); ASSERT_TRUE (send1 != nullptr); - ASSERT_TIMELY (5s, node.balance (nano::dev_genesis_key.pub) != nano::genesis_amount); - ASSERT_FALSE (node.store.account.exists (node.store.tx_begin_read (), key1.pub)); - ASSERT_TRUE (node.store.block.exists (node.store.tx_begin_read (), send1->hash ())); + ASSERT_TIMELY (5s, node->balance (nano::dev_genesis_key.pub) != nano::genesis_amount); + ASSERT_FALSE (node->store.account.exists (node->store.tx_begin_read (), key1.pub)); + ASSERT_TRUE (node->store.block.exists (node->store.tx_begin_read (), send1->hash ())); wallet->insert_adhoc (key1.prv); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "receive"); request.put ("wallet", wallet_text); request.put ("account", key1.pub.to_account ()); request.put ("block", send1->hash ().to_string ()); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_EQ (std::error_code (nano::error_common::disabled_work_generation).message (), response.json.get ("error")); @@ -7727,59 +6535,52 @@ TEST (rpc, receive_pruned) node_config.enable_voting = false; // Remove after allowing pruned voting nano::node_flags node_flags; node_flags.enable_pruning = true; - auto & node2 = *add_ipc_enabled_node (system, node_config, node_flags); + auto node2 = add_ipc_enabled_node (system, node_config, node_flags); auto wallet1 = system.wallet (0); auto wallet2 = system.wallet (1); std::string wallet_text; - node2.wallets.items.begin ()->first.encode_hex (wallet_text); + node2->wallets.items.begin ()->first.encode_hex (wallet_text); wallet1->insert_adhoc (nano::dev_genesis_key.prv); nano::keypair key1; wallet2->insert_adhoc (key1.prv); - auto send1 (wallet1->send_action (nano::dev_genesis_key.pub, key1.pub, node2.config.receive_minimum.number (), *node2.work_generate_blocking (nano::genesis_hash))); - ASSERT_TIMELY (5s, node2.balance (nano::dev_genesis_key.pub) != nano::genesis_amount); - ASSERT_TIMELY (10s, !node2.store.account.exists (node2.store.tx_begin_read (), key1.pub)); + auto send1 (wallet1->send_action (nano::dev_genesis_key.pub, key1.pub, node2->config.receive_minimum.number (), *node2->work_generate_blocking (nano::genesis_hash))); + ASSERT_TIMELY (5s, node2->balance (nano::dev_genesis_key.pub) != nano::genesis_amount); + ASSERT_TIMELY (10s, !node2->store.account.exists (node2->store.tx_begin_read (), key1.pub)); // Send below minimum receive amount - auto send2 (wallet1->send_action (nano::dev_genesis_key.pub, key1.pub, node2.config.receive_minimum.number () - 1, *node2.work_generate_blocking (send1->hash ()))); + auto send2 (wallet1->send_action (nano::dev_genesis_key.pub, key1.pub, node2->config.receive_minimum.number () - 1, *node2->work_generate_blocking (send1->hash ()))); // Extra send frontier - auto send3 (wallet1->send_action (nano::dev_genesis_key.pub, key1.pub, node2.config.receive_minimum.number (), *node2.work_generate_blocking (send1->hash ()))); + auto send3 (wallet1->send_action (nano::dev_genesis_key.pub, key1.pub, node2->config.receive_minimum.number (), *node2->work_generate_blocking (send1->hash ()))); // Pruning - ASSERT_TIMELY (5s, node2.ledger.cache.cemented_count == 6 && node2.confirmation_height_processor.current ().is_zero () && node2.confirmation_height_processor.awaiting_processing_size () == 0); + ASSERT_TIMELY (5s, node2->ledger.cache.cemented_count == 6 && node2->confirmation_height_processor.current ().is_zero () && node2->confirmation_height_processor.awaiting_processing_size () == 0); { - auto transaction (node2.store.tx_begin_write ()); - ASSERT_EQ (2, node2.ledger.pruning_action (transaction, send2->hash (), 1)); + auto transaction (node2->store.tx_begin_write ()); + ASSERT_EQ (2, node2->ledger.pruning_action (transaction, send2->hash (), 1)); } - ASSERT_EQ (2, node2.ledger.cache.pruned_count); - ASSERT_TRUE (node2.ledger.block_or_pruned_exists (send1->hash ())); - ASSERT_FALSE (node2.store.block.exists (node2.store.tx_begin_read (), send1->hash ())); - ASSERT_TRUE (node2.ledger.block_or_pruned_exists (send2->hash ())); - ASSERT_FALSE (node2.store.block.exists (node2.store.tx_begin_read (), send2->hash ())); - ASSERT_TRUE (node2.ledger.block_or_pruned_exists (send3->hash ())); + ASSERT_EQ (2, node2->ledger.cache.pruned_count); + ASSERT_TRUE (node2->ledger.block_or_pruned_exists (send1->hash ())); + ASSERT_FALSE (node2->store.block.exists (node2->store.tx_begin_read (), send1->hash ())); + ASSERT_TRUE (node2->ledger.block_or_pruned_exists (send2->hash ())); + ASSERT_FALSE (node2->store.block.exists (node2->store.tx_begin_read (), send2->hash ())); + ASSERT_TRUE (node2->ledger.block_or_pruned_exists (send3->hash ())); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node2, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node2.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto [rpc, rpc_ctx] = add_rpc (system, node2); boost::property_tree::ptree request; request.put ("action", "receive"); request.put ("wallet", wallet_text); request.put ("account", key1.pub.to_account ()); request.put ("block", send2->hash ().to_string ()); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); auto receive_text (response.json.get ("block")); nano::account_info info; - ASSERT_FALSE (node2.store.account.get (node2.store.tx_begin_read (), key1.pub, info)); + ASSERT_FALSE (node2->store.account.get (node2->store.tx_begin_read (), key1.pub, info)); ASSERT_EQ (info.head, receive_text); } // Trying to receive the same block should fail with unreceivable { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_EQ (std::error_code (nano::error_process::unreceivable).message (), response.json.get ("error")); @@ -7787,7 +6588,7 @@ TEST (rpc, receive_pruned) // Trying to receive a non-existing block should fail request.put ("block", nano::block_hash (send2->hash ().number () + 1).to_string ()); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_EQ (std::error_code (nano::error_blocks::not_found).message (), response.json.get ("error")); @@ -7797,19 +6598,12 @@ TEST (rpc, receive_pruned) TEST (rpc, telemetry_single) { nano::system system (1); - auto & node1 = *add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto node1 = add_ipc_enabled_node (system); + auto [rpc, rpc_ctx] = add_rpc (system, node1); // Wait until peers are stored as they are done in the background auto peers_stored = false; - ASSERT_TIMELY (10s, node1.store.peer.count (node1.store.tx_begin_read ()) != 0); + ASSERT_TIMELY (10s, node1->store.peer.count (node1->store.tx_begin_read ()) != 0); // Missing port boost::property_tree::ptree request; @@ -7818,7 +6612,7 @@ TEST (rpc, telemetry_single) request.put ("address", "not_a_valid_address"); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (10s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_EQ (std::error_code (nano::error_rpc::requires_port_and_address).message (), response.json.get ("error")); @@ -7829,7 +6623,7 @@ TEST (rpc, telemetry_single) request.put ("port", 65); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (10s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_EQ (std::error_code (nano::error_rpc::requires_port_and_address).message (), response.json.get ("error")); @@ -7840,7 +6634,7 @@ TEST (rpc, telemetry_single) request.put ("port", 65); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (10s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_EQ (std::error_code (nano::error_common::invalid_ip_address).message (), response.json.get ("error")); @@ -7850,7 +6644,7 @@ TEST (rpc, telemetry_single) request.put ("address", (boost::format ("%1%") % node->network.endpoint ().address ()).str ()); request.put ("port", "invalid port"); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (10s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_EQ (std::error_code (nano::error_common::invalid_port).message (), response.json.get ("error")); @@ -7859,7 +6653,7 @@ TEST (rpc, telemetry_single) // Use correctly formed address and port request.put ("port", node->network.endpoint ().port ()); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (10s, response.status != 0); ASSERT_EQ (200, response.status); @@ -7874,23 +6668,16 @@ TEST (rpc, telemetry_single) TEST (rpc, telemetry_all) { nano::system system (1); - auto & node1 = *add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto node1 = add_ipc_enabled_node (system); + auto [rpc, rpc_ctx] = add_rpc (system, node1); // Wait until peers are stored as they are done in the background - ASSERT_TIMELY (10s, node1.store.peer.count (node1.store.tx_begin_read ()) != 0); + ASSERT_TIMELY (10s, node1->store.peer.count (node1->store.tx_begin_read ()) != 0); // First need to set up the cached data std::atomic done{ false }; auto node = system.nodes.front (); - node1.telemetry->get_metrics_single_peer_async (node1.network.find_channel (node->network.endpoint ()), [&done] (nano::telemetry_data_response const & telemetry_data_response_a) { + node1->telemetry->get_metrics_single_peer_async (node1->network.find_channel (node->network.endpoint ()), [&done] (nano::telemetry_data_response const & telemetry_data_response_a) { ASSERT_FALSE (telemetry_data_response_a.error); done = true; }); @@ -7900,7 +6687,7 @@ TEST (rpc, telemetry_all) boost::property_tree::ptree request; request.put ("action", "telemetry"); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (10s, response.status != 0); nano::jsonconfig config (response.json); nano::telemetry_data telemetry_data; @@ -7912,7 +6699,7 @@ TEST (rpc, telemetry_all) } request.put ("raw", "true"); - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (10s, response.status != 0); ASSERT_EQ (200, response.status); @@ -7929,67 +6716,60 @@ TEST (rpc, telemetry_all) ASSERT_EQ (node->network.endpoint ().address ().to_string (), metrics.get ("address")); ASSERT_EQ (node->network.endpoint ().port (), metrics.get ("port")); - ASSERT_TRUE (node1.network.find_node_id (data.node_id)); + ASSERT_TRUE (node1->network.find_node_id (data.node_id)); } // Also tests all forms of ipv4/ipv6 TEST (rpc, telemetry_self) { nano::system system; - auto & node1 = *add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto node1 = add_ipc_enabled_node (system); + auto [rpc, rpc_ctx] = add_rpc (system, node1); // Just to have peer count at 1 - node1.network.udp_channels.insert (nano::endpoint (boost::asio::ip::make_address_v6 ("::1"), nano::get_available_port ()), 0); + node1->network.udp_channels.insert (nano::endpoint (boost::asio::ip::make_address_v6 ("::1"), nano::get_available_port ()), 0); boost::property_tree::ptree request; request.put ("action", "telemetry"); request.put ("address", "::1"); - request.put ("port", node1.network.endpoint ().port ()); + request.put ("port", node1->network.endpoint ().port ()); auto const should_ignore_identification_metrics = false; { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (10s, response.status != 0); ASSERT_EQ (200, response.status); nano::telemetry_data data; nano::jsonconfig config (response.json); ASSERT_FALSE (data.deserialize_json (config, should_ignore_identification_metrics)); - nano::compare_default_telemetry_response_data (data, node1.network_params, node1.config.bandwidth_limit, node1.default_difficulty (nano::work_version::work_1), node1.node_id); + nano::compare_default_telemetry_response_data (data, node1->network_params, node1->config.bandwidth_limit, node1->default_difficulty (nano::work_version::work_1), node1->node_id); } request.put ("address", "[::1]"); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (10s, response.status != 0); ASSERT_EQ (200, response.status); nano::telemetry_data data; nano::jsonconfig config (response.json); ASSERT_FALSE (data.deserialize_json (config, should_ignore_identification_metrics)); - nano::compare_default_telemetry_response_data (data, node1.network_params, node1.config.bandwidth_limit, node1.default_difficulty (nano::work_version::work_1), node1.node_id); + nano::compare_default_telemetry_response_data (data, node1->network_params, node1->config.bandwidth_limit, node1->default_difficulty (nano::work_version::work_1), node1->node_id); } request.put ("address", "127.0.0.1"); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (10s, response.status != 0); ASSERT_EQ (200, response.status); nano::telemetry_data data; nano::jsonconfig config (response.json); ASSERT_FALSE (data.deserialize_json (config, should_ignore_identification_metrics)); - nano::compare_default_telemetry_response_data (data, node1.network_params, node1.config.bandwidth_limit, node1.default_difficulty (nano::work_version::work_1), node1.node_id); + nano::compare_default_telemetry_response_data (data, node1->network_params, node1->config.bandwidth_limit, node1->default_difficulty (nano::work_version::work_1), node1->node_id); } // Incorrect port should fail request.put ("port", "0"); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (10s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_EQ (std::error_code (nano::error_rpc::peer_not_found).message (), response.json.get ("error")); @@ -8004,31 +6784,24 @@ TEST (rpc, confirmation_active) node_config.ipc_config.transport_tcp.port = nano::get_available_port (); nano::node_flags node_flags; node_flags.disable_request_loop = true; - auto & node1 (*system.add_node (node_config, node_flags)); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto node1 (system.add_node (node_config, node_flags)); + auto [rpc, rpc_ctx] = add_rpc (system, node1); nano::genesis genesis; auto send1 (std::make_shared (genesis.hash (), nano::public_key (), nano::genesis_amount - 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (genesis.hash ()))); auto send2 (std::make_shared (send1->hash (), nano::public_key (), nano::genesis_amount - 200, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send1->hash ()))); - node1.process_active (send1); - node1.process_active (send2); - nano::blocks_confirm (node1, { send1, send2 }); - ASSERT_EQ (2, node1.active.size ()); - auto election (node1.active.election (send1->qualified_root ())); + node1->process_active (send1); + node1->process_active (send2); + nano::blocks_confirm (*node1, { send1, send2 }); + ASSERT_EQ (2, node1->active.size ()); + auto election (node1->active.election (send1->qualified_root ())); ASSERT_NE (nullptr, election); election->force_confirm (); boost::property_tree::ptree request; request.put ("action", "confirmation_active"); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); auto & confirmations (response.json.get_child ("confirmations")); @@ -8042,22 +6815,15 @@ TEST (rpc, confirmation_active) TEST (rpc, confirmation_info) { nano::system system; - auto & node1 = *add_ipc_enabled_node (system); - scoped_io_thread_name_change scoped_thread_name_io; - nano::node_rpc_config node_rpc_config; - nano::ipc::ipc_server ipc_server (node1, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); - rpc_config.rpc_process.ipc_port = node1.config.ipc_config.transport_tcp.port; - nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, ipc_rpc_processor); - rpc.start (); + auto node1 = add_ipc_enabled_node (system); + auto [rpc, rpc_ctx] = add_rpc (system, node1); nano::genesis genesis; auto send (std::make_shared (genesis.hash (), nano::public_key (), nano::genesis_amount - 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (genesis.hash ()))); - node1.process_active (send); - node1.block_processor.flush (); - node1.scheduler.flush (); - ASSERT_FALSE (node1.active.empty ()); + node1->process_active (send); + node1->block_processor.flush (); + node1->scheduler.flush (); + ASSERT_FALSE (node1->active.empty ()); boost::property_tree::ptree request; request.put ("action", "confirmation_info"); @@ -8065,7 +6831,7 @@ TEST (rpc, confirmation_info) request.put ("representatives", "true"); request.put ("json_block", "true"); { - test_response response (request, rpc.config.port, system.io_ctx); + test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (5s, response.status != 0); ASSERT_EQ (200, response.status); ASSERT_EQ (1, response.json.count ("announcements")); From d2d8cfadde725370bcc4445d8a5a4be26075ba7a Mon Sep 17 00:00:00 2001 From: Sergey Kroshnin Date: Thu, 24 Jun 2021 13:38:24 +0300 Subject: [PATCH 061/346] Update FlatBuffers to release 2.0.0 --- flatbuffers | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/flatbuffers b/flatbuffers index 3b458f7a17..a9a295fecf 160000 --- a/flatbuffers +++ b/flatbuffers @@ -1 +1 @@ -Subproject commit 3b458f7a170154ed4c4a3a2a9f6116fb2d415ad5 +Subproject commit a9a295fecf3fbd5a4f571f53b01f63202a3e2113 From 4cd88f7d3e2b2d30ae7d3ae2c37b7033c3f5c3d0 Mon Sep 17 00:00:00 2001 From: Sergey Kroshnin Date: Fri, 25 Jun 2021 13:57:06 +0300 Subject: [PATCH 062/346] Update Crypto++ to release 8.5 (#3354) * Update Crypto++ to stable version 8.5 * Avoid circular dependency using AlignedAllocate (https://github.com/weidai11/cryptopp/commit/1190da17eaae1874610a27cb2303cb91d6da20dc) --- CMakeLists.txt | 1 + crypto/cryptopp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 4c86e995b2..9f0fc77da9 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -464,6 +464,7 @@ set(CRYPTOPP_LIBRARY cryptopp) add_library( cryptopp crypto/cryptopp/algparam.cpp + crypto/cryptopp/allocate.cpp crypto/cryptopp/asn.cpp crypto/cryptopp/basecode.cpp crypto/cryptopp/cpu.cpp diff --git a/crypto/cryptopp b/crypto/cryptopp index 1c34979592..f2102243e6 160000 --- a/crypto/cryptopp +++ b/crypto/cryptopp @@ -1 +1 @@ -Subproject commit 1c34979592f7d5e5d73e265a9c8650cc006620d2 +Subproject commit f2102243e6fdd48c0b2a393a0993cca228f20573 From ec2f62e50d42c460f00ee90105bfbea5ad29d401 Mon Sep 17 00:00:00 2001 From: Sergey Kroshnin Date: Fri, 25 Jun 2021 13:57:24 +0300 Subject: [PATCH 063/346] Update GoogleTest to release 1.11.0 (#3352) * Update GoogleTest to release 1.11.0 * Explicitly set GOOGLETEST_VERSION * Update .gitmodules --- .gitmodules | 1 - CMakeLists.txt | 2 ++ gtest | 2 +- 3 files changed, 3 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index bd4e9f6d98..47b40b9ee9 100644 --- a/.gitmodules +++ b/.gitmodules @@ -14,7 +14,6 @@ [submodule "gtest"] path = gtest url = https://github.com/google/googletest.git - branch = v1.8.x [submodule "cpptoml"] path = cpptoml url = https://github.com/cryptocode/cpptoml.git diff --git a/CMakeLists.txt b/CMakeLists.txt index 9f0fc77da9..c279bfcefe 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -580,6 +580,8 @@ if(NANO_TEST OR RAIBLOCKS_TEST) add_subdirectory(nano/load_test) + # FIXME: This fixes googletest GOOGLETEST_VERSION requirement + set(GOOGLETEST_VERSION 1.11.0) add_subdirectory(gtest/googletest) # FIXME: This fixes gtest include directories without modifying gtest's # CMakeLists.txt. Ideally we should use GTest::GTest and GTest::Main as diff --git a/gtest b/gtest index 703bd9caab..e2239ee604 160000 --- a/gtest +++ b/gtest @@ -1 +1 @@ -Subproject commit 703bd9caab50b139428cea1aaff9974ebee5742e +Subproject commit e2239ee6043f73722e7aa812a459f54a28552929 From 34ab29159415f319b46a646cb6585a70e1aee5c3 Mon Sep 17 00:00:00 2001 From: Sergey Kroshnin Date: Fri, 25 Jun 2021 14:50:31 +0300 Subject: [PATCH 064/346] Simplify RPC tests response check (#3356) with `wait_reponse ()` function --- nano/rpc_test/rpc.cpp | 2003 +++++++++++++++-------------------------- 1 file changed, 711 insertions(+), 1292 deletions(-) diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index c362d0c731..5c81f8826a 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -124,12 +124,25 @@ void reset_confirmation_height (nano::store & store, nano::account const & accou } } -void check_block_response_count (nano::system & system, nano::rpc & rpc, boost::property_tree::ptree & request, uint64_t size_count) +void wait_response_impl (nano::system & system, std::shared_ptr const & rpc, boost::property_tree::ptree & request, const std::chrono::duration & time, boost::property_tree::ptree & response_json) { - test_response response (request, rpc.config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); + test_response response (request, rpc->config.port, system.io_ctx); + ASSERT_TIMELY (time, response.status != 0); ASSERT_EQ (200, response.status); - ASSERT_EQ (size_count, response.json.get_child ("blocks").front ().second.size ()); + response_json = response.json; +} + +boost::property_tree::ptree wait_response (nano::system & system, std::shared_ptr const & rpc, boost::property_tree::ptree & request, const std::chrono::duration & time = 5s) +{ + boost::property_tree::ptree response_json; + wait_response_impl (system, rpc, request, time, response_json); + return response_json; +} + +void check_block_response_count (nano::system & system, std::shared_ptr const & rpc, boost::property_tree::ptree & request, uint64_t size_count) +{ + auto response (wait_response (system, rpc, request)); + ASSERT_EQ (size_count, response.get_child ("blocks").front ().second.size ()); } class scoped_io_thread_name_change @@ -239,23 +252,19 @@ TEST (rpc, account_balance) // The send and pending should be unconfirmed { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - std::string balance_text (response.json.get ("balance")); + auto response (wait_response (system, rpc, request)); + std::string balance_text (response.get ("balance")); ASSERT_EQ ("340282366920938463463374607431768211455", balance_text); - std::string pending_text (response.json.get ("pending")); + std::string pending_text (response.get ("pending")); ASSERT_EQ ("0", pending_text); } request.put ("include_only_confirmed", false); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - std::string balance_text (response.json.get ("balance")); + auto response (wait_response (system, rpc, request)); + std::string balance_text (response.get ("balance")); ASSERT_EQ ("340282366920938463463374607431768211454", balance_text); - std::string pending_text (response.json.get ("pending")); + std::string pending_text (response.get ("pending")); ASSERT_EQ ("1", pending_text); } } @@ -268,10 +277,8 @@ TEST (rpc, account_block_count) boost::property_tree::ptree request; request.put ("action", "account_block_count"); request.put ("account", nano::dev_genesis_key.pub.to_account ()); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - std::string block_count_text (response.json.get ("block_count")); + auto response (wait_response (system, rpc, request)); + std::string block_count_text (response.get ("block_count")); ASSERT_EQ ("1", block_count_text); } @@ -283,27 +290,21 @@ TEST (rpc, account_create) boost::property_tree::ptree request; request.put ("action", "account_create"); request.put ("wallet", node->wallets.items.begin ()->first.to_string ()); - test_response response0 (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response0.status != 0); - ASSERT_EQ (200, response0.status); - auto account_text0 (response0.json.get ("account")); + auto response0 (wait_response (system, rpc, request)); + auto account_text0 (response0.get ("account")); nano::account account0; ASSERT_FALSE (account0.decode_account (account_text0)); ASSERT_TRUE (system.wallet (0)->exists (account0)); constexpr uint64_t max_index (std::numeric_limits::max ()); request.put ("index", max_index); - test_response response1 (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (10s, response1.status != 0); - ASSERT_EQ (200, response1.status); - auto account_text1 (response1.json.get ("account")); + auto response1 (wait_response (system, rpc, request, 10s)); + auto account_text1 (response1.get ("account")); nano::account account1; ASSERT_FALSE (account1.decode_account (account_text1)); ASSERT_TRUE (system.wallet (0)->exists (account1)); request.put ("index", max_index + 1); - test_response response2 (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response2.status != 0); - ASSERT_EQ (200, response2.status); - ASSERT_EQ (std::error_code (nano::error_common::invalid_index).message (), response2.json.get ("error")); + auto response2 (wait_response (system, rpc, request)); + ASSERT_EQ (std::error_code (nano::error_common::invalid_index).message (), response2.get ("error")); } TEST (rpc, account_weight) @@ -318,10 +319,8 @@ TEST (rpc, account_weight) boost::property_tree::ptree request; request.put ("action", "account_weight"); request.put ("account", key.pub.to_account ()); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - std::string balance_text (response.json.get ("weight")); + auto response (wait_response (system, rpc, request)); + std::string balance_text (response.get ("weight")); ASSERT_EQ ("340282366920938463463374607431768211455", balance_text); } @@ -337,10 +336,8 @@ TEST (rpc, wallet_contains) request.put ("wallet", wallet); request.put ("action", "wallet_contains"); request.put ("account", nano::dev_genesis_key.pub.to_account ()); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - std::string exists_text (response.json.get ("exists")); + auto response (wait_response (system, rpc, request)); + std::string exists_text (response.get ("exists")); ASSERT_EQ ("1", exists_text); } @@ -355,10 +352,8 @@ TEST (rpc, wallet_doesnt_contain) request.put ("wallet", wallet); request.put ("action", "wallet_contains"); request.put ("account", nano::dev_genesis_key.pub.to_account ()); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - std::string exists_text (response.json.get ("exists")); + auto response (wait_response (system, rpc, request)); + std::string exists_text (response.get ("exists")); ASSERT_EQ ("0", exists_text); } @@ -370,9 +365,8 @@ TEST (rpc, validate_account_number) boost::property_tree::ptree request; request.put ("action", "validate_account_number"); request.put ("account", nano::dev_genesis_key.pub.to_account ()); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - std::string exists_text (response.json.get ("valid")); + auto response (wait_response (system, rpc, request)); + std::string exists_text (response.get ("valid")); ASSERT_EQ ("1", exists_text); } @@ -387,10 +381,8 @@ TEST (rpc, validate_account_invalid) boost::property_tree::ptree request; request.put ("action", "validate_account_number"); request.put ("account", account); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - std::string exists_text (response.json.get ("valid")); + auto response (wait_response (system, rpc, request)); + std::string exists_text (response.get ("valid")); ASSERT_EQ ("0", exists_text); } @@ -409,10 +401,8 @@ TEST (rpc, send) request.put ("destination", nano::dev_genesis_key.pub.to_account ()); request.put ("amount", "100"); ASSERT_EQ (node->balance (nano::dev_genesis_key.pub), nano::genesis_amount); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (10s, response.status != 0); - ASSERT_EQ (200, response.status); - std::string block_text (response.json.get ("block")); + auto response (wait_response (system, rpc, request, 10s)); + std::string block_text (response.get ("block")); nano::block_hash block; ASSERT_FALSE (block.decode_hex (block_text)); ASSERT_TRUE (node->ledger.block_or_pruned_exists (block)); @@ -433,9 +423,8 @@ TEST (rpc, send_fail) request.put ("source", nano::dev_genesis_key.pub.to_account ()); request.put ("destination", nano::dev_genesis_key.pub.to_account ()); request.put ("amount", "100"); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (10s, response.status != 0); - ASSERT_EQ (std::error_code (nano::error_common::account_not_found_wallet).message (), response.json.get ("error")); + auto response (wait_response (system, rpc, request, 10s)); + ASSERT_EQ (std::error_code (nano::error_common::account_not_found_wallet).message (), response.get ("error")); } TEST (rpc, send_work) @@ -453,15 +442,12 @@ TEST (rpc, send_work) request.put ("destination", nano::dev_genesis_key.pub.to_account ()); request.put ("amount", "100"); request.put ("work", "1"); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (10s, response.status != 0); - ASSERT_EQ (std::error_code (nano::error_common::invalid_work).message (), response.json.get ("error")); + auto response (wait_response (system, rpc, request, 10s)); + ASSERT_EQ (std::error_code (nano::error_common::invalid_work).message (), response.get ("error")); request.erase ("work"); request.put ("work", nano::to_string_hex (*node->work_generate_blocking (node->latest (nano::dev_genesis_key.pub)))); - test_response response2 (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (10s, response2.status != 0); - ASSERT_EQ (200, response2.status); - std::string block_text (response2.json.get ("block")); + auto response2 (wait_response (system, rpc, request, 10s)); + std::string block_text (response2.get ("block")); nano::block_hash block; ASSERT_FALSE (block.decode_hex (block_text)); ASSERT_TRUE (node->ledger.block_or_pruned_exists (block)); @@ -484,12 +470,8 @@ TEST (rpc, send_work_disabled) request.put ("source", nano::dev_genesis_key.pub.to_account ()); request.put ("destination", nano::dev_genesis_key.pub.to_account ()); request.put ("amount", "100"); - { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (10s, response.status != 0); - ASSERT_EQ (200, response.status); - ASSERT_EQ (std::error_code (nano::error_common::disabled_work_generation).message (), response.json.get ("error")); - } + auto response (wait_response (system, rpc, request, 10s)); + ASSERT_EQ (std::error_code (nano::error_common::disabled_work_generation).message (), response.get ("error")); } TEST (rpc, send_idempotent) @@ -507,26 +489,20 @@ TEST (rpc, send_idempotent) request.put ("destination", nano::account (0).to_account ()); request.put ("amount", (nano::genesis_amount - (nano::genesis_amount / 4)).convert_to ()); request.put ("id", "123abc"); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - std::string block_text (response.json.get ("block")); + auto response (wait_response (system, rpc, request)); + std::string block_text (response.get ("block")); nano::block_hash block; ASSERT_FALSE (block.decode_hex (block_text)); ASSERT_TRUE (node->ledger.block_or_pruned_exists (block)); ASSERT_EQ (node->balance (nano::dev_genesis_key.pub), nano::genesis_amount / 4); - test_response response2 (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response2.status != 0); - ASSERT_EQ (200, response2.status); - ASSERT_EQ ("", response2.json.get ("error", "")); - ASSERT_EQ (block_text, response2.json.get ("block")); + auto response2 (wait_response (system, rpc, request)); + ASSERT_EQ ("", response2.get ("error", "")); + ASSERT_EQ (block_text, response2.get ("block")); ASSERT_EQ (node->balance (nano::dev_genesis_key.pub), nano::genesis_amount / 4); request.erase ("id"); request.put ("id", "456def"); - test_response response3 (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response3.status != 0); - ASSERT_EQ (200, response3.status); - ASSERT_EQ (std::error_code (nano::error_common::insufficient_balance).message (), response3.json.get ("error")); + auto response3 (wait_response (system, rpc, request)); + ASSERT_EQ (std::error_code (nano::error_common::insufficient_balance).message (), response3.get ("error")); } TEST (rpc, send_epoch_2) @@ -558,12 +534,10 @@ TEST (rpc, send_epoch_2) auto insufficient = system.work_generate_limited (nano::genesis_hash, min_difficulty, target_difficulty); request.put ("work", nano::to_string_hex (insufficient)); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request)); std::error_code ec (nano::error_common::invalid_work); - ASSERT_EQ (1, response.json.count ("error")); - ASSERT_EQ (response.json.get ("error"), ec.message ()); + ASSERT_EQ (1, response.count ("error")); + ASSERT_EQ (response.get ("error"), ec.message ()); } } @@ -579,10 +553,9 @@ TEST (rpc, send_ipc_random_id) }); boost::property_tree::ptree request; request.put ("action", "send"); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (10s, response.status != 0); - ASSERT_EQ (1, response.json.count ("error")); - ASSERT_EQ ("Unable to parse JSON", response.json.get ("error")); + auto response (wait_response (system, rpc, request, 10s)); + ASSERT_EQ (1, response.count ("error")); + ASSERT_EQ ("Unable to parse JSON", response.get ("error")); ASSERT_TRUE (got_request); } @@ -593,8 +566,7 @@ TEST (rpc, stop) auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "stop"); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); + auto response (wait_response (system, rpc, request)); } TEST (rpc, wallet_add) @@ -611,10 +583,8 @@ TEST (rpc, wallet_add) request.put ("wallet", wallet); request.put ("action", "wallet_add"); request.put ("key", key_text); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - std::string account_text1 (response.json.get ("account")); + auto response (wait_response (system, rpc, request)); + std::string account_text1 (response.get ("account")); ASSERT_EQ (account_text1, key1.pub.to_account ()); ASSERT_TRUE (system.wallet (0)->exists (key1.pub)); } @@ -629,10 +599,8 @@ TEST (rpc, wallet_password_valid) node->wallets.items.begin ()->first.encode_hex (wallet); request.put ("wallet", wallet); request.put ("action", "password_valid"); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - std::string account_text1 (response.json.get ("valid")); + auto response (wait_response (system, rpc, request)); + std::string account_text1 (response.get ("valid")); ASSERT_EQ (account_text1, "1"); } @@ -647,10 +615,8 @@ TEST (rpc, wallet_password_change) request.put ("wallet", wallet); request.put ("action", "password_change"); request.put ("password", "test"); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - std::string account_text1 (response.json.get ("changed")); + auto response (wait_response (system, rpc, request)); + std::string account_text1 (response.get ("changed")); ASSERT_EQ (account_text1, "1"); rpc_ctx->io_scope->reset (); auto transaction (system.wallet (0)->wallets.tx_begin_write ()); @@ -680,10 +646,8 @@ TEST (rpc, wallet_password_enter) request.put ("wallet", wallet); request.put ("action", "password_enter"); request.put ("password", ""); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - std::string account_text1 (response.json.get ("valid")); + auto response (wait_response (system, rpc, request)); + std::string account_text1 (response.get ("valid")); ASSERT_EQ (account_text1, "1"); } @@ -697,10 +661,8 @@ TEST (rpc, wallet_representative) node->wallets.items.begin ()->first.encode_hex (wallet); request.put ("wallet", wallet); request.put ("action", "wallet_representative"); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - std::string account_text1 (response.json.get ("representative")); + auto response (wait_response (system, rpc, request)); + std::string account_text1 (response.get ("representative")); ASSERT_EQ (account_text1, nano::genesis_account.to_account ()); } @@ -716,9 +678,7 @@ TEST (rpc, wallet_representative_set) nano::keypair key; request.put ("action", "wallet_representative_set"); request.put ("representative", key.pub.to_account ()); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request)); auto transaction (node->wallets.tx_begin_read ()); ASSERT_EQ (key.pub, node->wallets.items.begin ()->second->store.representative (transaction)); } @@ -737,9 +697,7 @@ TEST (rpc, wallet_representative_set_force) request.put ("action", "wallet_representative_set"); request.put ("representative", key.pub.to_account ()); request.put ("update_existing_accounts", true); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request)); { auto transaction (node->wallets.tx_begin_read ()); ASSERT_EQ (key.pub, node->wallets.items.begin ()->second->store.representative (transaction)); @@ -770,10 +728,8 @@ TEST (rpc, account_list) node->wallets.items.begin ()->first.encode_hex (wallet); request.put ("wallet", wallet); request.put ("action", "account_list"); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - auto & accounts_node (response.json.get_child ("accounts")); + auto response (wait_response (system, rpc, request)); + auto & accounts_node (response.get_child ("accounts")); std::vector accounts; for (auto i (accounts_node.begin ()), j (accounts_node.end ()); i != j; ++i) { @@ -800,10 +756,8 @@ TEST (rpc, wallet_key_valid) node->wallets.items.begin ()->first.encode_hex (wallet); request.put ("wallet", wallet); request.put ("action", "wallet_key_valid"); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - std::string exists_text (response.json.get ("valid")); + auto response (wait_response (system, rpc, request)); + std::string exists_text (response.get ("valid")); ASSERT_EQ ("1", exists_text); } @@ -814,10 +768,8 @@ TEST (rpc, wallet_create) auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "wallet_create"); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - std::string wallet_text (response.json.get ("wallet")); + auto response (wait_response (system, rpc, request)); + std::string wallet_text (response.get ("wallet")); nano::wallet_id wallet_id; ASSERT_FALSE (wallet_id.decode_hex (wallet_text)); ASSERT_NE (node->wallets.items.end (), node->wallets.items.find (wallet_id)); @@ -835,10 +787,8 @@ TEST (rpc, wallet_create_seed) boost::property_tree::ptree request; request.put ("action", "wallet_create"); request.put ("seed", seed.to_string ()); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (10s, response.status != 0); - ASSERT_EQ (200, response.status); - std::string wallet_text (response.json.get ("wallet")); + auto response (wait_response (system, rpc, request, 10s)); + std::string wallet_text (response.get ("wallet")); nano::wallet_id wallet_id; ASSERT_FALSE (wallet_id.decode_hex (wallet_text)); auto existing (node->wallets.items.find (wallet_id)); @@ -849,12 +799,12 @@ TEST (rpc, wallet_create_seed) existing->second->store.seed (seed0, transaction); ASSERT_EQ (seed, seed0); } - auto account_text (response.json.get ("last_restored_account")); + auto account_text (response.get ("last_restored_account")); nano::account account; ASSERT_FALSE (account.decode_account (account_text)); ASSERT_TRUE (existing->second->exists (account)); ASSERT_EQ (pub, account); - ASSERT_EQ ("1", response.json.get ("restored_count")); + ASSERT_EQ ("1", response.get ("restored_count")); } TEST (rpc, wallet_export) @@ -866,10 +816,8 @@ TEST (rpc, wallet_export) boost::property_tree::ptree request; request.put ("action", "wallet_export"); request.put ("wallet", node->wallets.items.begin ()->first.to_string ()); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - std::string wallet_json (response.json.get ("json")); + auto response (wait_response (system, rpc, request)); + std::string wallet_json (response.get ("json")); bool error (false); rpc_ctx->io_scope->reset (); auto transaction (node->wallets.tx_begin_write ()); @@ -889,9 +837,7 @@ TEST (rpc, wallet_destroy) boost::property_tree::ptree request; request.put ("action", "wallet_destroy"); request.put ("wallet", wallet_id.to_string ()); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request)); ASSERT_EQ (node->wallets.items.end (), node->wallets.items.find (wallet_id)); } @@ -916,10 +862,8 @@ TEST (rpc, account_move) entry.put ("", key.pub.to_account ()); keys.push_back (std::make_pair ("", entry)); request.add_child ("accounts", keys); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - ASSERT_EQ ("1", response.json.get ("moved")); + auto response (wait_response (system, rpc, request)); + ASSERT_EQ ("1", response.get ("moved")); ASSERT_TRUE (destination->exists (key.pub)); ASSERT_TRUE (destination->exists (nano::dev_genesis_key.pub)); auto transaction (node->wallets.tx_begin_read ()); @@ -934,12 +878,10 @@ TEST (rpc, block) boost::property_tree::ptree request; request.put ("action", "block"); request.put ("hash", node->latest (nano::genesis_account).to_string ()); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - auto contents (response.json.get ("contents")); + auto response (wait_response (system, rpc, request)); + auto contents (response.get ("contents")); ASSERT_FALSE (contents.empty ()); - ASSERT_TRUE (response.json.get ("confirmed")); // Genesis block is confirmed by default + ASSERT_TRUE (response.get ("confirmed")); // Genesis block is confirmed by default } TEST (rpc, block_account) @@ -951,10 +893,8 @@ TEST (rpc, block_account) boost::property_tree::ptree request; request.put ("action", "block_account"); request.put ("hash", genesis.hash ().to_string ()); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - std::string account_text (response.json.get ("account")); + auto response (wait_response (system, rpc, request)); + std::string account_text (response.get ("account")); nano::account account; ASSERT_FALSE (account.decode_account (account_text)); } @@ -974,10 +914,8 @@ TEST (rpc, chain) request.put ("action", "chain"); request.put ("block", block->hash ().to_string ()); request.put ("count", std::to_string (std::numeric_limits::max ())); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - auto & blocks_node (response.json.get_child ("blocks")); + auto response (wait_response (system, rpc, request)); + auto & blocks_node (response.get_child ("blocks")); std::vector blocks; for (auto i (blocks_node.begin ()), n (blocks_node.end ()); i != n; ++i) { @@ -1003,10 +941,8 @@ TEST (rpc, chain_limit) request.put ("action", "chain"); request.put ("block", block->hash ().to_string ()); request.put ("count", 1); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - auto & blocks_node (response.json.get_child ("blocks")); + auto response (wait_response (system, rpc, request)); + auto & blocks_node (response.get_child ("blocks")); std::vector blocks; for (auto i (blocks_node.begin ()), n (blocks_node.end ()); i != n; ++i) { @@ -1032,10 +968,8 @@ TEST (rpc, chain_offset) request.put ("block", block->hash ().to_string ()); request.put ("count", std::to_string (std::numeric_limits::max ())); request.put ("offset", 1); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - auto & blocks_node (response.json.get_child ("blocks")); + auto response (wait_response (system, rpc, request)); + auto & blocks_node (response.get_child ("blocks")); std::vector blocks; for (auto i (blocks_node.begin ()), n (blocks_node.end ()); i != n; ++i) { @@ -1068,10 +1002,8 @@ TEST (rpc, frontier) request.put ("action", "frontiers"); request.put ("account", nano::account (0).to_account ()); request.put ("count", std::to_string (std::numeric_limits::max ())); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - auto & frontiers_node (response.json.get_child ("frontiers")); + auto response (wait_response (system, rpc, request)); + auto & frontiers_node (response.get_child ("frontiers")); std::unordered_map frontiers; for (auto i (frontiers_node.begin ()), j (frontiers_node.end ()); i != j; ++i) { @@ -1108,10 +1040,8 @@ TEST (rpc, frontier_limited) request.put ("action", "frontiers"); request.put ("account", nano::account (0).to_account ()); request.put ("count", std::to_string (100)); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - auto & frontiers_node (response.json.get_child ("frontiers")); + auto response (wait_response (system, rpc, request)); + auto & frontiers_node (response.get_child ("frontiers")); ASSERT_EQ (100, frontiers_node.size ()); } @@ -1138,10 +1068,8 @@ TEST (rpc, frontier_startpoint) request.put ("action", "frontiers"); request.put ("account", source.begin ()->first.to_account ()); request.put ("count", std::to_string (1)); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - auto & frontiers_node (response.json.get_child ("frontiers")); + auto response (wait_response (system, rpc, request)); + auto & frontiers_node (response.get_child ("frontiers")); ASSERT_EQ (1, frontiers_node.size ()); ASSERT_EQ (source.begin ()->first.to_account (), frontiers_node.begin ()->first); } @@ -1172,11 +1100,9 @@ TEST (rpc, history) request.put ("action", "history"); request.put ("hash", uchange.hash ().to_string ()); request.put ("count", 100); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request)); std::vector> history_l; - auto & history_node (response.json.get_child ("history")); + auto & history_node (response.get_child ("history")); for (auto i (history_node.begin ()), n (history_node.end ()); i != n; ++i) { history_l.push_back (std::make_tuple (i->second.get ("type"), i->second.get ("account"), i->second.get ("amount"), i->second.get ("hash"))); @@ -1232,11 +1158,9 @@ TEST (rpc, account_history) request.put ("action", "account_history"); request.put ("account", nano::genesis_account.to_account ()); request.put ("count", 100); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (10s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request, 10s)); std::vector> history_l; - auto & history_node (response.json.get_child ("history")); + auto & history_node (response.get_child ("history")); for (auto i (history_node.begin ()), n (history_node.end ()); i != n; ++i) { history_l.push_back (std::make_tuple (i->second.get ("type"), i->second.get ("account"), i->second.get ("amount"), i->second.get ("hash"), i->second.get ("height"))); @@ -1276,13 +1200,11 @@ TEST (rpc, account_history) request.put ("account", nano::genesis_account.to_account ()); request.put ("reverse", true); request.put ("count", 1); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (10s, response.status != 0); - ASSERT_EQ (200, response.status); - auto & history_node (response.json.get_child ("history")); + auto response (wait_response (system, rpc, request, 10s)); + auto & history_node (response.get_child ("history")); ASSERT_EQ (1, history_node.size ()); ASSERT_EQ ("1", history_node.begin ()->second.get ("height")); - ASSERT_EQ (change->hash ().to_string (), response.json.get ("next")); + ASSERT_EQ (change->hash ().to_string (), response.get ("next")); } // Test filtering @@ -1304,9 +1226,8 @@ TEST (rpc, account_history) filtered_accounts.push_back (std::make_pair ("", other_account)); request.add_child ("account_filter", filtered_accounts); request.put ("count", 100); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (10s, response.status != 0); - auto history_node (response.json.get_child ("history")); + auto response (wait_response (system, rpc, request)); + auto history_node (response.get_child ("history")); ASSERT_EQ (history_node.size (), 2); } // Test filter for receive state blocks @@ -1320,9 +1241,8 @@ TEST (rpc, account_history) filtered_accounts.push_back (std::make_pair ("", other_account)); request.add_child ("account_filter", filtered_accounts); request.put ("count", 100); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (10s, response.status != 0); - auto history_node (response.json.get_child ("history")); + auto response (wait_response (system, rpc, request)); + auto history_node (response.get_child ("history")); ASSERT_EQ (history_node.size (), 1); } } @@ -1343,10 +1263,8 @@ TEST (rpc, history_count) request.put ("action", "history"); request.put ("hash", receive->hash ().to_string ()); request.put ("count", 1); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - auto & history_node (response.json.get_child ("history")); + auto response (wait_response (system, rpc, request)); + auto & history_node (response.get_child ("history")); ASSERT_EQ (1, history_node.size ()); } @@ -1421,11 +1339,9 @@ TEST (rpc, history_pruning) request.put ("action", "history"); request.put ("hash", send->hash ().to_string ()); request.put ("count", 100); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request)); std::vector> history_l; - auto & history_node (response.json.get_child ("history")); + auto & history_node (response.get_child ("history")); for (auto i (history_node.begin ()), n (history_node.end ()); i != n; ++i) { history_l.push_back (std::make_tuple (i->second.get ("type"), i->second.get ("account", "-1"), i->second.get ("amount", "-1"), i->second.get ("hash"))); @@ -1448,11 +1364,9 @@ TEST (rpc, history_pruning) request2.put ("action", "history"); request2.put ("hash", receive->hash ().to_string ()); request2.put ("count", 100); - test_response response2 (request2, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response2.status != 0); - ASSERT_EQ (200, response2.status); + auto response2 (wait_response (system, rpc, request2)); history_l.clear (); - auto & history_node2 (response2.json.get_child ("history")); + auto & history_node2 (response2.get_child ("history")); for (auto i (history_node2.begin ()), n (history_node2.end ()); i != n; ++i) { history_l.push_back (std::make_tuple (i->second.get ("type"), i->second.get ("account", "-1"), i->second.get ("amount", "-1"), i->second.get ("hash"))); @@ -1477,11 +1391,9 @@ TEST (rpc, history_pruning) request3.put ("action", "history"); request3.put ("hash", uchange->hash ().to_string ()); request3.put ("count", 100); - test_response response3 (request3, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response3.status != 0); - ASSERT_EQ (200, response3.status); + auto response3 (wait_response (system, rpc, request3)); history_l.clear (); - auto & history_node3 (response3.json.get_child ("history")); + auto & history_node3 (response3.get_child ("history")); for (auto i (history_node3.begin ()), n (history_node3.end ()); i != n; ++i) { history_l.push_back (std::make_tuple (i->second.get ("type"), i->second.get ("account", "-1"), i->second.get ("amount", "-1"), i->second.get ("hash"))); @@ -1511,20 +1423,16 @@ TEST (rpc, process_block) send.serialize_json (json); request.put ("block", json); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request)); ASSERT_TIMELY (10s, node1->latest (nano::dev_genesis_key.pub) == send.hash ()); - std::string send_hash (response.json.get ("hash")); + std::string send_hash (response.get ("hash")); ASSERT_EQ (send.hash ().to_string (), send_hash); } request.put ("json_block", true); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request)); std::error_code ec (nano::error_blocks::invalid_block); - ASSERT_EQ (ec.message (), response.json.get ("error")); + ASSERT_EQ (ec.message (), response.get ("error")); } } @@ -1542,19 +1450,15 @@ TEST (rpc, process_json_block) send.serialize_json (block_node); request.add_child ("block", block_node); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request)); std::error_code ec (nano::error_blocks::invalid_block); - ASSERT_EQ (ec.message (), response.json.get ("error")); + ASSERT_EQ (ec.message (), response.get ("error")); } request.put ("json_block", true); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request)); ASSERT_TIMELY (10s, node1->latest (nano::dev_genesis_key.pub) == send.hash ()); - std::string send_hash (response.json.get ("hash")); + std::string send_hash (response.get ("hash")); ASSERT_EQ (send.hash ().to_string (), send_hash); } } @@ -1575,19 +1479,15 @@ TEST (rpc, process_block_async) request.put ("block", json); request.put ("json_block", true); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request)); std::error_code ec (nano::error_blocks::invalid_block); - ASSERT_EQ (ec.message (), response.json.get ("error")); + ASSERT_EQ (ec.message (), response.get ("error")); } request.put ("json_block", false); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request)); std::error_code ec (nano::error_common::is_not_state_block); - ASSERT_EQ (ec.message (), response.json.get ("error")); + ASSERT_EQ (ec.message (), response.get ("error")); } auto state_send (std::make_shared (nano::dev_genesis_key.pub, latest, nano::dev_genesis_key.pub, nano::genesis_amount - 100, nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (latest))); @@ -1595,10 +1495,8 @@ TEST (rpc, process_block_async) state_send->serialize_json (json1); request.put ("block", json1); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - ASSERT_EQ ("1", response.json.get ("started")); + auto response (wait_response (system, rpc, request)); + ASSERT_EQ ("1", response.get ("started")); ASSERT_TIMELY (10s, node1->latest (nano::dev_genesis_key.pub) == state_send->hash ()); } } @@ -1617,10 +1515,8 @@ TEST (rpc, process_block_no_work) std::string json; send.serialize_json (json); request.put ("block", json); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - ASSERT_FALSE (response.json.get ("error", "").empty ()); + auto response (wait_response (system, rpc, request)); + ASSERT_FALSE (response.get ("error", "").empty ()); } TEST (rpc, process_republish) @@ -1638,9 +1534,7 @@ TEST (rpc, process_republish) std::string json; send.serialize_json (json); request.put ("block", json); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request)); ASSERT_TIMELY (10s, node2.latest (nano::dev_genesis_key.pub) == send.hash ()); } @@ -1659,21 +1553,15 @@ TEST (rpc, process_subtype_send) send.serialize_json (json); request.put ("block", json); request.put ("subtype", "receive"); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request)); std::error_code ec (nano::error_rpc::invalid_subtype_balance); - ASSERT_EQ (response.json.get ("error"), ec.message ()); + ASSERT_EQ (response.get ("error"), ec.message ()); request.put ("subtype", "change"); - test_response response2 (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (10s, response2.status != 0); - ASSERT_EQ (200, response2.status); - ASSERT_EQ (response2.json.get ("error"), ec.message ()); + auto response2 (wait_response (system, rpc, request)); + ASSERT_EQ (response2.get ("error"), ec.message ()); request.put ("subtype", "send"); - test_response response3 (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (10s, response3.status != 0); - ASSERT_EQ (200, response3.status); - ASSERT_EQ (send.hash ().to_string (), response3.json.get ("hash")); + auto response3 (wait_response (system, rpc, request)); + ASSERT_EQ (send.hash ().to_string (), response3.get ("hash")); ASSERT_TIMELY (10s, system.nodes[1]->latest (nano::dev_genesis_key.pub) == send.hash ()); } @@ -1696,21 +1584,15 @@ TEST (rpc, process_subtype_open) open.serialize_json (json); request.put ("block", json); request.put ("subtype", "send"); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request)); std::error_code ec (nano::error_rpc::invalid_subtype_balance); - ASSERT_EQ (response.json.get ("error"), ec.message ()); + ASSERT_EQ (response.get ("error"), ec.message ()); request.put ("subtype", "epoch"); - test_response response2 (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (10s, response2.status != 0); - ASSERT_EQ (200, response2.status); - ASSERT_EQ (response2.json.get ("error"), ec.message ()); + auto response2 (wait_response (system, rpc, request)); + ASSERT_EQ (response2.get ("error"), ec.message ()); request.put ("subtype", "open"); - test_response response3 (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (10s, response3.status != 0); - ASSERT_EQ (200, response3.status); - ASSERT_EQ (open.hash ().to_string (), response3.json.get ("hash")); + auto response3 (wait_response (system, rpc, request)); + ASSERT_EQ (open.hash ().to_string (), response3.get ("hash")); ASSERT_TIMELY (10s, node2.latest (key.pub) == open.hash ()); } @@ -1732,22 +1614,16 @@ TEST (rpc, process_subtype_receive) receive.serialize_json (json); request.put ("block", json); request.put ("subtype", "send"); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request)); std::error_code ec (nano::error_rpc::invalid_subtype_balance); - ASSERT_EQ (response.json.get ("error"), ec.message ()); + ASSERT_EQ (response.get ("error"), ec.message ()); request.put ("subtype", "open"); - test_response response2 (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (10s, response2.status != 0); - ASSERT_EQ (200, response2.status); + auto response2 (wait_response (system, rpc, request)); ec = nano::error_rpc::invalid_subtype_previous; - ASSERT_EQ (response2.json.get ("error"), ec.message ()); + ASSERT_EQ (response2.get ("error"), ec.message ()); request.put ("subtype", "receive"); - test_response response3 (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (10s, response3.status != 0); - ASSERT_EQ (200, response3.status); - ASSERT_EQ (receive.hash ().to_string (), response3.json.get ("hash")); + auto response3 (wait_response (system, rpc, request)); + ASSERT_EQ (receive.hash ().to_string (), response3.get ("hash")); ASSERT_TIMELY (10s, node2.latest (nano::dev_genesis_key.pub) == receive.hash ()); } @@ -1769,12 +1645,10 @@ TEST (rpc, process_ledger_insufficient_work) send.serialize_json (json); request.put ("block", json); request.put ("subtype", "send"); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request)); std::error_code ec (nano::error_process::insufficient_work); - ASSERT_EQ (1, response.json.count ("error")); - ASSERT_EQ (response.json.get ("error"), ec.message ()); + ASSERT_EQ (1, response.count ("error")); + ASSERT_EQ (response.get ("error"), ec.message ()); } TEST (rpc, keepalive) @@ -1793,9 +1667,7 @@ TEST (rpc, keepalive) request.put ("port", port); ASSERT_EQ (nullptr, node0->network.udp_channels.channel (node1->network.endpoint ())); ASSERT_EQ (0, node0->network.size ()); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request)); system.deadline_set (10s); while (node0->network.find_channel (node1->network.endpoint ()) == nullptr) { @@ -1816,10 +1688,8 @@ TEST (rpc, peers) auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "peers"); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - auto & peers_node (response.json.get_child ("peers")); + auto response (wait_response (system, rpc, request)); + auto & peers_node (response.get_child ("peers")); ASSERT_EQ (2, peers_node.size ()); ASSERT_EQ (std::to_string (node->network_params.protocol.protocol_version), peers_node.get ((boost::format ("[::1]:%1%") % port).str ())); // Previously "[::ffff:80.80.80.80]:4000", but IPv4 address cause "No such node thrown in the test body" issue with peers_node.get @@ -1840,10 +1710,8 @@ TEST (rpc, peers_node_id) boost::property_tree::ptree request; request.put ("action", "peers"); request.put ("peer_details", true); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - auto & peers_node (response.json.get_child ("peers")); + auto response (wait_response (system, rpc, request)); + auto & peers_node (response.get_child ("peers")); ASSERT_EQ (2, peers_node.size ()); auto tree1 (peers_node.get_child ((boost::format ("[::1]:%1%") % port).str ())); ASSERT_EQ (std::to_string (node->network_params.protocol.protocol_version), tree1.get ("protocol_version")); @@ -1871,20 +1739,16 @@ TEST (rpc, pending) request.put ("account", key1.pub.to_account ()); request.put ("count", "100"); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - auto & blocks_node (response.json.get_child ("blocks")); + auto response (wait_response (system, rpc, request)); + auto & blocks_node (response.get_child ("blocks")); ASSERT_EQ (1, blocks_node.size ()); nano::block_hash hash (blocks_node.begin ()->second.get ("")); ASSERT_EQ (block1->hash (), hash); } request.put ("sorting", "true"); // Sorting test { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - auto & blocks_node (response.json.get_child ("blocks")); + auto response (wait_response (system, rpc, request)); + auto & blocks_node (response.get_child ("blocks")); ASSERT_EQ (1, blocks_node.size ()); nano::block_hash hash (blocks_node.begin ()->first); ASSERT_EQ (block1->hash (), hash); @@ -1893,10 +1757,8 @@ TEST (rpc, pending) } request.put ("threshold", "100"); // Threshold test { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - auto & blocks_node (response.json.get_child ("blocks")); + auto response (wait_response (system, rpc, request)); + auto & blocks_node (response.get_child ("blocks")); ASSERT_EQ (1, blocks_node.size ()); std::unordered_map blocks; for (auto i (blocks_node.begin ()), j (blocks_node.end ()); i != j; ++i) @@ -1915,20 +1777,16 @@ TEST (rpc, pending) } request.put ("threshold", "101"); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (10s, response.status != 0); - ASSERT_EQ (200, response.status); - auto & blocks_node (response.json.get_child ("blocks")); + auto response (wait_response (system, rpc, request, 10s)); + auto & blocks_node (response.get_child ("blocks")); ASSERT_EQ (0, blocks_node.size ()); } request.put ("threshold", "0"); request.put ("source", "true"); request.put ("min_version", "true"); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - auto & blocks_node (response.json.get_child ("blocks")); + auto response (wait_response (system, rpc, request)); + auto & blocks_node (response.get_child ("blocks")); ASSERT_EQ (1, blocks_node.size ()); std::unordered_map amounts; std::unordered_map sources; @@ -1949,11 +1807,8 @@ TEST (rpc, pending) request.put ("min_version", "false"); auto check_block_response_count_l = [&system, &request, rpc = rpc] (size_t size) { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - - ASSERT_EQ (200, response.status); - ASSERT_EQ (size, response.json.get_child ("blocks").size ()); + auto response (wait_response (system, rpc, request)); + ASSERT_EQ (size, response.get_child ("blocks").size ()); }; check_block_response_count_l (1); @@ -1981,10 +1836,8 @@ TEST (rpc, pending) request.put ("count", "2"); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - auto & blocks_node (response.json.get_child ("blocks")); + auto response (wait_response (system, rpc, request)); + auto & blocks_node (response.get_child ("blocks")); ASSERT_EQ (2, blocks_node.size ()); nano::block_hash hash (blocks_node.begin ()->first); nano::block_hash hash1 ((++blocks_node.begin ())->first); @@ -2009,10 +1862,8 @@ TEST (rpc, pending_burn) request.put ("account", burn.to_account ()); request.put ("count", "100"); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - auto & blocks_node (response.json.get_child ("blocks")); + auto response (wait_response (system, rpc, request)); + auto & blocks_node (response.get_child ("blocks")); ASSERT_EQ (1, blocks_node.size ()); nano::block_hash hash (blocks_node.begin ()->second.get ("")); ASSERT_EQ (block1->hash (), hash); @@ -2035,9 +1886,7 @@ TEST (rpc, search_pending) boost::property_tree::ptree request; request.put ("action", "search_pending"); request.put ("wallet", wallet); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request)); ASSERT_TIMELY (10s, node->balance (nano::dev_genesis_key.pub) == nano::genesis_amount); } @@ -2052,7 +1901,6 @@ TEST (rpc, version) ASSERT_TIMELY (5s, response1.status != 0); ASSERT_EQ (200, response1.status); ASSERT_EQ ("1", response1.json.get ("rpc_version")); - ASSERT_EQ (200, response1.status); { auto transaction (node1->store.tx_begin_read ()); ASSERT_EQ (std::to_string (node1->store.version.get (transaction)), response1.json.get ("store_version")); @@ -2124,18 +1972,16 @@ TEST (rpc, work_generate_difficulty) { uint64_t difficulty (0xfff0000000000000); request.put ("difficulty", nano::to_string_hex (difficulty)); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (10s, response.status != 0); - ASSERT_EQ (200, response.status); - auto work_text (response.json.get ("work")); + auto response (wait_response (system, rpc, request, 10s)); + auto work_text (response.get ("work")); uint64_t work; ASSERT_FALSE (nano::from_string_hex (work_text, work)); auto result_difficulty (nano::work_difficulty (nano::work_version::work_1, hash, work)); - auto response_difficulty_text (response.json.get ("difficulty")); + auto response_difficulty_text (response.get ("difficulty")); uint64_t response_difficulty; ASSERT_FALSE (nano::from_string_hex (response_difficulty_text, response_difficulty)); ASSERT_EQ (result_difficulty, response_difficulty); - auto multiplier = response.json.get ("multiplier"); + auto multiplier = response.get ("multiplier"); // Expected multiplier from base threshold, not from the given difficulty ASSERT_NEAR (nano::difficulty::to_multiplier (result_difficulty, node->default_difficulty (nano::work_version::work_1)), multiplier, 1e-10); ASSERT_GE (result_difficulty, difficulty); @@ -2143,10 +1989,8 @@ TEST (rpc, work_generate_difficulty) { uint64_t difficulty (0xffff000000000000); request.put ("difficulty", nano::to_string_hex (difficulty)); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (20s, response.status != 0); - ASSERT_EQ (200, response.status); - auto work_text (response.json.get ("work")); + auto response (wait_response (system, rpc, request)); + auto work_text (response.get ("work")); uint64_t work; ASSERT_FALSE (nano::from_string_hex (work_text, work)); auto result_difficulty (nano::work_difficulty (nano::work_version::work_1, hash, work)); @@ -2155,11 +1999,9 @@ TEST (rpc, work_generate_difficulty) { uint64_t difficulty (node->max_work_generate_difficulty (nano::work_version::work_1) + 1); request.put ("difficulty", nano::to_string_hex (difficulty)); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request)); std::error_code ec (nano::error_rpc::difficulty_limit); - ASSERT_EQ (response.json.get ("error"), ec.message ()); + ASSERT_EQ (response.get ("error"), ec.message ()); } } @@ -2180,37 +2022,31 @@ TEST (rpc, work_generate_multiplier) request.put ("difficulty", nano::to_string_hex (0xff00000000000000)); double multiplier{ 100.0 }; request.put ("multiplier", multiplier); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (10s, response.status != 0); - ASSERT_EQ (200, response.status); - auto work_text (response.json.get_optional ("work")); + auto response (wait_response (system, rpc, request, 10s)); + auto work_text (response.get_optional ("work")); ASSERT_TRUE (work_text.is_initialized ()); uint64_t work; ASSERT_FALSE (nano::from_string_hex (*work_text, work)); auto result_difficulty (nano::work_difficulty (nano::work_version::work_1, hash, work)); - auto response_difficulty_text (response.json.get ("difficulty")); + auto response_difficulty_text (response.get ("difficulty")); uint64_t response_difficulty; ASSERT_FALSE (nano::from_string_hex (response_difficulty_text, response_difficulty)); ASSERT_EQ (result_difficulty, response_difficulty); - auto result_multiplier = response.json.get ("multiplier"); + auto result_multiplier = response.get ("multiplier"); ASSERT_GE (result_multiplier, multiplier); } { request.put ("multiplier", -1.5); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request)); std::error_code ec (nano::error_rpc::bad_multiplier_format); - ASSERT_EQ (response.json.get ("error"), ec.message ()); + ASSERT_EQ (response.get ("error"), ec.message ()); } { double max_multiplier (nano::difficulty::to_multiplier (node->max_work_generate_difficulty (nano::work_version::work_1), node->default_difficulty (nano::work_version::work_1))); request.put ("multiplier", max_multiplier + 1); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request)); std::error_code ec (nano::error_rpc::difficulty_limit); - ASSERT_EQ (response.json.get ("error"), ec.message ()); + ASSERT_EQ (response.get ("error"), ec.message ()); } } @@ -2231,11 +2067,9 @@ TEST (rpc, work_generate_block_high) block.serialize_json (json); request.add_child ("block", json); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - ASSERT_EQ (1, response.json.count ("error")); - ASSERT_EQ (std::error_code (nano::error_rpc::block_work_enough).message (), response.json.get ("error")); + auto response (wait_response (system, rpc, request)); + ASSERT_EQ (1, response.count ("error")); + ASSERT_EQ (std::error_code (nano::error_rpc::block_work_enough).message (), response.get ("error")); } } @@ -2259,16 +2093,14 @@ TEST (rpc, work_generate_block_low) block.serialize_json (json); request.put ("block", json); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (10s, response.status != 0); - ASSERT_EQ (200, response.status); - auto work_text (response.json.get_optional ("work")); + auto response (wait_response (system, rpc, request, 10s)); + auto work_text (response.get_optional ("work")); ASSERT_TRUE (work_text.is_initialized ()); uint64_t work; ASSERT_FALSE (nano::from_string_hex (*work_text, work)); ASSERT_NE (block.block_work (), work); auto result_difficulty (nano::work_difficulty (nano::work_version::work_1, hash, work)); - auto response_difficulty_text (response.json.get ("difficulty")); + auto response_difficulty_text (response.get ("difficulty")); uint64_t response_difficulty; ASSERT_FALSE (nano::from_string_hex (response_difficulty_text, response_difficulty)); ASSERT_EQ (result_difficulty, response_difficulty); @@ -2292,11 +2124,9 @@ TEST (rpc, work_generate_block_root_mismatch) block.serialize_json (json); request.put ("block", json); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - ASSERT_EQ (1, response.json.count ("error")); - ASSERT_EQ (std::error_code (nano::error_rpc::block_root_mismatch).message (), response.json.get ("error")); + auto response (wait_response (system, rpc, request)); + ASSERT_EQ (1, response.count ("error")); + ASSERT_EQ (std::error_code (nano::error_rpc::block_root_mismatch).message (), response.get ("error")); } } @@ -2328,15 +2158,13 @@ TEST (rpc, work_generate_block_ledger_epoch_2) auto iteration (0); while (!finished) { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (10s, response.status != 0); - ASSERT_EQ (200, response.status); - auto work_text (response.json.get_optional ("work")); + auto response (wait_response (system, rpc, request, 10s)); + auto work_text (response.get_optional ("work")); ASSERT_TRUE (work_text.is_initialized ()); uint64_t work; ASSERT_FALSE (nano::from_string_hex (*work_text, work)); auto result_difficulty (nano::work_difficulty (nano::work_version::work_1, hash, work)); - auto response_difficulty_text (response.json.get ("difficulty")); + auto response_difficulty_text (response.get ("difficulty")); uint64_t response_difficulty; ASSERT_FALSE (nano::from_string_hex (response_difficulty_text, response_difficulty)); ASSERT_EQ (result_difficulty, response_difficulty); @@ -2362,12 +2190,10 @@ TEST (rpc, work_cancel) system.work.generate (nano::work_version::work_1, hash1, node1->network_params.network.publish_thresholds.base, [&done] (boost::optional work_a) { done = !work_a; }); - test_response response1 (request1, rpc->config.port, system.io_ctx); + auto response1 (wait_response (system, rpc, request1)); std::error_code ec; - ASSERT_TIMELY (10s, response1.status != 0); - ASSERT_EQ (200, response1.status); ASSERT_NO_ERROR (ec); - std::string success (response1.json.get ("success")); + std::string success (response1.get ("success")); ASSERT_TRUE (success.empty ()); } } @@ -2450,19 +2276,15 @@ TEST (rpc, work_version_invalid) request.put ("hash", hash.to_string ()); request.put ("version", "work_invalid"); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - ASSERT_EQ (1, response.json.count ("error")); - ASSERT_EQ (std::error_code (nano::error_rpc::bad_work_version).message (), response.json.get ("error")); + auto response (wait_response (system, rpc, request)); + ASSERT_EQ (1, response.count ("error")); + ASSERT_EQ (std::error_code (nano::error_rpc::bad_work_version).message (), response.get ("error")); } request.put ("action", "work_validate"); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - ASSERT_EQ (1, response.json.count ("error")); - ASSERT_EQ (std::error_code (nano::error_rpc::bad_work_version).message (), response.json.get ("error")); + auto response (wait_response (system, rpc, request)); + ASSERT_EQ (1, response.count ("error")); + ASSERT_EQ (std::error_code (nano::error_rpc::bad_work_version).message (), response.get ("error")); } } @@ -2475,12 +2297,10 @@ TEST (rpc, block_count) boost::property_tree::ptree request1; request1.put ("action", "block_count"); { - test_response response1 (request1, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (10s, response1.status != 0); - ASSERT_EQ (200, response1.status); - ASSERT_EQ ("1", response1.json.get ("count")); - ASSERT_EQ ("0", response1.json.get ("unchecked")); - ASSERT_EQ ("1", response1.json.get ("cemented")); + auto response1 (wait_response (system, rpc, request1)); + ASSERT_EQ ("1", response1.get ("count")); + ASSERT_EQ ("0", response1.get ("unchecked")); + ASSERT_EQ ("1", response1.get ("cemented")); } } @@ -2492,12 +2312,10 @@ TEST (rpc, block_count) boost::property_tree::ptree request1; request1.put ("action", "block_count"); { - test_response response1 (request1, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (10s, response1.status != 0); - ASSERT_EQ (200, response1.status); - ASSERT_EQ ("1", response1.json.get ("count")); - ASSERT_EQ ("0", response1.json.get ("unchecked")); - ASSERT_EQ ("1", response1.json.get ("cemented")); + auto response1 (wait_response (system, rpc, request1)); + ASSERT_EQ ("1", response1.get ("count")); + ASSERT_EQ ("0", response1.get ("unchecked")); + ASSERT_EQ ("1", response1.get ("cemented")); } } } @@ -2528,14 +2346,12 @@ TEST (rpc, block_count_pruning) boost::property_tree::ptree request1; request1.put ("action", "block_count"); { - test_response response1 (request1, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (10s, response1.status != 0); - ASSERT_EQ (200, response1.status); - ASSERT_EQ ("3", response1.json.get ("count")); - ASSERT_EQ ("0", response1.json.get ("unchecked")); - ASSERT_EQ ("3", response1.json.get ("cemented")); - ASSERT_EQ ("2", response1.json.get ("full")); - ASSERT_EQ ("1", response1.json.get ("pruned")); + auto response1 (wait_response (system, rpc, request1)); + ASSERT_EQ ("3", response1.get ("count")); + ASSERT_EQ ("0", response1.get ("unchecked")); + ASSERT_EQ ("3", response1.get ("cemented")); + ASSERT_EQ ("2", response1.get ("full")); + ASSERT_EQ ("1", response1.get ("pruned")); } } @@ -2546,10 +2362,8 @@ TEST (rpc, frontier_count) auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request1; request1.put ("action", "frontier_count"); - test_response response1 (request1, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response1.status != 0); - ASSERT_EQ (200, response1.status); - ASSERT_EQ ("1", response1.json.get ("count")); + auto response1 (wait_response (system, rpc, request1)); + ASSERT_EQ ("1", response1.get ("count")); } TEST (rpc, account_count) @@ -2559,10 +2373,8 @@ TEST (rpc, account_count) auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request1; request1.put ("action", "account_count"); - test_response response1 (request1, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response1.status != 0); - ASSERT_EQ (200, response1.status); - ASSERT_EQ ("1", response1.json.get ("count")); + auto response1 (wait_response (system, rpc, request1)); + ASSERT_EQ ("1", response1.get ("count")); } TEST (rpc, available_supply) @@ -2572,27 +2384,20 @@ TEST (rpc, available_supply) auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request1; request1.put ("action", "available_supply"); - test_response response1 (request1, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response1.status != 0); - ASSERT_EQ (200, response1.status); - ASSERT_EQ ("0", response1.json.get ("available")); + auto response1 (wait_response (system, rpc, request1)); + ASSERT_EQ ("0", response1.get ("available")); rpc_ctx->io_scope->reset (); system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); nano::keypair key; auto block (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, 1)); rpc_ctx->io_scope->renew (); - test_response response2 (request1, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response2.status != 0); - ASSERT_EQ (200, response2.status); - ASSERT_EQ ("1", response2.json.get ("available")); + auto response2 (wait_response (system, rpc, request1)); + ASSERT_EQ ("1", response2.get ("available")); rpc_ctx->io_scope->reset (); auto block2 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, 0, 100)); // Sending to burning 0 account rpc_ctx->io_scope->renew (); - test_response response3 (request1, rpc->config.port, system.io_ctx); - system.deadline_set (5s); - ASSERT_TIMELY (10s, response3.status != 0); - ASSERT_EQ (200, response3.status); - ASSERT_EQ ("1", response3.json.get ("available")); + auto response3 (wait_response (system, rpc, request1, 10s)); + ASSERT_EQ ("1", response3.get ("available")); } TEST (rpc, mrai_to_raw) @@ -2603,10 +2408,8 @@ TEST (rpc, mrai_to_raw) boost::property_tree::ptree request1; request1.put ("action", "mrai_to_raw"); request1.put ("amount", "1"); - test_response response1 (request1, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response1.status != 0); - ASSERT_EQ (200, response1.status); - ASSERT_EQ (nano::Mxrb_ratio.convert_to (), response1.json.get ("amount")); + auto response1 (wait_response (system, rpc, request1)); + ASSERT_EQ (nano::Mxrb_ratio.convert_to (), response1.get ("amount")); } TEST (rpc, mrai_from_raw) @@ -2617,10 +2420,8 @@ TEST (rpc, mrai_from_raw) boost::property_tree::ptree request1; request1.put ("action", "mrai_from_raw"); request1.put ("amount", nano::Mxrb_ratio.convert_to ()); - test_response response1 (request1, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response1.status != 0); - ASSERT_EQ (200, response1.status); - ASSERT_EQ ("1", response1.json.get ("amount")); + auto response1 (wait_response (system, rpc, request1)); + ASSERT_EQ ("1", response1.get ("amount")); } TEST (rpc, krai_to_raw) @@ -2631,10 +2432,8 @@ TEST (rpc, krai_to_raw) boost::property_tree::ptree request1; request1.put ("action", "krai_to_raw"); request1.put ("amount", "1"); - test_response response1 (request1, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response1.status != 0); - ASSERT_EQ (200, response1.status); - ASSERT_EQ (nano::kxrb_ratio.convert_to (), response1.json.get ("amount")); + auto response1 (wait_response (system, rpc, request1)); + ASSERT_EQ (nano::kxrb_ratio.convert_to (), response1.get ("amount")); } TEST (rpc, krai_from_raw) @@ -2645,10 +2444,8 @@ TEST (rpc, krai_from_raw) boost::property_tree::ptree request1; request1.put ("action", "krai_from_raw"); request1.put ("amount", nano::kxrb_ratio.convert_to ()); - test_response response1 (request1, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response1.status != 0); - ASSERT_EQ (200, response1.status); - ASSERT_EQ ("1", response1.json.get ("amount")); + auto response1 (wait_response (system, rpc, request1)); + ASSERT_EQ ("1", response1.get ("amount")); } TEST (rpc, nano_to_raw) @@ -2659,10 +2456,8 @@ TEST (rpc, nano_to_raw) boost::property_tree::ptree request1; request1.put ("action", "nano_to_raw"); request1.put ("amount", "1"); - test_response response1 (request1, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response1.status != 0); - ASSERT_EQ (200, response1.status); - ASSERT_EQ (nano::xrb_ratio.convert_to (), response1.json.get ("amount")); + auto response1 (wait_response (system, rpc, request1)); + ASSERT_EQ (nano::xrb_ratio.convert_to (), response1.get ("amount")); } TEST (rpc, nano_from_raw) @@ -2673,10 +2468,8 @@ TEST (rpc, nano_from_raw) boost::property_tree::ptree request1; request1.put ("action", "nano_from_raw"); request1.put ("amount", nano::xrb_ratio.convert_to ()); - test_response response1 (request1, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response1.status != 0); - ASSERT_EQ (200, response1.status); - ASSERT_EQ ("1", response1.json.get ("amount")); + auto response1 (wait_response (system, rpc, request1)); + ASSERT_EQ ("1", response1.get ("amount")); } TEST (rpc, account_representative) @@ -2687,10 +2480,8 @@ TEST (rpc, account_representative) boost::property_tree::ptree request; request.put ("account", nano::genesis_account.to_account ()); request.put ("action", "account_representative"); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - std::string account_text1 (response.json.get ("representative")); + auto response (wait_response (system, rpc, request)); + std::string account_text1 (response.get ("representative")); ASSERT_EQ (account_text1, nano::genesis_account.to_account ()); } @@ -2706,10 +2497,8 @@ TEST (rpc, account_representative_set) request.put ("representative", rep.pub.to_account ()); request.put ("wallet", node->wallets.items.begin ()->first.to_string ()); request.put ("action", "account_representative_set"); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - std::string block_text1 (response.json.get ("block")); + auto response (wait_response (system, rpc, request)); + std::string block_text1 (response.get ("block")); nano::block_hash hash; ASSERT_FALSE (hash.decode_hex (block_text1)); ASSERT_FALSE (hash.is_zero ()); @@ -2733,10 +2522,8 @@ TEST (rpc, account_representative_set_work_disabled) request.put ("wallet", node->wallets.items.begin ()->first.to_string ()); request.put ("action", "account_representative_set"); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (10s, response.status != 0); - ASSERT_EQ (200, response.status); - ASSERT_EQ (std::error_code (nano::error_common::disabled_work_generation).message (), response.json.get ("error")); + auto response (wait_response (system, rpc, request, 10s)); + ASSERT_EQ (std::error_code (nano::error_common::disabled_work_generation).message (), response.get ("error")); } } @@ -2768,12 +2555,10 @@ TEST (rpc, account_representative_set_epoch_2) auto insufficient = system.work_generate_limited (nano::genesis_hash, min_difficulty, target_difficulty); request.put ("work", nano::to_string_hex (insufficient)); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request)); std::error_code ec (nano::error_common::invalid_work); - ASSERT_EQ (1, response.json.count ("error")); - ASSERT_EQ (response.json.get ("error"), ec.message ()); + ASSERT_EQ (1, response.count ("error")); + ASSERT_EQ (response.get ("error"), ec.message ()); } } @@ -2782,24 +2567,25 @@ TEST (rpc, bootstrap) nano::system system0; auto node = add_ipc_enabled_node (system0); nano::system system1 (1); - auto latest (system1.nodes[0]->latest (nano::dev_genesis_key.pub)); - nano::send_block send (latest, nano::genesis_account, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system1.nodes[0]->work_generate_blocking (latest)); + auto node1 = system1.nodes[0]; + auto latest (node1->latest (nano::dev_genesis_key.pub)); + nano::send_block send (latest, nano::genesis_account, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); { - auto transaction (system1.nodes[0]->store.tx_begin_write ()); - ASSERT_EQ (nano::process_result::progress, system1.nodes[0]->ledger.process (transaction, send).code); + auto transaction (node1->store.tx_begin_write ()); + ASSERT_EQ (nano::process_result::progress, node1->ledger.process (transaction, send).code); } auto [rpc, rpc_ctx] = add_rpc (system0, node); boost::property_tree::ptree request; request.put ("action", "bootstrap"); request.put ("address", "::ffff:127.0.0.1"); - request.put ("port", system1.nodes[0]->network.endpoint ().port ()); + request.put ("port", node1->network.endpoint ().port ()); test_response response (request, rpc->config.port, system0.io_ctx); while (response.status == 0) { system0.poll (); } system1.deadline_set (10s); - while (system0.nodes[0]->latest (nano::genesis_account) != system1.nodes[0]->latest (nano::genesis_account)) + while (node->latest (nano::genesis_account) != node1->latest (nano::genesis_account)) { ASSERT_NO_ERROR (system0.poll ()); ASSERT_NO_ERROR (system1.poll ()); @@ -2817,11 +2603,7 @@ TEST (rpc, account_remove) request.put ("action", "account_remove"); request.put ("wallet", node->wallets.items.begin ()->first.to_string ()); request.put ("account", key1.to_account ()); - test_response response (request, rpc->config.port, system0.io_ctx); - while (response.status == 0) - { - system0.poll (); - } + auto response (wait_response (system0, rpc, request)); ASSERT_FALSE (system0.wallet (0)->exists (key1)); } @@ -2832,13 +2614,8 @@ TEST (rpc, representatives) auto [rpc, rpc_ctx] = add_rpc (system0, node); boost::property_tree::ptree request; request.put ("action", "representatives"); - test_response response (request, rpc->config.port, system0.io_ctx); - while (response.status == 0) - { - system0.poll (); - } - ASSERT_EQ (200, response.status); - auto & representatives_node (response.json.get_child ("representatives")); + auto response (wait_response (system0, rpc, request)); + auto & representatives_node (response.get_child ("representatives")); std::vector representatives; for (auto i (representatives_node.begin ()), n (representatives_node.end ()); i != n; ++i) { @@ -2864,11 +2641,9 @@ TEST (rpc, wallet_seed) boost::property_tree::ptree request; request.put ("action", "wallet_seed"); request.put ("wallet", node->wallets.items.begin ()->first.to_string ()); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request)); { - std::string seed_text (response.json.get ("seed")); + std::string seed_text (response.get ("seed")); ASSERT_EQ (seed.to_string (), seed_text); } } @@ -2893,25 +2668,19 @@ TEST (rpc, wallet_change_seed) request.put ("action", "wallet_change_seed"); request.put ("wallet", node->wallets.items.begin ()->first.to_string ()); request.put ("seed", seed.to_string ()); - test_response response (request, rpc->config.port, system0.io_ctx); - system0.deadline_set (5s); - while (response.status == 0) - { - ASSERT_NO_ERROR (system0.poll ()); - } - ASSERT_EQ (200, response.status); + auto response (wait_response (system0, rpc, request)); { auto transaction (node->wallets.tx_begin_read ()); nano::raw_key seed0; system0.wallet (0)->store.seed (seed0, transaction); ASSERT_EQ (seed, seed0); } - auto account_text (response.json.get ("last_restored_account")); + auto account_text (response.get ("last_restored_account")); nano::account account; ASSERT_FALSE (account.decode_account (account_text)); ASSERT_TRUE (system0.wallet (0)->exists (account)); ASSERT_EQ (pub, account); - ASSERT_EQ ("1", response.json.get ("restored_count")); + ASSERT_EQ ("1", response.get ("restored_count")); } TEST (rpc, wallet_frontiers) @@ -2923,13 +2692,8 @@ TEST (rpc, wallet_frontiers) boost::property_tree::ptree request; request.put ("action", "wallet_frontiers"); request.put ("wallet", node->wallets.items.begin ()->first.to_string ()); - test_response response (request, rpc->config.port, system0.io_ctx); - while (response.status == 0) - { - system0.poll (); - } - ASSERT_EQ (200, response.status); - auto & frontiers_node (response.json.get_child ("frontiers")); + auto response (wait_response (system0, rpc, request)); + auto & frontiers_node (response.get_child ("frontiers")); std::vector frontiers; for (auto i (frontiers_node.begin ()), n (frontiers_node.end ()); i != n; ++i) { @@ -2951,33 +2715,29 @@ TEST (rpc, work_validate) request.put ("hash", hash.to_string ()); request.put ("work", nano::to_string_hex (work1)); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - ASSERT_EQ (0, response.json.count ("valid")); - ASSERT_TRUE (response.json.get ("valid_all")); - ASSERT_TRUE (response.json.get ("valid_receive")); - std::string difficulty_text (response.json.get ("difficulty")); + auto response (wait_response (system, rpc, request)); + ASSERT_EQ (0, response.count ("valid")); + ASSERT_TRUE (response.get ("valid_all")); + ASSERT_TRUE (response.get ("valid_receive")); + std::string difficulty_text (response.get ("difficulty")); uint64_t difficulty; ASSERT_FALSE (nano::from_string_hex (difficulty_text, difficulty)); ASSERT_GE (difficulty, node1->default_difficulty (nano::work_version::work_1)); - double multiplier (response.json.get ("multiplier")); + double multiplier (response.get ("multiplier")); ASSERT_NEAR (multiplier, nano::difficulty::to_multiplier (difficulty, node1->default_difficulty (nano::work_version::work_1)), 1e-6); } uint64_t work2 (0); request.put ("work", nano::to_string_hex (work2)); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - ASSERT_EQ (0, response.json.count ("valid")); - ASSERT_FALSE (response.json.get ("valid_all")); - ASSERT_FALSE (response.json.get ("valid_receive")); - std::string difficulty_text (response.json.get ("difficulty")); + auto response (wait_response (system, rpc, request)); + ASSERT_EQ (0, response.count ("valid")); + ASSERT_FALSE (response.get ("valid_all")); + ASSERT_FALSE (response.get ("valid_receive")); + std::string difficulty_text (response.get ("difficulty")); uint64_t difficulty; ASSERT_FALSE (nano::from_string_hex (difficulty_text, difficulty)); ASSERT_GE (node1->default_difficulty (nano::work_version::work_1), difficulty); - double multiplier (response.json.get ("multiplier")); + double multiplier (response.get ("multiplier")); ASSERT_NEAR (multiplier, nano::difficulty::to_multiplier (difficulty, node1->default_difficulty (nano::work_version::work_1)), 1e-6); } auto result_difficulty (nano::work_difficulty (nano::work_version::work_1, hash, work1)); @@ -2985,33 +2745,27 @@ TEST (rpc, work_validate) request.put ("work", nano::to_string_hex (work1)); request.put ("difficulty", nano::to_string_hex (result_difficulty)); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - ASSERT_TRUE (response.json.get ("valid")); - ASSERT_TRUE (response.json.get ("valid_all")); - ASSERT_TRUE (response.json.get ("valid_receive")); + auto response (wait_response (system, rpc, request)); + ASSERT_TRUE (response.get ("valid")); + ASSERT_TRUE (response.get ("valid_all")); + ASSERT_TRUE (response.get ("valid_receive")); } uint64_t difficulty4 (0xfff0000000000000); request.put ("work", nano::to_string_hex (work1)); request.put ("difficulty", nano::to_string_hex (difficulty4)); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - ASSERT_EQ (result_difficulty >= difficulty4, response.json.get ("valid")); - ASSERT_EQ (result_difficulty >= node1->default_difficulty (nano::work_version::work_1), response.json.get ("valid_all")); - ASSERT_EQ (result_difficulty >= node1->network_params.network.publish_thresholds.epoch_2_receive, response.json.get ("valid_all")); + auto response (wait_response (system, rpc, request)); + ASSERT_EQ (result_difficulty >= difficulty4, response.get ("valid")); + ASSERT_EQ (result_difficulty >= node1->default_difficulty (nano::work_version::work_1), response.get ("valid_all")); + ASSERT_EQ (result_difficulty >= node1->network_params.network.publish_thresholds.epoch_2_receive, response.get ("valid_all")); } uint64_t work3 (*node1->work_generate_blocking (hash, difficulty4)); request.put ("work", nano::to_string_hex (work3)); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - ASSERT_TRUE (response.json.get ("valid")); - ASSERT_TRUE (response.json.get ("valid_all")); - ASSERT_TRUE (response.json.get ("valid_receive")); + auto response (wait_response (system, rpc, request)); + ASSERT_TRUE (response.get ("valid")); + ASSERT_TRUE (response.get ("valid_all")); + ASSERT_TRUE (response.get ("valid_receive")); } } @@ -3029,16 +2783,14 @@ TEST (rpc, work_validate_epoch_2) request.put ("hash", epoch1->hash ().to_string ()); request.put ("work", nano::to_string_hex (work)); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - ASSERT_EQ (0, response.json.count ("valid")); - ASSERT_FALSE (response.json.get ("valid_all")); - ASSERT_TRUE (response.json.get ("valid_receive")); - std::string difficulty_text (response.json.get ("difficulty")); + auto response (wait_response (system, rpc, request)); + ASSERT_EQ (0, response.count ("valid")); + ASSERT_FALSE (response.get ("valid_all")); + ASSERT_TRUE (response.get ("valid_receive")); + std::string difficulty_text (response.get ("difficulty")); uint64_t difficulty{ 0 }; ASSERT_FALSE (nano::from_string_hex (difficulty_text, difficulty)); - double multiplier (response.json.get ("multiplier")); + double multiplier (response.get ("multiplier")); ASSERT_NEAR (multiplier, nano::difficulty::to_multiplier (difficulty, node->network_params.network.publish_thresholds.epoch_2), 1e-6); }; // After upgrading, the higher difficulty is used to validate and calculate the multiplier @@ -3046,16 +2798,14 @@ TEST (rpc, work_validate_epoch_2) ASSERT_NE (nullptr, system.upgrade_genesis_epoch (*node, nano::epoch::epoch_2)); rpc_ctx->io_scope->renew (); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - ASSERT_EQ (0, response.json.count ("valid")); - ASSERT_FALSE (response.json.get ("valid_all")); - ASSERT_TRUE (response.json.get ("valid_receive")); - std::string difficulty_text (response.json.get ("difficulty")); + auto response (wait_response (system, rpc, request)); + ASSERT_EQ (0, response.count ("valid")); + ASSERT_FALSE (response.get ("valid_all")); + ASSERT_TRUE (response.get ("valid_receive")); + std::string difficulty_text (response.get ("difficulty")); uint64_t difficulty{ 0 }; ASSERT_FALSE (nano::from_string_hex (difficulty_text, difficulty)); - double multiplier (response.json.get ("multiplier")); + double multiplier (response.get ("multiplier")); ASSERT_NEAR (multiplier, nano::difficulty::to_multiplier (difficulty, node->default_difficulty (nano::work_version::work_1)), 1e-6); }; } @@ -3075,10 +2825,8 @@ TEST (rpc, successors) request.put ("action", "successors"); request.put ("block", genesis.to_string ()); request.put ("count", std::to_string (std::numeric_limits::max ())); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - auto & blocks_node (response.json.get_child ("blocks")); + auto response (wait_response (system, rpc, request)); + auto & blocks_node (response.get_child ("blocks")); std::vector blocks; for (auto i (blocks_node.begin ()), n (blocks_node.end ()); i != n; ++i) { @@ -3090,10 +2838,8 @@ TEST (rpc, successors) // RPC chain "reverse" option request.put ("action", "chain"); request.put ("reverse", "true"); - test_response response2 (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (10s, response2.status != 0); - ASSERT_EQ (200, response2.status); - ASSERT_EQ (response.json, response2.json); + auto response2 (wait_response (system, rpc, request, 10s)); + ASSERT_EQ (response, response2); } TEST (rpc, bootstrap_any) @@ -3110,12 +2856,8 @@ TEST (rpc, bootstrap_any) auto [rpc, rpc_ctx] = add_rpc (system0, node); boost::property_tree::ptree request; request.put ("action", "bootstrap_any"); - test_response response (request, rpc->config.port, system0.io_ctx); - while (response.status == 0) - { - system0.poll (); - } - std::string success (response.json.get ("success")); + auto response (wait_response (system0, rpc, request)); + std::string success (response.get ("success")); ASSERT_TRUE (success.empty ()); } @@ -3135,11 +2877,9 @@ TEST (rpc, republish) boost::property_tree::ptree request; request.put ("action", "republish"); request.put ("hash", send.hash ().to_string ()); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request)); ASSERT_TIMELY (10s, system.nodes[1]->balance (nano::dev_genesis_key.pub) != nano::genesis_amount); - auto & blocks_node (response.json.get_child ("blocks")); + auto & blocks_node (response.get_child ("blocks")); std::vector blocks; for (auto i (blocks_node.begin ()), n (blocks_node.end ()); i != n; ++i) { @@ -3150,11 +2890,8 @@ TEST (rpc, republish) request.put ("hash", genesis.hash ().to_string ()); request.put ("count", 1); - test_response response1 (request, rpc->config.port, system.io_ctx); - system.deadline_set (5s); - ASSERT_TIMELY (5s, response1.status != 0); - ASSERT_EQ (200, response1.status); - blocks_node = response1.json.get_child ("blocks"); + auto response1 (wait_response (system, rpc, request)); + blocks_node = response1.get_child ("blocks"); blocks.clear (); for (auto i (blocks_node.begin ()), n (blocks_node.end ()); i != n; ++i) { @@ -3165,10 +2902,8 @@ TEST (rpc, republish) request.put ("hash", open.hash ().to_string ()); request.put ("sources", 2); - test_response response2 (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (10s, response2.status != 0); - ASSERT_EQ (200, response2.status); - blocks_node = response2.json.get_child ("blocks"); + auto response2 (wait_response (system, rpc, request)); + blocks_node = response2.get_child ("blocks"); blocks.clear (); for (auto i (blocks_node.begin ()), n (blocks_node.end ()); i != n; ++i) { @@ -3197,22 +2932,12 @@ TEST (rpc, deterministic_key) request.put ("action", "deterministic_key"); request.put ("seed", seed.to_string ()); request.put ("index", "0"); - test_response response0 (request, rpc->config.port, system0.io_ctx); - while (response0.status == 0) - { - system0.poll (); - } - ASSERT_EQ (200, response0.status); - std::string validate_text (response0.json.get ("account")); + auto response0 (wait_response (system0, rpc, request)); + std::string validate_text (response0.get ("account")); ASSERT_EQ (account0.to_account (), validate_text); request.put ("index", "2"); - test_response response1 (request, rpc->config.port, system0.io_ctx); - while (response1.status == 0) - { - system0.poll (); - } - ASSERT_EQ (200, response1.status); - validate_text = response1.json.get ("account"); + auto response1 (wait_response (system0, rpc, request)); + validate_text = response1.get ("account"); ASSERT_NE (account1.to_account (), validate_text); ASSERT_EQ (account2.to_account (), validate_text); } @@ -3229,10 +2954,8 @@ TEST (rpc, accounts_balances) entry.put ("", nano::dev_genesis_key.pub.to_account ()); peers_l.push_back (std::make_pair ("", entry)); request.add_child ("accounts", peers_l); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - for (auto & balances : response.json.get_child ("balances")) + auto response (wait_response (system, rpc, request)); + for (auto & balances : response.get_child ("balances")) { std::string account_text (balances.first); ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), account_text); @@ -3256,10 +2979,8 @@ TEST (rpc, accounts_frontiers) entry.put ("", nano::dev_genesis_key.pub.to_account ()); peers_l.push_back (std::make_pair ("", entry)); request.add_child ("accounts", peers_l); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - for (auto & frontiers : response.json.get_child ("frontiers")) + auto response (wait_response (system, rpc, request)); + for (auto & frontiers : response.get_child ("frontiers")) { std::string account_text (frontiers.first); ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), account_text); @@ -3289,10 +3010,8 @@ TEST (rpc, accounts_pending) request.add_child ("accounts", peers_l); request.put ("count", "100"); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - for (auto & blocks : response.json.get_child ("blocks")) + auto response (wait_response (system, rpc, request)); + for (auto & blocks : response.get_child ("blocks")) { std::string account_text (blocks.first); ASSERT_EQ (key1.pub.to_account (), account_text); @@ -3302,10 +3021,8 @@ TEST (rpc, accounts_pending) } request.put ("sorting", "true"); // Sorting test { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - for (auto & blocks : response.json.get_child ("blocks")) + auto response (wait_response (system, rpc, request)); + for (auto & blocks : response.get_child ("blocks")) { std::string account_text (blocks.first); ASSERT_EQ (key1.pub.to_account (), account_text); @@ -3317,11 +3034,9 @@ TEST (rpc, accounts_pending) } request.put ("threshold", "100"); // Threshold test { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request)); std::unordered_map blocks; - for (auto & pending : response.json.get_child ("blocks")) + for (auto & pending : response.get_child ("blocks")) { std::string account_text (pending.first); ASSERT_EQ (key1.pub.to_account (), account_text); @@ -3340,12 +3055,10 @@ TEST (rpc, accounts_pending) } request.put ("source", "true"); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request)); std::unordered_map amounts; std::unordered_map sources; - for (auto & pending : response.json.get_child ("blocks")) + for (auto & pending : response.get_child ("blocks")) { std::string account_text (pending.first); ASSERT_EQ (key1.pub.to_account (), account_text); @@ -3361,14 +3074,14 @@ TEST (rpc, accounts_pending) ASSERT_EQ (sources[block1->hash ()], nano::dev_genesis_key.pub); } - check_block_response_count (system, *rpc, request, 1); + check_block_response_count (system, rpc, request, 1); rpc_ctx->io_scope->reset (); reset_confirmation_height (system.nodes.front ()->store, block1->account ()); rpc_ctx->io_scope->renew (); - check_block_response_count (system, *rpc, request, 0); + check_block_response_count (system, rpc, request, 0); request.put ("include_only_confirmed", "false"); rpc_ctx->io_scope->renew (); - check_block_response_count (system, *rpc, request, 1); + check_block_response_count (system, rpc, request, 1); } TEST (rpc, blocks) @@ -3383,10 +3096,8 @@ TEST (rpc, blocks) entry.put ("", node->latest (nano::genesis_account).to_string ()); peers_l.push_back (std::make_pair ("", entry)); request.add_child ("hashes", peers_l); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - for (auto & blocks : response.json.get_child ("blocks")) + auto response (wait_response (system, rpc, request)); + for (auto & blocks : response.get_child ("blocks")) { std::string hash_text (blocks.first); ASSERT_EQ (node->latest (nano::genesis_account).to_string (), hash_text); @@ -3430,24 +3141,22 @@ TEST (rpc, wallet_info) boost::property_tree::ptree request; request.put ("action", "wallet_info"); request.put ("wallet", node->wallets.items.begin ()->first.to_string ()); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - std::string balance_text (response.json.get ("balance")); + auto response (wait_response (system, rpc, request)); + std::string balance_text (response.get ("balance")); ASSERT_EQ ("340282366920938463463374607431768211454", balance_text); - std::string pending_text (response.json.get ("pending")); + std::string pending_text (response.get ("pending")); ASSERT_EQ ("1", pending_text); - std::string count_text (response.json.get ("accounts_count")); + std::string count_text (response.get ("accounts_count")); ASSERT_EQ ("3", count_text); - std::string block_count_text (response.json.get ("accounts_block_count")); + std::string block_count_text (response.get ("accounts_block_count")); ASSERT_EQ ("4", block_count_text); - std::string cemented_block_count_text (response.json.get ("accounts_cemented_block_count")); + std::string cemented_block_count_text (response.get ("accounts_cemented_block_count")); ASSERT_EQ ("3", cemented_block_count_text); - std::string adhoc_count (response.json.get ("adhoc_count")); + std::string adhoc_count (response.get ("adhoc_count")); ASSERT_EQ ("2", adhoc_count); - std::string deterministic_count (response.json.get ("deterministic_count")); + std::string deterministic_count (response.get ("deterministic_count")); ASSERT_EQ ("1", deterministic_count); - std::string index_text (response.json.get ("deterministic_index")); + std::string index_text (response.get ("deterministic_index")); ASSERT_EQ ("2", index_text); } @@ -3459,14 +3168,9 @@ TEST (rpc, wallet_balances) auto [rpc, rpc_ctx] = add_rpc (system0, node); boost::property_tree::ptree request; request.put ("action", "wallet_balances"); - request.put ("wallet", system0.nodes[0]->wallets.items.begin ()->first.to_string ()); - test_response response (request, rpc->config.port, system0.io_ctx); - while (response.status == 0) - { - system0.poll (); - } - ASSERT_EQ (200, response.status); - for (auto & balances : response.json.get_child ("balances")) + request.put ("wallet", node->wallets.items.begin ()->first.to_string ()); + auto response (wait_response (system0, rpc, request)); + for (auto & balances : response.get_child ("balances")) { std::string account_text (balances.first); ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), account_text); @@ -3481,13 +3185,8 @@ TEST (rpc, wallet_balances) auto send (system0.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, 1)); rpc_ctx->io_scope->renew (); request.put ("threshold", "2"); - test_response response1 (request, rpc->config.port, system0.io_ctx); - while (response1.status == 0) - { - system0.poll (); - } - ASSERT_EQ (200, response1.status); - for (auto & balances : response1.json.get_child ("balances")) + auto response1 (wait_response (system0, rpc, request)); + for (auto & balances : response1.get_child ("balances")) { std::string account_text (balances.first); ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), account_text); @@ -3514,10 +3213,8 @@ TEST (rpc, pending_exists) boost::property_tree::ptree request; auto pending_exists = [&system, &request, rpc = rpc] (const char * exists_a) { - test_response response0 (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (10s, response0.status != 0); - ASSERT_EQ (200, response0.status); - std::string exists_text (response0.json.get ("exists")); + auto response0 (wait_response (system, rpc, request)); + std::string exists_text (response0.get ("exists")); ASSERT_EQ (exists_a, exists_text); }; @@ -3561,14 +3258,9 @@ TEST (rpc, wallet_pending) request.put ("action", "wallet_pending"); request.put ("wallet", node->wallets.items.begin ()->first.to_string ()); request.put ("count", "100"); - test_response response (request, rpc->config.port, system0.io_ctx); - while (response.status == 0) - { - system0.poll (); - } - ASSERT_EQ (200, response.status); - ASSERT_EQ (1, response.json.get_child ("blocks").size ()); - for (auto & pending : response.json.get_child ("blocks")) + auto response (wait_response (system0, rpc, request)); + ASSERT_EQ (1, response.get_child ("blocks").size ()); + for (auto & pending : response.get_child ("blocks")) { std::string account_text (pending.first); ASSERT_EQ (key1.pub.to_account (), account_text); @@ -3576,15 +3268,10 @@ TEST (rpc, wallet_pending) ASSERT_EQ (block1->hash (), hash1); } request.put ("threshold", "100"); // Threshold test - test_response response0 (request, rpc->config.port, system0.io_ctx); - while (response0.status == 0) - { - system0.poll (); - } - ASSERT_EQ (200, response0.status); + auto response0 (wait_response (system0, rpc, request)); std::unordered_map blocks; - ASSERT_EQ (1, response0.json.get_child ("blocks").size ()); - for (auto & pending : response0.json.get_child ("blocks")) + ASSERT_EQ (1, response0.get_child ("blocks").size ()); + for (auto & pending : response0.get_child ("blocks")) { std::string account_text (pending.first); ASSERT_EQ (key1.pub.to_account (), account_text); @@ -3602,28 +3289,18 @@ TEST (rpc, wallet_pending) } } ASSERT_EQ (blocks[block1->hash ()], 100); - request.put ("threshold", "101"); - test_response response1 (request, rpc->config.port, system0.io_ctx); - while (response1.status == 0) - { - system0.poll (); - } - ASSERT_EQ (200, response1.status); - auto & pending1 (response1.json.get_child ("blocks")); + request.put ("threshold", "101"); + auto response1 (wait_response (system0, rpc, request)); + auto & pending1 (response1.get_child ("blocks")); ASSERT_EQ (0, pending1.size ()); request.put ("threshold", "0"); request.put ("source", "true"); request.put ("min_version", "true"); - test_response response2 (request, rpc->config.port, system0.io_ctx); - while (response2.status == 0) - { - system0.poll (); - } - ASSERT_EQ (200, response2.status); + auto response2 (wait_response (system0, rpc, request)); std::unordered_map amounts; std::unordered_map sources; - ASSERT_EQ (1, response0.json.get_child ("blocks").size ()); - for (auto & pending : response2.json.get_child ("blocks")) + ASSERT_EQ (1, response2.get_child ("blocks").size ()); + for (auto & pending : response2.get_child ("blocks")) { std::string account_text (pending.first); ASSERT_EQ (key1.pub.to_account (), account_text); @@ -3639,23 +3316,14 @@ TEST (rpc, wallet_pending) ASSERT_EQ (amounts[block1->hash ()], 100); ASSERT_EQ (sources[block1->hash ()], nano::dev_genesis_key.pub); - check_block_response_count (system0, *rpc, request, 1); + check_block_response_count (system0, rpc, request, 1); rpc_ctx->io_scope->reset (); reset_confirmation_height (system0.nodes.front ()->store, block1->account ()); rpc_ctx->io_scope->renew (); - { - test_response response (request, rpc->config.port, system0.io_ctx); - system0.deadline_set (5s); - while (response.status == 0) - { - ASSERT_NO_ERROR (system0.poll ()); - } - ASSERT_EQ (200, response.status); - ASSERT_EQ (0, response.json.get_child ("blocks").size ()); - } + check_block_response_count (system0, rpc, request, 0); request.put ("include_only_confirmed", "false"); rpc_ctx->io_scope->renew (); - check_block_response_count (system0, *rpc, request, 1); + check_block_response_count (system0, rpc, request, 1); } TEST (rpc, receive_minimum) @@ -3665,10 +3333,8 @@ TEST (rpc, receive_minimum) auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "receive_minimum"); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - std::string amount (response.json.get ("amount")); + auto response (wait_response (system, rpc, request)); + std::string amount (response.get ("amount")); ASSERT_EQ (node->config.receive_minimum.to_string_dec (), amount); } @@ -3681,10 +3347,8 @@ TEST (rpc, receive_minimum_set) request.put ("action", "receive_minimum_set"); request.put ("amount", "100"); ASSERT_NE (node->config.receive_minimum.to_string_dec (), "100"); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - std::string success (response.json.get ("success")); + auto response (wait_response (system, rpc, request)); + std::string success (response.get ("success")); ASSERT_TRUE (success.empty ()); ASSERT_EQ (node->config.receive_minimum.to_string_dec (), "100"); } @@ -3700,10 +3364,8 @@ TEST (rpc, work_get) request.put ("action", "work_get"); request.put ("wallet", node->wallets.items.begin ()->first.to_string ()); request.put ("account", nano::dev_genesis_key.pub.to_account ()); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - std::string work_text (response.json.get ("work")); + auto response (wait_response (system, rpc, request)); + std::string work_text (response.get ("work")); uint64_t work (1); auto transaction (node->wallets.tx_begin_read ()); node->wallets.items.begin ()->second->store.work_get (transaction, nano::genesis_account, work); @@ -3720,11 +3382,9 @@ TEST (rpc, wallet_work_get) boost::property_tree::ptree request; request.put ("action", "wallet_work_get"); request.put ("wallet", node->wallets.items.begin ()->first.to_string ()); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request)); auto transaction (node->wallets.tx_begin_read ()); - for (auto & works : response.json.get_child ("works")) + for (auto & works : response.get_child ("works")) { std::string account_text (works.first); ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), account_text); @@ -3747,10 +3407,8 @@ TEST (rpc, work_set) request.put ("wallet", node->wallets.items.begin ()->first.to_string ()); request.put ("account", nano::dev_genesis_key.pub.to_account ()); request.put ("work", nano::to_string_hex (work0)); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - std::string success (response.json.get ("success")); + auto response (wait_response (system, rpc, request)); + std::string success (response.get ("success")); ASSERT_TRUE (success.empty ()); uint64_t work1 (1); auto transaction (node->wallets.tx_begin_read ()); @@ -3772,9 +3430,7 @@ TEST (rpc, search_pending_all) auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "search_pending_all"); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request)); ASSERT_TIMELY (10s, node->balance (nano::dev_genesis_key.pub) == nano::genesis_amount); } @@ -3802,10 +3458,8 @@ TEST (rpc, wallet_republish) request.put ("action", "wallet_republish"); request.put ("wallet", node1->wallets.items.begin ()->first.to_string ()); request.put ("count", 1); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - auto & blocks_node (response.json.get_child ("blocks")); + auto response (wait_response (system, rpc, request)); + auto & blocks_node (response.get_child ("blocks")); std::vector blocks; for (auto i (blocks_node.begin ()), n (blocks_node.end ()); i != n; ++i) { @@ -3832,10 +3486,8 @@ TEST (rpc, delegators) boost::property_tree::ptree request; request.put ("action", "delegators"); request.put ("account", nano::dev_genesis_key.pub.to_account ()); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - auto & delegators_node (response.json.get_child ("delegators")); + auto response (wait_response (system, rpc, request)); + auto & delegators_node (response.get_child ("delegators")); boost::property_tree::ptree delegators; for (auto i (delegators_node.begin ()), n (delegators_node.end ()); i != n; ++i) { @@ -3863,10 +3515,8 @@ TEST (rpc, delegators_parameters) request.put ("action", "delegators"); request.put ("account", nano::dev_genesis_key.pub.to_account ()); request.put ("count", 2); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - auto & delegators_node (response.json.get_child ("delegators")); + auto response (wait_response (system, rpc, request)); + auto & delegators_node (response.get_child ("delegators")); boost::property_tree::ptree delegators; for (auto i (delegators_node.begin ()), n (delegators_node.end ()); i != n; ++i) { @@ -3878,10 +3528,8 @@ TEST (rpc, delegators_parameters) // Test with "count" = 1 request.put ("count", 1); - test_response response2 (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response2.status != 0); - ASSERT_EQ (200, response2.status); - auto & delegators_node2 (response2.json.get_child ("delegators")); + auto response2 (wait_response (system, rpc, request)); + auto & delegators_node2 (response2.get_child ("delegators")); boost::property_tree::ptree delegators2; for (auto i (delegators_node2.begin ()), n (delegators_node2.end ()); i != n; ++i) { @@ -3901,10 +3549,8 @@ TEST (rpc, delegators_parameters) // Test with "threshold" request.put ("count", 1024); request.put ("threshold", 101); // higher than remaining genesis balance - test_response response3 (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response3.status != 0); - ASSERT_EQ (200, response3.status); - auto & delegators_node3 (response3.json.get_child ("delegators")); + auto response3 (wait_response (system, rpc, request)); + auto & delegators_node3 (response3.get_child ("delegators")); boost::property_tree::ptree delegators3; for (auto i (delegators_node3.begin ()), n (delegators_node3.end ()); i != n; ++i) { @@ -3922,10 +3568,8 @@ TEST (rpc, delegators_parameters) } request.put ("start", nano::account (last_account.number () - 1).to_account ()); - test_response response4 (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response4.status != 0); - ASSERT_EQ (200, response4.status); - auto & delegators_node4 (response4.json.get_child ("delegators")); + auto response4 (wait_response (system, rpc, request)); + auto & delegators_node4 (response4.get_child ("delegators")); boost::property_tree::ptree delegators4; for (auto i (delegators_node4.begin ()), n (delegators_node4.end ()); i != n; ++i) { @@ -3937,10 +3581,8 @@ TEST (rpc, delegators_parameters) // Test with "start" equal to last account request.put ("start", last_account.to_account ()); - test_response response5 (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response5.status != 0); - ASSERT_EQ (200, response5.status); - auto & delegators_node5 (response5.json.get_child ("delegators")); + auto response5 (wait_response (system, rpc, request)); + auto & delegators_node5 (response5.get_child ("delegators")); boost::property_tree::ptree delegators5; for (auto i (delegators_node5.begin ()), n (delegators_node5.end ()); i != n; ++i) { @@ -3965,10 +3607,8 @@ TEST (rpc, delegators_count) boost::property_tree::ptree request; request.put ("action", "delegators_count"); request.put ("account", nano::dev_genesis_key.pub.to_account ()); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - std::string count (response.json.get ("count")); + auto response (wait_response (system, rpc, request)); + std::string count (response.get ("count")); ASSERT_EQ ("2", count); } @@ -3987,10 +3627,9 @@ TEST (rpc, account_info) // Test for a non existing account { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); + auto response (wait_response (system, rpc, request)); - auto error (response.json.get_optional ("error")); + auto error (response.get_optional ("error")); ASSERT_TRUE (error.is_initialized ()); ASSERT_EQ (error.get (), std::error_code (nano::error_common::account_not_found).message ()); } @@ -4010,32 +3649,29 @@ TEST (rpc, account_info) request.put ("account", nano::dev_genesis_key.pub.to_account ()); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - - ASSERT_EQ (200, response.status); - std::string frontier (response.json.get ("frontier")); + auto response (wait_response (system, rpc, request)); + std::string frontier (response.get ("frontier")); ASSERT_EQ (send.hash ().to_string (), frontier); - std::string open_block (response.json.get ("open_block")); + std::string open_block (response.get ("open_block")); ASSERT_EQ (genesis.hash ().to_string (), open_block); - std::string representative_block (response.json.get ("representative_block")); + std::string representative_block (response.get ("representative_block")); ASSERT_EQ (genesis.hash ().to_string (), representative_block); - std::string balance (response.json.get ("balance")); + std::string balance (response.get ("balance")); ASSERT_EQ ("100", balance); - std::string modified_timestamp (response.json.get ("modified_timestamp")); + std::string modified_timestamp (response.get ("modified_timestamp")); ASSERT_LT (std::abs ((long)time - stol (modified_timestamp)), 5); - std::string block_count (response.json.get ("block_count")); + std::string block_count (response.get ("block_count")); ASSERT_EQ ("2", block_count); - std::string confirmation_height (response.json.get ("confirmation_height")); + std::string confirmation_height (response.get ("confirmation_height")); ASSERT_EQ ("1", confirmation_height); - std::string confirmation_height_frontier (response.json.get ("confirmation_height_frontier")); + std::string confirmation_height_frontier (response.get ("confirmation_height_frontier")); ASSERT_EQ (genesis.hash ().to_string (), confirmation_height_frontier); - ASSERT_EQ (0, response.json.get ("account_version")); - boost::optional weight (response.json.get_optional ("weight")); + ASSERT_EQ (0, response.get ("account_version")); + boost::optional weight (response.get_optional ("weight")); ASSERT_FALSE (weight.is_initialized ()); - boost::optional pending (response.json.get_optional ("pending")); + boost::optional pending (response.get_optional ("pending")); ASSERT_FALSE (pending.is_initialized ()); - boost::optional representative (response.json.get_optional ("representative")); + boost::optional representative (response.get_optional ("representative")); ASSERT_FALSE (representative.is_initialized ()); } @@ -4044,13 +3680,12 @@ TEST (rpc, account_info) request.put ("pending", "1"); request.put ("representative", "1"); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - std::string weight2 (response.json.get ("weight")); + auto response (wait_response (system, rpc, request)); + std::string weight2 (response.get ("weight")); ASSERT_EQ ("100", weight2); - std::string pending2 (response.json.get ("pending")); + std::string pending2 (response.get ("pending")); ASSERT_EQ ("0", pending2); - std::string representative2 (response.json.get ("representative")); + std::string representative2 (response.get ("representative")); ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), representative2); } @@ -4074,65 +3709,61 @@ TEST (rpc, account_info) rpc_ctx->io_scope->renew (); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - std::string balance (response.json.get ("balance")); + auto response (wait_response (system, rpc, request)); + std::string balance (response.get ("balance")); ASSERT_EQ ("25", balance); } request.put ("include_confirmed", true); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - auto balance (response.json.get ("balance")); + auto response (wait_response (system, rpc, request)); + auto balance (response.get ("balance")); ASSERT_EQ ("25", balance); - auto confirmed_balance (response.json.get ("confirmed_balance")); + auto confirmed_balance (response.get ("confirmed_balance")); ASSERT_EQ ("340282366920938463463374607431768211455", confirmed_balance); - auto representative (response.json.get ("representative")); + auto representative (response.get ("representative")); ASSERT_EQ (representative, key1.pub.to_account ()); - auto confirmed_representative (response.json.get ("confirmed_representative")); + auto confirmed_representative (response.get ("confirmed_representative")); ASSERT_EQ (confirmed_representative, nano::dev_genesis_key.pub.to_account ()); - auto confirmed_frontier (response.json.get ("confirmed_frontier")); + auto confirmed_frontier (response.get ("confirmed_frontier")); ASSERT_EQ (nano::genesis_hash.to_string (), confirmed_frontier); - auto confirmed_height (response.json.get ("confirmed_height")); + auto confirmed_height (response.get ("confirmed_height")); ASSERT_EQ (1, confirmed_height); } request.put ("account", key1.pub.to_account ()); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - std::string pending (response.json.get ("pending")); + auto response (wait_response (system, rpc, request)); + std::string pending (response.get ("pending")); ASSERT_EQ ("25", pending); - std::string confirmed_pending (response.json.get ("confirmed_pending")); + std::string confirmed_pending (response.get ("confirmed_pending")); ASSERT_EQ ("0", confirmed_pending); } request.put ("include_confirmed", false); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - std::string pending (response.json.get ("pending")); + auto response (wait_response (system, rpc, request)); + std::string pending (response.get ("pending")); ASSERT_EQ ("25", pending); // These fields shouldn't exist - auto confirmed_balance (response.json.get_optional ("confirmed_balance")); + auto confirmed_balance (response.get_optional ("confirmed_balance")); ASSERT_FALSE (confirmed_balance.is_initialized ()); - auto confirmed_pending (response.json.get_optional ("confirmed_pending")); + auto confirmed_pending (response.get_optional ("confirmed_pending")); ASSERT_FALSE (confirmed_pending.is_initialized ()); - auto confirmed_representative (response.json.get_optional ("confirmed_representative")); + auto confirmed_representative (response.get_optional ("confirmed_representative")); ASSERT_FALSE (confirmed_representative.is_initialized ()); - auto confirmed_frontier (response.json.get_optional ("confirmed_frontier")); + auto confirmed_frontier (response.get_optional ("confirmed_frontier")); ASSERT_FALSE (confirmed_frontier.is_initialized ()); - auto confirmed_height (response.json.get_optional ("confirmed_height")); + auto confirmed_height (response.get_optional ("confirmed_height")); ASSERT_FALSE (confirmed_height.is_initialized ()); } } @@ -4156,12 +3787,10 @@ TEST (rpc, json_block_input) boost::property_tree::ptree json; send.serialize_json (json); request.add_child ("block", json); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (10s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request, 10s)); bool json_error{ false }; - nano::state_block block (json_error, response.json.get_child ("block")); + nano::state_block block (json_error, response.get_child ("block")); ASSERT_FALSE (json_error); ASSERT_FALSE (nano::validate_message (key.pub, send.hash (), block.block_signature ())); @@ -4183,13 +3812,11 @@ TEST (rpc, json_block_output) request.put ("action", "block_info"); request.put ("json_block", "true"); request.put ("hash", send.hash ().to_string ()); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request)); // Make sure contents contains a valid JSON subtree instread of stringified json bool json_error{ false }; - nano::send_block send_from_json (json_error, response.json.get_child ("contents")); + nano::send_block send_from_json (json_error, response.get_child ("contents")); ASSERT_FALSE (json_error); } @@ -4198,8 +3825,8 @@ TEST (rpc, blocks_info) nano::system system; auto node = add_ipc_enabled_node (system); auto [rpc, rpc_ctx] = add_rpc (system, node); - auto check_blocks = [node] (test_response & response) { - for (auto & blocks : response.json.get_child ("blocks")) + auto check_blocks = [node] (boost::property_tree::ptree & response) { + for (auto & blocks : response.get_child ("blocks")) { std::string hash_text (blocks.first); ASSERT_EQ (node->latest (nano::genesis_account).to_string (), hash_text); @@ -4228,9 +3855,7 @@ TEST (rpc, blocks_info) hashes.push_back (std::make_pair ("", entry)); request.add_child ("hashes", hashes); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request)); check_blocks (response); } std::string random_hash = nano::block_hash ().to_string (); @@ -4239,28 +3864,22 @@ TEST (rpc, blocks_info) request.erase ("hashes"); request.add_child ("hashes", hashes); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - ASSERT_EQ (std::error_code (nano::error_blocks::not_found).message (), response.json.get ("error")); + auto response (wait_response (system, rpc, request)); + ASSERT_EQ (std::error_code (nano::error_blocks::not_found).message (), response.get ("error")); } request.put ("include_not_found", "true"); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request)); check_blocks (response); - auto & blocks_not_found (response.json.get_child ("blocks_not_found")); + auto & blocks_not_found (response.get_child ("blocks_not_found")); ASSERT_EQ (1, blocks_not_found.size ()); ASSERT_EQ (random_hash, blocks_not_found.begin ()->second.get ("")); } request.put ("source", "true"); request.put ("pending", "1"); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - for (auto & blocks : response.json.get_child ("blocks")) + auto response (wait_response (system, rpc, request)); + for (auto & blocks : response.get_child ("blocks")) { std::string source (blocks.second.get ("source_account")); ASSERT_EQ ("0", source); @@ -4295,9 +3914,8 @@ TEST (rpc, blocks_info_subtype) entry.put ("", change->hash ().to_string ()); hashes.push_back (std::make_pair ("", entry)); request.add_child ("hashes", hashes); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - auto & blocks (response.json.get_child ("blocks")); + auto response (wait_response (system, rpc, request)); + auto & blocks (response.get_child ("blocks")); ASSERT_EQ (3, blocks.size ()); auto send_subtype (blocks.get_child (send->hash ().to_string ()).get ("subtype")); ASSERT_EQ (send_subtype, "send"); @@ -4326,16 +3944,14 @@ TEST (rpc, block_info_successor) boost::property_tree::ptree request; request.put ("action", "block_info"); request.put ("hash", latest.to_string ()); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request)); // Make sure send block is successor of genesis - std::string successor_text (response.json.get ("successor")); + std::string successor_text (response.get ("successor")); ASSERT_EQ (successor_text, send.hash ().to_string ()); - std::string account_text (response.json.get ("block_account")); + std::string account_text (response.get ("block_account")); ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), account_text); - std::string amount_text (response.json.get ("amount")); + std::string amount_text (response.get ("amount")); ASSERT_EQ (nano::genesis_amount.convert_to (), amount_text); } @@ -4369,30 +3985,26 @@ TEST (rpc, block_info_pruning) boost::property_tree::ptree request; request.put ("action", "block_info"); request.put ("hash", send1->hash ().to_string ()); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - ASSERT_EQ (std::error_code (nano::error_blocks::not_found).message (), response.json.get ("error")); + auto response (wait_response (system, rpc, request)); + ASSERT_EQ (std::error_code (nano::error_blocks::not_found).message (), response.get ("error")); // Existing block with previous pruned boost::property_tree::ptree request2; request2.put ("action", "block_info"); request2.put ("json_block", "true"); request2.put ("hash", receive1->hash ().to_string ()); - test_response response2 (request2, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response2.status != 0); - ASSERT_EQ (200, response2.status); - std::string account_text (response2.json.get ("block_account")); + auto response2 (wait_response (system, rpc, request2)); + std::string account_text (response2.get ("block_account")); ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), account_text); - boost::optional amount (response2.json.get_optional ("amount")); + boost::optional amount (response2.get_optional ("amount")); ASSERT_FALSE (amount.is_initialized ()); // Cannot calculate amount bool json_error{ false }; - nano::receive_block receive_from_json (json_error, response2.json.get_child ("contents")); + nano::receive_block receive_from_json (json_error, response2.get_child ("contents")); ASSERT_FALSE (json_error); ASSERT_EQ (receive1->full_hash (), receive_from_json.full_hash ()); - std::string balance_text (response2.json.get ("balance")); + std::string balance_text (response2.get ("balance")); ASSERT_EQ (nano::genesis_amount.convert_to (), balance_text); - ASSERT_TRUE (response2.json.get ("confirmed")); - std::string successor_text (response2.json.get ("successor")); + ASSERT_TRUE (response2.get ("confirmed")); + std::string successor_text (response2.get ("successor")); ASSERT_EQ (successor_text, nano::block_hash (0).to_string ()); // receive1 block doesn't have successor yet } @@ -4426,18 +4038,14 @@ TEST (rpc, pruned_exists) boost::property_tree::ptree request; request.put ("action", "pruned_exists"); request.put ("hash", send1->hash ().to_string ()); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - ASSERT_TRUE (response.json.get ("exists")); + auto response (wait_response (system, rpc, request)); + ASSERT_TRUE (response.get ("exists")); // Existing block with previous pruned boost::property_tree::ptree request2; request2.put ("action", "pruned_exists"); request2.put ("hash", receive1->hash ().to_string ()); - test_response response2 (request2, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response2.status != 0); - ASSERT_EQ (200, response2.status); - ASSERT_FALSE (response2.json.get ("exists")); + auto response2 (wait_response (system, rpc, request2)); + ASSERT_FALSE (response2.get ("exists")); } TEST (rpc, work_peers_all) @@ -4449,17 +4057,13 @@ TEST (rpc, work_peers_all) request.put ("action", "work_peer_add"); request.put ("address", "::1"); request.put ("port", "0"); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - std::string success (response.json.get ("success", "")); + auto response (wait_response (system, rpc, request)); + std::string success (response.get ("success", "")); ASSERT_TRUE (success.empty ()); boost::property_tree::ptree request1; request1.put ("action", "work_peers"); - test_response response1 (request1, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response1.status != 0); - ASSERT_EQ (200, response1.status); - auto & peers_node (response1.json.get_child ("work_peers")); + auto response1 (wait_response (system, rpc, request1)); + auto & peers_node (response1.get_child ("work_peers")); std::vector peers; for (auto i (peers_node.begin ()), n (peers_node.end ()); i != n; ++i) { @@ -4469,16 +4073,11 @@ TEST (rpc, work_peers_all) ASSERT_EQ ("::1:0", peers[0]); boost::property_tree::ptree request2; request2.put ("action", "work_peers_clear"); - test_response response2 (request2, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response2.status != 0); - ASSERT_EQ (200, response2.status); - success = response2.json.get ("success", ""); + auto response2 (wait_response (system, rpc, request2)); + success = response2.get ("success", ""); ASSERT_TRUE (success.empty ()); - test_response response3 (request1, rpc->config.port, system.io_ctx); - system.deadline_set (5s); - ASSERT_TIMELY (10s, response3.status != 0); - ASSERT_EQ (200, response3.status); - peers_node = response3.json.get_child ("work_peers"); + auto response3 (wait_response (system, rpc, request1, 10s)); + peers_node = response3.get_child ("work_peers"); ASSERT_EQ (0, peers_node.size ()); } @@ -4502,9 +4101,8 @@ TEST (rpc, ledger) request.put ("sorting", true); request.put ("count", "1"); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - for (auto & account : response.json.get_child ("accounts")) + auto response (wait_response (system, rpc, request)); + for (auto & account : response.get_child ("accounts")) { std::string account_text (account.first); ASSERT_EQ (key.pub.to_account (), account_text); @@ -4533,9 +4131,8 @@ TEST (rpc, ledger) request.put ("pending", true); request.put ("representative", true); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - for (auto & account : response.json.get_child ("accounts")) + auto response (wait_response (system, rpc, request)); + for (auto & account : response.get_child ("accounts")) { boost::optional weight (account.second.get_optional ("weight")); ASSERT_TRUE (weight.is_initialized ()); @@ -4552,9 +4149,8 @@ TEST (rpc, ledger) request.put ("count", 2); request.put ("threshold", genesis_balance + 1); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - auto & accounts (response.json.get_child ("accounts")); + auto response (wait_response (system, rpc, request)); + auto & accounts (response.get_child ("accounts")); ASSERT_EQ (1, accounts.size ()); auto account (accounts.begin ()); ASSERT_EQ (key.pub.to_account (), account->first); @@ -4572,9 +4168,8 @@ TEST (rpc, ledger) request.put ("threshold", (send_amount + send2_amount).convert_to ()); request.put ("pending", true); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - auto & accounts (response.json.get_child ("accounts")); + auto response (wait_response (system, rpc, request)); + auto & accounts (response.get_child ("accounts")); ASSERT_EQ (1, accounts.size ()); auto account (accounts.begin ()); ASSERT_EQ (key.pub.to_account (), account->first); @@ -4594,10 +4189,8 @@ TEST (rpc, accounts_create) request.put ("action", "accounts_create"); request.put ("wallet", node->wallets.items.begin ()->first.to_string ()); request.put ("count", "8"); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - auto & accounts (response.json.get_child ("accounts")); + auto response (wait_response (system, rpc, request)); + auto & accounts (response.get_child ("accounts")); for (auto i (accounts.begin ()), n (accounts.end ()); i != n; ++i) { std::string account_text (i->second.get ("")); @@ -4630,14 +4223,12 @@ TEST (rpc, block_create) request.put ("amount", "340282366920938463463374607431768211355"); request.put ("destination", key.pub.to_account ()); request.put ("work", nano::to_string_hex (send_work)); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - std::string send_hash (response.json.get ("hash")); + auto response (wait_response (system, rpc, request)); + std::string send_hash (response.get ("hash")); ASSERT_EQ (send.hash ().to_string (), send_hash); - std::string send_difficulty (response.json.get ("difficulty")); + std::string send_difficulty (response.get ("difficulty")); ASSERT_EQ (nano::to_string_hex (send.difficulty ()), send_difficulty); - auto send_text (response.json.get ("block")); + auto send_text (response.get ("block")); boost::property_tree::ptree block_l; std::stringstream block_stream (send_text); boost::property_tree::read_json (block_stream, block_l); @@ -4655,12 +4246,10 @@ TEST (rpc, block_create) request1.put ("representative", nano::dev_genesis_key.pub.to_account ()); request1.put ("source", send.hash ().to_string ()); request1.put ("work", nano::to_string_hex (open_work)); - test_response response1 (request1, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response1.status != 0); - ASSERT_EQ (200, response1.status); - std::string open_hash (response1.json.get ("hash")); + auto response1 (wait_response (system, rpc, request1)); + std::string open_hash (response1.get ("hash")); ASSERT_EQ (open.hash ().to_string (), open_hash); - auto open_text (response1.json.get ("block")); + auto open_text (response1.get ("block")); std::stringstream block_stream1 (open_text); boost::property_tree::read_json (block_stream1, block_l); auto open_block (nano::deserialize_block_json (block_l)); @@ -4669,21 +4258,17 @@ TEST (rpc, block_create) ASSERT_EQ (nano::process_result::progress, node1->process (open).code); rpc_ctx->io_scope->renew (); request1.put ("representative", key.pub.to_account ()); - test_response response2 (request1, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response2.status != 0); - ASSERT_EQ (200, response2.status); - std::string open2_hash (response2.json.get ("hash")); + auto response2 (wait_response (system, rpc, request1)); + std::string open2_hash (response2.get ("hash")); ASSERT_NE (open.hash ().to_string (), open2_hash); // different blocks with wrong representative auto change_work = *node1->work_generate_blocking (open.hash ()); nano::change_block change (open.hash (), key.pub, key.prv, key.pub, change_work); request1.put ("type", "change"); request1.put ("work", nano::to_string_hex (change_work)); - test_response response4 (request1, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response4.status != 0); - ASSERT_EQ (200, response4.status); - std::string change_hash (response4.json.get ("hash")); + auto response4 (wait_response (system, rpc, request1)); + std::string change_hash (response4.get ("hash")); ASSERT_EQ (change.hash ().to_string (), change_hash); - auto change_text (response4.json.get ("block")); + auto change_text (response4.get ("block")); std::stringstream block_stream4 (change_text); boost::property_tree::read_json (block_stream4, block_l); auto change_block (nano::deserialize_block_json (block_l)); @@ -4701,11 +4286,9 @@ TEST (rpc, block_create) request2.put ("source", send2.hash ().to_string ()); request2.put ("previous", change.hash ().to_string ()); request2.put ("work", nano::to_string_hex (*node1->work_generate_blocking (change.hash ()))); - test_response response5 (request2, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response5.status != 0); - ASSERT_EQ (200, response5.status); - std::string receive_hash (response4.json.get ("hash")); - auto receive_text (response5.json.get ("block")); + auto response5 (wait_response (system, rpc, request2)); + std::string receive_hash (response4.get ("hash")); + auto receive_text (response5.get ("block")); std::stringstream block_stream5 (change_text); boost::property_tree::read_json (block_stream5, block_l); auto receive_block (nano::deserialize_block_json (block_l)); @@ -4733,11 +4316,9 @@ TEST (rpc, block_create_state) request.put ("balance", (nano::genesis_amount - nano::Gxrb_ratio).convert_to ()); request.put ("link", key.pub.to_account ()); request.put ("work", nano::to_string_hex (*node->work_generate_blocking (genesis.hash ()))); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - std::string state_hash (response.json.get ("hash")); - auto state_text (response.json.get ("block")); + auto response (wait_response (system, rpc, request)); + std::string state_hash (response.get ("hash")); + auto state_text (response.get ("block")); std::stringstream block_stream (state_text); boost::property_tree::ptree block_l; boost::property_tree::read_json (block_stream, block_l); @@ -4770,11 +4351,9 @@ TEST (rpc, block_create_state_open) request.put ("balance", nano::Gxrb_ratio.convert_to ()); request.put ("link", send_block->hash ().to_string ()); request.put ("work", nano::to_string_hex (*node->work_generate_blocking (key.pub))); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - std::string state_hash (response.json.get ("hash")); - auto state_text (response.json.get ("block")); + auto response (wait_response (system, rpc, request)); + std::string state_hash (response.get ("hash")); + auto state_text (response.get ("block")); std::stringstream block_stream (state_text); boost::property_tree::ptree block_l; boost::property_tree::read_json (block_stream, block_l); @@ -4822,11 +4401,9 @@ TEST (rpc, block_create_state_request_work) request.put ("balance", (nano::genesis_amount - nano::Gxrb_ratio).convert_to ()); request.put ("link", key.pub.to_account ()); request.put ("previous", previous); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request)); boost::property_tree::ptree block_l; - std::stringstream block_stream (response.json.get ("block")); + std::stringstream block_stream (response.get ("block")); boost::property_tree::read_json (block_stream, block_l); auto block (nano::deserialize_block_json (block_l)); ASSERT_NE (nullptr, block); @@ -4854,11 +4431,9 @@ TEST (rpc, block_create_open_epoch_v2) request.put ("representative", nano::dev_genesis_key.pub.to_account ()); request.put ("balance", nano::Gxrb_ratio.convert_to ()); request.put ("link", send_block->hash ().to_string ()); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - std::string state_hash (response.json.get ("hash")); - auto state_text (response.json.get ("block")); + auto response (wait_response (system, rpc, request)); + std::string state_hash (response.get ("hash")); + auto state_text (response.get ("block")); std::stringstream block_stream (state_text); boost::property_tree::ptree block_l; boost::property_tree::read_json (block_stream, block_l); @@ -4900,11 +4475,9 @@ TEST (rpc, block_create_receive_epoch_v2) request.put ("representative", nano::dev_genesis_key.pub.to_account ()); request.put ("balance", (2 * nano::Gxrb_ratio).convert_to ()); request.put ("link", send_block_2->hash ().to_string ()); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - std::string state_hash (response.json.get ("hash")); - auto state_text (response.json.get ("block")); + auto response (wait_response (system, rpc, request)); + std::string state_hash (response.get ("hash")); + auto state_text (response.get ("block")); std::stringstream block_stream (state_text); boost::property_tree::ptree block_l; boost::property_tree::read_json (block_stream, block_l); @@ -4944,11 +4517,9 @@ TEST (rpc, block_create_send_epoch_v2) request.put ("representative", nano::dev_genesis_key.pub.to_account ()); request.put ("balance", 0); request.put ("link", nano::dev_genesis_key.pub.to_string ()); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - std::string state_hash (response.json.get ("hash")); - auto state_text (response.json.get ("block")); + auto response (wait_response (system, rpc, request)); + std::string state_hash (response.get ("hash")); + auto state_text (response.get ("block")); std::stringstream block_stream (state_text); boost::property_tree::ptree block_l; boost::property_tree::read_json (block_stream, block_l); @@ -4979,10 +4550,8 @@ TEST (rpc, block_hash) std::string json; send.serialize_json (json); request.put ("block", json); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - std::string send_hash (response.json.get ("hash")); + auto response (wait_response (system, rpc, request)); + std::string send_hash (response.get ("hash")); ASSERT_EQ (send.hash ().to_string (), send_hash); } @@ -5000,10 +4569,8 @@ TEST (rpc, wallet_lock) } request.put ("wallet", wallet); request.put ("action", "wallet_lock"); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - std::string account_text1 (response.json.get ("locked")); + auto response (wait_response (system, rpc, request)); + std::string account_text1 (response.get ("locked")); ASSERT_EQ (account_text1, "1"); auto transaction (system.wallet (0)->wallets.tx_begin_read ()); ASSERT_FALSE (system.wallet (0)->store.valid_password (transaction)); @@ -5019,10 +4586,8 @@ TEST (rpc, wallet_locked) node->wallets.items.begin ()->first.encode_hex (wallet); request.put ("wallet", wallet); request.put ("action", "wallet_locked"); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - std::string account_text1 (response.json.get ("locked")); + auto response (wait_response (system, rpc, request)); + std::string account_text1 (response.get ("locked")); ASSERT_EQ (account_text1, "0"); } @@ -5038,9 +4603,8 @@ TEST (rpc, wallet_create_fail) auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "wallet_create"); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (std::error_code (nano::error_common::wallet_lmdb_max_dbs).message (), response.json.get ("error")); + auto response (wait_response (system, rpc, request)); + ASSERT_EQ (std::error_code (nano::error_common::wallet_lmdb_max_dbs).message (), response.get ("error")); } TEST (rpc, wallet_ledger) @@ -5061,9 +4625,8 @@ TEST (rpc, wallet_ledger) request.put ("wallet", node1->wallets.items.begin ()->first.to_string ()); request.put ("sorting", "1"); request.put ("count", "1"); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - for (auto & accounts : response.json.get_child ("accounts")) + auto response (wait_response (system, rpc, request)); + for (auto & accounts : response.get_child ("accounts")) { std::string account_text (accounts.first); ASSERT_EQ (key.pub.to_account (), account_text); @@ -5090,9 +4653,8 @@ TEST (rpc, wallet_ledger) request.put ("weight", "true"); request.put ("pending", "1"); request.put ("representative", "false"); - test_response response2 (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response2.status != 0); - for (auto & accounts : response2.json.get_child ("accounts")) + auto response2 (wait_response (system, rpc, request)); + for (auto & accounts : response2.get_child ("accounts")) { boost::optional weight (accounts.second.get_optional ("weight")); ASSERT_TRUE (weight.is_initialized ()); @@ -5120,10 +4682,8 @@ TEST (rpc, wallet_add_watch) entry.put ("", nano::dev_genesis_key.pub.to_account ()); peers_l.push_back (std::make_pair ("", entry)); request.add_child ("accounts", peers_l); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - std::string success (response.json.get ("success")); + auto response (wait_response (system, rpc, request)); + std::string success (response.get ("success")); ASSERT_TRUE (success.empty ()); ASSERT_TRUE (system.wallet (0)->exists (nano::dev_genesis_key.pub)); @@ -5134,11 +4694,9 @@ TEST (rpc, wallet_add_watch) request.erase ("accounts"); request.add_child ("accounts", peers_l); - test_response response_error (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response_error.status != 0); - ASSERT_EQ (200, response_error.status); + auto response_error (wait_response (system, rpc, request)); std::error_code ec (nano::error_common::bad_public_key); - ASSERT_EQ (response_error.json.get ("error"), ec.message ()); + ASSERT_EQ (response_error.get ("error"), ec.message ()); } TEST (rpc, online_reps) @@ -5156,10 +4714,8 @@ TEST (rpc, online_reps) auto [rpc, rpc_ctx] = add_rpc (system, node2); boost::property_tree::ptree request; request.put ("action", "representatives_online"); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - auto representatives (response.json.get_child ("representatives")); + auto response (wait_response (system, rpc, request)); + auto representatives (response.get_child ("representatives")); auto item (representatives.begin ()); ASSERT_NE (representatives.end (), item); ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), item->second.get ("")); @@ -5168,9 +4724,8 @@ TEST (rpc, online_reps) ASSERT_TIMELY (5s, node2->block (send_block->hash ())); //Test weight option request.put ("weight", "true"); - test_response response2 (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response2.status != 0); - auto representatives2 (response2.json.get_child ("representatives")); + auto response2 (wait_response (system, rpc, request)); + auto representatives2 (response2.get_child ("representatives")); auto item2 (representatives2.begin ()); ASSERT_NE (representatives2.end (), item2); ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), item2->first); @@ -5199,9 +4754,8 @@ TEST (rpc, online_reps) boost::property_tree::ptree filtered_accounts; filtered_accounts.push_back (std::make_pair ("", child_rep)); request.add_child ("accounts", filtered_accounts); - test_response response3 (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (10s, response3.status != 0); - auto representatives3 (response3.json.get_child ("representatives")); + auto response3 (wait_response (system, rpc, request, 10s)); + auto representatives3 (response3.get_child ("representatives")); auto item3 (representatives3.begin ()); ASSERT_NE (representatives3.end (), item3); ASSERT_EQ (new_rep.to_account (), item3->first); @@ -5250,10 +4804,8 @@ TEST (rpc, confirmation_height_currently_processing) // Make the request { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (10s, response.status != 0); - ASSERT_EQ (200, response.status); - auto hash (response.json.get ("hash")); + auto response (wait_response (system, rpc, request, 10s)); + auto hash (response.get ("hash")); ASSERT_EQ (frontier->hash ().to_string (), hash); } } @@ -5263,11 +4815,9 @@ TEST (rpc, confirmation_height_currently_processing) // Make the same request, it should now return an error { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (10s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request, 10s)); std::error_code ec (nano::error_rpc::confirmation_height_not_processing); - ASSERT_EQ (response.json.get ("error"), ec.message ()); + ASSERT_EQ (response.get ("error"), ec.message ()); } } @@ -5283,10 +4833,8 @@ TEST (rpc, confirmation_history) auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "confirmation_history"); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - auto representatives (response.json.get_child ("confirmations")); + auto response (wait_response (system, rpc, request)); + auto representatives (response.get_child ("confirmations")); auto item (representatives.begin ()); ASSERT_NE (representatives.end (), item); auto hash (item->second.get ("hash")); @@ -5319,10 +4867,8 @@ TEST (rpc, confirmation_history_hash) boost::property_tree::ptree request; request.put ("action", "confirmation_history"); request.put ("hash", send2->hash ().to_string ()); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - auto representatives (response.json.get_child ("confirmations")); + auto response (wait_response (system, rpc, request)); + auto representatives (response.get_child ("confirmations")); ASSERT_EQ (representatives.size (), 1); auto item (representatives.begin ()); ASSERT_NE (representatives.end (), item); @@ -5352,10 +4898,8 @@ TEST (rpc, block_confirm) boost::property_tree::ptree request; request.put ("action", "block_confirm"); request.put ("hash", send1->hash ().to_string ()); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - ASSERT_EQ ("1", response.json.get ("started")); + auto response (wait_response (system, rpc, request)); + ASSERT_EQ ("1", response.get ("started")); } TEST (rpc, block_confirm_absent) @@ -5367,10 +4911,8 @@ TEST (rpc, block_confirm_absent) boost::property_tree::ptree request; request.put ("action", "block_confirm"); request.put ("hash", "0"); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - ASSERT_EQ (std::error_code (nano::error_blocks::not_found).message (), response.json.get ("error")); + auto response (wait_response (system, rpc, request)); + ASSERT_EQ (std::error_code (nano::error_blocks::not_found).message (), response.get ("error")); } TEST (rpc, block_confirm_confirmed) @@ -5394,10 +4936,8 @@ TEST (rpc, block_confirm_confirmed) boost::property_tree::ptree request; request.put ("action", "block_confirm"); request.put ("hash", genesis.hash ().to_string ()); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - ASSERT_EQ ("1", response.json.get ("started")); + auto response (wait_response (system, rpc, request)); + ASSERT_EQ ("1", response.get ("started")); // Check confirmation history auto confirmed (node->active.list_recently_cemented ()); ASSERT_EQ (1, confirmed.size ()); @@ -5416,12 +4956,10 @@ TEST (rpc, node_id) auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "node_id"); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - ASSERT_EQ (node->node_id.prv.to_string (), response.json.get ("private")); - ASSERT_EQ (node->node_id.pub.to_account (), response.json.get ("as_account")); - ASSERT_EQ (node->node_id.pub.to_node_id (), response.json.get ("node_id")); + auto response (wait_response (system, rpc, request)); + ASSERT_EQ (node->node_id.prv.to_string (), response.get ("private")); + ASSERT_EQ (node->node_id.pub.to_account (), response.get ("as_account")); + ASSERT_EQ (node->node_id.pub.to_node_id (), response.get ("node_id")); } TEST (rpc, stats_clear) @@ -5434,9 +4972,8 @@ TEST (rpc, stats_clear) ASSERT_EQ (1, node->stats.count (nano::stat::type::ledger, nano::stat::dir::in)); boost::property_tree::ptree request; request.put ("action", "stats_clear"); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - std::string success (response.json.get ("success")); + auto response (wait_response (system, rpc, request)); + std::string success (response.get ("success")); ASSERT_TRUE (success.empty ()); ASSERT_EQ (0, node->stats.count (nano::stat::type::ledger, nano::stat::dir::in)); ASSERT_LE (node->stats.last_reset ().count (), 5); @@ -5457,20 +4994,16 @@ TEST (rpc, unchecked) request.put ("action", "unchecked"); request.put ("count", 2); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - auto & blocks (response.json.get_child ("blocks")); + auto response (wait_response (system, rpc, request)); + auto & blocks (response.get_child ("blocks")); ASSERT_EQ (2, blocks.size ()); ASSERT_EQ (1, blocks.count (open->hash ().to_string ())); ASSERT_EQ (1, blocks.count (open2->hash ().to_string ())); } request.put ("json_block", true); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - auto & blocks (response.json.get_child ("blocks")); + auto response (wait_response (system, rpc, request)); + auto & blocks (response.get_child ("blocks")); ASSERT_EQ (2, blocks.size ()); auto & open_block (blocks.get_child (open->hash ().to_string ())); ASSERT_EQ ("state", open_block.get ("type")); @@ -5490,21 +5023,17 @@ TEST (rpc, unchecked_get) request.put ("action", "unchecked_get"); request.put ("hash", open->hash ().to_string ()); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - ASSERT_EQ (1, response.json.count ("contents")); - auto timestamp (response.json.get ("modified_timestamp")); + auto response (wait_response (system, rpc, request)); + ASSERT_EQ (1, response.count ("contents")); + auto timestamp (response.get ("modified_timestamp")); ASSERT_LE (timestamp, nano::seconds_since_epoch ()); } request.put ("json_block", true); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - auto & contents (response.json.get_child ("contents")); + auto response (wait_response (system, rpc, request)); + auto & contents (response.get_child ("contents")); ASSERT_EQ ("state", contents.get ("type")); - auto timestamp (response.json.get ("modified_timestamp")); + auto timestamp (response.get ("modified_timestamp")); ASSERT_LE (timestamp, nano::seconds_since_epoch ()); } } @@ -5523,9 +5052,7 @@ TEST (rpc, unchecked_clear) ASSERT_EQ (node->store.unchecked.count (node->store.tx_begin_read ()), 1); } request.put ("action", "unchecked_clear"); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request)); ASSERT_TIMELY (10s, node->store.unchecked.count (node->store.tx_begin_read ()) == 0); } @@ -5546,10 +5073,8 @@ TEST (rpc, unopened) { boost::property_tree::ptree request; request.put ("action", "unopened"); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - auto & accounts (response.json.get_child ("accounts")); + auto response (wait_response (system, rpc, request)); + auto & accounts (response.get_child ("accounts")); ASSERT_EQ (2, accounts.size ()); ASSERT_EQ ("1", accounts.get (account1.to_account ())); ASSERT_EQ ("10", accounts.get (account2.to_account ())); @@ -5559,10 +5084,8 @@ TEST (rpc, unopened) boost::property_tree::ptree request; request.put ("action", "unopened"); request.put ("account", account2.to_account ()); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - auto & accounts (response.json.get_child ("accounts")); + auto response (wait_response (system, rpc, request)); + auto & accounts (response.get_child ("accounts")); ASSERT_EQ (1, accounts.size ()); ASSERT_EQ ("10", accounts.get (account2.to_account ())); } @@ -5571,10 +5094,8 @@ TEST (rpc, unopened) boost::property_tree::ptree request; request.put ("action", "unopened"); request.put ("account", nano::account (account2.number () + 1).to_account ()); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - auto & accounts (response.json.get_child ("accounts")); + auto response (wait_response (system, rpc, request)); + auto & accounts (response.get_child ("accounts")); ASSERT_EQ (0, accounts.size ()); } { @@ -5582,10 +5103,8 @@ TEST (rpc, unopened) boost::property_tree::ptree request; request.put ("action", "unopened"); request.put ("count", "1"); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - auto & accounts (response.json.get_child ("accounts")); + auto response (wait_response (system, rpc, request)); + auto & accounts (response.get_child ("accounts")); ASSERT_EQ (1, accounts.size ()); ASSERT_EQ ("1", accounts.get (account1.to_account ())); } @@ -5594,10 +5113,8 @@ TEST (rpc, unopened) boost::property_tree::ptree request; request.put ("action", "unopened"); request.put ("threshold", 5); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - auto & accounts (response.json.get_child ("accounts")); + auto response (wait_response (system, rpc, request)); + auto & accounts (response.get_child ("accounts")); ASSERT_EQ (1, accounts.size ()); ASSERT_EQ ("10", accounts.get (account2.to_account ())); } @@ -5615,10 +5132,8 @@ TEST (rpc, unopened_burn) auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "unopened"); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - auto & accounts (response.json.get_child ("accounts")); + auto response (wait_response (system, rpc, request)); + auto & accounts (response.get_child ("accounts")); ASSERT_EQ (0, accounts.size ()); } @@ -5629,10 +5144,8 @@ TEST (rpc, unopened_no_accounts) auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "unopened"); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - auto & accounts (response.json.get_child ("accounts")); + auto response (wait_response (system, rpc, request)); + auto & accounts (response.get_child ("accounts")); ASSERT_EQ (0, accounts.size ()); } @@ -5644,10 +5157,8 @@ TEST (rpc, uptime) boost::property_tree::ptree request; request.put ("action", "uptime"); std::this_thread::sleep_for (std::chrono::seconds (1)); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - ASSERT_LE (1, response.json.get ("seconds")); + auto response (wait_response (system, rpc, request)); + ASSERT_LE (1, response.get ("seconds")); } TEST (rpc, wallet_history) @@ -5672,11 +5183,9 @@ TEST (rpc, wallet_history) boost::property_tree::ptree request; request.put ("action", "wallet_history"); request.put ("wallet", node->wallets.items.begin ()->first.to_string ()); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request)); std::vector> history_l; - auto & history_node (response.json.get_child ("history")); + auto & history_node (response.get_child ("history")); for (auto i (history_node.begin ()), n (history_node.end ()); i != n; ++i) { history_l.push_back (std::make_tuple (i->second.get ("type"), i->second.get ("account"), i->second.get ("amount"), i->second.get ("hash"), i->second.get ("block_account"), i->second.get ("local_timestamp"))); @@ -5719,18 +5228,13 @@ TEST (rpc, sign_hash) request.put ("action", "sign"); request.put ("hash", send.hash ().to_string ()); request.put ("key", key.prv.to_string ()); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (10s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request, 10s)); std::error_code ec (nano::error_rpc::sign_hash_disabled); - ASSERT_EQ (response.json.get ("error"), ec.message ()); + ASSERT_EQ (response.get ("error"), ec.message ()); rpc_ctx->node_rpc_config->enable_sign_hash = true; - test_response response2 (request, rpc->config.port, system.io_ctx); - system.deadline_set (10s); - ASSERT_TIMELY (10s, response2.status != 0); - ASSERT_EQ (200, response2.status); + auto response2 (wait_response (system, rpc, request, 10s)); nano::signature signature; - std::string signature_text (response2.json.get ("signature")); + std::string signature_text (response2.get ("signature")); ASSERT_FALSE (signature.decode_hex (signature_text)); ASSERT_FALSE (nano::validate_message (key.pub, send.hash (), signature)); } @@ -5752,10 +5256,8 @@ TEST (rpc, sign_block) std::string json; send.serialize_json (json); request.put ("block", json); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (10s, response.status != 0); - ASSERT_EQ (200, response.status); - auto contents (response.json.get ("block")); + auto response (wait_response (system, rpc, request, 10s)); + auto contents (response.get ("block")); boost::property_tree::ptree block_l; std::stringstream block_stream (contents); boost::property_tree::read_json (block_stream, block_l); @@ -5782,19 +5284,15 @@ TEST (rpc, memory_stats) request.put ("action", "stats"); request.put ("type", "objects"); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request)); - ASSERT_EQ (response.json.get_child ("node").get_child ("vote_uniquer").get_child ("votes").get ("count"), "1"); + ASSERT_EQ (response.get_child ("node").get_child ("vote_uniquer").get_child ("votes").get ("count"), "1"); } request.put ("type", "database"); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - ASSERT_TRUE (!response.json.empty ()); + auto response (wait_response (system, rpc, request)); + ASSERT_TRUE (!response.empty ()); } } @@ -5806,16 +5304,12 @@ TEST (rpc, block_confirmed) boost::property_tree::ptree request; request.put ("action", "block_info"); request.put ("hash", "bad_hash1337"); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - ASSERT_EQ (std::error_code (nano::error_blocks::invalid_block_hash).message (), response.json.get ("error")); + auto response (wait_response (system, rpc, request)); + ASSERT_EQ (std::error_code (nano::error_blocks::invalid_block_hash).message (), response.get ("error")); request.put ("hash", "0"); - test_response response1 (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response1.status != 0); - ASSERT_EQ (200, response1.status); - ASSERT_EQ (std::error_code (nano::error_blocks::not_found).message (), response1.json.get ("error")); + auto response1 (wait_response (system, rpc, request)); + ASSERT_EQ (std::error_code (nano::error_blocks::not_found).message (), response1.get ("error")); rpc_ctx->io_scope->reset (); nano::keypair key; @@ -5835,11 +5329,8 @@ TEST (rpc, block_confirmed) // This should not be confirmed nano::block_hash latest (node->latest (nano::dev_genesis_key.pub)); request.put ("hash", latest.to_string ()); - test_response response2 (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response2.status != 0); - - ASSERT_EQ (200, response2.status); - ASSERT_FALSE (response2.json.get ("confirmed")); + auto response2 (wait_response (system, rpc, request)); + ASSERT_FALSE (response2.get ("confirmed")); // Create and process a new send block auto send = std::make_shared (latest, key.pub, 10, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (latest)); @@ -5855,10 +5346,8 @@ TEST (rpc, block_confirmed) // Requesting confirmation for this should now succeed request.put ("hash", send->hash ().to_string ()); - test_response response3 (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response3.status != 0); - ASSERT_EQ (200, response3.status); - ASSERT_TRUE (response3.json.get ("confirmed")); + auto response3 (wait_response (system, rpc, request)); + ASSERT_TRUE (response3.get ("confirmed")); } TEST (rpc, database_txn_tracker) @@ -5878,11 +5367,9 @@ TEST (rpc, database_txn_tracker) boost::property_tree::ptree request; request.put ("action", "database_txn_tracker"); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request)); std::error_code ec (nano::error_common::tracking_not_enabled); - ASSERT_EQ (response.json.get ("error"), ec.message ()); + ASSERT_EQ (response.get ("error"), ec.message ()); } } @@ -5895,11 +5382,9 @@ TEST (rpc, database_txn_tracker) boost::property_tree::ptree request; auto check_not_correct_amount = [&system, &request, rpc = rpc] () { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request)); std::error_code ec (nano::error_common::invalid_amount); - ASSERT_EQ (response.json.get ("error"), ec.message ()); + ASSERT_EQ (response.get ("error"), ec.message ()); }; request.put ("action", "database_txn_tracker"); @@ -5934,13 +5419,11 @@ TEST (rpc, database_txn_tracker) // Adjust minimum read time so that it can detect the read transaction being opened request.put ("min_read_time", "1000"); - test_response response (request, rpc->config.port, system.io_ctx); // It can take a long time to generate stack traces - ASSERT_TIMELY (60s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request, 60s)); keep_txn_alive_promise.set_value (); std::vector>>> json_l; - auto & json_node (response.json.get_child ("txn_tracking")); + auto & json_node (response.get_child ("txn_tracking")); for (auto & stat : json_node) { auto & stack_trace = stat.second.get_child ("stacktrace"); @@ -5975,37 +5458,34 @@ TEST (rpc, active_difficulty) request.put ("action", "active_difficulty"); auto expected_multiplier{ 1.0 }; { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - auto network_minimum_text (response.json.get ("network_minimum")); + auto response (wait_response (system, rpc, request)); + auto network_minimum_text (response.get ("network_minimum")); uint64_t network_minimum; ASSERT_FALSE (nano::from_string_hex (network_minimum_text, network_minimum)); ASSERT_EQ (node->default_difficulty (nano::work_version::work_1), network_minimum); - auto network_receive_minimum_text (response.json.get ("network_receive_minimum")); + auto network_receive_minimum_text (response.get ("network_receive_minimum")); uint64_t network_receive_minimum; ASSERT_FALSE (nano::from_string_hex (network_receive_minimum_text, network_receive_minimum)); ASSERT_EQ (node->default_receive_difficulty (nano::work_version::work_1), network_receive_minimum); - auto multiplier (response.json.get ("multiplier")); + auto multiplier (response.get ("multiplier")); ASSERT_NEAR (expected_multiplier, multiplier, 1e-6); - auto network_current_text (response.json.get ("network_current")); + auto network_current_text (response.get ("network_current")); uint64_t network_current; ASSERT_FALSE (nano::from_string_hex (network_current_text, network_current)); ASSERT_EQ (nano::difficulty::from_multiplier (expected_multiplier, node->default_difficulty (nano::work_version::work_1)), network_current); - auto network_receive_current_text (response.json.get ("network_receive_current")); + auto network_receive_current_text (response.get ("network_receive_current")); uint64_t network_receive_current; ASSERT_FALSE (nano::from_string_hex (network_receive_current_text, network_receive_current)); auto network_receive_current_multiplier (nano::difficulty::to_multiplier (network_receive_current, network_receive_minimum)); auto network_receive_current_normalized_multiplier (nano::normalized_multiplier (network_receive_current_multiplier, network_receive_minimum)); ASSERT_NEAR (network_receive_current_normalized_multiplier, multiplier, 1e-6); - ASSERT_EQ (response.json.not_found (), response.json.find ("difficulty_trend")); + ASSERT_EQ (response.not_found (), response.find ("difficulty_trend")); } // Test include_trend optional request.put ("include_trend", true); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - auto trend_opt (response.json.get_child_optional ("difficulty_trend")); + auto response (wait_response (system, rpc, request)); + auto trend_opt (response.get_child_optional ("difficulty_trend")); ASSERT_TRUE (trend_opt.is_initialized ()); auto & trend (trend_opt.get ()); ASSERT_EQ (1, trend.size ()); @@ -6081,17 +5561,15 @@ TEST (rpc, in_process) nano::node_rpc_config node_rpc_config; nano::ipc::ipc_server ipc_server (*node, node_rpc_config); nano::inprocess_rpc_handler inprocess_rpc_handler (*node, ipc_server, node_rpc_config); - nano::rpc rpc (system.io_ctx, rpc_config, inprocess_rpc_handler); - rpc.start (); + auto rpc (std::make_shared (system.io_ctx, rpc_config, inprocess_rpc_handler)); + rpc->start (); boost::property_tree::ptree request; request.put ("action", "account_balance"); request.put ("account", nano::dev_genesis_key.pub.to_account ()); - test_response response (request, rpc.config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - std::string balance_text (response.json.get ("balance")); + auto response (wait_response (system, rpc, request)); + std::string balance_text (response.get ("balance")); ASSERT_EQ ("340282366920938463463374607431768211455", balance_text); - std::string pending_text (response.json.get ("pending")); + std::string pending_text (response.get ("pending")); ASSERT_EQ ("0", pending_text); } @@ -6137,20 +5615,16 @@ TEST (rpc, deprecated_account_format) boost::property_tree::ptree request; request.put ("action", "account_info"); request.put ("account", nano::dev_genesis_key.pub.to_account ()); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - boost::optional deprecated_account_format (response.json.get_optional ("deprecated_account_format")); + auto response (wait_response (system, rpc, request)); + boost::optional deprecated_account_format (response.get_optional ("deprecated_account_format")); ASSERT_FALSE (deprecated_account_format.is_initialized ()); std::string account_text (nano::dev_genesis_key.pub.to_account ()); account_text[4] = '-'; request.put ("account", account_text); - test_response response2 (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response2.status != 0); - ASSERT_EQ (200, response2.status); - std::string frontier (response.json.get ("frontier")); + auto response2 (wait_response (system, rpc, request)); + std::string frontier (response2.get ("frontier")); ASSERT_EQ (nano::genesis_hash.to_string (), frontier); - boost::optional deprecated_account_format2 (response2.json.get_optional ("deprecated_account_format")); + boost::optional deprecated_account_format2 (response2.get_optional ("deprecated_account_format")); ASSERT_TRUE (deprecated_account_format2.is_initialized ()); } @@ -6186,14 +5660,10 @@ TEST (rpc, epoch_upgrade) request.put ("action", "epoch_upgrade"); request.put ("epoch", 1); request.put ("key", epoch_signer.prv.to_string ()); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - ASSERT_EQ ("1", response.json.get ("started")); - test_response response_fail (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response_fail.status != 0); - ASSERT_EQ (200, response_fail.status); - ASSERT_EQ ("0", response_fail.json.get ("started")); + auto response (wait_response (system, rpc, request)); + ASSERT_EQ ("1", response.get ("started")); + auto response_fail (wait_response (system, rpc, request)); + ASSERT_EQ ("0", response_fail.get ("started")); ASSERT_TIMELY (10s, 4 == node->store.account.count (node->store.tx_begin_read ())); // Check upgrade { @@ -6230,10 +5700,8 @@ TEST (rpc, epoch_upgrade) rpc_ctx->io_scope->renew (); request.put ("epoch", 2); - test_response response2 (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response2.status != 0); - ASSERT_EQ (200, response2.status); - ASSERT_EQ ("1", response2.json.get ("started")); + auto response2 (wait_response (system, rpc, request)); + ASSERT_EQ ("1", response2.get ("started")); ASSERT_TIMELY (10s, 5 == node->store.account.count (node->store.tx_begin_read ())); // Check upgrade { @@ -6287,10 +5755,8 @@ TEST (rpc, epoch_upgrade_multithreaded) request.put ("threads", 2); request.put ("epoch", 1); request.put ("key", epoch_signer.prv.to_string ()); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - ASSERT_EQ ("1", response.json.get ("started")); + auto response (wait_response (system, rpc, request)); + ASSERT_EQ ("1", response.get ("started")); ASSERT_TIMELY (5s, 4 == node->store.account.count (node->store.tx_begin_read ())); // Check upgrade { @@ -6327,10 +5793,8 @@ TEST (rpc, epoch_upgrade_multithreaded) rpc_ctx->io_scope->renew (); request.put ("epoch", 2); - test_response response2 (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response2.status != 0); - ASSERT_EQ (200, response2.status); - ASSERT_EQ ("1", response2.json.get ("started")); + auto response2 (wait_response (system, rpc, request)); + ASSERT_EQ ("1", response2.get ("started")); ASSERT_TIMELY (5s, 5 == node->store.account.count (node->store.tx_begin_read ())); // Check upgrade { @@ -6372,10 +5836,8 @@ TEST (rpc, account_lazy_start) boost::property_tree::ptree request; request.put ("action", "account_info"); request.put ("account", key.pub.to_account ()); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - boost::optional account_error (response.json.get_optional ("error")); + auto response (wait_response (system, rpc, request)); + boost::optional account_error (response.get_optional ("error")); ASSERT_TRUE (account_error.is_initialized ()); // Check processed blocks @@ -6407,28 +5869,22 @@ TEST (rpc, receive) request.put ("account", key1.pub.to_account ()); request.put ("block", send2->hash ().to_string ()); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - auto receive_text (response.json.get ("block")); + auto response (wait_response (system, rpc, request)); + auto receive_text (response.get ("block")); nano::account_info info; ASSERT_FALSE (node->store.account.get (node->store.tx_begin_read (), key1.pub, info)); ASSERT_EQ (info.head, receive_text); } // Trying to receive the same block should fail with unreceivable { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - ASSERT_EQ (std::error_code (nano::error_process::unreceivable).message (), response.json.get ("error")); + auto response (wait_response (system, rpc, request)); + ASSERT_EQ (std::error_code (nano::error_process::unreceivable).message (), response.get ("error")); } // Trying to receive a non-existing block should fail request.put ("block", nano::block_hash (send2->hash ().number () + 1).to_string ()); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - ASSERT_EQ (std::error_code (nano::error_blocks::not_found).message (), response.json.get ("error")); + auto response (wait_response (system, rpc, request)); + ASSERT_EQ (std::error_code (nano::error_blocks::not_found).message (), response.get ("error")); } } @@ -6454,10 +5910,8 @@ TEST (rpc, receive_unopened) request.put ("account", key1.pub.to_account ()); request.put ("block", send1->hash ().to_string ()); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - auto receive_text (response.json.get ("block")); + auto response (wait_response (system, rpc, request)); + auto receive_text (response.get ("block")); nano::account_info info; ASSERT_FALSE (node->store.account.get (node->store.tx_begin_read (), key1.pub, info)); ASSERT_EQ (info.head, info.open_block); @@ -6480,10 +5934,8 @@ TEST (rpc, receive_unopened) request.put ("account", key2.pub.to_account ()); request.put ("block", send2->hash ().to_string ()); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - auto receive_text (response.json.get ("block")); + auto response (wait_response (system, rpc, request)); + auto receive_text (response.get ("block")); nano::account_info info; ASSERT_FALSE (node->store.account.get (node->store.tx_begin_read (), key2.pub, info)); ASSERT_EQ (info.head, info.open_block); @@ -6520,10 +5972,8 @@ TEST (rpc, receive_work_disabled) request.put ("account", key1.pub.to_account ()); request.put ("block", send1->hash ().to_string ()); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - ASSERT_EQ (std::error_code (nano::error_common::disabled_work_generation).message (), response.json.get ("error")); + auto response (wait_response (system, rpc, request)); + ASSERT_EQ (std::error_code (nano::error_common::disabled_work_generation).message (), response.get ("error")); } } @@ -6570,28 +6020,22 @@ TEST (rpc, receive_pruned) request.put ("account", key1.pub.to_account ()); request.put ("block", send2->hash ().to_string ()); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - auto receive_text (response.json.get ("block")); + auto response (wait_response (system, rpc, request)); + auto receive_text (response.get ("block")); nano::account_info info; ASSERT_FALSE (node2->store.account.get (node2->store.tx_begin_read (), key1.pub, info)); ASSERT_EQ (info.head, receive_text); } // Trying to receive the same block should fail with unreceivable { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - ASSERT_EQ (std::error_code (nano::error_process::unreceivable).message (), response.json.get ("error")); + auto response (wait_response (system, rpc, request)); + ASSERT_EQ (std::error_code (nano::error_process::unreceivable).message (), response.get ("error")); } // Trying to receive a non-existing block should fail request.put ("block", nano::block_hash (send2->hash ().number () + 1).to_string ()); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - ASSERT_EQ (std::error_code (nano::error_blocks::not_found).message (), response.json.get ("error")); + auto response (wait_response (system, rpc, request)); + ASSERT_EQ (std::error_code (nano::error_blocks::not_found).message (), response.get ("error")); } } @@ -6612,10 +6056,8 @@ TEST (rpc, telemetry_single) request.put ("address", "not_a_valid_address"); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (10s, response.status != 0); - ASSERT_EQ (200, response.status); - ASSERT_EQ (std::error_code (nano::error_rpc::requires_port_and_address).message (), response.json.get ("error")); + auto response (wait_response (system, rpc, request, 10s)); + ASSERT_EQ (std::error_code (nano::error_rpc::requires_port_and_address).message (), response.get ("error")); } // Missing address @@ -6623,10 +6065,8 @@ TEST (rpc, telemetry_single) request.put ("port", 65); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (10s, response.status != 0); - ASSERT_EQ (200, response.status); - ASSERT_EQ (std::error_code (nano::error_rpc::requires_port_and_address).message (), response.json.get ("error")); + auto response (wait_response (system, rpc, request, 10s)); + ASSERT_EQ (std::error_code (nano::error_rpc::requires_port_and_address).message (), response.get ("error")); } // Try with invalid address @@ -6634,30 +6074,24 @@ TEST (rpc, telemetry_single) request.put ("port", 65); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (10s, response.status != 0); - ASSERT_EQ (200, response.status); - ASSERT_EQ (std::error_code (nano::error_common::invalid_ip_address).message (), response.json.get ("error")); + auto response (wait_response (system, rpc, request, 10s)); + ASSERT_EQ (std::error_code (nano::error_common::invalid_ip_address).message (), response.get ("error")); } // Then invalid port request.put ("address", (boost::format ("%1%") % node->network.endpoint ().address ()).str ()); request.put ("port", "invalid port"); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (10s, response.status != 0); - ASSERT_EQ (200, response.status); - ASSERT_EQ (std::error_code (nano::error_common::invalid_port).message (), response.json.get ("error")); + auto response (wait_response (system, rpc, request, 10s)); + ASSERT_EQ (std::error_code (nano::error_common::invalid_port).message (), response.get ("error")); } // Use correctly formed address and port request.put ("port", node->network.endpoint ().port ()); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (10s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request, 10s)); - nano::jsonconfig config (response.json); + nano::jsonconfig config (response); nano::telemetry_data telemetry_data; auto const should_ignore_identification_metrics = false; ASSERT_FALSE (telemetry_data.deserialize_json (config, should_ignore_identification_metrics)); @@ -6687,24 +6121,21 @@ TEST (rpc, telemetry_all) boost::property_tree::ptree request; request.put ("action", "telemetry"); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (10s, response.status != 0); - nano::jsonconfig config (response.json); + auto response (wait_response (system, rpc, request, 10s)); + nano::jsonconfig config (response); nano::telemetry_data telemetry_data; auto const should_ignore_identification_metrics = true; ASSERT_FALSE (telemetry_data.deserialize_json (config, should_ignore_identification_metrics)); nano::compare_default_telemetry_response_data_excluding_signature (telemetry_data, node->network_params, node->config.bandwidth_limit, node->default_difficulty (nano::work_version::work_1)); - ASSERT_FALSE (response.json.get_optional ("node_id").is_initialized ()); - ASSERT_FALSE (response.json.get_optional ("signature").is_initialized ()); + ASSERT_FALSE (response.get_optional ("node_id").is_initialized ()); + ASSERT_FALSE (response.get_optional ("signature").is_initialized ()); } request.put ("raw", "true"); - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (10s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request, 10s)); // This may fail if the response has taken longer than the cache cutoff time. - auto & all_metrics = response.json.get_child ("metrics"); + auto & all_metrics = response.get_child ("metrics"); auto & metrics = all_metrics.front ().second; ASSERT_EQ (1, all_metrics.size ()); @@ -6735,33 +6166,27 @@ TEST (rpc, telemetry_self) request.put ("port", node1->network.endpoint ().port ()); auto const should_ignore_identification_metrics = false; { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (10s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request, 10s)); nano::telemetry_data data; - nano::jsonconfig config (response.json); + nano::jsonconfig config (response); ASSERT_FALSE (data.deserialize_json (config, should_ignore_identification_metrics)); nano::compare_default_telemetry_response_data (data, node1->network_params, node1->config.bandwidth_limit, node1->default_difficulty (nano::work_version::work_1), node1->node_id); } request.put ("address", "[::1]"); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (10s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request, 10s)); nano::telemetry_data data; - nano::jsonconfig config (response.json); + nano::jsonconfig config (response); ASSERT_FALSE (data.deserialize_json (config, should_ignore_identification_metrics)); nano::compare_default_telemetry_response_data (data, node1->network_params, node1->config.bandwidth_limit, node1->default_difficulty (nano::work_version::work_1), node1->node_id); } request.put ("address", "127.0.0.1"); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (10s, response.status != 0); - ASSERT_EQ (200, response.status); + auto response (wait_response (system, rpc, request, 10s)); nano::telemetry_data data; - nano::jsonconfig config (response.json); + nano::jsonconfig config (response); ASSERT_FALSE (data.deserialize_json (config, should_ignore_identification_metrics)); nano::compare_default_telemetry_response_data (data, node1->network_params, node1->config.bandwidth_limit, node1->default_difficulty (nano::work_version::work_1), node1->node_id); } @@ -6769,10 +6194,8 @@ TEST (rpc, telemetry_self) // Incorrect port should fail request.put ("port", "0"); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (10s, response.status != 0); - ASSERT_EQ (200, response.status); - ASSERT_EQ (std::error_code (nano::error_rpc::peer_not_found).message (), response.json.get ("error")); + auto response (wait_response (system, rpc, request, 10s)); + ASSERT_EQ (std::error_code (nano::error_rpc::peer_not_found).message (), response.get ("error")); } } @@ -6801,14 +6224,12 @@ TEST (rpc, confirmation_active) boost::property_tree::ptree request; request.put ("action", "confirmation_active"); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - auto & confirmations (response.json.get_child ("confirmations")); + auto response (wait_response (system, rpc, request)); + auto & confirmations (response.get_child ("confirmations")); ASSERT_EQ (1, confirmations.size ()); ASSERT_EQ (send2->qualified_root ().to_string (), confirmations.front ().second.get ("")); - ASSERT_EQ (1, response.json.get ("unconfirmed")); - ASSERT_EQ (1, response.json.get ("confirmed")); + ASSERT_EQ (1, response.get ("unconfirmed")); + ASSERT_EQ (1, response.get ("confirmed")); } } @@ -6831,16 +6252,14 @@ TEST (rpc, confirmation_info) request.put ("representatives", "true"); request.put ("json_block", "true"); { - test_response response (request, rpc->config.port, system.io_ctx); - ASSERT_TIMELY (5s, response.status != 0); - ASSERT_EQ (200, response.status); - ASSERT_EQ (1, response.json.count ("announcements")); - ASSERT_EQ (1, response.json.get ("voters")); - ASSERT_EQ (send->hash ().to_string (), response.json.get ("last_winner")); - auto & blocks (response.json.get_child ("blocks")); + auto response (wait_response (system, rpc, request)); + ASSERT_EQ (1, response.count ("announcements")); + ASSERT_EQ (1, response.get ("voters")); + ASSERT_EQ (send->hash ().to_string (), response.get ("last_winner")); + auto & blocks (response.get_child ("blocks")); ASSERT_EQ (1, blocks.size ()); auto & representatives (blocks.front ().second.get_child ("representatives")); ASSERT_EQ (1, representatives.size ()); - ASSERT_EQ (0, response.json.get ("total_tally")); + ASSERT_EQ (0, response.get ("total_tally")); } } From 27989a80dc53aeef10334fcded26b45df8e1a504 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Mon, 28 Jun 2021 15:50:55 +0200 Subject: [PATCH 065/346] Removing unused constants from enumeration. (#3357) --- nano/lib/config.hpp | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/nano/lib/config.hpp b/nano/lib/config.hpp index aa492d73b4..e5ba3f82dd 100644 --- a/nano/lib/config.hpp +++ b/nano/lib/config.hpp @@ -67,16 +67,12 @@ enum class nano_networks { // Low work parameters, publicly known genesis key, dev IP ports nano_dev_network = 0, - rai_dev_network = 0, // Normal work parameters, secret beta genesis key, beta IP ports nano_beta_network = 1, - rai_beta_network = 1, // Normal work parameters, secret live key, live IP ports nano_live_network = 2, - rai_live_network = 2, // Normal work parameters, secret test genesis key, test IP ports nano_test_network = 3, - rai_test_network = 3, }; struct work_thresholds @@ -231,4 +227,4 @@ bool running_within_valgrind (); /** Set the active network to the dev network */ void force_nano_dev_network (); -} \ No newline at end of file +} From 20fcdd4946c94bcba0bb819a064cba967b2b1eed Mon Sep 17 00:00:00 2001 From: clemahieu Date: Tue, 29 Jun 2021 11:06:51 +0100 Subject: [PATCH 066/346] System initializer (#3332) Moving nano::system tests in to their own file for better organization. Adding initializer function to nano::system::ledger_initialization_set to initialize node ledgers with an evenly-weighted set of representatives. This allows a lot of boilerplate code to be eliminated when constructing unit tests. --- nano/core_test/CMakeLists.txt | 1 + nano/core_test/difficulty.cpp | 17 ---- nano/core_test/ledger.cpp | 108 -------------------- nano/core_test/system.cpp | 186 ++++++++++++++++++++++++++++++++++ nano/test_common/network.hpp | 1 + nano/test_common/system.cpp | 36 +++++++ nano/test_common/system.hpp | 3 + 7 files changed, 227 insertions(+), 125 deletions(-) create mode 100644 nano/core_test/system.cpp diff --git a/nano/core_test/CMakeLists.txt b/nano/core_test/CMakeLists.txt index 51b55a32c6..220dfb8deb 100644 --- a/nano/core_test/CMakeLists.txt +++ b/nano/core_test/CMakeLists.txt @@ -35,6 +35,7 @@ add_executable( signal_manager.cpp signing.cpp socket.cpp + system.cpp telemetry.cpp toml.cpp timer.cpp diff --git a/nano/core_test/difficulty.cpp b/nano/core_test/difficulty.cpp index 83cd5d38e9..3bb8a5cd30 100644 --- a/nano/core_test/difficulty.cpp +++ b/nano/core_test/difficulty.cpp @@ -3,27 +3,10 @@ #include #include #include -#include #include #include -TEST (system, work_generate_limited) -{ - nano::system system; - nano::block_hash key (1); - nano::network_constants constants; - auto min = constants.publish_thresholds.entry; - auto max = constants.publish_thresholds.base; - for (int i = 0; i < 5; ++i) - { - auto work = system.work_generate_limited (key, min, max); - auto difficulty = nano::work_difficulty (nano::work_version::work_1, key, work); - ASSERT_GE (difficulty, min); - ASSERT_LT (difficulty, max); - } -} - TEST (difficultyDeathTest, multipliers) { // For ASSERT_DEATH_IF_SUPPORTED diff --git a/nano/core_test/ledger.cpp b/nano/core_test/ledger.cpp index d75c3bcbcb..a6149a197a 100644 --- a/nano/core_test/ledger.cpp +++ b/nano/core_test/ledger.cpp @@ -66,17 +66,6 @@ TEST (ledger, genesis_balance) ASSERT_EQ (confirmation_height_info.frontier, genesis.hash ()); } -// All nodes in the system should agree on the genesis balance -TEST (system, system_genesis) -{ - nano::system system (2); - for (auto & i : system.nodes) - { - auto transaction (i->store.tx_begin_read ()); - ASSERT_EQ (nano::genesis_amount, i->ledger.account_balance (transaction, nano::genesis_account)); - } -} - TEST (ledger, process_modifies_sideband) { nano::logger_mt logger; @@ -530,103 +519,6 @@ TEST (ledger, open_fork) ASSERT_EQ (nano::process_result::fork, ledger.process (transaction, block3).code); } -TEST (system, DISABLED_generate_send_existing) -{ - nano::system system (1); - auto & node1 (*system.nodes[0]); - nano::thread_runner runner (system.io_ctx, node1.config.io_threads); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - nano::keypair stake_preserver; - auto send_block (system.wallet (0)->send_action (nano::genesis_account, stake_preserver.pub, nano::genesis_amount / 3 * 2, true)); - nano::account_info info1; - { - auto transaction (node1.store.tx_begin_read ()); - ASSERT_FALSE (node1.store.account.get (transaction, nano::dev_genesis_key.pub, info1)); - } - std::vector accounts; - accounts.push_back (nano::dev_genesis_key.pub); - system.generate_send_existing (node1, accounts); - // Have stake_preserver receive funds after generate_send_existing so it isn't chosen as the destination - { - auto transaction (node1.store.tx_begin_write ()); - auto open_block (std::make_shared (send_block->hash (), nano::genesis_account, stake_preserver.pub, stake_preserver.prv, stake_preserver.pub, 0)); - node1.work_generate_blocking (*open_block); - ASSERT_EQ (nano::process_result::progress, node1.ledger.process (transaction, *open_block).code); - } - ASSERT_GT (node1.balance (stake_preserver.pub), node1.balance (nano::genesis_account)); - nano::account_info info2; - { - auto transaction (node1.store.tx_begin_read ()); - ASSERT_FALSE (node1.store.account.get (transaction, nano::dev_genesis_key.pub, info2)); - } - ASSERT_NE (info1.head, info2.head); - system.deadline_set (15s); - while (info2.block_count < info1.block_count + 2) - { - ASSERT_NO_ERROR (system.poll ()); - auto transaction (node1.store.tx_begin_read ()); - ASSERT_FALSE (node1.store.account.get (transaction, nano::dev_genesis_key.pub, info2)); - } - ASSERT_EQ (info1.block_count + 2, info2.block_count); - ASSERT_EQ (info2.balance, nano::genesis_amount / 3); - { - auto transaction (node1.store.tx_begin_read ()); - ASSERT_NE (node1.ledger.amount (transaction, info2.head), 0); - } - system.stop (); - runner.join (); -} - -TEST (system, DISABLED_generate_send_new) -{ - nano::system system (1); - auto & node1 (*system.nodes[0]); - nano::thread_runner runner (system.io_ctx, node1.config.io_threads); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - { - auto transaction (node1.store.tx_begin_read ()); - auto iterator1 (node1.store.account.begin (transaction)); - ASSERT_NE (node1.store.account.end (), iterator1); - ++iterator1; - ASSERT_EQ (node1.store.account.end (), iterator1); - } - nano::keypair stake_preserver; - auto send_block (system.wallet (0)->send_action (nano::genesis_account, stake_preserver.pub, nano::genesis_amount / 3 * 2, true)); - { - auto transaction (node1.store.tx_begin_write ()); - auto open_block (std::make_shared (send_block->hash (), nano::genesis_account, stake_preserver.pub, stake_preserver.prv, stake_preserver.pub, 0)); - node1.work_generate_blocking (*open_block); - ASSERT_EQ (nano::process_result::progress, node1.ledger.process (transaction, *open_block).code); - } - ASSERT_GT (node1.balance (stake_preserver.pub), node1.balance (nano::genesis_account)); - std::vector accounts; - accounts.push_back (nano::dev_genesis_key.pub); - // This indirectly waits for online weight to stabilize, required to prevent intermittent failures - ASSERT_TIMELY (5s, node1.wallets.reps ().voting > 0); - system.generate_send_new (node1, accounts); - nano::account new_account (0); - { - auto transaction (node1.wallets.tx_begin_read ()); - auto iterator2 (system.wallet (0)->store.begin (transaction)); - if (iterator2->first != nano::dev_genesis_key.pub) - { - new_account = iterator2->first; - } - ++iterator2; - ASSERT_NE (system.wallet (0)->store.end (), iterator2); - if (iterator2->first != nano::dev_genesis_key.pub) - { - new_account = iterator2->first; - } - ++iterator2; - ASSERT_EQ (system.wallet (0)->store.end (), iterator2); - ASSERT_FALSE (new_account.is_zero ()); - } - ASSERT_TIMELY (10s, node1.balance (new_account) != 0); - system.stop (); - runner.join (); -} - TEST (ledger, representation_changes) { nano::keypair key1; diff --git a/nano/core_test/system.cpp b/nano/core_test/system.cpp new file mode 100644 index 0000000000..caf83c68f3 --- /dev/null +++ b/nano/core_test/system.cpp @@ -0,0 +1,186 @@ +#include +#include +#include + +#include + +using namespace std::chrono_literals; + +TEST (system, work_generate_limited) +{ + nano::system system; + nano::block_hash key (1); + nano::network_constants constants; + auto min = constants.publish_thresholds.entry; + auto max = constants.publish_thresholds.base; + for (int i = 0; i < 5; ++i) + { + auto work = system.work_generate_limited (key, min, max); + auto difficulty = nano::work_difficulty (nano::work_version::work_1, key, work); + ASSERT_GE (difficulty, min); + ASSERT_LT (difficulty, max); + } +} + +// All nodes in the system should agree on the genesis balance +TEST (system, system_genesis) +{ + nano::system system (2); + for (auto & i : system.nodes) + { + auto transaction (i->store.tx_begin_read ()); + ASSERT_EQ (nano::genesis_amount, i->ledger.account_balance (transaction, nano::genesis_account)); + } +} + +TEST (system, DISABLED_generate_send_existing) +{ + nano::system system (1); + auto & node1 (*system.nodes[0]); + nano::thread_runner runner (system.io_ctx, node1.config.io_threads); + system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + nano::keypair stake_preserver; + auto send_block (system.wallet (0)->send_action (nano::genesis_account, stake_preserver.pub, nano::genesis_amount / 3 * 2, true)); + nano::account_info info1; + { + auto transaction (node1.store.tx_begin_read ()); + ASSERT_FALSE (node1.store.account.get (transaction, nano::dev_genesis_key.pub, info1)); + } + std::vector accounts; + accounts.push_back (nano::dev_genesis_key.pub); + system.generate_send_existing (node1, accounts); + // Have stake_preserver receive funds after generate_send_existing so it isn't chosen as the destination + { + auto transaction (node1.store.tx_begin_write ()); + auto open_block (std::make_shared (send_block->hash (), nano::genesis_account, stake_preserver.pub, stake_preserver.prv, stake_preserver.pub, 0)); + node1.work_generate_blocking (*open_block); + ASSERT_EQ (nano::process_result::progress, node1.ledger.process (transaction, *open_block).code); + } + ASSERT_GT (node1.balance (stake_preserver.pub), node1.balance (nano::genesis_account)); + nano::account_info info2; + { + auto transaction (node1.store.tx_begin_read ()); + ASSERT_FALSE (node1.store.account.get (transaction, nano::dev_genesis_key.pub, info2)); + } + ASSERT_NE (info1.head, info2.head); + system.deadline_set (15s); + while (info2.block_count < info1.block_count + 2) + { + ASSERT_NO_ERROR (system.poll ()); + auto transaction (node1.store.tx_begin_read ()); + ASSERT_FALSE (node1.store.account.get (transaction, nano::dev_genesis_key.pub, info2)); + } + ASSERT_EQ (info1.block_count + 2, info2.block_count); + ASSERT_EQ (info2.balance, nano::genesis_amount / 3); + { + auto transaction (node1.store.tx_begin_read ()); + ASSERT_NE (node1.ledger.amount (transaction, info2.head), 0); + } + system.stop (); + runner.join (); +} + +TEST (system, DISABLED_generate_send_new) +{ + nano::system system (1); + auto & node1 (*system.nodes[0]); + nano::thread_runner runner (system.io_ctx, node1.config.io_threads); + system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + { + auto transaction (node1.store.tx_begin_read ()); + auto iterator1 (node1.store.account.begin (transaction)); + ASSERT_NE (node1.store.account.end (), iterator1); + ++iterator1; + ASSERT_EQ (node1.store.account.end (), iterator1); + } + nano::keypair stake_preserver; + auto send_block (system.wallet (0)->send_action (nano::genesis_account, stake_preserver.pub, nano::genesis_amount / 3 * 2, true)); + { + auto transaction (node1.store.tx_begin_write ()); + auto open_block (std::make_shared (send_block->hash (), nano::genesis_account, stake_preserver.pub, stake_preserver.prv, stake_preserver.pub, 0)); + node1.work_generate_blocking (*open_block); + ASSERT_EQ (nano::process_result::progress, node1.ledger.process (transaction, *open_block).code); + } + ASSERT_GT (node1.balance (stake_preserver.pub), node1.balance (nano::genesis_account)); + std::vector accounts; + accounts.push_back (nano::dev_genesis_key.pub); + // This indirectly waits for online weight to stabilize, required to prevent intermittent failures + ASSERT_TIMELY (5s, node1.wallets.reps ().voting > 0); + system.generate_send_new (node1, accounts); + nano::account new_account (0); + { + auto transaction (node1.wallets.tx_begin_read ()); + auto iterator2 (system.wallet (0)->store.begin (transaction)); + if (iterator2->first != nano::dev_genesis_key.pub) + { + new_account = iterator2->first; + } + ++iterator2; + ASSERT_NE (system.wallet (0)->store.end (), iterator2); + if (iterator2->first != nano::dev_genesis_key.pub) + { + new_account = iterator2->first; + } + ++iterator2; + ASSERT_EQ (system.wallet (0)->store.end (), iterator2); + ASSERT_FALSE (new_account.is_zero ()); + } + ASSERT_TIMELY (10s, node1.balance (new_account) != 0); + system.stop (); + runner.join (); +} + +TEST (system, rep_initialize_one) +{ + nano::system system; + nano::keypair key; + system.ledger_initialization_set ({ key }); + auto node = system.add_node (); + ASSERT_EQ (nano::genesis_amount, node->balance (key.pub)); +} + +TEST (system, rep_initialize_two) +{ + nano::system system; + nano::keypair key0; + nano::keypair key1; + system.ledger_initialization_set ({ key0, key1 }); + auto node = system.add_node (); + ASSERT_EQ (nano::genesis_amount / 2, node->balance (key0.pub)); + ASSERT_EQ (nano::genesis_amount / 2, node->balance (key1.pub)); +} + +TEST (system, rep_initialize_one_reserve) +{ + nano::system system; + nano::keypair key; + system.ledger_initialization_set ({ key }, nano::Gxrb_ratio); + auto node = system.add_node (); + ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, node->balance (key.pub)); + ASSERT_EQ (nano::Gxrb_ratio, node->balance (nano::dev_genesis_key.pub)); +} + +TEST (system, rep_initialize_two_reserve) +{ + nano::system system; + nano::keypair key0; + nano::keypair key1; + system.ledger_initialization_set ({ key0, key1 }, nano::Gxrb_ratio); + auto node = system.add_node (); + ASSERT_EQ ((nano::genesis_amount - nano::Gxrb_ratio) / 2, node->balance (key0.pub)); + ASSERT_EQ ((nano::genesis_amount - nano::Gxrb_ratio) / 2, node->balance (key1.pub)); +} + +TEST (system, rep_initialize_many) +{ + nano::system system; + nano::keypair key0; + nano::keypair key1; + system.ledger_initialization_set ({ key0, key1 }, nano::Gxrb_ratio); + auto node0 = system.add_node (); + ASSERT_EQ ((nano::genesis_amount - nano::Gxrb_ratio) / 2, node0->balance (key0.pub)); + ASSERT_EQ ((nano::genesis_amount - nano::Gxrb_ratio) / 2, node0->balance (key1.pub)); + auto node1 = system.add_node (); + ASSERT_EQ ((nano::genesis_amount - nano::Gxrb_ratio) / 2, node1->balance (key0.pub)); + ASSERT_EQ ((nano::genesis_amount - nano::Gxrb_ratio) / 2, node1->balance (key1.pub)); +} diff --git a/nano/test_common/network.hpp b/nano/test_common/network.hpp index cd68eba555..316330a23b 100644 --- a/nano/test_common/network.hpp +++ b/nano/test_common/network.hpp @@ -9,6 +9,7 @@ class system; namespace transport { + class channel; class channel_tcp; } diff --git a/nano/test_common/system.cpp b/nano/test_common/system.cpp index 793d450735..4e790fc63d 100644 --- a/nano/test_common/system.cpp +++ b/nano/test_common/system.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include @@ -31,6 +32,11 @@ std::shared_ptr nano::system::add_node (nano::node_flags node_flags_ std::shared_ptr nano::system::add_node (nano::node_config const & node_config_a, nano::node_flags node_flags_a, nano::transport::transport_type type_a) { auto node (std::make_shared (io_ctx, nano::unique_path (), node_config_a, work, node_flags_a, node_sequence++)); + for (auto i: initialization_blocks) + { + auto result = node->ledger.process (node->store.tx_begin_write(), *i); + debug_assert (result.code == nano::process_result::progress); + } debug_assert (!node->init_error ()); node->start (); node->wallets.create (nano::random_wallet_id ()); @@ -143,6 +149,36 @@ nano::system::~system () #endif } +void nano::system::ledger_initialization_set (std::vector const & reps, nano::amount const & reserve) +{ + nano::block_hash previous = nano::genesis_hash; + auto amount = (nano::genesis_amount - reserve.number ()) / reps.size (); + auto balance = nano::genesis_amount; + for (auto const & i: reps) + { + balance -= amount; + nano::state_block_builder builder; + builder.account (nano::dev_genesis_key.pub) + .previous (previous) + .representative(nano::dev_genesis_key.pub) + .link (i.pub) + .balance (balance) + .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .work (*work.generate (previous)); + initialization_blocks.emplace_back (builder.build_shared ()); + previous = initialization_blocks.back ()->hash (); + builder.make_block (); + builder.account (i.pub) + .previous (0) + .representative(i.pub) + .link (previous) + .balance (amount) + .sign (i.prv, i.pub) + .work (*work.generate (i.pub)); + initialization_blocks.emplace_back (builder.build_shared ()); + } +} + std::shared_ptr nano::system::wallet (size_t index_a) { debug_assert (nodes.size () > index_a); diff --git a/nano/test_common/system.hpp b/nano/test_common/system.hpp index e1f2cbc0f8..7f4821310e 100644 --- a/nano/test_common/system.hpp +++ b/nano/test_common/system.hpp @@ -19,6 +19,7 @@ class system final system (); system (uint16_t, nano::transport::transport_type = nano::transport::transport_type::tcp, nano::node_flags = nano::node_flags ()); ~system (); + void ledger_initialization_set (std::vector const & reps, nano::amount const & reserve = 0); void generate_activity (nano::node &, std::vector &); void generate_mass_activity (uint32_t, nano::node &); void generate_usage_traffic (uint32_t, uint32_t, size_t); @@ -53,6 +54,8 @@ class system final std::chrono::time_point> deadline{ std::chrono::steady_clock::time_point::max () }; double deadline_scaling_factor{ 1.0 }; unsigned node_sequence{ 0 }; +private: + std::vector> initialization_blocks; }; std::unique_ptr upgrade_epoch (nano::work_pool &, nano::ledger &, nano::epoch); void blocks_confirm (nano::node &, std::vector> const &, bool const = false); From 966180aff0bf2476d9bf46f89941f8e8769b9d71 Mon Sep 17 00:00:00 2001 From: dsiganos Date: Wed, 30 Jun 2021 11:38:42 +0100 Subject: [PATCH 067/346] Fix half principal rep check (#3358) * Check for half principal even if the account is a duplicate An account might be added that is not a half principal but might become a half principal later. So we should check for half principal every time. * Use have_half_rep() function rather than access variables directly * Convert half_principal counter to boolean The counting of half principals without tracking what is counted is unreliable. Fortunately, we only care about whether a half principal exists or not. So therefore convert the counter to a boolean so that the counter does not get used when it is wrong. --- nano/node/active_transactions.cpp | 2 +- nano/node/wallet.cpp | 10 +++++----- nano/node/wallet.hpp | 6 +++--- 3 files changed, 9 insertions(+), 9 deletions(-) diff --git a/nano/node/active_transactions.cpp b/nano/node/active_transactions.cpp index 2d2cd18e59..10f9c16a98 100644 --- a/nano/node/active_transactions.cpp +++ b/nano/node/active_transactions.cpp @@ -82,7 +82,7 @@ nano::frontiers_confirmation_info nano::active_transactions::get_frontiers_confi // Limit maximum count of elections to start auto rep_counts (node.wallets.reps ()); bool representative (node.config.enable_voting && rep_counts.voting > 0); - bool half_princpal_representative (representative && rep_counts.half_principal > 0); + bool half_princpal_representative (representative && rep_counts.have_half_rep ()); /* Check less frequently for regular nodes in auto mode */ bool agressive_mode (half_princpal_representative || node.config.frontiers_confirmation == nano::frontiers_confirmation_mode::always); auto is_dev_network = node.network_params.network.is_dev_network (); diff --git a/nano/node/wallet.cpp b/nano/node/wallet.cpp index 648e7d2855..d2d2e05289 100644 --- a/nano/node/wallet.cpp +++ b/nano/node/wallet.cpp @@ -1643,6 +1643,11 @@ bool nano::wallets::check_rep (nano::account const & account_a, nano::uint128_t lock = nano::unique_lock (reps_cache_mutex); } + if (weight >= half_principal_weight_a) + { + representatives.half_principal = true; + } + auto insert_result = representatives.accounts.insert (account_a); if (!insert_result.second) { @@ -1651,11 +1656,6 @@ bool nano::wallets::check_rep (nano::account const & account_a, nano::uint128_t ++representatives.voting; - if (weight >= half_principal_weight_a) - { - ++representatives.half_principal; - } - return true; } diff --git a/nano/node/wallet.hpp b/nano/node/wallet.hpp index 644f772562..d0db01e762 100644 --- a/nano/node/wallet.hpp +++ b/nano/node/wallet.hpp @@ -165,11 +165,11 @@ class wallet_representatives { public: uint64_t voting{ 0 }; // Number of representatives with at least the configured minimum voting weight - uint64_t half_principal{ 0 }; // Number of representatives with at least 50% of principal representative requirements + bool half_principal{ false }; // has representatives with at least 50% of principal representative requirements std::unordered_set accounts; // Representatives with at least the configured minimum voting weight bool have_half_rep () const { - return half_principal > 0; + return half_principal; } bool exists (nano::account const & rep_a) const { @@ -178,7 +178,7 @@ class wallet_representatives void clear () { voting = 0; - half_principal = 0; + half_principal = false; accounts.clear (); } }; From 062f3fce376213bdafcd4c80d7ac72e6798fc11f Mon Sep 17 00:00:00 2001 From: dsiganos Date: Wed, 30 Jun 2021 15:24:10 +0100 Subject: [PATCH 068/346] Fix for unit test bulk.offline_send (#3362) The test expected the ledger to be able to report a block as confirmed because the active transaction container was empty. But it has to allow for some time for the data/event to flow to the ledger. Converted an assert to an assert timely to allow for that propagation. This is the failure: [==========] Running 1 test from 1 test suite. [----------] Global test environment set-up. [----------] 1 test from bulk [ RUN ] bulk.offline_send /home/ds/nano/branches/develop/nano-node/nano/core_test/bootstrap.cpp:1764: Failure Value of: node1->block_confirmed (send1->hash ()) Actual: false Expected: true terminate called after throwing an instance of 'testing::internal::GoogleTestFailureException' what(): /home/ds/nano/branches/develop/nano-node/nano/core_test/bootstrap.cpp:1764: Failure Value of: node1->block_confirmed (send1->hash ()) Actual: false Expected: true Aborted --- nano/core_test/bootstrap.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nano/core_test/bootstrap.cpp b/nano/core_test/bootstrap.cpp index 7f83abde2d..a3a14b4592 100644 --- a/nano/core_test/bootstrap.cpp +++ b/nano/core_test/bootstrap.cpp @@ -1761,7 +1761,7 @@ TEST (bulk, offline_send) node1->scheduler.flush (); // Wait to finish election background tasks ASSERT_TIMELY (10s, node1->active.empty ()); - ASSERT_TRUE (node1->block_confirmed (send1->hash ())); + ASSERT_TIMELY (10s, node1->block_confirmed (send1->hash ())); // Initiate bootstrap node2->bootstrap_initiator.bootstrap (node1->network.endpoint ()); // Nodes should find each other From 9ea96357dd51d0e9cfa64535633c82e3175e3985 Mon Sep 17 00:00:00 2001 From: dsiganos Date: Wed, 30 Jun 2021 15:25:46 +0100 Subject: [PATCH 069/346] Fix for unit test active_transactions.vote_replays #3360 (#3361) We cannot expect the vote to survive long enough for the test to see it Fixes issue: https://github.com/nanocurrency/nano-node/issues/3360 --- nano/core_test/active_transactions.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/nano/core_test/active_transactions.cpp b/nano/core_test/active_transactions.cpp index 1d54565a49..c62124d05c 100644 --- a/nano/core_test/active_transactions.cpp +++ b/nano/core_test/active_transactions.cpp @@ -530,7 +530,6 @@ TEST (active_transactions, vote_replays) // Open new account auto vote_open1 (std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, std::numeric_limits::max (), open1)); ASSERT_EQ (nano::vote_code::vote, node.active.vote (vote_open1)); - ASSERT_EQ (1, node.active.size ()); ASSERT_EQ (nano::vote_code::replay, node.active.vote (vote_open1)); ASSERT_TIMELY (3s, node.active.empty ()); ASSERT_EQ (nano::vote_code::replay, node.active.vote (vote_open1)); From 0e67166266827641d44f8b9064d4f288de2b6177 Mon Sep 17 00:00:00 2001 From: dsiganos Date: Thu, 1 Jul 2021 13:51:28 +0100 Subject: [PATCH 070/346] Double unit test timeout in github CI (#3363) Sometimes, the core_test and other tests, timeout when running in github CI. the tell tell sign of a timeout is the return code 124, which is returned by the timeout command. The CI computers are slow and as we add more and more tests we need to adjust this value to accommodate the slowness and the extra tests. I doubled the timeout so that there is less of a chance of failing due to timeout. --- ci/test.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ci/test.sh b/ci/test.sh index 1982c126f2..2495955552 100755 --- a/ci/test.sh +++ b/ci/test.sh @@ -2,9 +2,9 @@ build_dir=${1-${PWD}} if [[ ${TEST_USE_ROCKSDB-0} == 1 ]]; then - TIMEOUT_DEFAULT=720 + TIMEOUT_DEFAULT=1440 else - TIMEOUT_DEFAULT=360 + TIMEOUT_DEFAULT=720 fi BUSYBOX_BASH=${BUSYBOX_BASH-0} From def99da54387677d21527cbeecc80ae4012977b8 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Thu, 1 Jul 2021 18:39:40 +0100 Subject: [PATCH 071/346] Moving socket type entirely in to nano::socket class. This removes socket type tracking as parameters and on unrelated classes such as bootstrap_server. (#3359) --- nano/node/bootstrap/bootstrap_server.cpp | 32 ++++++++++++------------ nano/node/bootstrap/bootstrap_server.hpp | 1 - nano/node/network.cpp | 2 +- nano/node/socket.hpp | 11 ++++++++ nano/node/transport/tcp.cpp | 7 +++--- nano/node/transport/tcp.hpp | 3 +-- 6 files changed, 33 insertions(+), 23 deletions(-) diff --git a/nano/node/bootstrap/bootstrap_server.cpp b/nano/node/bootstrap/bootstrap_server.cpp index 606a91f1b1..16bc4d9c2a 100644 --- a/nano/node/bootstrap/bootstrap_server.cpp +++ b/nano/node/bootstrap/bootstrap_server.cpp @@ -112,11 +112,11 @@ nano::bootstrap_server::~bootstrap_server () { node->logger.try_log ("Exiting incoming TCP/bootstrap server"); } - if (type == nano::socket::type_t::bootstrap) + if (socket->type () == nano::socket::type_t::bootstrap) { --node->bootstrap.bootstrap_count; } - else if (type == nano::socket::type_t::realtime) + else if (socket->type () == nano::socket::type_t::realtime) { --node->bootstrap.realtime_count; // Clear temporary channel @@ -525,7 +525,7 @@ void nano::bootstrap_server::receive_node_id_handshake_action (boost::system::er auto request (std::make_unique (error, stream, header_a)); if (!error) { - if (type == nano::socket::type_t::undefined && !node->flags.disable_tcp_realtime) + if (socket->type () == nano::socket::type_t::undefined && !node->flags.disable_tcp_realtime) { add_request (std::unique_ptr (request.release ())); } @@ -616,19 +616,19 @@ class request_response_visitor : public nano::message_visitor } void keepalive (nano::keepalive const & message_a) override { - connection->node->network.tcp_message_manager.put_message (nano::tcp_message_item{ std::make_shared (message_a), connection->remote_endpoint, connection->remote_node_id, connection->socket, connection->type }); + connection->node->network.tcp_message_manager.put_message (nano::tcp_message_item{ std::make_shared (message_a), connection->remote_endpoint, connection->remote_node_id, connection->socket }); } void publish (nano::publish const & message_a) override { - connection->node->network.tcp_message_manager.put_message (nano::tcp_message_item{ std::make_shared (message_a), connection->remote_endpoint, connection->remote_node_id, connection->socket, connection->type }); + connection->node->network.tcp_message_manager.put_message (nano::tcp_message_item{ std::make_shared (message_a), connection->remote_endpoint, connection->remote_node_id, connection->socket }); } void confirm_req (nano::confirm_req const & message_a) override { - connection->node->network.tcp_message_manager.put_message (nano::tcp_message_item{ std::make_shared (message_a), connection->remote_endpoint, connection->remote_node_id, connection->socket, connection->type }); + connection->node->network.tcp_message_manager.put_message (nano::tcp_message_item{ std::make_shared (message_a), connection->remote_endpoint, connection->remote_node_id, connection->socket }); } void confirm_ack (nano::confirm_ack const & message_a) override { - connection->node->network.tcp_message_manager.put_message (nano::tcp_message_item{ std::make_shared (message_a), connection->remote_endpoint, connection->remote_node_id, connection->socket, connection->type }); + connection->node->network.tcp_message_manager.put_message (nano::tcp_message_item{ std::make_shared (message_a), connection->remote_endpoint, connection->remote_node_id, connection->socket }); } void bulk_pull (nano::bulk_pull const &) override { @@ -652,11 +652,11 @@ class request_response_visitor : public nano::message_visitor } void telemetry_req (nano::telemetry_req const & message_a) override { - connection->node->network.tcp_message_manager.put_message (nano::tcp_message_item{ std::make_shared (message_a), connection->remote_endpoint, connection->remote_node_id, connection->socket, connection->type }); + connection->node->network.tcp_message_manager.put_message (nano::tcp_message_item{ std::make_shared (message_a), connection->remote_endpoint, connection->remote_node_id, connection->socket }); } void telemetry_ack (nano::telemetry_ack const & message_a) override { - connection->node->network.tcp_message_manager.put_message (nano::tcp_message_item{ std::make_shared (message_a), connection->remote_endpoint, connection->remote_node_id, connection->socket, connection->type }); + connection->node->network.tcp_message_manager.put_message (nano::tcp_message_item{ std::make_shared (message_a), connection->remote_endpoint, connection->remote_node_id, connection->socket }); } void node_id_handshake (nano::node_id_handshake const & message_a) override { @@ -697,7 +697,7 @@ class request_response_visitor : public nano::message_visitor if (!connection->node->network.syn_cookies.validate (nano::transport::map_tcp_to_endpoint (connection->remote_endpoint), node_id, message_a.response->second) && node_id != connection->node->node_id.pub) { connection->remote_node_id = node_id; - connection->type = nano::socket::type_t::realtime; + connection->socket->type_set (nano::socket::type_t::realtime); ++connection->node->bootstrap.realtime_count; connection->finish_request_async (); } @@ -712,9 +712,9 @@ class request_response_visitor : public nano::message_visitor connection->finish_request_async (); } nano::account node_id (connection->remote_node_id); - nano::socket::type_t type (connection->type); + nano::socket::type_t type = connection->socket->type (); debug_assert (node_id.is_zero () || type == nano::socket::type_t::realtime); - connection->node->network.tcp_message_manager.put_message (nano::tcp_message_item{ std::make_shared (message_a), connection->remote_endpoint, connection->remote_node_id, connection->socket, connection->type }); + connection->node->network.tcp_message_manager.put_message (nano::tcp_message_item{ std::make_shared (message_a), connection->remote_endpoint, connection->remote_node_id, connection->socket }); } std::shared_ptr connection; }; @@ -754,15 +754,15 @@ void nano::bootstrap_server::run_next (nano::unique_lock & lock_a) bool nano::bootstrap_server::is_bootstrap_connection () { - if (type == nano::socket::type_t::undefined && !node->flags.disable_bootstrap_listener && node->bootstrap.bootstrap_count < node->config.bootstrap_connections_max) + if (socket->type () == nano::socket::type_t::undefined && !node->flags.disable_bootstrap_listener && node->bootstrap.bootstrap_count < node->config.bootstrap_connections_max) { ++node->bootstrap.bootstrap_count; - type = nano::socket::type_t::bootstrap; + socket->type_set (nano::socket::type_t::bootstrap); } - return type == nano::socket::type_t::bootstrap; + return socket->type () == nano::socket::type_t::bootstrap; } bool nano::bootstrap_server::is_realtime_connection () { - return type == nano::socket::type_t::realtime || type == nano::socket::type_t::realtime_response_server; + return socket->type () == nano::socket::type_t::realtime || socket->type () == nano::socket::type_t::realtime_response_server; } diff --git a/nano/node/bootstrap/bootstrap_server.hpp b/nano/node/bootstrap/bootstrap_server.hpp index 767b7e79de..7c0e424bdd 100644 --- a/nano/node/bootstrap/bootstrap_server.hpp +++ b/nano/node/bootstrap/bootstrap_server.hpp @@ -64,7 +64,6 @@ class bootstrap_server final : public std::enable_shared_from_this> requests; std::atomic stopped{ false }; - std::atomic type{ nano::socket::type_t::undefined }; // Remote enpoint used to remove response channel even after socket closing nano::tcp_endpoint remote_endpoint{ boost::asio::ip::address_v6::any (), 0 }; nano::account remote_node_id{ 0 }; diff --git a/nano/node/network.cpp b/nano/node/network.cpp index a2a28305bd..9f8f344bb0 100644 --- a/nano/node/network.cpp +++ b/nano/node/network.cpp @@ -925,7 +925,7 @@ nano::tcp_message_item nano::tcp_message_manager::get_message () } else { - result = nano::tcp_message_item{ std::make_shared (), nano::tcp_endpoint (boost::asio::ip::address_v6::any (), 0), 0, nullptr, nano::socket::type_t::undefined }; + result = nano::tcp_message_item{ nullptr, nano::tcp_endpoint (boost::asio::ip::address_v6::any (), 0), 0, nullptr }; } lock.unlock (); producer_condition.notify_one (); diff --git a/nano/node/socket.hpp b/nano/node/socket.hpp index 6d71d278ef..5db647141d 100644 --- a/nano/node/socket.hpp +++ b/nano/node/socket.hpp @@ -68,6 +68,14 @@ class socket : public std::enable_shared_from_this { return queue_size >= queue_size_max * 2; } + type_t type () const + { + return type_m; + }; + void type_set (type_t type_a) + { + type_m = type_a; + } protected: /** Holds the buffer and callback for queued writes */ @@ -99,6 +107,9 @@ class socket : public std::enable_shared_from_this void stop_timer (); void checkup (); +private: + type_t type_m{ type_t::undefined }; + public: static size_t constexpr queue_size_max = 128; }; diff --git a/nano/node/transport/tcp.cpp b/nano/node/transport/tcp.cpp index 964f11abde..910e4f47a2 100644 --- a/nano/node/transport/tcp.cpp +++ b/nano/node/transport/tcp.cpp @@ -283,13 +283,14 @@ void nano::transport::tcp_channels::process_messages () auto item (node.network.tcp_message_manager.get_message ()); if (item.message != nullptr) { - process_message (*item.message, item.endpoint, item.node_id, item.socket, item.type); + process_message (*item.message, item.endpoint, item.node_id, item.socket); } } } -void nano::transport::tcp_channels::process_message (nano::message const & message_a, nano::tcp_endpoint const & endpoint_a, nano::account const & node_id_a, std::shared_ptr const & socket_a, nano::socket::type_t type_a) +void nano::transport::tcp_channels::process_message (nano::message const & message_a, nano::tcp_endpoint const & endpoint_a, nano::account const & node_id_a, std::shared_ptr const & socket_a) { + auto type_a = socket_a->type (); if (!stopped && message_a.header.version_using >= protocol_constants ().protocol_version_min ()) { auto channel (node.network.find_channel (nano::transport::map_tcp_to_endpoint (endpoint_a))); @@ -691,7 +692,7 @@ void nano::transport::tcp_channels::start_tcp_receive_node_id (std::shared_ptrtype = nano::socket::type_t::realtime_response_server; + response_server->socket->type_set (nano::socket::type_t::realtime_response_server); response_server->remote_node_id = channel_a->get_node_id (); response_server->receive (); node_l->network.tcp_channels.remove_node_id_handshake_socket (socket_l); diff --git a/nano/node/transport/tcp.hpp b/nano/node/transport/tcp.hpp index e9241059b1..0fae3837db 100644 --- a/nano/node/transport/tcp.hpp +++ b/nano/node/transport/tcp.hpp @@ -24,7 +24,6 @@ class tcp_message_item final nano::tcp_endpoint endpoint; nano::account node_id; std::shared_ptr socket; - nano::socket::type_t type; }; namespace transport { @@ -92,7 +91,7 @@ namespace transport void start (); void stop (); void process_messages (); - void process_message (nano::message const &, nano::tcp_endpoint const &, nano::account const &, std::shared_ptr const &, nano::socket::type_t); + void process_message (nano::message const &, nano::tcp_endpoint const &, nano::account const &, std::shared_ptr const &); bool max_ip_connections (nano::tcp_endpoint const &); // Should we reach out to this endpoint with a keepalive message bool reachout (nano::endpoint const &); From f594d0ba680f95f36ff8db4e643b5b0dc2378299 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Sat, 3 Jul 2021 20:00:39 +0100 Subject: [PATCH 072/346] Message sink interface (#3364) This change is an application of dependency injection to remove coupling between the tcp_channels and udp_channels classes and the network class. An interface called message_sink has been created and an implementation that forwards network message matching existing behavior has been put it its place. --- nano/core_test/active_transactions.cpp | 4 +- nano/core_test/confirmation_height.cpp | 8 ++-- nano/core_test/network.cpp | 8 ++-- nano/core_test/node.cpp | 58 +++++++++++++------------- nano/core_test/telemetry.cpp | 4 +- nano/core_test/websocket.cpp | 2 +- nano/node/network.cpp | 5 ++- nano/node/network.hpp | 7 +++- nano/node/transport/tcp.cpp | 11 ++--- nano/node/transport/tcp.hpp | 3 +- nano/node/transport/udp.cpp | 19 +++++---- nano/node/transport/udp.hpp | 3 +- 12 files changed, 72 insertions(+), 60 deletions(-) diff --git a/nano/core_test/active_transactions.cpp b/nano/core_test/active_transactions.cpp index c62124d05c..5801a08f43 100644 --- a/nano/core_test/active_transactions.cpp +++ b/nano/core_test/active_transactions.cpp @@ -256,11 +256,11 @@ TEST (active_transactions, inactive_votes_cache_fork) node.vote_processor.vote (vote, std::make_shared (node)); auto channel1 (node.network.udp_channels.create (node.network.endpoint ())); ASSERT_TIMELY (5s, node.active.inactive_votes_cache_size () == 1); - node.network.process_message (nano::publish (send2), channel1); + node.network.inbound (nano::publish (send2), channel1); node.block_processor.flush (); ASSERT_NE (nullptr, node.block (send2->hash ())); node.scheduler.flush (); // Start election, otherwise conflicting block won't be inserted into election - node.network.process_message (nano::publish (send1), channel1); + node.network.inbound (nano::publish (send1), channel1); node.block_processor.flush (); bool confirmed (false); system.deadline_set (5s); diff --git a/nano/core_test/confirmation_height.cpp b/nano/core_test/confirmation_height.cpp index 9ee02d31aa..77c890f6e4 100644 --- a/nano/core_test/confirmation_height.cpp +++ b/nano/core_test/confirmation_height.cpp @@ -662,19 +662,19 @@ TEST (confirmation_height, conflict_rollback_cemented) auto send2 (std::make_shared (genesis.hash (), key2.pub, nano::genesis_amount - 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (genesis.hash ()))); nano::publish publish2 (send2); auto channel1 (node1->network.udp_channels.create (node1->network.endpoint ())); - node1->network.process_message (publish1, channel1); + node1->network.inbound (publish1, channel1); node1->block_processor.flush (); node1->scheduler.flush (); auto channel2 (node2->network.udp_channels.create (node1->network.endpoint ())); - node2->network.process_message (publish2, channel2); + node2->network.inbound (publish2, channel2); node2->block_processor.flush (); node2->scheduler.flush (); ASSERT_EQ (1, node1->active.size ()); ASSERT_EQ (1, node2->active.size ()); system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - node1->network.process_message (publish2, channel1); + node1->network.inbound (publish2, channel1); node1->block_processor.flush (); - node2->network.process_message (publish1, channel2); + node2->network.inbound (publish1, channel2); node2->block_processor.flush (); auto election (node2->active.election (nano::qualified_root (genesis.hash (), genesis.hash ()))); ASSERT_NE (nullptr, election); diff --git a/nano/core_test/network.cpp b/nano/core_test/network.cpp index 01b8e9877e..80d78a4219 100644 --- a/nano/core_test/network.cpp +++ b/nano/core_test/network.cpp @@ -361,7 +361,7 @@ TEST (receivable_processor, confirm_insufficient_pos) nano::keypair key1; auto vote (std::make_shared (key1.pub, key1.prv, 0, block1)); nano::confirm_ack con1 (vote); - node1.network.process_message (con1, node1.network.udp_channels.create (node1.network.endpoint ())); + node1.network.inbound (con1, node1.network.udp_channels.create (node1.network.endpoint ())); } TEST (receivable_processor, confirm_sufficient_pos) @@ -375,7 +375,7 @@ TEST (receivable_processor, confirm_sufficient_pos) node1.scheduler.activate (nano::dev_genesis_key.pub, node1.store.tx_begin_read ()); auto vote (std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, 0, block1)); nano::confirm_ack con1 (vote); - node1.network.process_message (con1, node1.network.udp_channels.create (node1.network.endpoint ())); + node1.network.inbound (con1, node1.network.udp_channels.create (node1.network.endpoint ())); } TEST (receivable_processor, send_with_receive) @@ -989,10 +989,10 @@ TEST (network, duplicate_revert_publish) auto channel = nano::establish_tcp (system, *other_node, node.network.endpoint ()); ASSERT_NE (nullptr, channel); ASSERT_EQ (0, publish.digest); - node.network.process_message (publish, channel); + node.network.inbound (publish, channel); ASSERT_TRUE (node.network.publish_filter.apply (bytes.data (), bytes.size ())); publish.digest = digest; - node.network.process_message (publish, channel); + node.network.inbound (publish, channel); ASSERT_FALSE (node.network.publish_filter.apply (bytes.data (), bytes.size ())); } diff --git a/nano/core_test/node.cpp b/nano/core_test/node.cpp index bdeaa65a5e..7099902fd4 100644 --- a/nano/core_test/node.cpp +++ b/nano/core_test/node.cpp @@ -363,7 +363,7 @@ TEST (node, receive_gap) .build_shared (); node1.work_generate_blocking (*block); nano::publish message (block); - node1.network.process_message (message, node1.network.udp_channels.create (node1.network.endpoint ())); + node1.network.inbound (message, node1.network.udp_channels.create (node1.network.endpoint ())); node1.block_processor.flush (); ASSERT_EQ (1, node1.gap_cache.size ()); } @@ -1210,19 +1210,19 @@ TEST (node, fork_flip) .build_shared (); nano::publish publish2 (send2); auto channel1 (node1.network.udp_channels.create (node1.network.endpoint ())); - node1.network.process_message (publish1, channel1); + node1.network.inbound (publish1, channel1); node1.block_processor.flush (); node1.scheduler.flush (); auto channel2 (node2.network.udp_channels.create (node1.network.endpoint ())); - node2.network.process_message (publish2, channel2); + node2.network.inbound (publish2, channel2); node2.block_processor.flush (); node2.scheduler.flush (); ASSERT_EQ (1, node1.active.size ()); ASSERT_EQ (1, node2.active.size ()); system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - node1.network.process_message (publish2, channel1); + node1.network.inbound (publish2, channel1); node1.block_processor.flush (); - node2.network.process_message (publish1, channel2); + node2.network.inbound (publish1, channel2); node2.block_processor.flush (); auto election1 (node2.active.election (nano::qualified_root (genesis.hash (), genesis.hash ()))); ASSERT_NE (nullptr, election1); @@ -1285,9 +1285,9 @@ TEST (node, fork_multi_flip) .work (*system.work.generate (publish2.block->hash ())) .build_shared (); nano::publish publish3 (send3); - node1.network.process_message (publish1, node1.network.udp_channels.create (node1.network.endpoint ())); - node2.network.process_message (publish2, node2.network.udp_channels.create (node2.network.endpoint ())); - node2.network.process_message (publish3, node2.network.udp_channels.create (node2.network.endpoint ())); + node1.network.inbound (publish1, node1.network.udp_channels.create (node1.network.endpoint ())); + node2.network.inbound (publish2, node2.network.udp_channels.create (node2.network.endpoint ())); + node2.network.inbound (publish3, node2.network.udp_channels.create (node2.network.endpoint ())); node1.block_processor.flush (); node1.scheduler.flush (); node2.block_processor.flush (); @@ -1295,10 +1295,10 @@ TEST (node, fork_multi_flip) ASSERT_EQ (1, node1.active.size ()); ASSERT_EQ (1, node2.active.size ()); system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - node1.network.process_message (publish2, node1.network.udp_channels.create (node1.network.endpoint ())); - node1.network.process_message (publish3, node1.network.udp_channels.create (node1.network.endpoint ())); + node1.network.inbound (publish2, node1.network.udp_channels.create (node1.network.endpoint ())); + node1.network.inbound (publish3, node1.network.udp_channels.create (node1.network.endpoint ())); node1.block_processor.flush (); - node2.network.process_message (publish1, node2.network.udp_channels.create (node2.network.endpoint ())); + node2.network.inbound (publish1, node2.network.udp_channels.create (node2.network.endpoint ())); node2.block_processor.flush (); auto election1 (node2.active.election (nano::qualified_root (genesis.hash (), genesis.hash ()))); ASSERT_NE (nullptr, election1); @@ -1380,7 +1380,7 @@ TEST (node, fork_open) .build_shared (); nano::publish publish1 (send1); auto channel1 (node1.network.udp_channels.create (node1.network.endpoint ())); - node1.network.process_message (publish1, channel1); + node1.network.inbound (publish1, channel1); node1.block_processor.flush (); node1.scheduler.flush (); auto election = node1.active.election (publish1.block->qualified_root ()); @@ -1396,7 +1396,7 @@ TEST (node, fork_open) .work (*system.work.generate (key1.pub)) .build_shared (); nano::publish publish2 (open1); - node1.network.process_message (publish2, channel1); + node1.network.inbound (publish2, channel1); node1.block_processor.flush (); node1.scheduler.flush (); ASSERT_EQ (1, node1.active.size ()); @@ -1409,7 +1409,7 @@ TEST (node, fork_open) .build_shared (); nano::publish publish3 (open2); system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - node1.network.process_message (publish3, channel1); + node1.network.inbound (publish3, channel1); node1.block_processor.flush (); node1.scheduler.flush (); election = node1.active.election (publish3.block->qualified_root ()); @@ -2714,14 +2714,14 @@ TEST (node, local_votes_cache) nano::confirm_req message1 (send1); nano::confirm_req message2 (send2); auto channel (node.network.udp_channels.create (node.network.endpoint ())); - node.network.process_message (message1, channel); + node.network.inbound (message1, channel); ASSERT_TIMELY (3s, node.stats.count (nano::stat::type::requests, nano::stat::detail::requests_generated_votes) == 1); - node.network.process_message (message2, channel); + node.network.inbound (message2, channel); ASSERT_TIMELY (3s, node.stats.count (nano::stat::type::requests, nano::stat::detail::requests_generated_votes) == 2); for (auto i (0); i < 100; ++i) { - node.network.process_message (message1, channel); - node.network.process_message (message2, channel); + node.network.inbound (message1, channel); + node.network.inbound (message2, channel); } for (int i = 0; i < 4; ++i) { @@ -2737,7 +2737,7 @@ TEST (node, local_votes_cache) nano::confirm_req message3 (send3); for (auto i (0); i < 100; ++i) { - node.network.process_message (message3, channel); + node.network.inbound (message3, channel); } for (int i = 0; i < 4; ++i) { @@ -2795,26 +2795,26 @@ TEST (node, local_votes_cache_batch) nano::confirm_req message (batch); auto channel (node.network.udp_channels.create (node.network.endpoint ())); // Generates and sends one vote for both hashes which is then cached - node.network.process_message (message, channel); + node.network.inbound (message, channel); ASSERT_TIMELY (3s, node.stats.count (nano::stat::type::message, nano::stat::detail::confirm_ack, nano::stat::dir::out) == 1); ASSERT_EQ (1, node.stats.count (nano::stat::type::message, nano::stat::detail::confirm_ack, nano::stat::dir::out)); ASSERT_FALSE (node.history.votes (send2->root (), send2->hash ()).empty ()); ASSERT_FALSE (node.history.votes (receive1->root (), receive1->hash ()).empty ()); // Only one confirm_ack should be sent if all hashes are part of the same vote - node.network.process_message (message, channel); + node.network.inbound (message, channel); ASSERT_TIMELY (3s, node.stats.count (nano::stat::type::message, nano::stat::detail::confirm_ack, nano::stat::dir::out) == 2); ASSERT_EQ (2, node.stats.count (nano::stat::type::message, nano::stat::detail::confirm_ack, nano::stat::dir::out)); // Test when votes are different node.history.erase (send2->root ()); node.history.erase (receive1->root ()); - node.network.process_message (nano::confirm_req (send2->hash (), send2->root ()), channel); + node.network.inbound (nano::confirm_req (send2->hash (), send2->root ()), channel); ASSERT_TIMELY (3s, node.stats.count (nano::stat::type::message, nano::stat::detail::confirm_ack, nano::stat::dir::out) == 3); ASSERT_EQ (3, node.stats.count (nano::stat::type::message, nano::stat::detail::confirm_ack, nano::stat::dir::out)); - node.network.process_message (nano::confirm_req (receive1->hash (), receive1->root ()), channel); + node.network.inbound (nano::confirm_req (receive1->hash (), receive1->root ()), channel); ASSERT_TIMELY (3s, node.stats.count (nano::stat::type::message, nano::stat::detail::confirm_ack, nano::stat::dir::out) == 4); ASSERT_EQ (4, node.stats.count (nano::stat::type::message, nano::stat::detail::confirm_ack, nano::stat::dir::out)); // There are two different votes, so both should be sent in response - node.network.process_message (message, channel); + node.network.inbound (message, channel); ASSERT_TIMELY (3s, node.stats.count (nano::stat::type::message, nano::stat::detail::confirm_ack, nano::stat::dir::out) == 6); ASSERT_EQ (6, node.stats.count (nano::stat::type::message, nano::stat::detail::confirm_ack, nano::stat::dir::out)); } @@ -2830,7 +2830,7 @@ TEST (node, local_votes_cache_generate_new_vote) // Repsond with cached vote nano::confirm_req message1 (genesis.open); auto channel (node.network.udp_channels.create (node.network.endpoint ())); - node.network.process_message (message1, channel); + node.network.inbound (message1, channel); ASSERT_TIMELY (3s, !node.history.votes (genesis.open->root (), genesis.open->hash ()).empty ()); auto votes1 (node.history.votes (genesis.open->root (), genesis.open->hash ())); ASSERT_EQ (1, votes1.size ()); @@ -2850,7 +2850,7 @@ TEST (node, local_votes_cache_generate_new_vote) // One of the hashes is cached std::vector> roots_hashes{ std::make_pair (genesis.open->hash (), genesis.open->root ()), std::make_pair (send1->hash (), send1->root ()) }; nano::confirm_req message2 (roots_hashes); - node.network.process_message (message2, channel); + node.network.inbound (message2, channel); ASSERT_TIMELY (3s, !node.history.votes (send1->root (), send1->hash ()).empty ()); auto votes2 (node.history.votes (send1->root (), send1->hash ())); ASSERT_EQ (1, votes2.size ()); @@ -3259,13 +3259,13 @@ TEST (node, fork_election_invalid_block_signature) .sign (nano::dev_genesis_key.prv, 0) // Invalid signature .build_shared (); auto channel1 (node1.network.udp_channels.create (node1.network.endpoint ())); - node1.network.process_message (nano::publish (send1), channel1); + node1.network.inbound (nano::publish (send1), channel1); ASSERT_TIMELY (5s, node1.active.active (send1->qualified_root ())); auto election (node1.active.election (send1->qualified_root ())); ASSERT_NE (nullptr, election); ASSERT_EQ (1, election->blocks ().size ()); - node1.network.process_message (nano::publish (send3), channel1); - node1.network.process_message (nano::publish (send2), channel1); + node1.network.inbound (nano::publish (send3), channel1); + node1.network.inbound (nano::publish (send2), channel1); ASSERT_TIMELY (3s, election->blocks ().size () > 1); ASSERT_EQ (election->blocks ()[send2->hash ()]->block_signature (), send2->block_signature ()); } diff --git a/nano/core_test/telemetry.cpp b/nano/core_test/telemetry.cpp index 4f3b819800..9c46221842 100644 --- a/nano/core_test/telemetry.cpp +++ b/nano/core_test/telemetry.cpp @@ -285,7 +285,7 @@ TEST (telemetry, receive_from_non_listening_channel) nano::system system; auto node = system.add_node (); nano::telemetry_ack message (nano::telemetry_data{}); - node->network.process_message (message, node->network.udp_channels.create (node->network.endpoint ())); + node->network.inbound (message, node->network.udp_channels.create (node->network.endpoint ())); // We have not sent a telemetry_req message to this endpoint, so shouldn't count telemetry_ack received from it. ASSERT_EQ (node->telemetry->telemetry_data_size (), 0); } @@ -632,7 +632,7 @@ TEST (telemetry, remove_peer_invalid_signature) // Change anything so that the signed message is incorrect telemetry_data.block_count = 0; auto telemetry_ack = nano::telemetry_ack (telemetry_data); - node->network.process_message (telemetry_ack, channel); + node->network.inbound (telemetry_ack, channel); ASSERT_TIMELY (10s, node->stats.count (nano::stat::type::telemetry, nano::stat::detail::invalid_signature) > 0); ASSERT_NO_ERROR (system.poll_until_true (3s, [&node, address = channel->get_endpoint ().address ()] () -> bool { diff --git a/nano/core_test/websocket.cpp b/nano/core_test/websocket.cpp index a98b479974..100df8c507 100644 --- a/nano/core_test/websocket.cpp +++ b/nano/core_test/websocket.cpp @@ -144,7 +144,7 @@ TEST (websocket, stopped_election) auto send1 (std::make_shared (genesis.hash (), key1.pub, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (genesis.hash ()))); nano::publish publish1 (send1); auto channel1 (node1->network.udp_channels.create (node1->network.endpoint ())); - node1->network.process_message (publish1, channel1); + node1->network.inbound (publish1, channel1); node1->block_processor.flush (); ASSERT_TIMELY (1s, node1->active.election (send1->qualified_root ())); node1->active.erase (*send1); diff --git a/nano/node/network.cpp b/nano/node/network.cpp index 9f8f344bb0..3e4daa2e76 100644 --- a/nano/node/network.cpp +++ b/nano/node/network.cpp @@ -13,14 +13,15 @@ nano::network::network (nano::node & node_a, uint16_t port_a) : syn_cookies (node_a.network_params.node.max_peers_per_ip), + inbound{ [this] (nano::message const & message, std::shared_ptr const & channel) { process_message (message, channel); } }, buffer_container (node_a.stats, nano::network::buffer_size, 4096), // 2Mb receive buffer resolver (node_a.io_ctx), limiter (node_a.config.bandwidth_limit_burst_ratio, node_a.config.bandwidth_limit), tcp_message_manager (node_a.config.tcp_incoming_connections_max), node (node_a), publish_filter (256 * 1024), - udp_channels (node_a, port_a), - tcp_channels (node_a), + udp_channels (node_a, port_a, inbound), + tcp_channels (node_a, inbound), port (port_a), disconnect_observer ([] () {}) { diff --git a/nano/node/network.hpp b/nano/node/network.hpp index 6ebd1a65eb..d42f304a75 100644 --- a/nano/node/network.hpp +++ b/nano/node/network.hpp @@ -154,7 +154,6 @@ class network final void broadcast_confirm_req_many (std::deque, std::shared_ptr>>>>, std::function = nullptr, unsigned = broadcast_interval_ms); std::shared_ptr find_node_id (nano::account const &); std::shared_ptr find_channel (nano::endpoint const &); - void process_message (nano::message const &, std::shared_ptr const &); bool not_a_peer (nano::endpoint const &, bool); // Should we reach out to this endpoint with a keepalive message bool reachout (nano::endpoint const &, bool = false); @@ -180,6 +179,12 @@ class network final bool empty () const; void erase (nano::transport::channel const &); void set_bandwidth_params (double, size_t); + +private: + void process_message (nano::message const &, std::shared_ptr const &); + +public: + std::function const &)> inbound; nano::message_buffer_manager buffer_container; boost::asio::ip::udp::resolver resolver; std::vector packet_processing_threads; diff --git a/nano/node/transport/tcp.cpp b/nano/node/transport/tcp.cpp index 910e4f47a2..31bedb62e6 100644 --- a/nano/node/transport/tcp.cpp +++ b/nano/node/transport/tcp.cpp @@ -110,8 +110,9 @@ void nano::transport::channel_tcp::set_endpoint () } } -nano::transport::tcp_channels::tcp_channels (nano::node & node_a) : - node (node_a) +nano::transport::tcp_channels::tcp_channels (nano::node & node, std::function const &)> sink) : + node{ node }, + sink{ sink } { } @@ -296,14 +297,14 @@ void nano::transport::tcp_channels::process_message (nano::message const & messa auto channel (node.network.find_channel (nano::transport::map_tcp_to_endpoint (endpoint_a))); if (channel) { - node.network.process_message (message_a, channel); + sink (message_a, channel); } else { channel = node.network.find_node_id (node_id_a); if (channel) { - node.network.process_message (message_a, channel); + sink (message_a, channel); } else if (!node.network.excluded_peers.check (endpoint_a)) { @@ -322,7 +323,7 @@ void nano::transport::tcp_channels::process_message (nano::message const & messa { insert (temporary_channel, socket_a, nullptr); } - node.network.process_message (message_a, temporary_channel); + sink (message_a, temporary_channel); } else { diff --git a/nano/node/transport/tcp.hpp b/nano/node/transport/tcp.hpp index 0fae3837db..8fde8f2a8e 100644 --- a/nano/node/transport/tcp.hpp +++ b/nano/node/transport/tcp.hpp @@ -76,7 +76,7 @@ namespace transport friend class telemetry_simultaneous_requests_Test; public: - tcp_channels (nano::node &); + tcp_channels (nano::node &, std::function const &)> = nullptr); bool insert (std::shared_ptr const &, std::shared_ptr const &, std::shared_ptr const &); void erase (nano::tcp_endpoint const &); size_t size () const; @@ -112,6 +112,7 @@ namespace transport nano::node & node; private: + std::function const &)> sink; class endpoint_tag { }; diff --git a/nano/node/transport/udp.cpp b/nano/node/transport/udp.cpp index 9007eff165..370975a084 100644 --- a/nano/node/transport/udp.cpp +++ b/nano/node/transport/udp.cpp @@ -61,9 +61,10 @@ std::string nano::transport::channel_udp::to_string () const return boost::str (boost::format ("%1%") % endpoint); } -nano::transport::udp_channels::udp_channels (nano::node & node_a, uint16_t port_a) : - node (node_a), - strand (node_a.io_ctx.get_executor ()) +nano::transport::udp_channels::udp_channels (nano::node & node_a, uint16_t port_a, std::function const &)> sink) : + node{ node_a }, + strand{ node_a.io_ctx.get_executor () }, + sink{ sink } { if (!node.flags.disable_udp) { @@ -364,9 +365,10 @@ namespace class udp_message_visitor : public nano::message_visitor { public: - udp_message_visitor (nano::node & node_a, nano::endpoint const & endpoint_a) : - node (node_a), - endpoint (endpoint_a) + udp_message_visitor (nano::node & node_a, nano::endpoint const & endpoint_a, std::function const &)> sink) : + node{ node_a }, + endpoint{ endpoint_a }, + sink{ sink } { } void keepalive (nano::keepalive const & message_a) override @@ -512,11 +514,12 @@ class udp_message_visitor : public nano::message_visitor node.network.udp_channels.modify (find_channel, [] (std::shared_ptr const & channel_a) { channel_a->set_last_packet_received (std::chrono::steady_clock::now ()); }); - node.network.process_message (message_a, find_channel); + sink (message_a, find_channel); } } nano::node & node; nano::endpoint endpoint; + std::function const &)> sink; }; } @@ -537,7 +540,7 @@ void nano::transport::udp_channels::receive_action (nano::message_buffer * data_ } if (allowed_sender) { - udp_message_visitor visitor (node, data_a->endpoint); + udp_message_visitor visitor (node, data_a->endpoint, sink); nano::message_parser parser (node.network.publish_filter, node.block_uniquer, node.vote_uniquer, visitor, node.work); parser.deserialize_buffer (data_a->buffer, data_a->size); if (parser.status == nano::message_parser::parse_status::success) diff --git a/nano/node/transport/udp.hpp b/nano/node/transport/udp.hpp index 4806976771..691f735689 100644 --- a/nano/node/transport/udp.hpp +++ b/nano/node/transport/udp.hpp @@ -75,7 +75,7 @@ namespace transport friend class nano::transport::channel_udp; public: - udp_channels (nano::node &, uint16_t); + udp_channels (nano::node &, uint16_t, std::function const &)> sink); std::shared_ptr insert (nano::endpoint const &, unsigned); void erase (nano::endpoint const &); size_t size () const; @@ -106,6 +106,7 @@ namespace transport void list (std::deque> &, uint8_t = 0); void modify (std::shared_ptr const &, std::function const &)>); nano::node & node; + std::function const &)> sink; private: void close_socket (); From f27162531ef5e9426e50afddf6711420e1dd225e Mon Sep 17 00:00:00 2001 From: dsiganos Date: Sat, 3 Jul 2021 21:02:54 +0100 Subject: [PATCH 073/346] Fix race condition in unit test websocket.bootstrap (#3365) --- nano/core_test/websocket.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nano/core_test/websocket.cpp b/nano/core_test/websocket.cpp index 100df8c507..889a9bc692 100644 --- a/nano/core_test/websocket.cpp +++ b/nano/core_test/websocket.cpp @@ -724,7 +724,7 @@ TEST (websocket, bootstrap) // Start bootstrap attempt node1->bootstrap_initiator.bootstrap (true, "123abc"); - ASSERT_NE (nullptr, node1->bootstrap_initiator.current_attempt ()); + ASSERT_TIMELY (5s, nullptr == node1->bootstrap_initiator.current_attempt ()); // Wait for the bootstrap notification ASSERT_TIMELY (5s, future.wait_for (0s) == std::future_status::ready); From 2e838b448587258d7b6b26e8de4e983510bc7f30 Mon Sep 17 00:00:00 2001 From: theohax <81556890+theohax@users.noreply.github.com> Date: Tue, 6 Jul 2021 16:45:25 +0300 Subject: [PATCH 074/346] Depth-first search ledger walking (#3324) * Senders discovery draft * DFS draft without checkpoints * DFS algo improvement attempt * DFS algo ++ * Latest DFS changes * Self-contain DFS traversal algorithm and introduce unit tests for it * Take out test code * Fix build * Address code review; use dependent_blocks_visitor to track block dependencies * Add more ledger_walker unit tests * Formatting * Add diskhash as a git submodule and dependency of nano-node Signed-off-by: theohax * Use diskhash in the ledger walker implementation Signed-off-by: theohax * Fix formatting Signed-off-by: theohax * Add todo note Signed-off-by: theohax * Fix format Signed-off-by: theohax * Adding submodules through get, not just .gitmodules * Build diskhash with CMake instead of make Signed-off-by: theohax * Use hybrid diskhash/in-memory-hash for ledger forward and backwards walking * Build diskhash as static lib instead of shared * Make ledger walker's diskhash key size larger to accomodate stringified uint64s * Address code review -- move null block check to call site Co-authored-by: clemahieu --- .gitmodules | 3 + CMakeLists.txt | 4 + diskhash | 1 + nano/core_test/CMakeLists.txt | 1 + nano/core_test/ledger_walker.cpp | 220 +++++++++++++++++++++++++++++++ nano/node/CMakeLists.txt | 3 + nano/node/ledger_walker.cpp | 175 ++++++++++++++++++++++++ nano/node/ledger_walker.hpp | 60 +++++++++ 8 files changed, 467 insertions(+) create mode 160000 diskhash create mode 100644 nano/core_test/ledger_walker.cpp create mode 100644 nano/node/ledger_walker.cpp create mode 100644 nano/node/ledger_walker.hpp diff --git a/.gitmodules b/.gitmodules index 47b40b9ee9..a59cedb4b1 100644 --- a/.gitmodules +++ b/.gitmodules @@ -27,3 +27,6 @@ path = rocksdb url = https://github.com/nanocurrency/rocksdb.git branch = 6.13.3 +[submodule "diskhash"] + path = diskhash + url = https://github.com/luispedro/diskhash.git diff --git a/CMakeLists.txt b/CMakeLists.txt index c279bfcefe..dbacf14f6d 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -378,6 +378,10 @@ list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/Modules") find_package(Boost 1.70.0 REQUIRED COMPONENTS filesystem log log_setup thread program_options system) +# diskhash +add_library(diskhash STATIC ${CMAKE_SOURCE_DIR}/diskhash/src/diskhash.c) +include_directories(diskhash/src) + # RocksDB include_directories(rocksdb/include) set(USE_RTTI diff --git a/diskhash b/diskhash new file mode 160000 index 0000000000..4fe2547bad --- /dev/null +++ b/diskhash @@ -0,0 +1 @@ +Subproject commit 4fe2547bad3e1bc95e9a9d5df12a6e3913b27574 diff --git a/nano/core_test/CMakeLists.txt b/nano/core_test/CMakeLists.txt index 220dfb8deb..65b3cb6962 100644 --- a/nano/core_test/CMakeLists.txt +++ b/nano/core_test/CMakeLists.txt @@ -20,6 +20,7 @@ add_executable( gap_cache.cpp ipc.cpp ledger.cpp + ledger_walker.cpp locks.cpp logger.cpp message.cpp diff --git a/nano/core_test/ledger_walker.cpp b/nano/core_test/ledger_walker.cpp new file mode 100644 index 0000000000..cf8b60a1c3 --- /dev/null +++ b/nano/core_test/ledger_walker.cpp @@ -0,0 +1,220 @@ +#include +#include +#include + +#include + +#include + +using namespace std::chrono_literals; + +TEST (ledger_walker, genesis_block) +{ + nano::system system{}; + const auto node = system.add_node (); + + nano::ledger_walker ledger_walker{ node->ledger }; + + std::size_t walked_blocks_count = 0; + ledger_walker.walk_backward (nano::genesis_hash, + [&] (const auto & block) { + ++walked_blocks_count; + EXPECT_EQ (block->hash (), nano::genesis_hash); + }); + + EXPECT_EQ (walked_blocks_count, 1); + + walked_blocks_count = 0; + ledger_walker.walk (nano::genesis_hash, + [&] (const auto & block) { + ++walked_blocks_count; + EXPECT_EQ (block->hash (), nano::genesis_hash); + }); + + EXPECT_EQ (walked_blocks_count, 1); +} + +namespace nano +{ +TEST (ledger_walker, genesis_account_longer) +{ + nano::system system{}; + nano::node_config node_config (nano::get_available_port (), system.logging); + node_config.enable_voting = true; + node_config.receive_minimum = 1; + + const auto node = system.add_node (node_config); + + nano::ledger_walker ledger_walker{ node->ledger }; + EXPECT_TRUE (ledger_walker.walked_blocks.empty ()); + EXPECT_EQ (1, ledger_walker.walked_blocks.bucket_count ()); + EXPECT_TRUE (ledger_walker.blocks_to_walk.empty ()); + + const auto get_number_of_walked_blocks = [&ledger_walker] (const auto & start_block_hash) { + std::size_t walked_blocks_count = 0; + ledger_walker.walk_backward (start_block_hash, + [&] (const auto & block) { + ++walked_blocks_count; + }); + + return walked_blocks_count; + }; + + const auto transaction = node->ledger.store.tx_begin_read (); + nano::account_info genesis_account_info{}; + ASSERT_FALSE (node->ledger.store.account.get (transaction, nano::nano_dev_account, genesis_account_info)); + EXPECT_EQ (get_number_of_walked_blocks (genesis_account_info.open_block), 1); + EXPECT_EQ (get_number_of_walked_blocks (genesis_account_info.head), 1); + + system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + for (auto itr = 1; itr <= 5; ++itr) + { + const auto send = system.wallet (0)->send_action (nano::dev_genesis_key.pub, nano::dev_genesis_key.pub, 1); + ASSERT_TRUE (send); + EXPECT_EQ (get_number_of_walked_blocks (send->hash ()), 1 + itr * 2 - 1); + ASSERT_TIMELY (3s, 1 + itr * 2 == node->ledger.cache.cemented_count); + ASSERT_FALSE (node->ledger.store.account.get (transaction, nano::nano_dev_account, genesis_account_info)); + // TODO: check issue with account head + // EXPECT_EQ(get_number_of_walked_blocks (genesis_account_info.head), 1 + itr * 2); + } + + EXPECT_TRUE (ledger_walker.walked_blocks.empty ()); + EXPECT_EQ (1, ledger_walker.walked_blocks.bucket_count ()); + EXPECT_TRUE (ledger_walker.blocks_to_walk.empty ()); +} + +} + +TEST (ledger_walker, cross_account) +{ + nano::system system{}; + nano::node_config node_config (nano::get_available_port (), system.logging); + node_config.enable_voting = true; + node_config.receive_minimum = 1; + + const auto node = system.add_node (node_config); + + system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + ASSERT_TRUE (system.wallet (0)->send_action (nano::dev_genesis_key.pub, nano::dev_genesis_key.pub, 1)); + ASSERT_TIMELY (3s, 3 == node->ledger.cache.cemented_count); + + nano::keypair key{}; + system.wallet (0)->insert_adhoc (key.prv); + ASSERT_TRUE (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, 1)); + ASSERT_TIMELY (3s, 5 == node->ledger.cache.cemented_count); + + const auto transaction = node->ledger.store.tx_begin_read (); + nano::account_info account_info{}; + ASSERT_FALSE (node->ledger.store.account.get (transaction, key.pub, account_info)); + + // TODO: check issue with account head + // const auto first = node->ledger.store.block_get_no_sideband(transaction, account_info.head); + // const auto second = node->ledger.store.block_get_no_sideband(transaction, first->previous()); + // const auto third = node->ledger.store.block_get_no_sideband(transaction, second->previous()); + // const auto fourth = node->ledger.store.block_get_no_sideband(transaction, third->previous()); + // const auto fifth = node->ledger.store.block_get_no_sideband(transaction, fourth->previous()); + // + // const auto expected_blocks_to_walk = { first, second, third, fourth, fifth }; + // auto expected_blocks_to_walk_itr = expected_blocks_to_walk.begin(); + // + // nano::ledger_walker ledger_walker{ node->ledger }; + // ledger_walker.walk_backward (account_info.block_count, [&] (const auto & block) { + // if (expected_blocks_to_walk_itr == expected_blocks_to_walk.end()) + // { + // EXPECT_TRUE(false); + // return false; + // } + // + // EXPECT_EQ((*expected_blocks_to_walk_itr++)->hash(), block->hash()); + // return true; + // }); + // + // EXPECT_EQ(expected_blocks_to_walk_itr, expected_blocks_to_walk.end()); +} + +TEST (ledger_walker, ladder_geometry) +{ + nano::system system{}; + + nano::node_config node_config (nano::get_available_port (), system.logging); + node_config.enable_voting = true; + node_config.receive_minimum = 1; + + const auto node = system.add_node (node_config); + std::array keys{}; + + system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + for (auto itr = 0; itr != keys.size (); ++itr) + { + system.wallet (0)->insert_adhoc (keys[itr].prv); + const auto block = system.wallet (0)->send_action (nano::dev_genesis_key.pub, keys[itr].pub, 1000); + ASSERT_TIMELY (3s, 1 + (itr + 1) * 2 == node->ledger.cache.cemented_count); + } + + std::vector amounts_to_send (10); + std::iota (amounts_to_send.begin (), amounts_to_send.end (), 1); + + const nano::account * last_destination{}; + for (auto itr = 0; itr != amounts_to_send.size (); ++itr) + { + const auto source_index = itr % keys.size (); + const auto destination_index = (source_index + 1) % keys.size (); + last_destination = &keys[destination_index].pub; + + const auto send = system.wallet (0)->send_action (keys[source_index].pub, keys[destination_index].pub, amounts_to_send[itr]); + ASSERT_TRUE (send); + + ASSERT_TIMELY (3s, 1 + keys.size () * 2 + (itr + 1) * 2 == node->ledger.cache.cemented_count); + } + + ASSERT_TRUE (last_destination); + const auto transaction = node->ledger.store.tx_begin_read (); + nano::account_info last_destination_info{}; + const auto last_destination_read_error = node->ledger.store.account.get (transaction, *last_destination, last_destination_info); + ASSERT_FALSE (last_destination_read_error); + + // This is how we expect chains to look like (for 3 accounts and 10 amounts to be sent) + // k1: 1000 SEND 3 SEND 6 SEND 9 SEND + // k2: 1000 1 SEND 4 SEND 7 SEND 10 + // k3: 1000 2 SEND 5 SEND 8 SEND + + std::vector amounts_expected_backwards{ 10, 9, 8, 5, 4, 3, 1000, 1, 1000, 2, 1000, 6, 7 }; + auto amounts_expected_backwards_itr = amounts_expected_backwards.cbegin (); + + nano::ledger_walker ledger_walker{ node->ledger }; + ledger_walker.walk_backward (last_destination_info.head, + [&] (const auto & block) { + if (block->sideband ().details.is_receive) + { + nano::amount previous_balance{}; + if (!block->previous ().is_zero ()) + { + const auto previous_block = node->ledger.store.block_get_no_sideband (transaction, block->previous ()); + previous_balance = previous_block->balance (); + } + + EXPECT_EQ (*amounts_expected_backwards_itr++, block->balance ().number () - previous_balance.number ()); + } + }); + + EXPECT_EQ (amounts_expected_backwards_itr, amounts_expected_backwards.cend ()); + + auto amounts_expected_itr = amounts_expected_backwards.crbegin (); + + ledger_walker.walk (last_destination_info.head, + [&] (const auto & block) { + if (block->sideband ().details.is_receive) + { + nano::amount previous_balance{}; + if (!block->previous ().is_zero ()) + { + const auto previous_block = node->ledger.store.block_get_no_sideband (transaction, block->previous ()); + previous_balance = previous_block->balance (); + } + + EXPECT_EQ (*amounts_expected_itr++, block->balance ().number () - previous_balance.number ()); + } + }); + + EXPECT_EQ (amounts_expected_itr, amounts_expected_backwards.crend ()); +} diff --git a/nano/node/CMakeLists.txt b/nano/node/CMakeLists.txt index d00f6a7833..5d3afb2ea3 100644 --- a/nano/node/CMakeLists.txt +++ b/nano/node/CMakeLists.txt @@ -76,6 +76,8 @@ add_library( ipc/ipc_server.cpp json_handler.hpp json_handler.cpp + ledger_walker.hpp + ledger_walker.cpp lmdb/lmdb.hpp lmdb/lmdb.cpp lmdb/lmdb_env.hpp @@ -164,6 +166,7 @@ target_link_libraries( Boost::thread Boost::boost rocksdb + diskhash ${CMAKE_DL_LIBS} ${psapi_lib}) diff --git a/nano/node/ledger_walker.cpp b/nano/node/ledger_walker.cpp new file mode 100644 index 0000000000..0616dec329 --- /dev/null +++ b/nano/node/ledger_walker.cpp @@ -0,0 +1,175 @@ +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +nano::ledger_walker::ledger_walker (nano::ledger const & ledger_a) : + ledger{ ledger_a }, + use_in_memory_walked_blocks{ true }, + walked_blocks{}, + walked_blocks_disk{}, + blocks_to_walk{} +{ + debug_assert (!ledger.store.init_error ()); +} + +void nano::ledger_walker::walk_backward (nano::block_hash const & start_block_hash_a, should_visit_callback const & should_visit_callback_a, visitor_callback const & visitor_callback_a) +{ + const auto transaction = ledger.store.tx_begin_read (); + + enqueue_block (start_block_hash_a); + while (!blocks_to_walk.empty ()) + { + const auto block = dequeue_block (transaction); + if (!should_visit_callback_a (block)) + { + continue; + } + + visitor_callback_a (block); + for (const auto & hash : ledger.dependent_blocks (transaction, *block)) + { + if (!hash.is_zero ()) + { + const auto block = ledger.store.block_get (transaction, hash); + if (block) + { + enqueue_block (ledger.store.block_get (transaction, hash)); + } + } + } + } + + clear_queue (); +} + +void nano::ledger_walker::walk (nano::block_hash const & end_block_hash_a, should_visit_callback const & should_visit_callback_a, visitor_callback const & visitor_callback_a) +{ + std::uint64_t last_walked_block_order_index = 0; + dht::DiskHash walked_blocks_order{ nano::unique_path ().c_str (), static_cast (std::to_string (std::numeric_limits::max ()).size ()) + 1, dht::DHOpenRW }; + + walk_backward (end_block_hash_a, + should_visit_callback_a, + [&] (const auto & block) { + walked_blocks_order.insert (std::to_string (++last_walked_block_order_index).c_str (), block->hash ()); + }); + + const auto transaction = ledger.store.tx_begin_read (); + for (auto walked_block_order_index = last_walked_block_order_index; walked_block_order_index != 0; --walked_block_order_index) + { + const auto * block_hash = walked_blocks_order.lookup (std::to_string (walked_block_order_index).c_str ()); + if (!block_hash) + { + debug_assert (false); + continue; + } + + const auto block = ledger.store.block_get (transaction, *block_hash); + if (!block) + { + debug_assert (false); + continue; + } + + visitor_callback_a (block); + } +} + +void nano::ledger_walker::walk_backward (nano::block_hash const & start_block_hash_a, visitor_callback const & visitor_callback_a) +{ + walk_backward ( + start_block_hash_a, + [&] (const auto & /* block */) { + return true; + }, + visitor_callback_a); +} + +void nano::ledger_walker::walk (nano::block_hash const & end_block_hash_a, visitor_callback const & visitor_callback_a) +{ + walk ( + end_block_hash_a, + [&] (const auto & /* block */) { + return true; + }, + visitor_callback_a); +} + +void nano::ledger_walker::enqueue_block (nano::block_hash block_hash_a) +{ + if (add_to_walked_blocks (block_hash_a)) + { + blocks_to_walk.emplace (std::move (block_hash_a)); + } +} + +void nano::ledger_walker::enqueue_block (std::shared_ptr const & block_a) +{ + debug_assert (block_a); + enqueue_block (block_a->hash ()); +} + +bool nano::ledger_walker::add_to_walked_blocks (nano::block_hash const & block_hash_a) +{ + if (use_in_memory_walked_blocks) + { + if (walked_blocks.size () < in_memory_block_count) + { + return walked_blocks.emplace (block_hash_a).second; + } + + use_in_memory_walked_blocks = false; + + debug_assert (!walked_blocks_disk.has_value ()); + walked_blocks_disk.emplace (nano::unique_path ().c_str (), sizeof (nano::block_hash::bytes) + 1, dht::DHOpenRW); + + for (const auto & walked_block_hash : walked_blocks) + { + if (!add_to_walked_blocks_disk (walked_block_hash)) + { + debug_assert (false); + } + } + + decltype (walked_blocks){}.swap (walked_blocks); + } + + return add_to_walked_blocks_disk (block_hash_a); +} + +bool nano::ledger_walker::add_to_walked_blocks_disk (nano::block_hash const & block_hash_a) +{ + debug_assert (!use_in_memory_walked_blocks); + debug_assert (walked_blocks_disk.has_value ()); + + std::array block_hash_key{}; + std::copy (block_hash_a.chars.cbegin (), + block_hash_a.chars.cend (), + block_hash_key.begin ()); + + return walked_blocks_disk->insert (block_hash_key.data (), true); +} + +void nano::ledger_walker::clear_queue () +{ + use_in_memory_walked_blocks = true; + + decltype (walked_blocks){}.swap (walked_blocks); + walked_blocks_disk.reset (); + + decltype (blocks_to_walk){}.swap (blocks_to_walk); +} + +std::shared_ptr nano::ledger_walker::dequeue_block (nano::transaction const & transaction_a) +{ + auto block = ledger.store.block_get (transaction_a, blocks_to_walk.top ()); + blocks_to_walk.pop (); + + return block; +} diff --git a/nano/node/ledger_walker.hpp b/nano/node/ledger_walker.hpp new file mode 100644 index 0000000000..ecc494f256 --- /dev/null +++ b/nano/node/ledger_walker.hpp @@ -0,0 +1,60 @@ +#pragma once + +#include + +#include +#include +#include +#include +#include +#include + +#include + +namespace nano +{ +class block; +class ledger; +class transaction; + +/** Walks the ledger starting from a start block and applying a depth-first search algorithm */ +class ledger_walker final +{ +public: + using should_visit_callback = std::function const &)>; + using visitor_callback = std::function const &)>; + + explicit ledger_walker (nano::ledger const & ledger_a); + + /** Start traversing (in a backwards direction -- towards genesis) from \p start_block_hash_a until \p should_visit_callback_a returns false, calling \p visitor_callback_a at each block. Prefer 'walk' instead, if possible. */ + void walk_backward (nano::block_hash const & start_block_hash_a, should_visit_callback const & should_visit_callback_a, visitor_callback const & visitor_callback_a); + + /** Start traversing (in a forward direction -- towards end_block_hash_a) from first block (genesis onwards) where \p should_visit_a returns true until \p end_block_hash_a, calling \p visitor_callback at each block. Prefer this one, instead of 'walk_backwards', if possible. */ + void walk (nano::block_hash const & end_block_hash_a, should_visit_callback const & should_visit_callback_a, visitor_callback const & visitor_callback_a); + + /** Methods similar to walk_backward and walk, but that do not offer the possibility of providing a user-defined should_visit_callback function. */ + void walk_backward (nano::block_hash const & start_block_hash_a, visitor_callback const & visitor_callback_a); + void walk (nano::block_hash const & end_block_hash_a, visitor_callback const & visitor_callback_a); + + /** How many blocks will be held in the in-memory hash before using the disk hash for walking. */ + // TODO TSB: make this 65536 + static constexpr std::size_t in_memory_block_count = 0; + +private: + nano::ledger const & ledger; + bool use_in_memory_walked_blocks; + std::unordered_set walked_blocks; + std::optional> walked_blocks_disk; + std::stack blocks_to_walk; + + void enqueue_block (nano::block_hash block_hash_a); + void enqueue_block (std::shared_ptr const & block_a); + bool add_to_walked_blocks (nano::block_hash const & block_hash_a); + bool add_to_walked_blocks_disk (nano::block_hash const & block_hash_a); + void clear_queue (); + std::shared_ptr dequeue_block (nano::transaction const & transaction_a); + + friend class ledger_walker_genesis_account_longer_Test; +}; + +} From 3668e455a0f87f876a2ac477b9c0c9c9ffaf865c Mon Sep 17 00:00:00 2001 From: dsiganos Date: Tue, 6 Jul 2021 14:50:26 +0100 Subject: [PATCH 075/346] Remove 1 sec socket timeout in dev mode (becomes 2 sec as in normal mode) (#3369) A 1 second timeout seems a little too aggressive even in dev mode. It can lead to false failures in tests. Also, it is a complication too far. It is an extra logical branch, a complication that, as far as I can see, it does not give us anything useful, except from the possibility of slightly faster unit test runs but reliability should be more important than a possible slight speed increase in unit test execution. --- nano/node/socket.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nano/node/socket.cpp b/nano/node/socket.cpp index 2b7da42656..c3b321ffe4 100644 --- a/nano/node/socket.cpp +++ b/nano/node/socket.cpp @@ -124,7 +124,7 @@ void nano::socket::stop_timer () void nano::socket::checkup () { std::weak_ptr this_w (shared_from_this ()); - node.workers.add_timed_task (std::chrono::steady_clock::now () + std::chrono::seconds (node.network_params.network.is_dev_network () ? 1 : 2), [this_w] () { + node.workers.add_timed_task (std::chrono::steady_clock::now () + std::chrono::seconds (2), [this_w] () { if (auto this_l = this_w.lock ()) { uint64_t now (nano::seconds_since_epoch ()); From e137494103ef0bf2ed5f649f6f59a7639ce795c5 Mon Sep 17 00:00:00 2001 From: theohax <81556890+theohax@users.noreply.github.com> Date: Tue, 6 Jul 2021 18:41:27 +0300 Subject: [PATCH 076/346] Fix build after merging PR 3324 (#3371) --- nano/core_test/ledger_walker.cpp | 16 ++++++++-------- nano/node/ledger_walker.cpp | 12 ++++++------ 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/nano/core_test/ledger_walker.cpp b/nano/core_test/ledger_walker.cpp index cf8b60a1c3..339f5b344a 100644 --- a/nano/core_test/ledger_walker.cpp +++ b/nano/core_test/ledger_walker.cpp @@ -1,5 +1,5 @@ #include -#include +#include #include #include @@ -108,11 +108,11 @@ TEST (ledger_walker, cross_account) ASSERT_FALSE (node->ledger.store.account.get (transaction, key.pub, account_info)); // TODO: check issue with account head - // const auto first = node->ledger.store.block_get_no_sideband(transaction, account_info.head); - // const auto second = node->ledger.store.block_get_no_sideband(transaction, first->previous()); - // const auto third = node->ledger.store.block_get_no_sideband(transaction, second->previous()); - // const auto fourth = node->ledger.store.block_get_no_sideband(transaction, third->previous()); - // const auto fifth = node->ledger.store.block_get_no_sideband(transaction, fourth->previous()); + // const auto first = node->ledger.store.block.get_no_sideband(transaction, account_info.head); + // const auto second = node->ledger.store.block.get_no_sideband(transaction, first->previous()); + // const auto third = node->ledger.store.block.get_no_sideband(transaction, second->previous()); + // const auto fourth = node->ledger.store.block.get_no_sideband(transaction, third->previous()); + // const auto fifth = node->ledger.store.block.get_no_sideband(transaction, fourth->previous()); // // const auto expected_blocks_to_walk = { first, second, third, fourth, fifth }; // auto expected_blocks_to_walk_itr = expected_blocks_to_walk.begin(); @@ -189,7 +189,7 @@ TEST (ledger_walker, ladder_geometry) nano::amount previous_balance{}; if (!block->previous ().is_zero ()) { - const auto previous_block = node->ledger.store.block_get_no_sideband (transaction, block->previous ()); + const auto previous_block = node->ledger.store.block.get_no_sideband (transaction, block->previous ()); previous_balance = previous_block->balance (); } @@ -208,7 +208,7 @@ TEST (ledger_walker, ladder_geometry) nano::amount previous_balance{}; if (!block->previous ().is_zero ()) { - const auto previous_block = node->ledger.store.block_get_no_sideband (transaction, block->previous ()); + const auto previous_block = node->ledger.store.block.get_no_sideband (transaction, block->previous ()); previous_balance = previous_block->balance (); } diff --git a/nano/node/ledger_walker.cpp b/nano/node/ledger_walker.cpp index 0616dec329..cf78587a67 100644 --- a/nano/node/ledger_walker.cpp +++ b/nano/node/ledger_walker.cpp @@ -1,8 +1,8 @@ #include #include #include -#include #include +#include #include #include @@ -37,10 +37,10 @@ void nano::ledger_walker::walk_backward (nano::block_hash const & start_block_ha { if (!hash.is_zero ()) { - const auto block = ledger.store.block_get (transaction, hash); - if (block) + const auto dependent_block = ledger.store.block.get (transaction, hash); + if (dependent_block) { - enqueue_block (ledger.store.block_get (transaction, hash)); + enqueue_block (dependent_block); } } } @@ -70,7 +70,7 @@ void nano::ledger_walker::walk (nano::block_hash const & end_block_hash_a, shoul continue; } - const auto block = ledger.store.block_get (transaction, *block_hash); + const auto block = ledger.store.block.get (transaction, *block_hash); if (!block) { debug_assert (false); @@ -168,7 +168,7 @@ void nano::ledger_walker::clear_queue () std::shared_ptr nano::ledger_walker::dequeue_block (nano::transaction const & transaction_a) { - auto block = ledger.store.block_get (transaction_a, blocks_to_walk.top ()); + auto block = ledger.store.block.get (transaction_a, blocks_to_walk.top ()); blocks_to_walk.pop (); return block; From 15512155d86b8efb5fefb33709930914e0b0fb9e Mon Sep 17 00:00:00 2001 From: clemahieu Date: Wed, 7 Jul 2021 15:35:36 +0100 Subject: [PATCH 077/346] Remove tautology: send_buffer was called on channel so it must be non-null. (#3370) --- nano/node/transport/tcp.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nano/node/transport/tcp.cpp b/nano/node/transport/tcp.cpp index 31bedb62e6..7dd8ef1afe 100644 --- a/nano/node/transport/tcp.cpp +++ b/nano/node/transport/tcp.cpp @@ -585,7 +585,7 @@ void nano::transport::tcp_channels::start_tcp (nano::endpoint const & endpoint_a channel->send_buffer (bytes, [node_w, channel, endpoint_a, receive_buffer, callback_a] (boost::system::error_code const & ec, size_t size_a) { if (auto node_l = node_w.lock ()) { - if (!ec && channel) + if (!ec) { node_l->network.tcp_channels.start_tcp_receive_node_id (channel, endpoint_a, receive_buffer, callback_a); } From 3cfc81f8a73a8a25a1372fbb78f3f4b36b9259a3 Mon Sep 17 00:00:00 2001 From: theohax <81556890+theohax@users.noreply.github.com> Date: Thu, 8 Jul 2021 16:21:47 +0300 Subject: [PATCH 078/346] Disable compilation/usage of diskhash on Windows (#3372) * Disable compilation/usage of diskhash on Windows * Fix formatting * Fix CMake formatting * Take out ledger_walker header from the Windows compilation as well * Prevent diskhash library from being referenced on Windows --- CMakeLists.txt | 6 ++++-- nano/core_test/ledger_walker.cpp | 5 +++++ nano/node/CMakeLists.txt | 6 +++++- nano/node/ledger_walker.cpp | 5 +++++ nano/node/ledger_walker.hpp | 5 +++++ nano/test_common/system.cpp | 30 +++++++++++++++--------------- nano/test_common/system.hpp | 1 + 7 files changed, 40 insertions(+), 18 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index dbacf14f6d..3683c55158 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -379,8 +379,10 @@ find_package(Boost 1.70.0 REQUIRED COMPONENTS filesystem log log_setup thread program_options system) # diskhash -add_library(diskhash STATIC ${CMAKE_SOURCE_DIR}/diskhash/src/diskhash.c) -include_directories(diskhash/src) +if(NOT CMAKE_SYSTEM_NAME STREQUAL "Windows") + add_library(diskhash STATIC ${CMAKE_SOURCE_DIR}/diskhash/src/diskhash.c) + include_directories(diskhash/src) +endif() # RocksDB include_directories(rocksdb/include) diff --git a/nano/core_test/ledger_walker.cpp b/nano/core_test/ledger_walker.cpp index 339f5b344a..0110c16352 100644 --- a/nano/core_test/ledger_walker.cpp +++ b/nano/core_test/ledger_walker.cpp @@ -6,6 +6,9 @@ #include +// TODO: keep this until diskhash builds fine on Windows +#ifndef _WIN32 + using namespace std::chrono_literals; TEST (ledger_walker, genesis_block) @@ -218,3 +221,5 @@ TEST (ledger_walker, ladder_geometry) EXPECT_EQ (amounts_expected_itr, amounts_expected_backwards.crend ()); } + +#endif // _WIN32 -- TODO: keep this until diskhash builds fine on Windows diff --git a/nano/node/CMakeLists.txt b/nano/node/CMakeLists.txt index 5d3afb2ea3..2cc07456b5 100644 --- a/nano/node/CMakeLists.txt +++ b/nano/node/CMakeLists.txt @@ -150,6 +150,10 @@ add_library( write_database_queue.cpp xorshift.hpp) +if(NOT CMAKE_SYSTEM_NAME STREQUAL "Windows") + set(DISKHASH diskhash) +endif() + target_link_libraries( node rpc @@ -166,7 +170,7 @@ target_link_libraries( Boost::thread Boost::boost rocksdb - diskhash + ${DISKHASH} ${CMAKE_DL_LIBS} ${psapi_lib}) diff --git a/nano/node/ledger_walker.cpp b/nano/node/ledger_walker.cpp index cf78587a67..d24e30e0e5 100644 --- a/nano/node/ledger_walker.cpp +++ b/nano/node/ledger_walker.cpp @@ -1,3 +1,6 @@ +// TODO: keep this until diskhash builds fine on Windows +#ifndef _WIN32 + #include #include #include @@ -173,3 +176,5 @@ std::shared_ptr nano::ledger_walker::dequeue_block (nano::transacti return block; } + +#endif // _WIN32 -- TODO: keep this until diskhash builds fine on Windows diff --git a/nano/node/ledger_walker.hpp b/nano/node/ledger_walker.hpp index ecc494f256..6458d8acdc 100644 --- a/nano/node/ledger_walker.hpp +++ b/nano/node/ledger_walker.hpp @@ -1,3 +1,6 @@ +// TODO: keep this until diskhash builds fine on Windows +#ifndef _WIN32 + #pragma once #include @@ -58,3 +61,5 @@ class ledger_walker final }; } + +#endif // _WIN32 -- TODO: keep this until diskhash builds fine on Windows diff --git a/nano/test_common/system.cpp b/nano/test_common/system.cpp index 4e790fc63d..a17d965054 100644 --- a/nano/test_common/system.cpp +++ b/nano/test_common/system.cpp @@ -32,9 +32,9 @@ std::shared_ptr nano::system::add_node (nano::node_flags node_flags_ std::shared_ptr nano::system::add_node (nano::node_config const & node_config_a, nano::node_flags node_flags_a, nano::transport::transport_type type_a) { auto node (std::make_shared (io_ctx, nano::unique_path (), node_config_a, work, node_flags_a, node_sequence++)); - for (auto i: initialization_blocks) + for (auto i : initialization_blocks) { - auto result = node->ledger.process (node->store.tx_begin_write(), *i); + auto result = node->ledger.process (node->store.tx_begin_write (), *i); debug_assert (result.code == nano::process_result::progress); } debug_assert (!node->init_error ()); @@ -154,27 +154,27 @@ void nano::system::ledger_initialization_set (std::vector const & nano::block_hash previous = nano::genesis_hash; auto amount = (nano::genesis_amount - reserve.number ()) / reps.size (); auto balance = nano::genesis_amount; - for (auto const & i: reps) + for (auto const & i : reps) { balance -= amount; nano::state_block_builder builder; builder.account (nano::dev_genesis_key.pub) - .previous (previous) - .representative(nano::dev_genesis_key.pub) - .link (i.pub) - .balance (balance) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) - .work (*work.generate (previous)); + .previous (previous) + .representative (nano::dev_genesis_key.pub) + .link (i.pub) + .balance (balance) + .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .work (*work.generate (previous)); initialization_blocks.emplace_back (builder.build_shared ()); previous = initialization_blocks.back ()->hash (); builder.make_block (); builder.account (i.pub) - .previous (0) - .representative(i.pub) - .link (previous) - .balance (amount) - .sign (i.prv, i.pub) - .work (*work.generate (i.pub)); + .previous (0) + .representative (i.pub) + .link (previous) + .balance (amount) + .sign (i.prv, i.pub) + .work (*work.generate (i.pub)); initialization_blocks.emplace_back (builder.build_shared ()); } } diff --git a/nano/test_common/system.hpp b/nano/test_common/system.hpp index 7f4821310e..0ca9cca582 100644 --- a/nano/test_common/system.hpp +++ b/nano/test_common/system.hpp @@ -54,6 +54,7 @@ class system final std::chrono::time_point> deadline{ std::chrono::steady_clock::time_point::max () }; double deadline_scaling_factor{ 1.0 }; unsigned node_sequence{ 0 }; + private: std::vector> initialization_blocks; }; From f01616baac275cd23b24406f2eeeab352389d1fd Mon Sep 17 00:00:00 2001 From: theohax <81556890+theohax@users.noreply.github.com> Date: Thu, 8 Jul 2021 19:41:42 +0300 Subject: [PATCH 079/346] Fix ledger_walker.genesis_account_longer unit test on macOS (#3374) --- nano/core_test/ledger_walker.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nano/core_test/ledger_walker.cpp b/nano/core_test/ledger_walker.cpp index 0110c16352..20fb7778d2 100644 --- a/nano/core_test/ledger_walker.cpp +++ b/nano/core_test/ledger_walker.cpp @@ -50,7 +50,7 @@ TEST (ledger_walker, genesis_account_longer) nano::ledger_walker ledger_walker{ node->ledger }; EXPECT_TRUE (ledger_walker.walked_blocks.empty ()); - EXPECT_EQ (1, ledger_walker.walked_blocks.bucket_count ()); + EXPECT_LE (ledger_walker.walked_blocks.bucket_count (), 1); EXPECT_TRUE (ledger_walker.blocks_to_walk.empty ()); const auto get_number_of_walked_blocks = [&ledger_walker] (const auto & start_block_hash) { @@ -82,7 +82,7 @@ TEST (ledger_walker, genesis_account_longer) } EXPECT_TRUE (ledger_walker.walked_blocks.empty ()); - EXPECT_EQ (1, ledger_walker.walked_blocks.bucket_count ()); + EXPECT_LE (ledger_walker.walked_blocks.bucket_count (), 1); EXPECT_TRUE (ledger_walker.blocks_to_walk.empty ()); } From c50c50cfbf11fd6f7bafd7c9315e7d80e126ed12 Mon Sep 17 00:00:00 2001 From: dsiganos Date: Thu, 8 Jul 2021 21:43:56 +0100 Subject: [PATCH 080/346] Remove load_test from github CI (#3373) The load_test is currently broken. It usually loops forever and the CI is waiting for it to timeout. Even if it did work, we ignore its result. So overall, the load_test in CI is a liability at the moment and it is offering us nothing in CI. --- ci/test.sh | 4 ---- 1 file changed, 4 deletions(-) diff --git a/ci/test.sh b/ci/test.sh index 2495955552..8319aaff27 100755 --- a/ci/test.sh +++ b/ci/test.sh @@ -70,13 +70,9 @@ run_tests() { xvfb_run_ ./qt_test qt_test_res=${?} - ${TIMEOUT_CMD} ${TIMEOUT_TIME_ARG} ${TIMEOUT_SEC-${TIMEOUT_DEFAULT}} ./load_test -s 150 -n 5 - load_test_res=${?} - echo "Core Test return code: ${core_test_res}" echo "RPC Test return code: ${rpc_test_res}" echo "QT Test return code: ${qt_test_res}" - echo "Load Test return code: ${load_test_res}" return ${core_test_res} } From 5798258b106b1f7b4db7fe8dad46e2c54de723c0 Mon Sep 17 00:00:00 2001 From: Thiago Silva <82097354+thsfs@users.noreply.github.com> Date: Fri, 9 Jul 2021 11:31:37 -0300 Subject: [PATCH 081/346] Updated diskhash repo and code version (#3375) * Updated diskhash repo and code version * Removing const qualifier from temp_fname --- .gitmodules | 2 +- diskhash | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitmodules b/.gitmodules index a59cedb4b1..42797ca5e1 100644 --- a/.gitmodules +++ b/.gitmodules @@ -29,4 +29,4 @@ branch = 6.13.3 [submodule "diskhash"] path = diskhash - url = https://github.com/luispedro/diskhash.git + url = https://github.com/nanocurrency/diskhash.git diff --git a/diskhash b/diskhash index 4fe2547bad..0b81937e1b 160000 --- a/diskhash +++ b/diskhash @@ -1 +1 @@ -Subproject commit 4fe2547bad3e1bc95e9a9d5df12a6e3913b27574 +Subproject commit 0b81937e1b9f48885c254f534dcfddf124b65c2f From 390beb0f0d99266326857884064c5fe2b176ce0d Mon Sep 17 00:00:00 2001 From: clemahieu Date: Sat, 10 Jul 2021 18:22:55 +0100 Subject: [PATCH 082/346] Convert static network id code to instance code (#3368) * Setting network enum to equal the message header magic number. Removed comment that said they should not be changed as there's no arithmetic done on the enum values. * This change cleans up some of the static data related to the network id/magic number parsed in message headers. Originally the network the node would run on, test/dev/beta/live, was determined statically by a CMake variable. This was changed to be able to be overridden at runtime with the --network flag however many of the static variables remained which needed awkward workarounds to deal with. This moves the network id in to the network class and adds a stat counter for when messages are dropped for this reason. --- nano/core_test/message.cpp | 1 + nano/core_test/network.cpp | 14 +++++++++++++ nano/lib/config.cpp | 2 +- nano/lib/config.hpp | 38 +++++++++++++++++------------------ nano/lib/stats.cpp | 3 +++ nano/lib/stats.hpp | 1 + nano/nano_node/entry.cpp | 4 ++-- nano/node/common.cpp | 15 ++++++-------- nano/node/common.hpp | 3 ++- nano/node/network.cpp | 12 ++++++++++- nano/node/network.hpp | 1 + nano/node/nodeconfig.cpp | 8 ++++---- nano/secure/common.cpp | 17 ++++++++-------- nano/secure/common.hpp | 5 ++--- nano/secure/utility.cpp | 11 ++++++---- nano/test_common/system.cpp | 6 +++--- nano/test_common/testutil.cpp | 2 +- 17 files changed, 86 insertions(+), 57 deletions(-) diff --git a/nano/core_test/message.cpp b/nano/core_test/message.cpp index 35f7ec6c50..c2954399c2 100644 --- a/nano/core_test/message.cpp +++ b/nano/core_test/message.cpp @@ -46,6 +46,7 @@ TEST (message, publish_serialization) { nano::network_params params; nano::publish publish (std::make_shared (0, 1, 2, nano::keypair ().prv, 4, 5)); + publish.header.network = nano::networks::nano_dev_network; ASSERT_EQ (nano::block_type::send, publish.header.block_type ()); std::vector bytes; { diff --git a/nano/core_test/network.cpp b/nano/core_test/network.cpp index 80d78a4219..a4797dfbd1 100644 --- a/nano/core_test/network.cpp +++ b/nano/core_test/network.cpp @@ -1256,3 +1256,17 @@ TEST (network, loopback_channel) ++node1.network.port; ASSERT_NE (channel1.get_endpoint (), node1.network.endpoint ()); } + +// Ensure the network filters messages with the incorrect magic number +TEST (network, filter) +{ + nano::system system{ 1 }; + auto & node1 = *system.nodes[0]; + nano::keepalive keepalive; + keepalive.header.network = nano::networks::nano_dev_network; + node1.network.inbound (keepalive, std::make_shared (node1)); + ASSERT_EQ (0, node1.stats.count (nano::stat::type::message, nano::stat::detail::invalid_network)); + keepalive.header.network = nano::networks::invalid; + node1.network.inbound (keepalive, std::make_shared (node1)); + ASSERT_EQ (1, node1.stats.count (nano::stat::type::message, nano::stat::detail::invalid_network)); +} diff --git a/nano/lib/config.cpp b/nano/lib/config.cpp index 37db63d38e..955ddd59bb 100644 --- a/nano/lib/config.cpp +++ b/nano/lib/config.cpp @@ -112,7 +112,7 @@ std::array test_magic_number () void force_nano_dev_network () { - nano::network_constants::set_active_network (nano::nano_networks::nano_dev_network); + nano::network_constants::set_active_network (nano::networks::nano_dev_network); } bool running_within_valgrind () diff --git a/nano/lib/config.hpp b/nano/lib/config.hpp index e5ba3f82dd..b080621340 100644 --- a/nano/lib/config.hpp +++ b/nano/lib/config.hpp @@ -61,18 +61,18 @@ std::array test_magic_number (); /** * Network variants with different genesis blocks and network parameters - * @warning Enum values are used in integral comparisons; do not change. */ -enum class nano_networks +enum class networks : uint16_t { + invalid = 0x0, // Low work parameters, publicly known genesis key, dev IP ports - nano_dev_network = 0, + nano_dev_network = 0x5241, // 'R', 'A' // Normal work parameters, secret beta genesis key, beta IP ports - nano_beta_network = 1, + nano_beta_network = 0x5242, // 'R', 'B' // Normal work parameters, secret live key, live IP ports - nano_live_network = 2, + nano_live_network = 0x5243, // 'R', 'C' // Normal work parameters, secret test genesis key, test IP ports - nano_test_network = 3, + nano_test_network = 0x5258, // 'R', 'X' }; struct work_thresholds @@ -108,7 +108,7 @@ class network_constants { } - network_constants (nano_networks network_a) : + network_constants (nano::networks network_a) : current_network (network_a), publish_thresholds (is_live_network () ? publish_full : is_beta_network () ? publish_beta : is_test_network () ? publish_test : publish_dev) { @@ -132,7 +132,7 @@ class network_constants static const char * active_network_err_msg; /** The network this param object represents. This may differ from the global active network; this is needed for certain --debug... commands */ - nano_networks current_network{ nano::network_constants::active_network }; + nano::networks current_network{ nano::network_constants::active_network }; nano::work_thresholds publish_thresholds; unsigned principal_weight_factor; @@ -143,7 +143,7 @@ class network_constants unsigned request_interval_ms; /** Returns the network this object contains values for */ - nano_networks network () const + nano::networks network () const { return current_network; } @@ -153,7 +153,7 @@ class network_constants * If not called, the compile-time option will be used. * @param network_a The new active network */ - static void set_active_network (nano_networks network_a) + static void set_active_network (nano::networks network_a) { active_network = network_a; } @@ -168,19 +168,19 @@ class network_constants auto error{ false }; if (network_a == "live") { - active_network = nano::nano_networks::nano_live_network; + active_network = nano::networks::nano_live_network; } else if (network_a == "beta") { - active_network = nano::nano_networks::nano_beta_network; + active_network = nano::networks::nano_beta_network; } else if (network_a == "dev") { - active_network = nano::nano_networks::nano_dev_network; + active_network = nano::networks::nano_dev_network; } else if (network_a == "test") { - active_network = nano::nano_networks::nano_test_network; + active_network = nano::networks::nano_test_network; } else { @@ -196,23 +196,23 @@ class network_constants bool is_live_network () const { - return current_network == nano_networks::nano_live_network; + return current_network == nano::networks::nano_live_network; } bool is_beta_network () const { - return current_network == nano_networks::nano_beta_network; + return current_network == nano::networks::nano_beta_network; } bool is_dev_network () const { - return current_network == nano_networks::nano_dev_network; + return current_network == nano::networks::nano_dev_network; } bool is_test_network () const { - return current_network == nano_networks::nano_test_network; + return current_network == nano::networks::nano_test_network; } /** Initial value is ACTIVE_NETWORK compile flag, but can be overridden by a CLI flag */ - static nano::nano_networks active_network; + static nano::networks active_network; }; std::string get_config_path (boost::filesystem::path const & data_path); diff --git a/nano/lib/stats.cpp b/nano/lib/stats.cpp index 0b02dec981..7df9eab711 100644 --- a/nano/lib/stats.cpp +++ b/nano/lib/stats.cpp @@ -883,6 +883,9 @@ std::string nano::stat::detail_to_string (uint32_t key) case nano::stat::detail::generator_spacing: res = "generator_spacing"; break; + case nano::stat::detail::invalid_network: + res = "invalid_network"; + break; } return res; } diff --git a/nano/lib/stats.hpp b/nano/lib/stats.hpp index 9a72089e66..ea5ba2a1fe 100644 --- a/nano/lib/stats.hpp +++ b/nano/lib/stats.hpp @@ -255,6 +255,7 @@ class stat final insufficient_work, http_callback, unreachable_host, + invalid_network, // confirmation_observer specific active_quorum, diff --git a/nano/nano_node/entry.cpp b/nano/nano_node/entry.cpp index 308b1493e0..dd42ec246d 100644 --- a/nano/nano_node/entry.cpp +++ b/nano/nano_node/entry.cpp @@ -887,7 +887,7 @@ int main (int argc, char * const * argv) } else if (vm.count ("debug_profile_process")) { - nano::network_constants::set_active_network (nano::nano_networks::nano_dev_network); + nano::network_constants::set_active_network (nano::networks::nano_dev_network); nano::network_params dev_params; nano::block_builder builder; size_t num_accounts (100000); @@ -1004,7 +1004,7 @@ int main (int argc, char * const * argv) } else if (vm.count ("debug_profile_votes")) { - nano::network_constants::set_active_network (nano::nano_networks::nano_dev_network); + nano::network_constants::set_active_network (nano::networks::nano_dev_network); nano::network_params dev_params; nano::block_builder builder; size_t num_elections (40000); diff --git a/nano/node/common.cpp b/nano/node/common.cpp index 86067c4790..f845bf62e7 100644 --- a/nano/node/common.cpp +++ b/nano/node/common.cpp @@ -50,6 +50,7 @@ uint64_t nano::ip_address_hash_raw (boost::asio::ip::address const & ip_a, uint1 } nano::message_header::message_header (nano::message_type type_a) : + network (nano::network_constants::active_network), version_max (get_protocol_constants ().protocol_version), version_using (get_protocol_constants ().protocol_version), type (type_a) @@ -67,7 +68,7 @@ nano::message_header::message_header (bool & error_a, nano::stream & stream_a) void nano::message_header::serialize (nano::stream & stream_a) const { static nano::network_params network_params; - nano::write (stream_a, network_params.header_magic_number); + nano::write (stream_a, boost::endian::native_to_big (static_cast (network))); nano::write (stream_a, version_max); nano::write (stream_a, version_using); nano::write (stream_a, get_protocol_constants ().protocol_version_min ()); @@ -81,18 +82,14 @@ bool nano::message_header::deserialize (nano::stream & stream_a) try { static nano::network_params network_params; - uint16_t extensions_l; - std::array magic_number_l; - read (stream_a, magic_number_l); - if (magic_number_l != network_params.header_magic_number) - { - throw std::runtime_error ("Magic numbers do not match"); - } - + uint16_t network_bytes; + nano::read (stream_a, network_bytes); + network = static_cast (boost::endian::big_to_native (network_bytes)); nano::read (stream_a, version_max); nano::read (stream_a, version_using); nano::read (stream_a, version_min_m); nano::read (stream_a, type); + uint16_t extensions_l; nano::read (stream_a, extensions_l); extensions = extensions_l; } diff --git a/nano/node/common.hpp b/nano/node/common.hpp index 030e95df2a..2d1517e72d 100644 --- a/nano/node/common.hpp +++ b/nano/node/common.hpp @@ -195,6 +195,7 @@ class message_header final void block_type_set (nano::block_type); uint8_t count_get () const; void count_set (uint8_t); + nano::networks network; uint8_t version_max; uint8_t version_using; @@ -204,7 +205,7 @@ class message_header final public: nano::message_type type; std::bitset<16> extensions; - static size_t constexpr size = sizeof (network_params::header_magic_number) + sizeof (version_max) + sizeof (version_using) + sizeof (version_min_m) + sizeof (type) + sizeof (/* extensions */ uint16_t); + static size_t constexpr size = sizeof (nano::networks) + sizeof (version_max) + sizeof (version_using) + sizeof (version_min_m) + sizeof (type) + sizeof (/* extensions */ uint16_t); void flag_set (uint8_t); static uint8_t constexpr bulk_pull_count_present_flag = 0; diff --git a/nano/node/network.cpp b/nano/node/network.cpp index 3e4daa2e76..f7b483b175 100644 --- a/nano/node/network.cpp +++ b/nano/node/network.cpp @@ -12,8 +12,18 @@ #include nano::network::network (nano::node & node_a, uint16_t port_a) : + id (nano::network_constants::active_network), syn_cookies (node_a.network_params.node.max_peers_per_ip), - inbound{ [this] (nano::message const & message, std::shared_ptr const & channel) { process_message (message, channel); } }, + inbound{ [this] (nano::message const & message, std::shared_ptr const & channel) { + if (message.header.network == id) + { + process_message (message, channel); + } + else + { + this->node.stats.inc (nano::stat::type::message, nano::stat::detail::invalid_network); + } + } }, buffer_container (node_a.stats, nano::network::buffer_size, 4096), // 2Mb receive buffer resolver (node_a.io_ctx), limiter (node_a.config.bandwidth_limit_burst_ratio, node_a.config.bandwidth_limit), diff --git a/nano/node/network.hpp b/nano/node/network.hpp index d42f304a75..60223c4f49 100644 --- a/nano/node/network.hpp +++ b/nano/node/network.hpp @@ -120,6 +120,7 @@ class network final public: network (nano::node &, uint16_t); ~network (); + nano::networks id; void start (); void stop (); void flood_message (nano::message const &, nano::buffer_drop_policy const = nano::buffer_drop_policy::limiter, float const = 1.0f); diff --git a/nano/node/nodeconfig.cpp b/nano/node/nodeconfig.cpp index 1e7273e813..67598c38e5 100644 --- a/nano/node/nodeconfig.cpp +++ b/nano/node/nodeconfig.cpp @@ -38,11 +38,11 @@ nano::node_config::node_config (uint16_t peering_port_a, nano::logging const & l } switch (network_params.network.network ()) { - case nano::nano_networks::nano_dev_network: + case nano::networks::nano_dev_network: enable_voting = true; preconfigured_representatives.push_back (network_params.ledger.genesis_account); break; - case nano::nano_networks::nano_beta_network: + case nano::networks::nano_beta_network: { preconfigured_peers.push_back (default_beta_peer_network); nano::account offline_representative; @@ -50,7 +50,7 @@ nano::node_config::node_config (uint16_t peering_port_a, nano::logging const & l preconfigured_representatives.emplace_back (offline_representative); break; } - case nano::nano_networks::nano_live_network: + case nano::networks::nano_live_network: preconfigured_peers.push_back (default_live_peer_network); preconfigured_representatives.emplace_back ("A30E0A32ED41C8607AA9212843392E853FCBCB4E7CB194E35C94F07F91DE59EF"); preconfigured_representatives.emplace_back ("67556D31DDFC2A440BF6147501449B4CB9572278D034EE686A6BEE29851681DF"); @@ -61,7 +61,7 @@ nano::node_config::node_config (uint16_t peering_port_a, nano::logging const & l preconfigured_representatives.emplace_back ("2298FAB7C61058E77EA554CB93EDEEDA0692CBFCC540AB213B2836B29029E23A"); preconfigured_representatives.emplace_back ("3FE80B4BC842E82C1C18ABFEEC47EA989E63953BC82AC411F304D13833D52A56"); break; - case nano::nano_networks::nano_test_network: + case nano::networks::nano_test_network: preconfigured_peers.push_back (default_test_peer_network); preconfigured_representatives.push_back (network_params.ledger.genesis_account); break; diff --git a/nano/secure/common.cpp b/nano/secure/common.cpp index e09d05d271..c82133b38f 100644 --- a/nano/secure/common.cpp +++ b/nano/secure/common.cpp @@ -21,7 +21,7 @@ size_t constexpr nano::open_block::size; size_t constexpr nano::change_block::size; size_t constexpr nano::state_block::size; -nano::nano_networks nano::network_constants::active_network = nano::nano_networks::ACTIVE_NETWORK; +nano::networks nano::network_constants::active_network = nano::networks::ACTIVE_NETWORK; namespace { @@ -84,13 +84,12 @@ nano::network_params::network_params () : { } -nano::network_params::network_params (nano::nano_networks network_a) : +nano::network_params::network_params (nano::networks network_a) : network (network_a), ledger (network), voting (network), node (network), portmapping (network), bootstrap (network) { unsigned constexpr kdf_full_work = 64 * 1024; unsigned constexpr kdf_dev_work = 8; kdf_work = network.is_dev_network () ? kdf_dev_work : kdf_full_work; - header_magic_number = network.is_dev_network () ? std::array{ { 'R', 'A' } } : network.is_beta_network () ? std::array{ { 'R', 'B' } } : network.is_live_network () ? std::array{ { 'R', 'C' } } : nano::test_magic_number (); } uint8_t nano::protocol_constants::protocol_version_min () const @@ -103,7 +102,7 @@ nano::ledger_constants::ledger_constants (nano::network_constants & network_cons { } -nano::ledger_constants::ledger_constants (nano::nano_networks network_a) : +nano::ledger_constants::ledger_constants (nano::networks network_a) : zero_key ("0"), dev_genesis_key (dev_private_key_data), nano_dev_account (dev_public_key_data), @@ -114,8 +113,8 @@ nano::ledger_constants::ledger_constants (nano::nano_networks network_a) : nano_beta_genesis (beta_genesis_data), nano_live_genesis (live_genesis_data), nano_test_genesis (test_genesis_data), - genesis_account (network_a == nano::nano_networks::nano_dev_network ? nano_dev_account : network_a == nano::nano_networks::nano_beta_network ? nano_beta_account : network_a == nano::nano_networks::nano_test_network ? nano_test_account : nano_live_account), - genesis_block (network_a == nano::nano_networks::nano_dev_network ? nano_dev_genesis : network_a == nano::nano_networks::nano_beta_network ? nano_beta_genesis : network_a == nano::nano_networks::nano_test_network ? nano_test_genesis : nano_live_genesis), + genesis_account (network_a == nano::networks::nano_dev_network ? nano_dev_account : network_a == nano::networks::nano_beta_network ? nano_beta_account : network_a == nano::networks::nano_test_network ? nano_test_account : nano_live_account), + genesis_block (network_a == nano::networks::nano_dev_network ? nano_dev_genesis : network_a == nano::networks::nano_beta_network ? nano_beta_genesis : network_a == nano::networks::nano_test_network ? nano_test_genesis : nano_live_genesis), genesis_hash (parse_block_from_genesis_data (genesis_block)->hash ()), genesis_amount (std::numeric_limits::max ()), burn_account (0), @@ -123,12 +122,12 @@ nano::ledger_constants::ledger_constants (nano::nano_networks network_a) : nano_beta_final_votes_canary_account (beta_canary_public_key_data), nano_live_final_votes_canary_account (live_canary_public_key_data), nano_test_final_votes_canary_account (test_canary_public_key_data), - final_votes_canary_account (network_a == nano::nano_networks::nano_dev_network ? nano_dev_final_votes_canary_account : network_a == nano::nano_networks::nano_beta_network ? nano_beta_final_votes_canary_account : network_a == nano::nano_networks::nano_test_network ? nano_test_final_votes_canary_account : nano_live_final_votes_canary_account), + final_votes_canary_account (network_a == nano::networks::nano_dev_network ? nano_dev_final_votes_canary_account : network_a == nano::networks::nano_beta_network ? nano_beta_final_votes_canary_account : network_a == nano::networks::nano_test_network ? nano_test_final_votes_canary_account : nano_live_final_votes_canary_account), nano_dev_final_votes_canary_height (1), nano_beta_final_votes_canary_height (1), nano_live_final_votes_canary_height (1), nano_test_final_votes_canary_height (1), - final_votes_canary_height (network_a == nano::nano_networks::nano_dev_network ? nano_dev_final_votes_canary_height : network_a == nano::nano_networks::nano_beta_network ? nano_beta_final_votes_canary_height : network_a == nano::nano_networks::nano_test_network ? nano_test_final_votes_canary_height : nano_live_final_votes_canary_height) + final_votes_canary_height (network_a == nano::networks::nano_dev_network ? nano_dev_final_votes_canary_height : network_a == nano::networks::nano_beta_network ? nano_beta_final_votes_canary_height : network_a == nano::networks::nano_test_network ? nano_test_final_votes_canary_height : nano_live_final_votes_canary_height) { nano::link epoch_link_v1; const char * epoch_message_v1 ("epoch v1 block"); @@ -139,7 +138,7 @@ nano::ledger_constants::ledger_constants (nano::nano_networks network_a) : nano::account nano_live_epoch_v2_signer; auto error (nano_live_epoch_v2_signer.decode_account ("nano_3qb6o6i1tkzr6jwr5s7eehfxwg9x6eemitdinbpi7u8bjjwsgqfj4wzser3x")); debug_assert (!error); - auto epoch_v2_signer (network_a == nano::nano_networks::nano_dev_network ? nano_dev_account : network_a == nano::nano_networks::nano_beta_network ? nano_beta_account : network_a == nano::nano_networks::nano_test_network ? nano_test_account : nano_live_epoch_v2_signer); + auto epoch_v2_signer (network_a == nano::networks::nano_dev_network ? nano_dev_account : network_a == nano::networks::nano_beta_network ? nano_beta_account : network_a == nano::networks::nano_test_network ? nano_test_account : nano_live_epoch_v2_signer); const char * epoch_message_v2 ("epoch v2 block"); strncpy ((char *)epoch_link_v2.bytes.data (), epoch_message_v2, epoch_link_v2.bytes.size ()); epochs.add (nano::epoch::epoch_2, epoch_v2_signer, epoch_link_v2); diff --git a/nano/secure/common.hpp b/nano/secure/common.hpp index 4b42bcd457..211dacff28 100644 --- a/nano/secure/common.hpp +++ b/nano/secure/common.hpp @@ -367,7 +367,7 @@ class ledger_constants { public: ledger_constants (nano::network_constants & network_constants); - ledger_constants (nano::nano_networks network_a); + ledger_constants (nano::networks network_a); nano::keypair zero_key; nano::keypair dev_genesis_key; nano::account nano_dev_account; @@ -473,9 +473,8 @@ class network_params network_params (); /** Populate values based on \p network_a */ - network_params (nano::nano_networks network_a); + network_params (nano::networks network_a); - std::array header_magic_number; unsigned kdf_work; network_constants network; protocol_constants protocol; diff --git a/nano/secure/utility.cpp b/nano/secure/utility.cpp index 93a355b91a..67637f9667 100644 --- a/nano/secure/utility.cpp +++ b/nano/secure/utility.cpp @@ -12,7 +12,10 @@ boost::filesystem::path nano::working_path (bool legacy) auto result (nano::app_path ()); switch (network_constants.network ()) { - case nano::nano_networks::nano_dev_network: + case nano::networks::invalid: + release_assert (false); + break; + case nano::networks::nano_dev_network: if (!legacy) { result /= "NanoDev"; @@ -22,7 +25,7 @@ boost::filesystem::path nano::working_path (bool legacy) result /= "RaiBlocksDev"; } break; - case nano::nano_networks::nano_beta_network: + case nano::networks::nano_beta_network: if (!legacy) { result /= "NanoBeta"; @@ -32,7 +35,7 @@ boost::filesystem::path nano::working_path (bool legacy) result /= "RaiBlocksBeta"; } break; - case nano::nano_networks::nano_live_network: + case nano::networks::nano_live_network: if (!legacy) { result /= "Nano"; @@ -42,7 +45,7 @@ boost::filesystem::path nano::working_path (bool legacy) result /= "RaiBlocks"; } break; - case nano::nano_networks::nano_test_network: + case nano::networks::nano_test_network: if (!legacy) { result /= "NanoTest"; diff --git a/nano/test_common/system.cpp b/nano/test_common/system.cpp index a17d965054..a0bee50d4c 100644 --- a/nano/test_common/system.cpp +++ b/nano/test_common/system.cpp @@ -212,7 +212,7 @@ uint64_t nano::system::work_generate_limited (nano::block_hash const & root_a, u std::unique_ptr nano::upgrade_epoch (nano::work_pool & pool_a, nano::ledger & ledger_a, nano::epoch epoch_a) { auto transaction (ledger_a.store.tx_begin_write ()); - auto dev_genesis_key = nano::ledger_constants (nano::nano_networks::nano_dev_network).dev_genesis_key; + auto dev_genesis_key = nano::ledger_constants (nano::networks::nano_dev_network).dev_genesis_key; auto account = dev_genesis_key.pub; auto latest = ledger_a.latest (transaction, account); auto balance = ledger_a.account_balance (transaction, account); @@ -398,7 +398,7 @@ void nano::system::generate_receive (nano::node & node_a) } if (send_block != nullptr) { - auto receive_error (wallet (0)->receive_sync (send_block, nano::ledger_constants (nano::nano_networks::nano_dev_network).genesis_account, std::numeric_limits::max ())); + auto receive_error (wallet (0)->receive_sync (send_block, nano::ledger_constants (nano::networks::nano_dev_network).genesis_account, std::numeric_limits::max ())); (void)receive_error; } } @@ -523,7 +523,7 @@ void nano::system::generate_send_new (nano::node & node_a, std::vector accounts; - auto dev_genesis_key = nano::ledger_constants (nano::nano_networks::nano_dev_network).dev_genesis_key; + auto dev_genesis_key = nano::ledger_constants (nano::networks::nano_dev_network).dev_genesis_key; wallet (0)->insert_adhoc (dev_genesis_key.prv); accounts.push_back (dev_genesis_key.pub); auto previous (std::chrono::steady_clock::now ()); diff --git a/nano/test_common/testutil.cpp b/nano/test_common/testutil.cpp index 5d77700df6..a28f430bab 100644 --- a/nano/test_common/testutil.cpp +++ b/nano/test_common/testutil.cpp @@ -12,7 +12,7 @@ using namespace std::chrono_literals; /* Convenience constants for tests which are always on the test network */ namespace { -nano::ledger_constants dev_constants (nano::nano_networks::nano_dev_network); +nano::ledger_constants dev_constants (nano::networks::nano_dev_network); } nano::keypair const & nano::zero_key (dev_constants.zero_key); From e12ef0c9189175e0442e7a836b361998e34511c1 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Fri, 16 Jul 2021 00:51:45 +0100 Subject: [PATCH 083/346] Removing deprecated lmdb_max_dbs config option which has been replaced with lmdb.max_databases. (#3377) --- nano/core_test/node.cpp | 3 --- nano/core_test/toml.cpp | 2 -- nano/core_test/wallets.cpp | 24 ------------------------ nano/lib/lmdbconfig.cpp | 8 +------- nano/lib/lmdbconfig.hpp | 2 +- nano/node/nodeconfig.cpp | 22 +--------------------- nano/node/nodeconfig.hpp | 1 - 7 files changed, 3 insertions(+), 59 deletions(-) diff --git a/nano/core_test/node.cpp b/nano/core_test/node.cpp index 7099902fd4..033d3606c6 100644 --- a/nano/core_test/node.cpp +++ b/nano/core_test/node.cpp @@ -597,7 +597,6 @@ TEST (node_config, serialization) config1.callback_address = "dev"; config1.callback_port = 10; config1.callback_target = "dev"; - config1.deprecated_lmdb_max_dbs = 256; nano::jsonconfig tree; config1.serialize_json (tree); nano::logging logging2; @@ -613,7 +612,6 @@ TEST (node_config, serialization) ASSERT_NE (config2.callback_address, config1.callback_address); ASSERT_NE (config2.callback_port, config1.callback_port); ASSERT_NE (config2.callback_target, config1.callback_target); - ASSERT_NE (config2.deprecated_lmdb_max_dbs, config1.deprecated_lmdb_max_dbs); ASSERT_FALSE (tree.get_optional ("epoch_block_link")); ASSERT_FALSE (tree.get_optional ("epoch_block_signer")); @@ -630,7 +628,6 @@ TEST (node_config, serialization) ASSERT_EQ (config2.callback_address, config1.callback_address); ASSERT_EQ (config2.callback_port, config1.callback_port); ASSERT_EQ (config2.callback_target, config1.callback_target); - ASSERT_EQ (config2.deprecated_lmdb_max_dbs, config1.deprecated_lmdb_max_dbs); } TEST (node_config, v17_values) diff --git a/nano/core_test/toml.cpp b/nano/core_test/toml.cpp index 563b83d208..905c26afa9 100644 --- a/nano/core_test/toml.cpp +++ b/nano/core_test/toml.cpp @@ -163,7 +163,6 @@ TEST (toml, daemon_config_deserialize_defaults) ASSERT_EQ (conf.node.external_address, defaults.node.external_address); ASSERT_EQ (conf.node.external_port, defaults.node.external_port); ASSERT_EQ (conf.node.io_threads, defaults.node.io_threads); - ASSERT_EQ (conf.node.deprecated_lmdb_max_dbs, defaults.node.deprecated_lmdb_max_dbs); ASSERT_EQ (conf.node.max_work_generate_multiplier, defaults.node.max_work_generate_multiplier); ASSERT_EQ (conf.node.network_threads, defaults.node.network_threads); ASSERT_EQ (conf.node.secondary_work_peers, defaults.node.secondary_work_peers); @@ -564,7 +563,6 @@ TEST (toml, daemon_config_deserialize_no_defaults) ASSERT_NE (conf.node.external_address, defaults.node.external_address); ASSERT_NE (conf.node.external_port, defaults.node.external_port); ASSERT_NE (conf.node.io_threads, defaults.node.io_threads); - ASSERT_NE (conf.node.deprecated_lmdb_max_dbs, defaults.node.deprecated_lmdb_max_dbs); ASSERT_NE (conf.node.max_work_generate_multiplier, defaults.node.max_work_generate_multiplier); ASSERT_NE (conf.node.frontiers_confirmation, defaults.node.frontiers_confirmation); ASSERT_NE (conf.node.network_threads, defaults.node.network_threads); diff --git a/nano/core_test/wallets.cpp b/nano/core_test/wallets.cpp index facf35c745..ff6e5b15df 100644 --- a/nano/core_test/wallets.cpp +++ b/nano/core_test/wallets.cpp @@ -73,30 +73,6 @@ TEST (wallets, remove) } } -// Keeps breaking whenever we add new DBs -TEST (wallets, DISABLED_wallet_create_max) -{ - nano::system system (1); - bool error (false); - nano::wallets wallets (error, *system.nodes[0]); - const int nonWalletDbs = 19; - for (int i = 0; i < system.nodes[0]->config.deprecated_lmdb_max_dbs - nonWalletDbs; i++) - { - auto wallet_id = nano::random_wallet_id (); - auto wallet = wallets.create (wallet_id); - auto existing = wallets.items.find (wallet_id); - ASSERT_TRUE (existing != wallets.items.end ()); - nano::raw_key seed; - seed = 0; - auto transaction (system.nodes[0]->store.tx_begin_write ()); - existing->second->store.seed_set (transaction, seed); - } - auto wallet_id = nano::random_wallet_id (); - wallets.create (wallet_id); - auto existing = wallets.items.find (wallet_id); - ASSERT_TRUE (existing == wallets.items.end ()); -} - TEST (wallets, reload) { nano::system system (1); diff --git a/nano/lib/lmdbconfig.cpp b/nano/lib/lmdbconfig.cpp index 8281b9291b..603cd53bd2 100644 --- a/nano/lib/lmdbconfig.cpp +++ b/nano/lib/lmdbconfig.cpp @@ -29,19 +29,13 @@ nano::error nano::lmdb_config::serialize_toml (nano::tomlconfig & toml) const return toml.get_error (); } -nano::error nano::lmdb_config::deserialize_toml (nano::tomlconfig & toml, bool is_deprecated_lmdb_dbs_used) +nano::error nano::lmdb_config::deserialize_toml (nano::tomlconfig & toml) { static nano::network_params params; auto default_max_databases = max_databases; toml.get_optional ("max_databases", max_databases); toml.get_optional ("map_size", map_size); - // For now we accept either setting, but not both - if (!params.network.is_dev_network () && is_deprecated_lmdb_dbs_used && default_max_databases != max_databases) - { - toml.get_error ().set ("Both the deprecated node.lmdb_max_dbs and the new node.lmdb.max_databases setting are used. Please use max_databases only."); - } - if (!toml.get_error ()) { std::string sync_string = "always"; diff --git a/nano/lib/lmdbconfig.hpp b/nano/lib/lmdbconfig.hpp index 4474a835a0..b48f635bd5 100644 --- a/nano/lib/lmdbconfig.hpp +++ b/nano/lib/lmdbconfig.hpp @@ -40,7 +40,7 @@ class lmdb_config final }; nano::error serialize_toml (nano::tomlconfig & toml_a) const; - nano::error deserialize_toml (nano::tomlconfig & toml_a, bool is_deprecated_lmdb_dbs_used); + nano::error deserialize_toml (nano::tomlconfig & toml_a); /** Sync strategy for the ledger database */ sync_strategy sync{ always }; diff --git a/nano/node/nodeconfig.cpp b/nano/node/nodeconfig.cpp index 67598c38e5..effd8af9b4 100644 --- a/nano/node/nodeconfig.cpp +++ b/nano/node/nodeconfig.cpp @@ -88,7 +88,6 @@ nano::error nano::node_config::serialize_toml (nano::tomlconfig & toml) const toml.put ("bootstrap_connections_max", bootstrap_connections_max, "Maximum number of inbound bootstrap connections. Defaults to 64.\nWarning: a larger amount of connections may use additional system memory.\ntype:uint64"); toml.put ("bootstrap_initiator_threads", bootstrap_initiator_threads, "Number of threads dedicated to concurrent bootstrap attempts. Defaults to 1.\nWarning: a larger amount of attempts may use additional system memory and disk IO.\ntype:uint64"); toml.put ("bootstrap_frontier_request_count", bootstrap_frontier_request_count, "Number frontiers per bootstrap frontier request. Defaults to 1048576.\ntype:uint32,[1024..4294967295]"); - toml.put ("lmdb_max_dbs", deprecated_lmdb_max_dbs, "DEPRECATED: use node.lmdb.max_databases instead.\nMaximum open lmdb databases. Increase default if more than 100 wallets is required.\nNote: external management is recommended when a large number of wallets is required (see https://docs.nano.org/integration-guides/key-management/).\ntype:uint64"); toml.put ("block_processor_batch_max_time", block_processor_batch_max_time.count (), "The maximum time the block processor can continuously process blocks for.\ntype:milliseconds"); toml.put ("allow_local_peers", allow_local_peers, "Enable or disable local host peering.\ntype:bool"); toml.put ("vote_minimum", vote_minimum.to_string_dec (), "Local representatives do not vote if the delegated weight is under this threshold. Saves on system resources.\ntype:string,amount,raw"); @@ -323,27 +322,10 @@ nano::error nano::node_config::deserialize_toml (nano::tomlconfig & toml) toml.get ("allow_local_peers", allow_local_peers); toml.get (signature_checker_threads_key, signature_checker_threads); - auto lmdb_max_dbs_default = deprecated_lmdb_max_dbs; - toml.get ("lmdb_max_dbs", deprecated_lmdb_max_dbs); - bool is_deprecated_lmdb_dbs_used = lmdb_max_dbs_default != deprecated_lmdb_max_dbs; - - // Note: using the deprecated setting will result in a fail-fast config error in the future - if (!network_params.network.is_dev_network () && is_deprecated_lmdb_dbs_used) - { - std::cerr << "WARNING: The node.lmdb_max_dbs setting is deprecated and will be removed in a future version." << std::endl; - std::cerr << "Please use the node.lmdb.max_databases setting instead." << std::endl; - } - if (toml.has_key ("lmdb")) { auto lmdb_config_l (toml.get_required_child ("lmdb")); - lmdb_config.deserialize_toml (lmdb_config_l, is_deprecated_lmdb_dbs_used); - - // Note that the lmdb config fails if both the deprecated and new setting are changed. - if (is_deprecated_lmdb_dbs_used) - { - lmdb_config.max_databases = deprecated_lmdb_max_dbs; - } + lmdb_config.deserialize_toml (lmdb_config_l); } boost::asio::ip::address_v6 external_address_l; @@ -496,7 +478,6 @@ nano::error nano::node_config::serialize_json (nano::jsonconfig & json) const json.put ("callback_address", callback_address); json.put ("callback_port", callback_port); json.put ("callback_target", callback_target); - json.put ("lmdb_max_dbs", deprecated_lmdb_max_dbs); json.put ("block_processor_batch_max_time", block_processor_batch_max_time.count ()); json.put ("allow_local_peers", allow_local_peers); json.put ("vote_minimum", vote_minimum.to_string_dec ()); @@ -679,7 +660,6 @@ nano::error nano::node_config::deserialize_json (bool & upgraded_a, nano::jsonco json.get ("callback_address", callback_address); json.get ("callback_port", callback_port); json.get ("callback_target", callback_target); - json.get ("lmdb_max_dbs", deprecated_lmdb_max_dbs); json.get ("enable_voting", enable_voting); json.get ("allow_local_peers", allow_local_peers); json.get (signature_checker_threads_key, signature_checker_threads); diff --git a/nano/node/nodeconfig.hpp b/nano/node/nodeconfig.hpp index 07b1f02c11..b70a427559 100644 --- a/nano/node/nodeconfig.hpp +++ b/nano/node/nodeconfig.hpp @@ -73,7 +73,6 @@ class node_config std::string callback_address; uint16_t callback_port{ 0 }; std::string callback_target; - [[deprecated]] int deprecated_lmdb_max_dbs{ 128 }; bool allow_local_peers{ !(network_params.network.is_live_network () || network_params.network.is_test_network ()) }; // disable by default for live network nano::stat_config stat_config; nano::ipc::ipc_config ipc_config; From abc45bad9b70d4dbc8ec829e043e07ba19d27bf1 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Mon, 19 Jul 2021 11:48:33 +0100 Subject: [PATCH 084/346] Removing incorrect TCP assert as node id handshake messages can come under any socket type and this is the incorrect place to do such a check. (#3379) --- nano/node/transport/tcp.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/nano/node/transport/tcp.cpp b/nano/node/transport/tcp.cpp index 7dd8ef1afe..e459a1e1f2 100644 --- a/nano/node/transport/tcp.cpp +++ b/nano/node/transport/tcp.cpp @@ -329,7 +329,6 @@ void nano::transport::tcp_channels::process_message (nano::message const & messa { // Initial node_id_handshake request without node ID debug_assert (message_a.header.type == nano::message_type::node_id_handshake); - debug_assert (type_a == nano::socket::type_t::undefined); node.stats.inc (nano::stat::type::message, nano::stat::detail::node_id_handshake, nano::stat::dir::in); } } From 16e211847eb2642717e30e0f1183f41887607cd0 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Mon, 19 Jul 2021 19:28:31 +0100 Subject: [PATCH 085/346] Adding 'explicit' specifier to uint256_constructor for strings. This removes unnecessary parsing in RPC commands and catches a bug in the confirmation_height_clear CLI command where it interpreting the genesis block json contents as a block hash, which would cause a release assert. (#3380) --- nano/lib/numbers.hpp | 2 +- nano/node/cli.cpp | 2 +- nano/node/json_handler.cpp | 4 ++-- nano/rpc_test/rpc.cpp | 6 +++--- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/nano/lib/numbers.hpp b/nano/lib/numbers.hpp index 9f00d0842c..3e2e64eb0c 100644 --- a/nano/lib/numbers.hpp +++ b/nano/lib/numbers.hpp @@ -66,7 +66,7 @@ class uint256_union * Decode from hex string * @warning Aborts at runtime if the input is invalid */ - uint256_union (std::string const &); + explicit uint256_union (std::string const &); uint256_union (uint64_t); uint256_union (nano::uint256_t const &); void encrypt (nano::raw_key const &, nano::raw_key const &, uint128_union const &); diff --git a/nano/node/cli.cpp b/nano/node/cli.cpp index f6e82753b0..30b730e570 100644 --- a/nano/node/cli.cpp +++ b/nano/node/cli.cpp @@ -577,7 +577,7 @@ std::error_code nano::handle_node_options (boost::program_options::variables_map if (account == node.node->network_params.ledger.genesis_account) { conf_height_reset_num = 1; - node.node->store.confirmation_height.put (transaction, account, { confirmation_height_info.height, node.node->network_params.ledger.genesis_block }); + node.node->store.confirmation_height.put (transaction, account, { confirmation_height_info.height, node.node->network_params.ledger.genesis_hash }); } else { diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index c9c804cfbe..a66000e2c5 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -654,7 +654,7 @@ void nano::json_handler::account_info () std::shared_ptr confirmed_frontier_block; if (include_confirmed && confirmation_height_info.height > 0) { - confirmed_frontier_block = node.store.block.get (transaction, confirmed_frontier); + confirmed_frontier_block = node.store.block.get (transaction, confirmation_height_info.frontier); } if (representative) @@ -668,7 +668,7 @@ void nano::json_handler::account_info () confirmed_representative = confirmed_frontier_block->representative (); if (confirmed_representative.is_zero ()) { - confirmed_representative = node.store.block.get (transaction, node.ledger.representative (transaction, confirmed_frontier))->representative (); + confirmed_representative = node.store.block.get (transaction, node.ledger.representative (transaction, confirmation_height_info.frontier))->representative (); } } diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index 5c81f8826a..e2f34910c9 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -2985,7 +2985,7 @@ TEST (rpc, accounts_frontiers) std::string account_text (frontiers.first); ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), account_text); std::string frontier_text (frontiers.second.get ("")); - ASSERT_EQ (node->latest (nano::genesis_account), frontier_text); + ASSERT_EQ (node->latest (nano::genesis_account), nano::block_hash{ frontier_text }); } } @@ -5873,7 +5873,7 @@ TEST (rpc, receive) auto receive_text (response.get ("block")); nano::account_info info; ASSERT_FALSE (node->store.account.get (node->store.tx_begin_read (), key1.pub, info)); - ASSERT_EQ (info.head, receive_text); + ASSERT_EQ (info.head, nano::block_hash{ receive_text }); } // Trying to receive the same block should fail with unreceivable { @@ -6024,7 +6024,7 @@ TEST (rpc, receive_pruned) auto receive_text (response.get ("block")); nano::account_info info; ASSERT_FALSE (node2->store.account.get (node2->store.tx_begin_read (), key1.pub, info)); - ASSERT_EQ (info.head, receive_text); + ASSERT_EQ (info.head, nano::block_hash{ receive_text }); } // Trying to receive the same block should fail with unreceivable { From 81c4e5b5724a30d6e7537d698146cf9fc853ea64 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Mon, 19 Jul 2021 20:11:47 +0100 Subject: [PATCH 086/346] Using direct genesis block instead of json formatted data which isn't what needed by callers. --- nano/secure/common.cpp | 12 ++++++------ nano/secure/common.hpp | 10 +++++----- nano/test_common/testutil.cpp | 1 - nano/test_common/testutil.hpp | 2 -- 4 files changed, 11 insertions(+), 14 deletions(-) diff --git a/nano/secure/common.cpp b/nano/secure/common.cpp index c82133b38f..b32bba2130 100644 --- a/nano/secure/common.cpp +++ b/nano/secure/common.cpp @@ -109,13 +109,13 @@ nano::ledger_constants::ledger_constants (nano::networks network_a) : nano_beta_account (beta_public_key_data), nano_live_account (live_public_key_data), nano_test_account (test_public_key_data), - nano_dev_genesis (dev_genesis_data), - nano_beta_genesis (beta_genesis_data), - nano_live_genesis (live_genesis_data), - nano_test_genesis (test_genesis_data), + nano_dev_genesis (parse_block_from_genesis_data (dev_genesis_data)), + nano_beta_genesis (parse_block_from_genesis_data (beta_genesis_data)), + nano_live_genesis (parse_block_from_genesis_data (live_genesis_data)), + nano_test_genesis (parse_block_from_genesis_data (test_genesis_data)), genesis_account (network_a == nano::networks::nano_dev_network ? nano_dev_account : network_a == nano::networks::nano_beta_network ? nano_beta_account : network_a == nano::networks::nano_test_network ? nano_test_account : nano_live_account), genesis_block (network_a == nano::networks::nano_dev_network ? nano_dev_genesis : network_a == nano::networks::nano_beta_network ? nano_beta_genesis : network_a == nano::networks::nano_test_network ? nano_test_genesis : nano_live_genesis), - genesis_hash (parse_block_from_genesis_data (genesis_block)->hash ()), + genesis_hash (genesis_block->hash ()), genesis_amount (std::numeric_limits::max ()), burn_account (0), nano_dev_final_votes_canary_account (dev_public_key_data), @@ -818,7 +818,7 @@ std::unique_ptr nano::collect_container_info (vo nano::genesis::genesis () { static nano::network_params network_params; - open = parse_block_from_genesis_data (network_params.ledger.genesis_block); + open = network_params.ledger.genesis_block; debug_assert (open != nullptr); } diff --git a/nano/secure/common.hpp b/nano/secure/common.hpp index 211dacff28..e64cf19c15 100644 --- a/nano/secure/common.hpp +++ b/nano/secure/common.hpp @@ -374,12 +374,12 @@ class ledger_constants nano::account nano_beta_account; nano::account nano_live_account; nano::account nano_test_account; - std::string nano_dev_genesis; - std::string nano_beta_genesis; - std::string nano_live_genesis; - std::string nano_test_genesis; + std::shared_ptr nano_dev_genesis; + std::shared_ptr nano_beta_genesis; + std::shared_ptr nano_live_genesis; + std::shared_ptr nano_test_genesis; nano::account genesis_account; - std::string genesis_block; + std::shared_ptr genesis_block; nano::block_hash genesis_hash; nano::uint128_t genesis_amount; nano::account burn_account; diff --git a/nano/test_common/testutil.cpp b/nano/test_common/testutil.cpp index a28f430bab..6b97f4dad7 100644 --- a/nano/test_common/testutil.cpp +++ b/nano/test_common/testutil.cpp @@ -18,7 +18,6 @@ nano::ledger_constants dev_constants (nano::networks::nano_dev_network); nano::keypair const & nano::zero_key (dev_constants.zero_key); nano::keypair const & nano::dev_genesis_key (dev_constants.dev_genesis_key); nano::account const & nano::nano_dev_account (dev_constants.nano_dev_account); -std::string const & nano::nano_dev_genesis (dev_constants.nano_dev_genesis); nano::account const & nano::genesis_account (dev_constants.genesis_account); nano::block_hash const & nano::genesis_hash (dev_constants.genesis_hash); nano::uint128_t const & nano::genesis_amount (dev_constants.genesis_amount); diff --git a/nano/test_common/testutil.hpp b/nano/test_common/testutil.hpp index 374c4c10b9..74cf8bc960 100644 --- a/nano/test_common/testutil.hpp +++ b/nano/test_common/testutil.hpp @@ -55,8 +55,6 @@ class system; extern nano::keypair const & zero_key; extern nano::keypair const & dev_genesis_key; -extern std::string const & nano_dev_genesis; -extern std::string const & genesis_block; extern nano::block_hash const & genesis_hash; extern nano::public_key const & nano_dev_account; extern nano::public_key const & genesis_account; From 07c8c790d2f85ae847d9268725c55659437443f6 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Mon, 19 Jul 2021 22:09:33 +0100 Subject: [PATCH 087/346] Converting genesis_account to a function of the genesis block, rather than being memorized unnecessarily. --- nano/node/bootstrap/bootstrap_lazy.cpp | 2 +- nano/node/cli.cpp | 4 ++-- nano/node/json_handler.cpp | 6 +++--- nano/node/node.cpp | 2 +- nano/node/nodeconfig.cpp | 4 ++-- nano/qt/qt.cpp | 4 ++-- nano/secure/common.cpp | 10 ++++++++-- nano/secure/common.hpp | 2 +- nano/secure/ledger.cpp | 4 ++-- nano/secure/store_partial.hpp | 12 ++++++------ nano/test_common/system.cpp | 2 +- nano/test_common/testutil.cpp | 2 +- 12 files changed, 30 insertions(+), 24 deletions(-) diff --git a/nano/node/bootstrap/bootstrap_lazy.cpp b/nano/node/bootstrap/bootstrap_lazy.cpp index 372d663186..d30a7d1895 100644 --- a/nano/node/bootstrap/bootstrap_lazy.cpp +++ b/nano/node/bootstrap/bootstrap_lazy.cpp @@ -247,7 +247,7 @@ bool nano::bootstrap_attempt_lazy::process_block_lazy (std::shared_ptrsource ().is_zero () && !node->ledger.block_or_pruned_exists (block_a->source ()) && block_a->source () != node->network_params.ledger.genesis_account) + if (!block_a->source ().is_zero () && !node->ledger.block_or_pruned_exists (block_a->source ()) && block_a->source () != node->network_params.ledger.genesis_account ()) { lazy_add (block_a->source (), retry_limit); } diff --git a/nano/node/cli.cpp b/nano/node/cli.cpp index 30b730e570..3305ed90cc 100644 --- a/nano/node/cli.cpp +++ b/nano/node/cli.cpp @@ -574,7 +574,7 @@ std::error_code nano::handle_node_options (boost::program_options::variables_map { auto transaction (node.node->store.tx_begin_write ()); auto conf_height_reset_num = 0; - if (account == node.node->network_params.ledger.genesis_account) + if (account == node.node->network_params.ledger.genesis_account ()) { conf_height_reset_num = 1; node.node->store.confirmation_height.put (transaction, account, { confirmation_height_info.height, node.node->network_params.ledger.genesis_hash }); @@ -1307,7 +1307,7 @@ void reset_confirmation_heights (nano::write_transaction const & transaction, na // Then make sure the confirmation height of the genesis account open block is 1 nano::network_params network_params; - store.confirmation_height.put (transaction, network_params.ledger.genesis_account, { 1, network_params.ledger.genesis_hash }); + store.confirmation_height.put (transaction, network_params.ledger.genesis_account (), { 1, network_params.ledger.genesis_hash }); } bool is_using_rocksdb (boost::filesystem::path const & data_path, boost::program_options::variables_map const & vm, std::error_code & ec) diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index a66000e2c5..e9a8742ae9 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -1038,7 +1038,7 @@ void nano::json_handler::active_difficulty () void nano::json_handler::available_supply () { - auto genesis_balance (node.balance (node.network_params.ledger.genesis_account)); // Cold storage genesis + auto genesis_balance (node.balance (node.network_params.ledger.genesis_account ())); // Cold storage genesis auto landing_balance (node.balance (nano::account ("059F68AAB29DE0D3A27443625C7EA9CDDB6517A8B76FE37727EF6A4D76832AD5"))); // Active unavailable account auto faucet_balance (node.balance (nano::account ("8E319CE6F3025E5B2DF66DA7AB1467FE48F1679C13DD43BFDB29FA2E9FC40D3B"))); // Faucet account auto burned_balance ((node.balance_pending (nano::account (0), false)).second); // Burning 0 account @@ -2315,7 +2315,7 @@ class history_visitor : public nano::block_visitor // Report opens as a receive tree.put ("type", "receive"); } - if (block_a.hashables.source != network_params.ledger.genesis_account) + if (block_a.hashables.source != network_params.ledger.genesis_account ()) { bool error_or_pruned (false); auto amount (handler.node.ledger.amount_safe (transaction, hash, error_or_pruned).convert_to ()); @@ -2331,7 +2331,7 @@ class history_visitor : public nano::block_visitor } else { - tree.put ("account", network_params.ledger.genesis_account.to_account ()); + tree.put ("account", network_params.ledger.genesis_account ().to_account ()); tree.put ("amount", network_params.ledger.genesis_amount.convert_to ()); } } diff --git a/nano/node/node.cpp b/nano/node/node.cpp index 284558711b..a3faaa4177 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -1318,7 +1318,7 @@ void nano::node::process_confirmed_data (nano::transaction const & transaction_a bool error (false); auto previous_balance (ledger.balance_safe (transaction_a, previous, error)); auto block_balance (store.block.balance_calculated (block_a)); - if (hash_a != ledger.network_params.ledger.genesis_account) + if (hash_a != ledger.network_params.ledger.genesis_account ()) { if (!error) { diff --git a/nano/node/nodeconfig.cpp b/nano/node/nodeconfig.cpp index effd8af9b4..c422bf7ec1 100644 --- a/nano/node/nodeconfig.cpp +++ b/nano/node/nodeconfig.cpp @@ -40,7 +40,7 @@ nano::node_config::node_config (uint16_t peering_port_a, nano::logging const & l { case nano::networks::nano_dev_network: enable_voting = true; - preconfigured_representatives.push_back (network_params.ledger.genesis_account); + preconfigured_representatives.push_back (network_params.ledger.genesis_account ()); break; case nano::networks::nano_beta_network: { @@ -63,7 +63,7 @@ nano::node_config::node_config (uint16_t peering_port_a, nano::logging const & l break; case nano::networks::nano_test_network: preconfigured_peers.push_back (default_test_peer_network); - preconfigured_representatives.push_back (network_params.ledger.genesis_account); + preconfigured_representatives.push_back (network_params.ledger.genesis_account ()); break; default: debug_assert (false); diff --git a/nano/qt/qt.cpp b/nano/qt/qt.cpp index 17354cdd2b..c51436d405 100644 --- a/nano/qt/qt.cpp +++ b/nano/qt/qt.cpp @@ -544,7 +544,7 @@ class short_text_visitor : public nano::block_visitor { static nano::network_params params; type = "Receive"; - if (block_a.hashables.source != params.ledger.genesis_account) + if (block_a.hashables.source != params.ledger.genesis_account ()) { bool error_or_pruned (false); account = ledger.account_safe (transaction, block_a.hashables.source, error_or_pruned); @@ -556,7 +556,7 @@ class short_text_visitor : public nano::block_visitor } else { - account = params.ledger.genesis_account; + account = params.ledger.genesis_account (); amount = params.ledger.genesis_amount; } } diff --git a/nano/secure/common.cpp b/nano/secure/common.cpp index b32bba2130..dad95f84f3 100644 --- a/nano/secure/common.cpp +++ b/nano/secure/common.cpp @@ -113,7 +113,6 @@ nano::ledger_constants::ledger_constants (nano::networks network_a) : nano_beta_genesis (parse_block_from_genesis_data (beta_genesis_data)), nano_live_genesis (parse_block_from_genesis_data (live_genesis_data)), nano_test_genesis (parse_block_from_genesis_data (test_genesis_data)), - genesis_account (network_a == nano::networks::nano_dev_network ? nano_dev_account : network_a == nano::networks::nano_beta_network ? nano_beta_account : network_a == nano::networks::nano_test_network ? nano_test_account : nano_live_account), genesis_block (network_a == nano::networks::nano_dev_network ? nano_dev_genesis : network_a == nano::networks::nano_beta_network ? nano_beta_genesis : network_a == nano::networks::nano_test_network ? nano_test_genesis : nano_live_genesis), genesis_hash (genesis_block->hash ()), genesis_amount (std::numeric_limits::max ()), @@ -132,7 +131,7 @@ nano::ledger_constants::ledger_constants (nano::networks network_a) : nano::link epoch_link_v1; const char * epoch_message_v1 ("epoch v1 block"); strncpy ((char *)epoch_link_v1.bytes.data (), epoch_message_v1, epoch_link_v1.bytes.size ()); - epochs.add (nano::epoch::epoch_1, genesis_account, epoch_link_v1); + epochs.add (nano::epoch::epoch_1, genesis_account (), epoch_link_v1); nano::link epoch_link_v2; nano::account nano_live_epoch_v2_signer; @@ -144,6 +143,13 @@ nano::ledger_constants::ledger_constants (nano::networks network_a) : epochs.add (nano::epoch::epoch_2, epoch_v2_signer, epoch_link_v2); } +nano::account nano::ledger_constants::genesis_account () const +{ + auto result = genesis_block->account (); + debug_assert (!result.is_zero ()); + return result; +} + nano::random_constants::random_constants () { nano::random_pool::generate_block (not_an_account.bytes.data (), not_an_account.bytes.size ()); diff --git a/nano/secure/common.hpp b/nano/secure/common.hpp index e64cf19c15..445934e8aa 100644 --- a/nano/secure/common.hpp +++ b/nano/secure/common.hpp @@ -368,6 +368,7 @@ class ledger_constants public: ledger_constants (nano::network_constants & network_constants); ledger_constants (nano::networks network_a); + nano::account genesis_account () const; nano::keypair zero_key; nano::keypair dev_genesis_key; nano::account nano_dev_account; @@ -378,7 +379,6 @@ class ledger_constants std::shared_ptr nano_beta_genesis; std::shared_ptr nano_live_genesis; std::shared_ptr nano_test_genesis; - nano::account genesis_account; std::shared_ptr genesis_block; nano::block_hash genesis_hash; nano::uint128_t genesis_amount; diff --git a/nano/secure/ledger.cpp b/nano/secure/ledger.cpp index d653dba2a1..aa6c3d716a 100644 --- a/nano/secure/ledger.cpp +++ b/nano/secure/ledger.cpp @@ -1102,7 +1102,7 @@ nano::account nano::ledger::account_safe (nano::transaction const & transaction_ // Return amount decrease or increase for block nano::uint128_t nano::ledger::amount (nano::transaction const & transaction_a, nano::account const & account_a) { - release_assert (account_a == network_params.ledger.genesis_account); + release_assert (account_a == network_params.ledger.genesis_account ()); return network_params.ledger.genesis_amount; } @@ -1204,7 +1204,7 @@ class dependent_block_visitor : public nano::block_visitor } void open_block (nano::open_block const & block_a) override { - if (block_a.source () != ledger.network_params.ledger.genesis_account) + if (block_a.source () != ledger.network_params.ledger.genesis_account ()) { result[0] = block_a.source (); } diff --git a/nano/secure/store_partial.hpp b/nano/secure/store_partial.hpp index 6f7388ed7d..df1b2825e1 100644 --- a/nano/secure/store_partial.hpp +++ b/nano/secure/store_partial.hpp @@ -107,16 +107,16 @@ class store_partial : public store { auto hash_l (genesis_a.hash ()); debug_assert (account.begin (transaction_a) == account.end ()); - genesis_a.open->sideband_set (nano::block_sideband (network_params.ledger.genesis_account, 0, network_params.ledger.genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); + genesis_a.open->sideband_set (nano::block_sideband (network_params.ledger.genesis_account (), 0, network_params.ledger.genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); block.put (transaction_a, hash_l, *genesis_a.open); ++ledger_cache_a.block_count; - confirmation_height.put (transaction_a, network_params.ledger.genesis_account, nano::confirmation_height_info{ 1, genesis_a.hash () }); + confirmation_height.put (transaction_a, network_params.ledger.genesis_account (), nano::confirmation_height_info{ 1, genesis_a.hash () }); ++ledger_cache_a.cemented_count; - ledger_cache_a.final_votes_confirmation_canary = (network_params.ledger.final_votes_canary_account == network_params.ledger.genesis_account && 1 >= network_params.ledger.final_votes_canary_height); - account.put (transaction_a, network_params.ledger.genesis_account, { hash_l, network_params.ledger.genesis_account, genesis_a.open->hash (), std::numeric_limits::max (), nano::seconds_since_epoch (), 1, nano::epoch::epoch_0 }); + ledger_cache_a.final_votes_confirmation_canary = (network_params.ledger.final_votes_canary_account == network_params.ledger.genesis_account () && 1 >= network_params.ledger.final_votes_canary_height); + account.put (transaction_a, network_params.ledger.genesis_account (), { hash_l, network_params.ledger.genesis_account (), genesis_a.open->hash (), std::numeric_limits::max (), nano::seconds_since_epoch (), 1, nano::epoch::epoch_0 }); ++ledger_cache_a.account_count; - ledger_cache_a.rep_weights.representation_put (network_params.ledger.genesis_account, std::numeric_limits::max ()); - frontier.put (transaction_a, hash_l, network_params.ledger.genesis_account); + ledger_cache_a.rep_weights.representation_put (network_params.ledger.genesis_account (), std::numeric_limits::max ()); + frontier.put (transaction_a, hash_l, network_params.ledger.genesis_account ()); } bool root_exists (nano::transaction const & transaction_a, nano::root const & root_a) override diff --git a/nano/test_common/system.cpp b/nano/test_common/system.cpp index a0bee50d4c..6a986d4b0f 100644 --- a/nano/test_common/system.cpp +++ b/nano/test_common/system.cpp @@ -398,7 +398,7 @@ void nano::system::generate_receive (nano::node & node_a) } if (send_block != nullptr) { - auto receive_error (wallet (0)->receive_sync (send_block, nano::ledger_constants (nano::networks::nano_dev_network).genesis_account, std::numeric_limits::max ())); + auto receive_error (wallet (0)->receive_sync (send_block, nano::ledger_constants (nano::networks::nano_dev_network).genesis_account (), std::numeric_limits::max ())); (void)receive_error; } } diff --git a/nano/test_common/testutil.cpp b/nano/test_common/testutil.cpp index 6b97f4dad7..d82a944b06 100644 --- a/nano/test_common/testutil.cpp +++ b/nano/test_common/testutil.cpp @@ -18,7 +18,7 @@ nano::ledger_constants dev_constants (nano::networks::nano_dev_network); nano::keypair const & nano::zero_key (dev_constants.zero_key); nano::keypair const & nano::dev_genesis_key (dev_constants.dev_genesis_key); nano::account const & nano::nano_dev_account (dev_constants.nano_dev_account); -nano::account const & nano::genesis_account (dev_constants.genesis_account); +nano::account const & nano::genesis_account (dev_constants.genesis_account ()); nano::block_hash const & nano::genesis_hash (dev_constants.genesis_hash); nano::uint128_t const & nano::genesis_amount (dev_constants.genesis_amount); nano::account const & nano::burn_account (dev_constants.burn_account); From 7399b48cf84389d5cf97aa084ef6d9ef62f25e72 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Mon, 19 Jul 2021 22:32:01 +0100 Subject: [PATCH 088/346] Converting genesis_hash to a function of the genesis_block eliminating unneeded memorization. --- nano/core_test/telemetry.cpp | 24 ++++++++++++++++++++++-- nano/node/cli.cpp | 4 ++-- nano/node/json_handler.cpp | 2 +- nano/node/telemetry.cpp | 4 ++-- nano/secure/common.cpp | 8 +++++++- nano/secure/common.hpp | 2 +- nano/secure/ledger.cpp | 2 +- nano/test_common/telemetry.cpp | 2 +- nano/test_common/testutil.cpp | 2 +- 9 files changed, 38 insertions(+), 12 deletions(-) diff --git a/nano/core_test/telemetry.cpp b/nano/core_test/telemetry.cpp index 9c46221842..6a0adbba5c 100644 --- a/nano/core_test/telemetry.cpp +++ b/nano/core_test/telemetry.cpp @@ -553,7 +553,17 @@ TEST (telemetry, remove_peer_different_genesis) auto node1 (std::make_shared (system.io_ctx, nano::get_available_port (), nano::unique_path (), system.logging, system.work)); // Change genesis block to something else in this test (this is the reference telemetry processing uses). // Possible TSAN issue in the future if something else uses this, but will only appear in tests. - node1->network_params.ledger.genesis_hash = nano::block_hash ("0"); + nano::state_block_builder builder; + auto junk = builder + .account (nano::dev_genesis_key.pub) + .previous (0) + .representative (nano::dev_genesis_key.pub) + .balance (0) + .link (0) + .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .work (0) + .build_shared (); + node1->network_params.ledger.genesis_block = junk; node1->start (); system.nodes.push_back (node1); node0->network.merge_peer (node1->network.endpoint ()); @@ -581,7 +591,17 @@ TEST (telemetry, remove_peer_different_genesis_udp) auto node0 (system.nodes[0]); ASSERT_EQ (0, node0->network.size ()); auto node1 (std::make_shared (system.io_ctx, nano::get_available_port (), nano::unique_path (), system.logging, system.work, node_flags)); - node1->network_params.ledger.genesis_hash = nano::block_hash ("0"); + nano::state_block_builder builder; + auto junk = builder + .account (nano::dev_genesis_key.pub) + .previous (0) + .representative (nano::dev_genesis_key.pub) + .balance (0) + .link (0) + .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .work (0) + .build_shared (); + node1->network_params.ledger.genesis_block = junk; node1->start (); system.nodes.push_back (node1); auto channel0 (std::make_shared (node1->network.udp_channels, node0->network.endpoint (), node0->network_params.protocol.protocol_version)); diff --git a/nano/node/cli.cpp b/nano/node/cli.cpp index 3305ed90cc..b8c76d3735 100644 --- a/nano/node/cli.cpp +++ b/nano/node/cli.cpp @@ -577,7 +577,7 @@ std::error_code nano::handle_node_options (boost::program_options::variables_map if (account == node.node->network_params.ledger.genesis_account ()) { conf_height_reset_num = 1; - node.node->store.confirmation_height.put (transaction, account, { confirmation_height_info.height, node.node->network_params.ledger.genesis_hash }); + node.node->store.confirmation_height.put (transaction, account, { confirmation_height_info.height, node.node->network_params.ledger.genesis_hash () }); } else { @@ -1307,7 +1307,7 @@ void reset_confirmation_heights (nano::write_transaction const & transaction, na // Then make sure the confirmation height of the genesis account open block is 1 nano::network_params network_params; - store.confirmation_height.put (transaction, network_params.ledger.genesis_account (), { 1, network_params.ledger.genesis_hash }); + store.confirmation_height.put (transaction, network_params.ledger.genesis_account (), { 1, network_params.ledger.genesis_hash () }); } bool is_using_rocksdb (boost::filesystem::path const & data_path, boost::program_options::variables_map const & vm, std::error_code & ec) diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index e9a8742ae9..f12fcd833a 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -4143,7 +4143,7 @@ void nano::json_handler::version () response_l.put ("node_vendor", boost::str (boost::format ("Nano %1%") % NANO_VERSION_STRING)); response_l.put ("store_vendor", node.store.vendor_get ()); response_l.put ("network", node.network_params.network.get_current_network_as_string ()); - response_l.put ("network_identifier", node.network_params.ledger.genesis_hash.to_string ()); + response_l.put ("network_identifier", node.network_params.ledger.genesis_hash ().to_string ()); response_l.put ("build_info", BUILD_INFO); response_errors (); } diff --git a/nano/node/telemetry.cpp b/nano/node/telemetry.cpp index ebe4b6b0e3..35144862a7 100644 --- a/nano/node/telemetry.cpp +++ b/nano/node/telemetry.cpp @@ -92,7 +92,7 @@ bool nano::telemetry::verify_message (nano::telemetry_ack const & message_a, nan if (!remove_channel) { // Check for different genesis blocks - remove_channel = (message_a.data.genesis_block != network_params.ledger.genesis_hash); + remove_channel = (message_a.data.genesis_block != network_params.ledger.genesis_hash ()); if (remove_channel) { stats.inc (nano::stat::type::telemetry, nano::stat::detail::different_genesis_hash); @@ -634,7 +634,7 @@ nano::telemetry_data nano::local_telemetry_data (nano::ledger const & ledger_a, telemetry_data.protocol_version = network_params_a.protocol.protocol_version; telemetry_data.uptime = std::chrono::duration_cast (std::chrono::steady_clock::now () - statup_time_a).count (); telemetry_data.unchecked_count = ledger_a.store.unchecked.count (ledger_a.store.tx_begin_read ()); - telemetry_data.genesis_block = network_params_a.ledger.genesis_hash; + telemetry_data.genesis_block = network_params_a.ledger.genesis_hash (); telemetry_data.peer_count = nano::narrow_cast (network_a.size ()); telemetry_data.account_count = ledger_a.cache.account_count; telemetry_data.major_version = nano::get_major_node_version (); diff --git a/nano/secure/common.cpp b/nano/secure/common.cpp index dad95f84f3..33e87eea73 100644 --- a/nano/secure/common.cpp +++ b/nano/secure/common.cpp @@ -114,7 +114,6 @@ nano::ledger_constants::ledger_constants (nano::networks network_a) : nano_live_genesis (parse_block_from_genesis_data (live_genesis_data)), nano_test_genesis (parse_block_from_genesis_data (test_genesis_data)), genesis_block (network_a == nano::networks::nano_dev_network ? nano_dev_genesis : network_a == nano::networks::nano_beta_network ? nano_beta_genesis : network_a == nano::networks::nano_test_network ? nano_test_genesis : nano_live_genesis), - genesis_hash (genesis_block->hash ()), genesis_amount (std::numeric_limits::max ()), burn_account (0), nano_dev_final_votes_canary_account (dev_public_key_data), @@ -150,6 +149,13 @@ nano::account nano::ledger_constants::genesis_account () const return result; } +nano::block_hash nano::ledger_constants::genesis_hash () const +{ + auto result = genesis_block->hash (); + debug_assert (!result.is_zero ()); + return result; +} + nano::random_constants::random_constants () { nano::random_pool::generate_block (not_an_account.bytes.data (), not_an_account.bytes.size ()); diff --git a/nano/secure/common.hpp b/nano/secure/common.hpp index 445934e8aa..fe4ea70465 100644 --- a/nano/secure/common.hpp +++ b/nano/secure/common.hpp @@ -369,6 +369,7 @@ class ledger_constants ledger_constants (nano::network_constants & network_constants); ledger_constants (nano::networks network_a); nano::account genesis_account () const; + nano::block_hash genesis_hash () const; nano::keypair zero_key; nano::keypair dev_genesis_key; nano::account nano_dev_account; @@ -380,7 +381,6 @@ class ledger_constants std::shared_ptr nano_live_genesis; std::shared_ptr nano_test_genesis; std::shared_ptr genesis_block; - nano::block_hash genesis_hash; nano::uint128_t genesis_amount; nano::account burn_account; nano::account nano_dev_final_votes_canary_account; diff --git a/nano/secure/ledger.cpp b/nano/secure/ledger.cpp index aa6c3d716a..6d735d4172 100644 --- a/nano/secure/ledger.cpp +++ b/nano/secure/ledger.cpp @@ -1342,7 +1342,7 @@ uint64_t nano::ledger::pruning_action (nano::write_transaction & transaction_a, { uint64_t pruned_count (0); nano::block_hash hash (hash_a); - while (!hash.is_zero () && hash != network_params.ledger.genesis_hash) + while (!hash.is_zero () && hash != network_params.ledger.genesis_hash ()) { auto block (store.block.get (transaction_a, hash)); if (block != nullptr) diff --git a/nano/test_common/telemetry.cpp b/nano/test_common/telemetry.cpp index 7485ca618d..fc2d2dd0a4 100644 --- a/nano/test_common/telemetry.cpp +++ b/nano/test_common/telemetry.cpp @@ -13,7 +13,7 @@ void nano::compare_default_telemetry_response_data_excluding_signature (nano::te ASSERT_EQ (telemetry_data_a.unchecked_count, 0); ASSERT_EQ (telemetry_data_a.account_count, 1); ASSERT_LT (telemetry_data_a.uptime, 100); - ASSERT_EQ (telemetry_data_a.genesis_block, network_params_a.ledger.genesis_hash); + ASSERT_EQ (telemetry_data_a.genesis_block, network_params_a.ledger.genesis_hash ()); ASSERT_EQ (telemetry_data_a.major_version, nano::get_major_node_version ()); ASSERT_EQ (telemetry_data_a.minor_version, nano::get_minor_node_version ()); ASSERT_EQ (telemetry_data_a.patch_version, nano::get_patch_node_version ()); diff --git a/nano/test_common/testutil.cpp b/nano/test_common/testutil.cpp index d82a944b06..3e972817be 100644 --- a/nano/test_common/testutil.cpp +++ b/nano/test_common/testutil.cpp @@ -19,7 +19,7 @@ nano::keypair const & nano::zero_key (dev_constants.zero_key); nano::keypair const & nano::dev_genesis_key (dev_constants.dev_genesis_key); nano::account const & nano::nano_dev_account (dev_constants.nano_dev_account); nano::account const & nano::genesis_account (dev_constants.genesis_account ()); -nano::block_hash const & nano::genesis_hash (dev_constants.genesis_hash); +nano::block_hash const & nano::genesis_hash (dev_constants.genesis_hash ()); nano::uint128_t const & nano::genesis_amount (dev_constants.genesis_amount); nano::account const & nano::burn_account (dev_constants.burn_account); From 96994234192d7e8e3ace70ba5efc8a12189f583b Mon Sep 17 00:00:00 2001 From: clemahieu Date: Tue, 20 Jul 2021 02:09:16 +0100 Subject: [PATCH 089/346] Remove genesis from initialization constructor. Much of the initialization code was using ledger_constants anyway, opt to get the block itself from here rather than passing in a genesis object. --- nano/core_test/block_store.cpp | 30 ++-- nano/core_test/confirmation_height.cpp | 10 +- nano/core_test/ledger.cpp | 184 ++++++++++++------------- nano/core_test/node.cpp | 2 +- nano/core_test/processor_service.cpp | 4 +- nano/node/node.cpp | 2 +- nano/qt_test/qt.cpp | 4 +- nano/secure/store.hpp | 2 +- nano/secure/store_partial.hpp | 13 +- nano/slow_test/node.cpp | 4 +- 10 files changed, 128 insertions(+), 127 deletions(-) diff --git a/nano/core_test/block_store.cpp b/nano/core_test/block_store.cpp index 3f016e3fe5..1cd1062c4e 100644 --- a/nano/core_test/block_store.cpp +++ b/nano/core_test/block_store.cpp @@ -328,7 +328,7 @@ TEST (block_store, genesis) auto hash (genesis.hash ()); nano::ledger_cache ledger_cache; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger_cache); + store->initialize (transaction, ledger_cache); nano::account_info info; ASSERT_FALSE (store->account.get (transaction, nano::genesis_account, info)); ASSERT_EQ (hash, info.head); @@ -668,7 +668,7 @@ TEST (mdb_block_store, supported_version_upgrades) nano::stat stats; nano::ledger ledger (store, stats); auto transaction (store.tx_begin_write ()); - store.initialize (transaction, genesis, ledger.cache); + store.initialize (transaction, ledger.cache); // Lower the database to the max version unsupported for upgrades store.version.put (transaction, store.minimum_version - 1); } @@ -686,7 +686,7 @@ TEST (mdb_block_store, supported_version_upgrades) nano::stat stats; nano::ledger ledger (store, stats); auto transaction (store.tx_begin_write ()); - store.initialize (transaction, genesis, ledger.cache); + store.initialize (transaction, ledger.cache); // Lower the database version to the minimum version supported for upgrade. store.version.put (transaction, store.minimum_version); store.confirmation_height.del (transaction, nano::genesis_account); @@ -882,7 +882,7 @@ TEST (block_store, cemented_count_cache) auto transaction (store->tx_begin_write ()); nano::genesis genesis; nano::ledger_cache ledger_cache; - store->initialize (transaction, genesis, ledger_cache); + store->initialize (transaction, ledger_cache); ASSERT_EQ (1, ledger_cache.cemented_count); } @@ -895,7 +895,7 @@ TEST (block_store, block_random) { nano::ledger_cache ledger_cache; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger_cache); + store->initialize (transaction, ledger_cache); } auto transaction (store->tx_begin_read ()); auto block (store->block.random (transaction)); @@ -915,7 +915,7 @@ TEST (block_store, pruned_random) { nano::ledger_cache ledger_cache; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger_cache); + store->initialize (transaction, ledger_cache); store->pruned.put (transaction, hash1); } auto transaction (store->tx_begin_read ()); @@ -977,7 +977,7 @@ TEST (block_store, state_block) { nano::ledger_cache ledger_cache; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger_cache); + store->initialize (transaction, ledger_cache); ASSERT_EQ (nano::block_type::state, block1.type ()); store->block.put (transaction, block1.hash (), block1); ASSERT_TRUE (store->block.exists (transaction, block1.hash ())); @@ -1014,7 +1014,7 @@ TEST (mdb_block_store, sideband_height) nano::stat stat; nano::ledger ledger (store, stat); auto transaction (store.tx_begin_write ()); - store.initialize (transaction, genesis, ledger.cache); + store.initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::send_block send (genesis.hash (), nano::dev_genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); @@ -1283,7 +1283,7 @@ TEST (mdb_block_store, upgrade_v14_v15) nano::stat stats; nano::ledger ledger (store, stats); auto transaction (store.tx_begin_write ()); - store.initialize (transaction, genesis, ledger.cache); + store.initialize (transaction, ledger.cache); nano::account_info account_info; ASSERT_FALSE (store.account.get (transaction, nano::genesis_account, account_info)); nano::confirmation_height_info confirmation_height_info; @@ -1391,7 +1391,7 @@ TEST (mdb_block_store, upgrade_v15_v16) nano::stat stats; nano::ledger ledger (store, stats); auto transaction (store.tx_begin_write ()); - store.initialize (transaction, genesis, ledger.cache); + store.initialize (transaction, ledger.cache); // The representation table should get removed after, so readd it so that we can later confirm this actually happens auto txn = store.env.tx (transaction); ASSERT_FALSE (mdb_dbi_open (txn, "representation", MDB_CREATE, &store.representation_handle)); @@ -1444,7 +1444,7 @@ TEST (mdb_block_store, upgrade_v16_v17) nano::stat stats; nano::ledger ledger (store, stats); auto transaction (store.tx_begin_write ()); - store.initialize (transaction, genesis, ledger.cache); + store.initialize (transaction, ledger.cache); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block1).code); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block2).code); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block3).code); @@ -1517,7 +1517,7 @@ TEST (mdb_block_store, upgrade_v17_v18) auto transaction (store.tx_begin_write ()); nano::stat stats; nano::ledger ledger (store, stats); - store.initialize (transaction, genesis, ledger.cache); + store.initialize (transaction, ledger.cache); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send_zero).code); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, state_receive_zero).code); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch).code); @@ -1714,7 +1714,7 @@ TEST (mdb_block_store, upgrade_v18_v19) nano::stat stats; nano::ledger ledger (store, stats); auto transaction (store.tx_begin_write ()); - store.initialize (transaction, genesis, ledger.cache); + store.initialize (transaction, ledger.cache); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive).code); @@ -1797,7 +1797,7 @@ TEST (mdb_block_store, upgrade_v19_v20) nano::mdb_store store (logger, path); nano::ledger ledger (store, stats); auto transaction (store.tx_begin_write ()); - store.initialize (transaction, genesis, ledger.cache); + store.initialize (transaction, ledger.cache); // Delete pruned table ASSERT_FALSE (mdb_drop (store.env.tx (transaction), store.pruned_handle, 1)); store.version.put (transaction, 19); @@ -1827,7 +1827,7 @@ TEST (mdb_block_store, upgrade_v20_v21) nano::mdb_store store (logger, path); nano::ledger ledger (store, stats); auto transaction (store.tx_begin_write ()); - store.initialize (transaction, genesis, ledger.cache); + store.initialize (transaction, ledger.cache); // Delete pruned table ASSERT_FALSE (mdb_drop (store.env.tx (transaction), store.final_votes_handle, 1)); store.version.put (transaction, 20); diff --git a/nano/core_test/confirmation_height.cpp b/nano/core_test/confirmation_height.cpp index 77c890f6e4..966fe7c13a 100644 --- a/nano/core_test/confirmation_height.cpp +++ b/nano/core_test/confirmation_height.cpp @@ -732,7 +732,7 @@ TEST (confirmation_heightDeathTest, rollback_added_block) auto send = std::make_shared (genesis.hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); { auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); } uint64_t batch_write_size = 2048; @@ -809,7 +809,7 @@ TEST (confirmation_heightDeathTest, modified_chain) auto send = std::make_shared (nano::genesis_hash, key1.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (nano::genesis_hash)); { auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, *send).code); } @@ -881,7 +881,7 @@ TEST (confirmation_heightDeathTest, modified_chain_account_removed) auto open = std::make_shared (key1.pub, 0, 0, nano::Gxrb_ratio, send->hash (), key1.prv, key1.pub, *pool.generate (key1.pub)); { auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, *send).code); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, *open).code); } @@ -1376,7 +1376,7 @@ TEST (confirmation_height, unbounded_block_cache_iteration) auto send1 = std::make_shared (send->hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send->hash ())); { auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, *send).code); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, *send1).code); } @@ -1429,7 +1429,7 @@ TEST (confirmation_height, pruned_source) auto open2 = std::make_shared (key2.pub, 0, key1.pub, 50, send2->hash (), key2.prv, key2.pub, *pool.generate (key2.pub)); { auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, *send1).code); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, *open1).code); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, *send2).code); diff --git a/nano/core_test/ledger.cpp b/nano/core_test/ledger.cpp index a6149a197a..8f0aae15e5 100644 --- a/nano/core_test/ledger.cpp +++ b/nano/core_test/ledger.cpp @@ -48,7 +48,7 @@ TEST (ledger, genesis_balance) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); auto balance (ledger.account_balance (transaction, nano::genesis_account)); ASSERT_EQ (nano::genesis_amount, balance); auto amount (ledger.amount (transaction, nano::genesis_account)); @@ -74,7 +74,7 @@ TEST (ledger, process_modifies_sideband) nano::stat stats; nano::ledger ledger (*store, stats); nano::genesis genesis; - store->initialize (store->tx_begin_write (), genesis, ledger.cache); + store->initialize (store->tx_begin_write (), ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (store->tx_begin_write (), send1).code); @@ -91,7 +91,7 @@ TEST (ledger, process_send) nano::ledger ledger (*store, stats); auto transaction (store->tx_begin_write ()); nano::genesis genesis; - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::account_info info1; ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info1)); @@ -191,7 +191,7 @@ TEST (ledger, process_receive) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::account_info info1; ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info1)); @@ -255,7 +255,7 @@ TEST (ledger, rollback_receiver) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::account_info info1; ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info1)); @@ -295,7 +295,7 @@ TEST (ledger, rollback_representation) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key5; nano::change_block change1 (genesis.hash (), key5.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); @@ -349,7 +349,7 @@ TEST (ledger, receive_rollback) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::send_block send (genesis.hash (), nano::dev_genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); @@ -367,7 +367,7 @@ TEST (ledger, process_duplicate) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::account_info info1; ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info1)); @@ -390,7 +390,7 @@ TEST (ledger, representative_genesis) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); auto latest (ledger.latest (transaction, nano::dev_genesis_key.pub)); ASSERT_FALSE (latest.is_zero ()); ASSERT_EQ (genesis.open->hash (), ledger.representative (transaction, latest)); @@ -405,7 +405,7 @@ TEST (ledger, weight) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::genesis_account)); } @@ -419,7 +419,7 @@ TEST (ledger, representative_change) nano::keypair key2; nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::dev_genesis_key.pub)); ASSERT_EQ (0, ledger.weight (key2.pub)); @@ -459,7 +459,7 @@ TEST (ledger, send_fork) nano::keypair key3; nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::account_info info1; ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info1)); @@ -480,7 +480,7 @@ TEST (ledger, receive_fork) nano::keypair key3; nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::account_info info1; ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info1)); @@ -507,7 +507,7 @@ TEST (ledger, open_fork) nano::keypair key3; nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::account_info info1; ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info1)); @@ -540,7 +540,7 @@ TEST (ledger, representation) auto & rep_weights = ledger.cache.rep_weights; nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); ASSERT_EQ (nano::genesis_amount, rep_weights.representation_get (nano::dev_genesis_key.pub)); nano::keypair key2; @@ -614,7 +614,7 @@ TEST (ledger, double_open) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key2; nano::send_block send1 (genesis.hash (), key2.pub, 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); @@ -634,7 +634,7 @@ TEST (ledger, double_receive) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key2; nano::send_block send1 (genesis.hash (), key2.pub, 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); @@ -920,7 +920,7 @@ TEST (ledger, fail_change_old) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; nano::change_block block (genesis.hash (), key1.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); @@ -939,7 +939,7 @@ TEST (ledger, fail_change_gap_previous) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; nano::change_block block (1, key1.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (nano::root (1))); @@ -956,7 +956,7 @@ TEST (ledger, fail_change_bad_signature) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; nano::change_block block (genesis.hash (), key1.pub, nano::keypair ().prv, 0, *pool.generate (genesis.hash ())); @@ -973,7 +973,7 @@ TEST (ledger, fail_change_fork) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; nano::change_block block1 (genesis.hash (), key1.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); @@ -994,7 +994,7 @@ TEST (ledger, fail_send_old) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; nano::send_block block (genesis.hash (), key1.pub, 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); @@ -1013,7 +1013,7 @@ TEST (ledger, fail_send_gap_previous) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; nano::send_block block (1, key1.pub, 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (nano::root (1))); @@ -1030,7 +1030,7 @@ TEST (ledger, fail_send_bad_signature) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; nano::send_block block (genesis.hash (), key1.pub, 1, nano::keypair ().prv, 0, *pool.generate (genesis.hash ())); @@ -1047,7 +1047,7 @@ TEST (ledger, fail_send_negative_spend) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); @@ -1066,7 +1066,7 @@ TEST (ledger, fail_send_fork) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); @@ -1085,7 +1085,7 @@ TEST (ledger, fail_open_old) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); @@ -1104,7 +1104,7 @@ TEST (ledger, fail_open_gap_source) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; nano::open_block block2 (1, 1, key1.pub, key1.prv, key1.pub, *pool.generate (key1.pub)); @@ -1121,7 +1121,7 @@ TEST (ledger, fail_open_bad_signature) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); @@ -1140,7 +1140,7 @@ TEST (ledger, fail_open_fork_previous) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); @@ -1163,7 +1163,7 @@ TEST (ledger, fail_open_account_mismatch) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); @@ -1183,7 +1183,7 @@ TEST (ledger, fail_receive_old) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); @@ -1206,7 +1206,7 @@ TEST (ledger, fail_receive_gap_source) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); @@ -1232,7 +1232,7 @@ TEST (ledger, fail_receive_overreceive) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); @@ -1255,7 +1255,7 @@ TEST (ledger, fail_receive_bad_signature) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); @@ -1281,7 +1281,7 @@ TEST (ledger, fail_receive_gap_previous_opened) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); @@ -1307,7 +1307,7 @@ TEST (ledger, fail_receive_gap_previous_unopened) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); @@ -1330,7 +1330,7 @@ TEST (ledger, fail_receive_fork_previous) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); @@ -1360,7 +1360,7 @@ TEST (ledger, fail_receive_received_source) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; nano::send_block block1 (genesis.hash (), key1.pub, 2, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); @@ -1409,7 +1409,7 @@ TEST (ledger, latest_root) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key; ASSERT_EQ (key.pub, ledger.latest_root (transaction, key.pub)); @@ -1429,7 +1429,7 @@ TEST (ledger, change_representative_move_representation) nano::keypair key1; auto transaction (store->tx_begin_write ()); nano::genesis genesis; - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); auto hash1 (genesis.hash ()); ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::dev_genesis_key.pub)); @@ -1454,7 +1454,7 @@ TEST (ledger, send_open_receive_rollback) nano::ledger ledger (*store, stats); auto transaction (store->tx_begin_write ()); nano::genesis genesis; - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::account_info info1; ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info1)); @@ -1517,7 +1517,7 @@ TEST (ledger, bootstrap_rep_weight) nano::work_pool pool (std::numeric_limits::max ()); { auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info1)); nano::send_block send (info1.head, key2.pub, std::numeric_limits::max () - 50, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (info1.head)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); @@ -1550,7 +1550,7 @@ TEST (ledger, block_destination_source) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair dest; nano::uint128_t balance (nano::genesis_amount); @@ -1596,7 +1596,7 @@ TEST (ledger, state_account) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -1612,7 +1612,7 @@ TEST (ledger, state_send_receive) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -1654,7 +1654,7 @@ TEST (ledger, state_receive) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::send_block send1 (genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -1689,7 +1689,7 @@ TEST (ledger, state_rep_change) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair rep; nano::state_block change1 (nano::genesis_account, genesis.hash (), rep.pub, nano::genesis_amount, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); @@ -1717,7 +1717,7 @@ TEST (ledger, state_open) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); @@ -1757,7 +1757,7 @@ TEST (ledger, send_after_state_fail) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -1775,7 +1775,7 @@ TEST (ledger, receive_after_state_fail) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -1793,7 +1793,7 @@ TEST (ledger, change_after_state_fail) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -1811,7 +1811,7 @@ TEST (ledger, state_unreceivable_fail) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::send_block send1 (genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -1835,7 +1835,7 @@ TEST (ledger, state_receive_bad_amount_fail) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::send_block send1 (genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -1859,7 +1859,7 @@ TEST (ledger, state_no_link_amount_fail) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -1877,7 +1877,7 @@ TEST (ledger, state_receive_wrong_account_fail) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -1902,7 +1902,7 @@ TEST (ledger, state_open_state_fork) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); @@ -1923,7 +1923,7 @@ TEST (ledger, state_state_open_fork) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); @@ -1945,7 +1945,7 @@ TEST (ledger, state_open_previous_fail) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); @@ -1963,7 +1963,7 @@ TEST (ledger, state_open_source_fail) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); @@ -1981,7 +1981,7 @@ TEST (ledger, state_send_change) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair rep; nano::state_block send1 (nano::genesis_account, genesis.hash (), rep.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); @@ -2009,7 +2009,7 @@ TEST (ledger, state_receive_change) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -2046,7 +2046,7 @@ TEST (ledger, state_open_old) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); @@ -2067,7 +2067,7 @@ TEST (ledger, state_receive_old) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); @@ -2092,7 +2092,7 @@ TEST (ledger, state_rollback_send) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -2124,7 +2124,7 @@ TEST (ledger, state_rollback_receive) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -2151,7 +2151,7 @@ TEST (ledger, state_rollback_received_send) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key; nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); @@ -2179,7 +2179,7 @@ TEST (ledger, state_rep_change_rollback) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair rep; nano::state_block change1 (nano::genesis_account, genesis.hash (), rep.pub, nano::genesis_amount, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); @@ -2200,7 +2200,7 @@ TEST (ledger, state_open_rollback) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); @@ -2227,7 +2227,7 @@ TEST (ledger, state_send_change_rollback) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair rep; nano::state_block send1 (nano::genesis_account, genesis.hash (), rep.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); @@ -2249,7 +2249,7 @@ TEST (ledger, state_receive_change_rollback) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -2273,7 +2273,7 @@ TEST (ledger, epoch_blocks_v1_general) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; nano::state_block epoch1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); @@ -2344,7 +2344,7 @@ TEST (ledger, epoch_blocks_v2_general) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; nano::state_block epoch1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); @@ -2410,7 +2410,7 @@ TEST (ledger, epoch_blocks_receive_upgrade) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); @@ -2491,7 +2491,7 @@ TEST (ledger, epoch_blocks_fork) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; nano::send_block send1 (genesis.hash (), nano::account (0), nano::genesis_amount, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); @@ -2675,7 +2675,7 @@ TEST (ledger, could_fit) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; // Test legacy and state change blocks could_fit @@ -2916,7 +2916,7 @@ TEST (ledger, confirmation_height_not_updated) nano::ledger ledger (*store, stats); auto transaction (store->tx_begin_write ()); nano::genesis genesis; - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::account_info account_info; ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, account_info)); @@ -2978,7 +2978,7 @@ TEST (ledger, work_validation) nano::stat stats; nano::ledger ledger (*store, stats); nano::genesis genesis; - store->initialize (store->tx_begin_write (), genesis, ledger.cache); + store->initialize (store->tx_begin_write (), ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::block_builder builder; auto gen = nano::dev_genesis_key; @@ -3073,7 +3073,7 @@ TEST (ledger, dependents_confirmed) nano::ledger ledger (*store, stats); auto transaction (store->tx_begin_write ()); nano::genesis genesis; - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); ASSERT_TRUE (ledger.dependents_confirmed (transaction, *genesis.open)); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; @@ -3147,7 +3147,7 @@ TEST (ledger, dependents_confirmed_pruning) ledger.pruning = true; auto transaction (store->tx_begin_write ()); nano::genesis genesis; - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; auto send1 = builder.state () @@ -3198,7 +3198,7 @@ TEST (ledger, block_confirmed) nano::ledger ledger (*store, stats); auto transaction (store->tx_begin_write ()); nano::genesis genesis; - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); ASSERT_TRUE (ledger.block_confirmed (transaction, genesis.open->hash ())); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; @@ -3230,7 +3230,7 @@ TEST (ledger, cache) nano::stat stats; nano::ledger ledger (*store, stats); nano::genesis genesis; - store->initialize (store->tx_begin_write (), genesis, ledger.cache); + store->initialize (store->tx_begin_write (), ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::block_builder builder; @@ -3344,7 +3344,7 @@ TEST (ledger, pruning_action) ledger.pruning = true; nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -3401,7 +3401,7 @@ TEST (ledger, pruning_large_chain) ledger.pruning = true; nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); size_t send_receive_pairs (20); auto last_hash (genesis.hash ()); @@ -3438,7 +3438,7 @@ TEST (ledger, pruning_source_rollback) ledger.pruning = true; nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::state_block epoch1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch1).code); @@ -3490,7 +3490,7 @@ TEST (ledger, pruning_source_rollback_legacy) ledger.pruning = true; nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::send_block send1 (genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -3569,7 +3569,7 @@ TEST (ledger, pruning_process_error) ledger.pruning = true; nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -3599,7 +3599,7 @@ TEST (ledger, pruning_legacy_blocks) nano::genesis genesis; nano::keypair key1; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::send_block send1 (genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -3644,7 +3644,7 @@ TEST (ledger, pruning_safe_functions) ledger.pruning = true; nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -3687,7 +3687,7 @@ TEST (ledger, hash_root_random) ledger.pruning = true; nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -3748,7 +3748,7 @@ TEST (ledger, migrate_lmdb_to_rocksdb) { auto transaction (store.tx_begin_write ()); - store.initialize (transaction, genesis, ledger.cache); + store.initialize (transaction, ledger.cache); ASSERT_FALSE (store.init_error ()); // Lower the database to the max version unsupported for upgrades @@ -3811,7 +3811,7 @@ TEST (ledger, unconfirmed_frontiers) nano::stat stats; nano::ledger ledger (*store, stats); nano::genesis genesis; - store->initialize (store->tx_begin_write (), genesis, ledger.cache); + store->initialize (store->tx_begin_write (), ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); auto unconfirmed_frontiers = ledger.unconfirmed_frontiers (); diff --git a/nano/core_test/node.cpp b/nano/core_test/node.cpp index 033d3606c6..e6516e5087 100644 --- a/nano/core_test/node.cpp +++ b/nano/core_test/node.cpp @@ -3726,7 +3726,7 @@ TEST (node, dont_write_lock_node) nano::genesis genesis; nano::ledger_cache ledger_cache; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger_cache); + store->initialize (transaction, ledger_cache); } // Hold write lock open until main thread is done needing it diff --git a/nano/core_test/processor_service.cpp b/nano/core_test/processor_service.cpp index 47d856a81f..4c26fdecb7 100644 --- a/nano/core_test/processor_service.cpp +++ b/nano/core_test/processor_service.cpp @@ -16,7 +16,7 @@ TEST (processor_service, bad_send_signature) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::account_info info1; ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info1)); @@ -35,7 +35,7 @@ TEST (processor_service, bad_receive_signature) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::account_info info1; ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info1)); diff --git a/nano/node/node.cpp b/nano/node/node.cpp index a3faaa4177..9b9ac0d7f2 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -349,7 +349,7 @@ nano::node::node (boost::asio::io_context & io_ctx_a, boost::filesystem::path co { auto transaction (store.tx_begin_write ({ tables::accounts, tables::blocks, tables::confirmation_height, tables::frontiers })); // Store was empty meaning we just created it, add the genesis block - store.initialize (transaction, genesis, ledger.cache); + store.initialize (transaction, ledger.cache); } if (!ledger.block_or_pruned_exists (genesis.hash ())) diff --git a/nano/qt_test/qt.cpp b/nano/qt_test/qt.cpp index fe4e02a92e..33d12da731 100644 --- a/nano/qt_test/qt.cpp +++ b/nano/qt_test/qt.cpp @@ -519,7 +519,7 @@ TEST (history, short_text) nano::ledger ledger (*store, system.nodes[0]->stats); { auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::keypair key; auto latest (ledger.latest (transaction, nano::dev_genesis_key.pub)); nano::send_block send (latest, nano::dev_genesis_key.pub, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (latest)); @@ -560,7 +560,7 @@ TEST (history, pruned_source) // Basic pruning for legacy blocks. Previous block is pruned, source is pruned { auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); auto latest (ledger.latest (transaction, nano::dev_genesis_key.pub)); nano::send_block send1 (latest, nano::dev_genesis_key.pub, nano::genesis_amount - 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (latest)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); diff --git a/nano/secure/store.hpp b/nano/secure/store.hpp index 4aa87521d1..6909b789f3 100644 --- a/nano/secure/store.hpp +++ b/nano/secure/store.hpp @@ -834,7 +834,7 @@ class store ); // clang-format on virtual ~store () = default; - virtual void initialize (nano::write_transaction const &, nano::genesis const &, nano::ledger_cache &) = 0; + virtual void initialize (nano::write_transaction const &, nano::ledger_cache &) = 0; virtual bool root_exists (nano::transaction const &, nano::root const &) = 0; block_store & block; diff --git a/nano/secure/store_partial.hpp b/nano/secure/store_partial.hpp index df1b2825e1..693024b41a 100644 --- a/nano/secure/store_partial.hpp +++ b/nano/secure/store_partial.hpp @@ -103,17 +103,18 @@ class store_partial : public store * If using a different store version than the latest then you may need * to modify some of the objects in the store to be appropriate for the version before an upgrade. */ - void initialize (nano::write_transaction const & transaction_a, nano::genesis const & genesis_a, nano::ledger_cache & ledger_cache_a) override + void initialize (nano::write_transaction const & transaction_a, nano::ledger_cache & ledger_cache_a) override { - auto hash_l (genesis_a.hash ()); + auto & genesis = *network_params.ledger.genesis_block; + auto hash_l (genesis.hash ()); debug_assert (account.begin (transaction_a) == account.end ()); - genesis_a.open->sideband_set (nano::block_sideband (network_params.ledger.genesis_account (), 0, network_params.ledger.genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); - block.put (transaction_a, hash_l, *genesis_a.open); + genesis.sideband_set (nano::block_sideband (network_params.ledger.genesis_account (), 0, network_params.ledger.genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); + block.put (transaction_a, hash_l, genesis); ++ledger_cache_a.block_count; - confirmation_height.put (transaction_a, network_params.ledger.genesis_account (), nano::confirmation_height_info{ 1, genesis_a.hash () }); + confirmation_height.put (transaction_a, network_params.ledger.genesis_account (), nano::confirmation_height_info{ 1, genesis.hash () }); ++ledger_cache_a.cemented_count; ledger_cache_a.final_votes_confirmation_canary = (network_params.ledger.final_votes_canary_account == network_params.ledger.genesis_account () && 1 >= network_params.ledger.final_votes_canary_height); - account.put (transaction_a, network_params.ledger.genesis_account (), { hash_l, network_params.ledger.genesis_account (), genesis_a.open->hash (), std::numeric_limits::max (), nano::seconds_since_epoch (), 1, nano::epoch::epoch_0 }); + account.put (transaction_a, network_params.ledger.genesis_account (), { hash_l, network_params.ledger.genesis_account (), genesis.hash (), std::numeric_limits::max (), nano::seconds_since_epoch (), 1, nano::epoch::epoch_0 }); ++ledger_cache_a.account_count; ledger_cache_a.rep_weights.representation_put (network_params.ledger.genesis_account (), std::numeric_limits::max ()); frontier.put (transaction_a, hash_l, network_params.ledger.genesis_account ()); diff --git a/nano/slow_test/node.cpp b/nano/slow_test/node.cpp index a66019994b..94f97e8fb4 100644 --- a/nano/slow_test/node.cpp +++ b/nano/slow_test/node.cpp @@ -97,7 +97,7 @@ TEST (ledger, deep_account_compute) nano::ledger ledger (*store, stats); nano::genesis genesis; auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key; auto balance (nano::genesis_amount - 1); @@ -987,7 +987,7 @@ TEST (confirmation_height, many_accounts_send_receive_self_no_elections) { auto transaction (store->tx_begin_write ()); - store->initialize (transaction, genesis, ledger.cache); + store->initialize (transaction, ledger.cache); // Send from genesis account to all other accounts and create open block for them for (auto i = 0; i < num_accounts; ++i) From 0115cbeac5743e88596a1f6612970ca8733024c4 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Tue, 20 Jul 2021 02:36:11 +0100 Subject: [PATCH 090/346] Renaming genesis_block to genesis within ledger_constants. --- nano/core_test/telemetry.cpp | 4 ++-- nano/secure/common.cpp | 8 ++++---- nano/secure/common.hpp | 2 +- nano/secure/store_partial.hpp | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/nano/core_test/telemetry.cpp b/nano/core_test/telemetry.cpp index 6a0adbba5c..c20e0887ed 100644 --- a/nano/core_test/telemetry.cpp +++ b/nano/core_test/telemetry.cpp @@ -563,7 +563,7 @@ TEST (telemetry, remove_peer_different_genesis) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) .work (0) .build_shared (); - node1->network_params.ledger.genesis_block = junk; + node1->network_params.ledger.genesis = junk; node1->start (); system.nodes.push_back (node1); node0->network.merge_peer (node1->network.endpoint ()); @@ -601,7 +601,7 @@ TEST (telemetry, remove_peer_different_genesis_udp) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) .work (0) .build_shared (); - node1->network_params.ledger.genesis_block = junk; + node1->network_params.ledger.genesis = junk; node1->start (); system.nodes.push_back (node1); auto channel0 (std::make_shared (node1->network.udp_channels, node0->network.endpoint (), node0->network_params.protocol.protocol_version)); diff --git a/nano/secure/common.cpp b/nano/secure/common.cpp index 33e87eea73..c9faaec3ee 100644 --- a/nano/secure/common.cpp +++ b/nano/secure/common.cpp @@ -113,7 +113,7 @@ nano::ledger_constants::ledger_constants (nano::networks network_a) : nano_beta_genesis (parse_block_from_genesis_data (beta_genesis_data)), nano_live_genesis (parse_block_from_genesis_data (live_genesis_data)), nano_test_genesis (parse_block_from_genesis_data (test_genesis_data)), - genesis_block (network_a == nano::networks::nano_dev_network ? nano_dev_genesis : network_a == nano::networks::nano_beta_network ? nano_beta_genesis : network_a == nano::networks::nano_test_network ? nano_test_genesis : nano_live_genesis), + genesis (network_a == nano::networks::nano_dev_network ? nano_dev_genesis : network_a == nano::networks::nano_beta_network ? nano_beta_genesis : network_a == nano::networks::nano_test_network ? nano_test_genesis : nano_live_genesis), genesis_amount (std::numeric_limits::max ()), burn_account (0), nano_dev_final_votes_canary_account (dev_public_key_data), @@ -144,14 +144,14 @@ nano::ledger_constants::ledger_constants (nano::networks network_a) : nano::account nano::ledger_constants::genesis_account () const { - auto result = genesis_block->account (); + auto result = genesis->account (); debug_assert (!result.is_zero ()); return result; } nano::block_hash nano::ledger_constants::genesis_hash () const { - auto result = genesis_block->hash (); + auto result = genesis->hash (); debug_assert (!result.is_zero ()); return result; } @@ -830,7 +830,7 @@ std::unique_ptr nano::collect_container_info (vo nano::genesis::genesis () { static nano::network_params network_params; - open = network_params.ledger.genesis_block; + open = network_params.ledger.genesis; debug_assert (open != nullptr); } diff --git a/nano/secure/common.hpp b/nano/secure/common.hpp index fe4ea70465..383f7ae9f9 100644 --- a/nano/secure/common.hpp +++ b/nano/secure/common.hpp @@ -380,7 +380,7 @@ class ledger_constants std::shared_ptr nano_beta_genesis; std::shared_ptr nano_live_genesis; std::shared_ptr nano_test_genesis; - std::shared_ptr genesis_block; + std::shared_ptr genesis; nano::uint128_t genesis_amount; nano::account burn_account; nano::account nano_dev_final_votes_canary_account; diff --git a/nano/secure/store_partial.hpp b/nano/secure/store_partial.hpp index 693024b41a..2af7a4c16b 100644 --- a/nano/secure/store_partial.hpp +++ b/nano/secure/store_partial.hpp @@ -105,7 +105,7 @@ class store_partial : public store */ void initialize (nano::write_transaction const & transaction_a, nano::ledger_cache & ledger_cache_a) override { - auto & genesis = *network_params.ledger.genesis_block; + auto & genesis = *network_params.ledger.genesis; auto hash_l (genesis.hash ()); debug_assert (account.begin (transaction_a) == account.end ()); genesis.sideband_set (nano::block_sideband (network_params.ledger.genesis_account (), 0, network_params.ledger.genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); From 0091262d961f7cdc40c84d326673d225c8b59fa2 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Tue, 20 Jul 2021 17:53:53 +0100 Subject: [PATCH 091/346] Moving dev constants in to their own namespace and deleting extra memorization of genesis_hash. --- nano/core_test/active_transactions.cpp | 24 +++++------ nano/core_test/block_store.cpp | 6 +-- nano/core_test/confirmation_height.cpp | 18 ++++---- nano/core_test/confirmation_solicitor.cpp | 6 +-- nano/core_test/election.cpp | 14 +++--- nano/core_test/election_scheduler.cpp | 16 +++---- nano/core_test/ledger.cpp | 18 ++++---- nano/core_test/ledger_walker.cpp | 8 ++-- nano/core_test/node.cpp | 52 +++++++++++------------ nano/core_test/request_aggregator.cpp | 4 +- nano/core_test/vote_processor.cpp | 4 +- nano/core_test/voting.cpp | 30 ++++++------- nano/core_test/wallet.cpp | 4 +- nano/core_test/wallets.cpp | 4 +- nano/rpc_test/rpc.cpp | 28 ++++++------ nano/secure/common.cpp | 3 ++ nano/secure/common.hpp | 6 +++ nano/slow_test/node.cpp | 6 +-- nano/test_common/system.cpp | 2 +- nano/test_common/testutil.cpp | 1 - nano/test_common/testutil.hpp | 1 - 21 files changed, 131 insertions(+), 124 deletions(-) diff --git a/nano/core_test/active_transactions.cpp b/nano/core_test/active_transactions.cpp index 5801a08f43..3154b0d8e8 100644 --- a/nano/core_test/active_transactions.cpp +++ b/nano/core_test/active_transactions.cpp @@ -1021,12 +1021,12 @@ TEST (active_transactions, activate_account_chain) nano::state_block_builder builder; auto send = builder.make_block () .account (nano::dev_genesis_key.pub) - .previous (nano::genesis_hash) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev_genesis_key.pub) .link (nano::dev_genesis_key.pub) .balance (nano::genesis_amount - 1) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) - .work (*system.work.generate (nano::genesis_hash)) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build (); auto send2 = builder.make_block () .account (nano::dev_genesis_key.pub) @@ -1121,12 +1121,12 @@ TEST (active_transactions, activate_inactive) nano::state_block_builder builder; auto send = builder.make_block () .account (nano::dev_genesis_key.pub) - .previous (nano::genesis_hash) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev_genesis_key.pub) .link (key.pub) .balance (nano::genesis_amount - 1) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) - .work (*system.work.generate (nano::genesis_hash)) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); auto send2 = builder.make_block () .account (nano::dev_genesis_key.pub) @@ -1182,12 +1182,12 @@ TEST (active_transactions, pessimistic_elections) nano::state_block_builder builder; auto send = builder.make_block () .account (nano::dev_genesis_key.pub) - .previous (nano::genesis_hash) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev_genesis_key.pub) .link (nano::dev_genesis_key.pub) .balance (nano::genesis_amount - 1) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) - .work (*system.work.generate (nano::genesis_hash)) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, node.process (*send).code); @@ -1321,12 +1321,12 @@ TEST (active_transactions, list_active) nano::state_block_builder builder; auto send = builder.make_block () .account (nano::dev_genesis_key.pub) - .previous (nano::genesis_hash) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev_genesis_key.pub) .link (nano::dev_genesis_key.pub) .balance (nano::genesis_amount - 1) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) - .work (*system.work.generate (nano::genesis_hash)) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, node.process (*send).code); @@ -1376,12 +1376,12 @@ TEST (active_transactions, vacancy) nano::state_block_builder builder; auto send = builder.make_block () .account (nano::dev_genesis_key.pub) - .previous (nano::genesis_hash) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev_genesis_key.pub) .link (nano::dev_genesis_key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) - .work (*system.work.generate (nano::genesis_hash)) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); std::atomic updated = false; node.active.vacancy_update = [&updated] () { updated = true; }; @@ -1414,12 +1414,12 @@ TEST (active_transactions, fifo) // Construct two pending entries that can be received simultaneously auto send0 = builder.make_block () .account (nano::dev_genesis_key.pub) - .previous (nano::genesis_hash) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev_genesis_key.pub) .link (key0.pub) .balance (nano::genesis_amount - 1) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) - .work (*system.work.generate (nano::genesis_hash)) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, node.process (*send0).code); nano::blocks_confirm (node, { send0 }, true); diff --git a/nano/core_test/block_store.cpp b/nano/core_test/block_store.cpp index 1cd1062c4e..995b8dad7c 100644 --- a/nano/core_test/block_store.cpp +++ b/nano/core_test/block_store.cpp @@ -692,7 +692,7 @@ TEST (mdb_block_store, supported_version_upgrades) store.confirmation_height.del (transaction, nano::genesis_account); ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "accounts_v1", MDB_CREATE, &store.accounts_v1_handle)); ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "open", MDB_CREATE, &store.open_blocks_handle)); - modify_account_info_to_v14 (store, transaction, nano::genesis_account, 1, nano::genesis_hash); + modify_account_info_to_v14 (store, transaction, nano::genesis_account, 1, nano::dev::genesis->hash ()); write_block_w_sideband_v18 (store, store.open_blocks_handle, transaction, *nano::genesis ().open); } @@ -1700,7 +1700,7 @@ TEST (mdb_block_store, upgrade_v18_v19) nano::keypair key1; nano::work_pool pool (std::numeric_limits::max ()); nano::network_params network_params; - nano::send_block send (nano::genesis_hash, nano::dev_genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (nano::genesis_hash)); + nano::send_block send (nano::dev::genesis->hash (), nano::dev_genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); nano::receive_block receive (send.hash (), send.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send.hash ())); nano::change_block change (receive.hash (), 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (receive.hash ())); nano::state_block state_epoch (nano::dev_genesis_key.pub, change.hash (), 0, nano::genesis_amount, network_params.ledger.epochs.link (nano::epoch::epoch_1), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (change.hash ())); @@ -1760,7 +1760,7 @@ TEST (mdb_block_store, upgrade_v18_v19) ASSERT_TRUE (store.block.get (transaction, send.hash ())); ASSERT_TRUE (store.block.get (transaction, receive.hash ())); ASSERT_TRUE (store.block.get (transaction, change.hash ())); - ASSERT_TRUE (store.block.get (transaction, nano::genesis_hash)); + ASSERT_TRUE (store.block.get (transaction, nano::dev::genesis->hash ())); auto state_epoch_disk (store.block.get (transaction, state_epoch.hash ())); ASSERT_NE (nullptr, state_epoch_disk); ASSERT_EQ (nano::epoch::epoch_1, state_epoch_disk->sideband ().details.epoch); diff --git a/nano/core_test/confirmation_height.cpp b/nano/core_test/confirmation_height.cpp index 966fe7c13a..f42df2dac8 100644 --- a/nano/core_test/confirmation_height.cpp +++ b/nano/core_test/confirmation_height.cpp @@ -48,7 +48,7 @@ TEST (confirmation_height, single) auto transaction = node->store.tx_begin_read (); ASSERT_FALSE (node->store.confirmation_height.get (transaction, nano::dev_genesis_key.pub, confirmation_height_info)); ASSERT_EQ (1, confirmation_height_info.height); - ASSERT_EQ (nano::genesis_hash, confirmation_height_info.frontier); + ASSERT_EQ (nano::dev::genesis->hash (), confirmation_height_info.frontier); node->process_active (send1); node->block_processor.flush (); @@ -134,7 +134,7 @@ TEST (confirmation_height, multiple_accounts) nano::confirmation_height_info confirmation_height_info; ASSERT_FALSE (node->store.confirmation_height.get (transaction, nano::dev_genesis_key.pub, confirmation_height_info)); ASSERT_EQ (1, confirmation_height_info.height); - ASSERT_EQ (nano::genesis_hash, confirmation_height_info.frontier); + ASSERT_EQ (nano::dev::genesis->hash (), confirmation_height_info.frontier); ASSERT_TRUE (node->store.confirmation_height.get (transaction, key1.pub, confirmation_height_info)); ASSERT_EQ (0, confirmation_height_info.height); ASSERT_EQ (nano::block_hash (0), confirmation_height_info.frontier); @@ -343,7 +343,7 @@ TEST (confirmation_height, gap_live) nano::confirmation_height_info confirmation_height_info; ASSERT_FALSE (node->store.confirmation_height.get (transaction, nano::dev_genesis_key.pub, confirmation_height_info)); ASSERT_EQ (1, confirmation_height_info.height); - ASSERT_EQ (nano::genesis_hash, confirmation_height_info.frontier); + ASSERT_EQ (nano::dev::genesis->hash (), confirmation_height_info.frontier); } // Vote and confirm all existing blocks @@ -806,7 +806,7 @@ TEST (confirmation_heightDeathTest, modified_chain) nano::write_database_queue write_database_queue (false); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - auto send = std::make_shared (nano::genesis_hash, key1.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (nano::genesis_hash)); + auto send = std::make_shared (nano::dev::genesis->hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); { auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); @@ -832,7 +832,7 @@ TEST (confirmation_heightDeathTest, modified_chain) } ASSERT_EQ (nano::process_result::progress, ledger.process (store->tx_begin_write (), *send).code); - store->confirmation_height.put (store->tx_begin_write (), nano::genesis_account, { 1, nano::genesis_hash }); + store->confirmation_height.put (store->tx_begin_write (), nano::genesis_account, { 1, nano::dev::genesis->hash () }); nano::confirmation_height_unbounded unbounded_processor ( ledger, write_database_queue, 10ms, logging, logger, stopped, batch_write_size, [] (auto const &) {}, [] (auto const &) {}, [] () { return 0; }); @@ -877,7 +877,7 @@ TEST (confirmation_heightDeathTest, modified_chain_account_removed) nano::write_database_queue write_database_queue (false); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - auto send = std::make_shared (nano::genesis_hash, key1.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (nano::genesis_hash)); + auto send = std::make_shared (nano::dev::genesis->hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); auto open = std::make_shared (key1.pub, 0, 0, nano::Gxrb_ratio, send->hash (), key1.prv, key1.pub, *pool.generate (key1.pub)); { auto transaction (store->tx_begin_write ()); @@ -906,7 +906,7 @@ TEST (confirmation_heightDeathTest, modified_chain_account_removed) // Reset conditions and test with the bounded processor ASSERT_EQ (nano::process_result::progress, ledger.process (store->tx_begin_write (), *open).code); - store->confirmation_height.put (store->tx_begin_write (), nano::genesis_account, { 1, nano::genesis_hash }); + store->confirmation_height.put (store->tx_begin_write (), nano::genesis_account, { 1, nano::dev::genesis->hash () }); nano::confirmation_height_bounded bounded_processor ( ledger, write_database_queue, 10ms, logging, logger, stopped, batch_write_size, [] (auto const &) {}, [] (auto const &) {}, [] () { return 0; }); @@ -1344,7 +1344,7 @@ TEST (confirmation_height, election_winner_details_clearing_node_process_confirm nano::system system (1); auto node = system.nodes.front (); - auto send = std::make_shared (nano::genesis_hash, nano::dev_genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (nano::genesis_hash)); + auto send = std::make_shared (nano::dev::genesis->hash (), nano::dev_genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ())); // Add to election_winner_details. Use an unrealistic iteration so that it should fall into the else case and do a cleanup node->active.add_election_winner_details (send->hash (), nullptr); nano::election_status election; @@ -1422,7 +1422,7 @@ TEST (confirmation_height, pruned_source) nano::write_database_queue write_database_queue (false); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1, key2; - auto send1 = std::make_shared (nano::dev_genesis_key.pub, genesis.hash (), nano::dev_genesis_key.pub, nano::genesis_amount - 100, key1.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (nano::genesis_hash)); + auto send1 = std::make_shared (nano::dev_genesis_key.pub, genesis.hash (), nano::dev_genesis_key.pub, nano::genesis_amount - 100, key1.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); auto open1 = std::make_shared (key1.pub, 0, key1.pub, 100, send1->hash (), key1.prv, key1.pub, *pool.generate (key1.pub)); auto send2 = std::make_shared (key1.pub, open1->hash (), key1.pub, 50, key2.pub, key1.prv, key1.pub, *pool.generate (open1->hash ())); auto send3 = std::make_shared (key1.pub, send2->hash (), key1.pub, 25, key2.pub, key1.prv, key1.pub, *pool.generate (send2->hash ())); diff --git a/nano/core_test/confirmation_solicitor.cpp b/nano/core_test/confirmation_solicitor.cpp index b32ee2ea42..13a297c8d2 100644 --- a/nano/core_test/confirmation_solicitor.cpp +++ b/nano/core_test/confirmation_solicitor.cpp @@ -28,7 +28,7 @@ TEST (confirmation_solicitor, batches) ASSERT_EQ (channel1, representatives.front ().channel); ASSERT_EQ (nano::dev_genesis_key.pub, representatives.front ().account); ASSERT_TIMELY (3s, node2.network.size () == 1); - auto send (std::make_shared (nano::genesis_hash, nano::keypair ().pub, nano::genesis_amount - 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (nano::genesis_hash))); + auto send (std::make_shared (nano::dev::genesis->hash (), nano::keypair ().pub, nano::genesis_amount - 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); send->sideband_set ({}); { nano::lock_guard guard (node2.active.mutex); @@ -72,7 +72,7 @@ TEST (confirmation_solicitor, different_hash) ASSERT_EQ (channel1, representatives.front ().channel); ASSERT_EQ (nano::dev_genesis_key.pub, representatives.front ().account); ASSERT_TIMELY (3s, node2.network.size () == 1); - auto send (std::make_shared (nano::genesis_hash, nano::keypair ().pub, nano::genesis_amount - 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (nano::genesis_hash))); + auto send (std::make_shared (nano::dev::genesis->hash (), nano::keypair ().pub, nano::genesis_amount - 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); send->sideband_set ({}); auto election (std::make_shared (node2, send, nullptr, nullptr, nano::election_behavior::normal)); // Add a vote for something else, not the winner @@ -108,7 +108,7 @@ TEST (confirmation_solicitor, bypass_max_requests_cap) ASSERT_EQ (max_representatives + 1, representatives.size ()); solicitor.prepare (representatives); ASSERT_TIMELY (3s, node2.network.size () == 1); - auto send (std::make_shared (nano::genesis_hash, nano::keypair ().pub, nano::genesis_amount - 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (nano::genesis_hash))); + auto send (std::make_shared (nano::dev::genesis->hash (), nano::keypair ().pub, nano::genesis_amount - 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); send->sideband_set ({}); auto election (std::make_shared (node2, send, nullptr, nullptr, nano::election_behavior::normal)); // Add a vote for something else, not the winner diff --git a/nano/core_test/election.cpp b/nano/core_test/election.cpp index 941fc61879..4afcfb0e3b 100644 --- a/nano/core_test/election.cpp +++ b/nano/core_test/election.cpp @@ -29,7 +29,7 @@ TEST (election, quorum_minimum_flip_success) nano::block_builder builder; auto send1 = builder.state () .account (nano::dev_genesis_key.pub) - .previous (nano::genesis_hash) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev_genesis_key.pub) .balance (node1.online_reps.delta ()) .link (key1.pub) @@ -40,7 +40,7 @@ TEST (election, quorum_minimum_flip_success) nano::keypair key2; auto send2 = builder.state () .account (nano::dev_genesis_key.pub) - .previous (nano::genesis_hash) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev_genesis_key.pub) .balance (node1.online_reps.delta ()) .link (key2.pub) @@ -75,7 +75,7 @@ TEST (election, quorum_minimum_flip_fail) nano::block_builder builder; auto send1 = builder.state () .account (nano::dev_genesis_key.pub) - .previous (nano::genesis_hash) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev_genesis_key.pub) .balance (node1.online_reps.delta () - 1) .link (key1.pub) @@ -86,7 +86,7 @@ TEST (election, quorum_minimum_flip_fail) nano::keypair key2; auto send2 = builder.state () .account (nano::dev_genesis_key.pub) - .previous (nano::genesis_hash) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev_genesis_key.pub) .balance (node1.online_reps.delta () - 1) .link (key2.pub) @@ -121,7 +121,7 @@ TEST (election, quorum_minimum_confirm_success) nano::block_builder builder; auto send1 = builder.state () .account (nano::dev_genesis_key.pub) - .previous (nano::genesis_hash) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev_genesis_key.pub) .balance (node1.online_reps.delta ()) .link (key1.pub) @@ -154,7 +154,7 @@ TEST (election, quorum_minimum_confirm_fail) nano::block_builder builder; auto send1 = builder.state () .account (nano::dev_genesis_key.pub) - .previous (nano::genesis_hash) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev_genesis_key.pub) .balance (node1.online_reps.delta () - 1) .link (key1.pub) @@ -190,7 +190,7 @@ TEST (election, quorum_minimum_update_weight_before_quorum_checks) nano::block_builder builder; auto send1 = builder.state () .account (nano::dev_genesis_key.pub) - .previous (nano::genesis_hash) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev_genesis_key.pub) .balance (amount) .link (key1.pub) diff --git a/nano/core_test/election_scheduler.cpp b/nano/core_test/election_scheduler.cpp index 12cb23dec3..368ee24f05 100644 --- a/nano/core_test/election_scheduler.cpp +++ b/nano/core_test/election_scheduler.cpp @@ -19,12 +19,12 @@ TEST (election_scheduler, activate_one_timely) nano::state_block_builder builder; auto send1 = builder.make_block () .account (nano::dev_genesis_key.pub) - .previous (nano::genesis_hash) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev_genesis_key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) .link (nano::dev_genesis_key.pub) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) - .work (*system.work.generate (nano::genesis_hash)) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); system.nodes[0]->ledger.process (system.nodes[0]->store.tx_begin_write (), *send1); system.nodes[0]->scheduler.activate (nano::dev_genesis_key.pub, system.nodes[0]->store.tx_begin_read ()); @@ -37,12 +37,12 @@ TEST (election_scheduler, activate_one_flush) nano::state_block_builder builder; auto send1 = builder.make_block () .account (nano::dev_genesis_key.pub) - .previous (nano::genesis_hash) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev_genesis_key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) .link (nano::dev_genesis_key.pub) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) - .work (*system.work.generate (nano::genesis_hash)) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); system.nodes[0]->ledger.process (system.nodes[0]->store.tx_begin_write (), *send1); system.nodes[0]->scheduler.activate (nano::dev_genesis_key.pub, system.nodes[0]->store.tx_begin_read ()); @@ -62,12 +62,12 @@ TEST (election_scheduler, no_vacancy) // Activating accounts depends on confirmed dependencies. First, prepare 2 accounts auto send = builder.make_block () .account (nano::dev_genesis_key.pub) - .previous (nano::genesis_hash) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev_genesis_key.pub) .link (key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) - .work (*system.work.generate (nano::genesis_hash)) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); auto receive = builder.make_block () .account (key.pub) @@ -135,12 +135,12 @@ TEST (election_scheduler, flush_vacancy) auto send = builder.make_block () .account (nano::dev_genesis_key.pub) - .previous (nano::genesis_hash) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev_genesis_key.pub) .link (key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) - .work (*system.work.generate (nano::genesis_hash)) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, node.process (*send).code); node.scheduler.activate (nano::dev_genesis_key.pub, node.store.tx_begin_read ()); diff --git a/nano/core_test/ledger.cpp b/nano/core_test/ledger.cpp index 8f0aae15e5..bec09a76ac 100644 --- a/nano/core_test/ledger.cpp +++ b/nano/core_test/ledger.cpp @@ -742,7 +742,7 @@ TEST (votes, add_existing) nano::block_builder builder; std::shared_ptr send1 = builder.state () .account (nano::dev_genesis_key.pub) - .previous (nano::genesis_hash) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev_genesis_key.pub) // No representative, blocks can't confirm .balance (nano::genesis_amount / 2 - nano::Gxrb_ratio) .link (key1.pub) @@ -762,7 +762,7 @@ TEST (votes, add_existing) nano::keypair key2; std::shared_ptr send2 = builder.state () .account (nano::dev_genesis_key.pub) - .previous (nano::genesis_hash) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev_genesis_key.pub) // No representative, blocks can't confirm .balance (nano::genesis_amount / 2 - nano::Gxrb_ratio) .link (key2.pub) @@ -2563,12 +2563,12 @@ TEST (ledger, epoch_open_pending) // New block to process epoch open auto send1 = builder.state () .account (nano::genesis_account) - .previous (nano::genesis_hash) + .previous (nano::dev::genesis->hash ()) .representative (nano::genesis_account) .balance (nano::genesis_amount - 100) .link (key1.pub) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) - .work (*pool.generate (nano::genesis_hash)) + .work (*pool.generate (nano::dev::genesis->hash ())) .build_shared (); node1.block_processor.add (send1); node1.block_processor.flush (); @@ -3000,7 +3000,7 @@ TEST (ledger, work_validation) std::error_code ec; auto send = *builder.send () - .previous (nano::genesis_hash) + .previous (nano::dev::genesis->hash ()) .destination (gen.pub) .balance (nano::genesis_amount - 1) .sign (gen.prv, gen.pub) @@ -3735,12 +3735,12 @@ TEST (ledger, migrate_lmdb_to_rocksdb) auto send = nano::state_block_builder () .account (nano::dev_genesis_key.pub) - .previous (nano::genesis_hash) + .previous (nano::dev::genesis->hash ()) .representative (0) .link (nano::account (10)) .balance (nano::genesis_amount - 100) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) - .work (*pool.generate (nano::genesis_hash)) + .work (*pool.generate (nano::dev::genesis->hash ())) .build_shared (); nano::endpoint_key endpoint_key (address.to_bytes (), port); @@ -3760,7 +3760,7 @@ TEST (ledger, migrate_lmdb_to_rocksdb) store.pending.put (transaction, nano::pending_key (nano::genesis_account, send->hash ()), nano::pending_info (nano::genesis_account, 100, nano::epoch::epoch_0)); store.pruned.put (transaction, send->hash ()); - store.unchecked.put (transaction, nano::genesis_hash, send); + store.unchecked.put (transaction, nano::dev::genesis->hash (), send); store.version.put (transaction, version); send->sideband_set ({}); store.block.put (transaction, send->hash (), *send); @@ -3797,7 +3797,7 @@ TEST (ledger, migrate_lmdb_to_rocksdb) ASSERT_TRUE (rocksdb_store.final_vote.get (rocksdb_transaction, nano::root (send->previous ())).size () == 1); ASSERT_EQ (rocksdb_store.final_vote.get (rocksdb_transaction, nano::root (send->previous ()))[0], nano::block_hash (2)); - auto unchecked_infos = rocksdb_store.unchecked.get (rocksdb_transaction, nano::genesis_hash); + auto unchecked_infos = rocksdb_store.unchecked.get (rocksdb_transaction, nano::dev::genesis->hash ()); ASSERT_EQ (unchecked_infos.size (), 1); ASSERT_EQ (unchecked_infos.front ().account, nano::genesis_account); ASSERT_EQ (*unchecked_infos.front ().block, *send); diff --git a/nano/core_test/ledger_walker.cpp b/nano/core_test/ledger_walker.cpp index 20fb7778d2..d76e8b6774 100644 --- a/nano/core_test/ledger_walker.cpp +++ b/nano/core_test/ledger_walker.cpp @@ -19,19 +19,19 @@ TEST (ledger_walker, genesis_block) nano::ledger_walker ledger_walker{ node->ledger }; std::size_t walked_blocks_count = 0; - ledger_walker.walk_backward (nano::genesis_hash, + ledger_walker.walk_backward (nano::dev::genesis->hash (), [&] (const auto & block) { ++walked_blocks_count; - EXPECT_EQ (block->hash (), nano::genesis_hash); + EXPECT_EQ (block->hash (), nano::dev::genesis->hash ()); }); EXPECT_EQ (walked_blocks_count, 1); walked_blocks_count = 0; - ledger_walker.walk (nano::genesis_hash, + ledger_walker.walk (nano::dev::genesis->hash (), [&] (const auto & block) { ++walked_blocks_count; - EXPECT_EQ (block->hash (), nano::genesis_hash); + EXPECT_EQ (block->hash (), nano::dev::genesis->hash ()); }); EXPECT_EQ (walked_blocks_count, 1); diff --git a/nano/core_test/node.cpp b/nano/core_test/node.cpp index e6516e5087..615634a51a 100644 --- a/nano/core_test/node.cpp +++ b/nano/core_test/node.cpp @@ -1718,11 +1718,11 @@ TEST (node, broadcast_elected) auto transaction1 (node1->store.tx_begin_write ()); auto transaction2 (node2->store.tx_begin_write ()); auto fund_big = *builder.send () - .previous (nano::genesis_hash) + .previous (nano::dev::genesis->hash ()) .destination (rep_big.pub) .balance (nano::Gxrb_ratio * 5) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) - .work (*system.work.generate (nano::genesis_hash)) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build (); auto open_big = *builder.open () .source (fund_big.hash ()) @@ -1836,11 +1836,11 @@ TEST (node, rep_self_vote) nano::keypair rep_big; nano::block_builder builder; auto fund_big = *builder.send () - .previous (nano::genesis_hash) + .previous (nano::dev::genesis->hash ()) .destination (rep_big.pub) .balance (nano::uint128_t{ "0xb0000000000000000000000000000000" }) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) - .work (*system.work.generate (nano::genesis_hash)) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build (); auto open_big = *builder.open () .source (fund_big.hash ()) @@ -1924,11 +1924,11 @@ TEST (node, bootstrap_bulk_push) nano::keypair key0; // node0 knows about send0 but node1 doesn't. auto send0 = nano::send_block_builder () - .previous (nano::genesis_hash) + .previous (nano::dev::genesis->hash ()) .destination (key0.pub) .balance (500) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) - .work (*node0->work_generate_blocking (nano::genesis_hash)) + .work (*node0->work_generate_blocking (nano::dev::genesis->hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, node0->process (*send0).code); @@ -1962,11 +1962,11 @@ TEST (node, bootstrap_fork_open) nano::keypair key0; nano::block_builder builder; auto send0 = *builder.send () - .previous (nano::genesis_hash) + .previous (nano::dev::genesis->hash ()) .destination (key0.pub) .balance (nano::genesis_amount - 500) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) - .work (*system.work.generate (nano::genesis_hash)) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build (); auto open0 = *builder.open () .source (send0.hash ()) @@ -2018,11 +2018,11 @@ TEST (node, bootstrap_confirm_frontiers) nano::keypair key0; // node0 knows about send0 but node1 doesn't. auto send0 = nano::send_block_builder () - .previous (nano::genesis_hash) + .previous (nano::dev::genesis->hash ()) .destination (key0.pub) .balance (nano::genesis_amount - 500) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) - .work (*node0->work_generate_blocking (nano::genesis_hash)) + .work (*node0->work_generate_blocking (nano::dev::genesis->hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, node0->process (*send0).code); @@ -2496,7 +2496,7 @@ TEST (node, online_reps_rep_crawler) nano::node_flags flags; flags.disable_rep_crawler = true; auto & node1 = *system.add_node (flags); - auto vote = std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, nano::milliseconds_since_epoch (), std::vector{ nano::genesis_hash }); + auto vote = std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, nano::milliseconds_since_epoch (), std::vector{ nano::dev::genesis->hash () }); ASSERT_EQ (0, node1.online_reps.online ()); // Without rep crawler node1.vote_processor.vote_blocking (vote, std::make_shared (node1)); @@ -2504,7 +2504,7 @@ TEST (node, online_reps_rep_crawler) // After inserting to rep crawler { nano::lock_guard guard (node1.rep_crawler.probable_reps_mutex); - node1.rep_crawler.active.insert (nano::genesis_hash); + node1.rep_crawler.active.insert (nano::dev::genesis->hash ()); } node1.vote_processor.vote_blocking (vote, std::make_shared (node1)); ASSERT_EQ (nano::genesis_amount, node1.online_reps.online ()); @@ -2957,12 +2957,12 @@ TEST (node, vote_by_hash_bundle) std::vector> blocks; auto block = builder.make_block () .account (nano::dev_genesis_key.pub) - .previous (nano::genesis_hash) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev_genesis_key.pub) .balance (nano::genesis_amount - 1) .link (nano::dev_genesis_key.pub) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) - .work (*system.work.generate (nano::genesis_hash)) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); blocks.push_back (block); ASSERT_EQ (nano::process_result::progress, node.ledger.process (node.store.tx_begin_write (), *blocks.back ()).code); @@ -3974,12 +3974,12 @@ TEST (node, rollback_vote_self) auto weight = node.online_reps.delta (); auto send1 = builder.make_block () .account (nano::dev_genesis_key.pub) - .previous (nano::genesis_hash) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev_genesis_key.pub) .link (key.pub) .balance (nano::genesis_amount - weight) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) - .work (*system.work.generate (nano::genesis_hash)) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); auto open = builder.make_block () .account (key.pub) @@ -4063,12 +4063,12 @@ TEST (node, rollback_gap_source) nano::keypair key; auto send1 = builder.make_block () .account (nano::dev_genesis_key.pub) - .previous (nano::genesis_hash) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev_genesis_key.pub) .link (key.pub) .balance (nano::genesis_amount - 1) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) - .work (*system.work.generate (nano::genesis_hash)) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); auto fork = builder.make_block () .account (key.pub) @@ -4160,12 +4160,12 @@ TEST (node, dependency_graph) // Send to key1 auto gen_send1 = builder.make_block () .account (nano::dev_genesis_key.pub) - .previous (nano::genesis_hash) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev_genesis_key.pub) .link (key1.pub) .balance (nano::genesis_amount - 1) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) - .work (*system.work.generate (nano::genesis_hash)) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); // Receive from genesis auto key1_open = builder.make_block () @@ -4362,12 +4362,12 @@ TEST (node, dependency_graph_frontier) // Send to key1 auto gen_send1 = builder.make_block () .account (nano::dev_genesis_key.pub) - .previous (nano::genesis_hash) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev_genesis_key.pub) .link (key1.pub) .balance (nano::genesis_amount - 1) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) - .work (*system.work.generate (nano::genesis_hash)) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); // Receive from genesis auto key1_open = builder.make_block () @@ -4525,12 +4525,12 @@ TEST (node, deferred_dependent_elections) nano::keypair key; auto send1 = builder.make_block () .account (nano::dev_genesis_key.pub) - .previous (nano::genesis_hash) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev_genesis_key.pub) .link (key.pub) .balance (nano::genesis_amount - 1) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) - .work (*system.work.generate (nano::genesis_hash)) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); auto open = builder.make_block () .account (key.pub) @@ -4678,10 +4678,10 @@ TEST (rep_crawler, local) flags.disable_rep_crawler = true; auto & node = *system.add_node (flags); auto loopback = std::make_shared (node); - auto vote = std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, 0, std::vector{ nano::genesis_hash }); + auto vote = std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, 0, std::vector{ nano::dev::genesis->hash () }); { nano::lock_guard guard (node.rep_crawler.probable_reps_mutex); - node.rep_crawler.active.insert (nano::genesis_hash); + node.rep_crawler.active.insert (nano::dev::genesis->hash ()); node.rep_crawler.responses.emplace_back (loopback, vote); } node.rep_crawler.validate (); diff --git a/nano/core_test/request_aggregator.cpp b/nano/core_test/request_aggregator.cpp index f60dd14c80..375003f404 100644 --- a/nano/core_test/request_aggregator.cpp +++ b/nano/core_test/request_aggregator.cpp @@ -375,12 +375,12 @@ TEST (request_aggregator, cannot_vote) nano::state_block_builder builder; auto send1 = builder.make_block () .account (nano::dev_genesis_key.pub) - .previous (nano::genesis_hash) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev_genesis_key.pub) .balance (nano::genesis_amount - 1) .link (nano::dev_genesis_key.pub) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) - .work (*system.work.generate (nano::genesis_hash)) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); auto send2 = builder.make_block () .from (*send1) diff --git a/nano/core_test/vote_processor.cpp b/nano/core_test/vote_processor.cpp index 4b40c740ed..4f5737698d 100644 --- a/nano/core_test/vote_processor.cpp +++ b/nano/core_test/vote_processor.cpp @@ -195,11 +195,11 @@ TEST (vote_processor, no_broadcast_local) std::shared_ptr send = builder.state () .account (nano::dev_genesis_key.pub) .representative (nano::dev_genesis_key.pub) - .previous (nano::genesis_hash) + .previous (nano::dev::genesis->hash ()) .balance (2 * node.config.vote_minimum.number ()) .link (key.pub) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) - .work (*system.work.generate (nano::genesis_hash)) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build (ec); ASSERT_FALSE (ec); ASSERT_EQ (nano::process_result::progress, node.process_local (send).code); diff --git a/nano/core_test/voting.cpp b/nano/core_test/voting.cpp index 32bb33c778..c7e7eb03cb 100644 --- a/nano/core_test/voting.cpp +++ b/nano/core_test/voting.cpp @@ -112,7 +112,7 @@ TEST (vote_generator, session) nano::vote_generator_session generator_session (node->active.generator); boost::thread thread ([node, &generator_session] () { nano::thread_role::set (nano::thread_role::name::request_loop); - generator_session.add (nano::genesis_account, nano::genesis_hash); + generator_session.add (nano::genesis_account, nano::dev::genesis->hash ()); ASSERT_EQ (0, node->stats.count (nano::stat::type::vote, nano::stat::detail::vote_indeterminate)); generator_session.flush (); }); @@ -166,33 +166,33 @@ TEST (vote_spacing, vote_generator) nano::state_block_builder builder; auto send1 = builder.make_block () .account (nano::dev_genesis_key.pub) - .previous (nano::genesis_hash) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev_genesis_key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) .link (nano::dev_genesis_key.pub) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) - .work (*system.work.generate (nano::genesis_hash)) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); auto send2 = builder.make_block () .account (nano::dev_genesis_key.pub) - .previous (nano::genesis_hash) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev_genesis_key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio - 1) .link (nano::dev_genesis_key.pub) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) - .work (*system.work.generate (nano::genesis_hash)) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, node.ledger.process (node.store.tx_begin_write (), *send1).code); ASSERT_EQ (0, node.stats.count (nano::stat::type::vote_generator, nano::stat::detail::generator_broadcasts)); - node.active.generator.add (nano::genesis_hash, send1->hash ()); + node.active.generator.add (nano::dev::genesis->hash (), send1->hash ()); ASSERT_TIMELY (3s, node.stats.count (nano::stat::type::vote_generator, nano::stat::detail::generator_broadcasts) == 1); ASSERT_FALSE (node.ledger.rollback (node.store.tx_begin_write (), send1->hash ())); ASSERT_EQ (nano::process_result::progress, node.ledger.process (node.store.tx_begin_write (), *send2).code); - node.active.generator.add (nano::genesis_hash, send2->hash ()); + node.active.generator.add (nano::dev::genesis->hash (), send2->hash ()); ASSERT_TIMELY (3s, node.stats.count (nano::stat::type::vote_generator, nano::stat::detail::generator_spacing) == 1); ASSERT_EQ (1, node.stats.count (nano::stat::type::vote_generator, nano::stat::detail::generator_broadcasts)); std::this_thread::sleep_for (config.network_params.voting.delay); - node.active.generator.add (nano::genesis_hash, send2->hash ()); + node.active.generator.add (nano::dev::genesis->hash (), send2->hash ()); ASSERT_TIMELY (3s, node.stats.count (nano::stat::type::vote_generator, nano::stat::detail::generator_broadcasts) == 2); } @@ -209,31 +209,31 @@ TEST (vote_spacing, rapid) nano::state_block_builder builder; auto send1 = builder.make_block () .account (nano::dev_genesis_key.pub) - .previous (nano::genesis_hash) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev_genesis_key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) .link (nano::dev_genesis_key.pub) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) - .work (*system.work.generate (nano::genesis_hash)) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); auto send2 = builder.make_block () .account (nano::dev_genesis_key.pub) - .previous (nano::genesis_hash) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev_genesis_key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio - 1) .link (nano::dev_genesis_key.pub) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) - .work (*system.work.generate (nano::genesis_hash)) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, node.ledger.process (node.store.tx_begin_write (), *send1).code); - node.active.generator.add (nano::genesis_hash, send1->hash ()); + node.active.generator.add (nano::dev::genesis->hash (), send1->hash ()); ASSERT_TIMELY (3s, node.stats.count (nano::stat::type::vote_generator, nano::stat::detail::generator_broadcasts) == 1); ASSERT_FALSE (node.ledger.rollback (node.store.tx_begin_write (), send1->hash ())); ASSERT_EQ (nano::process_result::progress, node.ledger.process (node.store.tx_begin_write (), *send2).code); - node.active.generator.add (nano::genesis_hash, send2->hash ()); + node.active.generator.add (nano::dev::genesis->hash (), send2->hash ()); ASSERT_TIMELY (3s, node.stats.count (nano::stat::type::vote_generator, nano::stat::detail::generator_spacing) == 1); ASSERT_TIMELY (3s, 1 == node.stats.count (nano::stat::type::vote_generator, nano::stat::detail::generator_broadcasts)); std::this_thread::sleep_for (config.network_params.voting.delay); - node.active.generator.add (nano::genesis_hash, send2->hash ()); + node.active.generator.add (nano::dev::genesis->hash (), send2->hash ()); ASSERT_TIMELY (3s, node.stats.count (nano::stat::type::vote_generator, nano::stat::detail::generator_broadcasts) == 2); } diff --git a/nano/core_test/wallet.cpp b/nano/core_test/wallet.cpp index 2d01916e8a..fc295738e8 100644 --- a/nano/core_test/wallet.cpp +++ b/nano/core_test/wallet.cpp @@ -1164,12 +1164,12 @@ TEST (wallet, search_pending) nano::block_builder builder; auto send = builder.state () .account (nano::genesis_account) - .previous (nano::genesis_hash) + .previous (nano::dev::genesis->hash ()) .representative (nano::genesis_account) .balance (nano::genesis_amount - node.config.receive_minimum.number ()) .link (nano::genesis_account) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) - .work (*system.work.generate (nano::genesis_hash)) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build (); ASSERT_EQ (nano::process_result::progress, node.process (*send).code); diff --git a/nano/core_test/wallets.cpp b/nano/core_test/wallets.cpp index ff6e5b15df..862d35fa59 100644 --- a/nano/core_test/wallets.cpp +++ b/nano/core_test/wallets.cpp @@ -167,12 +167,12 @@ TEST (wallets, search_pending) nano::block_builder builder; auto send = builder.state () .account (nano::genesis_account) - .previous (nano::genesis_hash) + .previous (nano::dev::genesis->hash ()) .representative (nano::genesis_account) .balance (nano::genesis_amount - node.config.receive_minimum.number ()) .link (nano::genesis_account) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) - .work (*system.work.generate (nano::genesis_hash)) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build (); ASSERT_EQ (nano::process_result::progress, node.process (*send).code); diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index e2f34910c9..9cabbd06d7 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -234,12 +234,12 @@ TEST (rpc, account_balance) auto send1 = builder.make_block () .account (nano::dev_genesis_key.pub) - .previous (nano::genesis_hash) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev_genesis_key.pub) .balance (nano::genesis_amount - 1) .link (nano::dev_genesis_key.pub) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) - .work (*system.work.generate (nano::genesis_hash)) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build (); ASSERT_EQ (nano::process_result::progress, node->process (*send1).code); @@ -531,7 +531,7 @@ TEST (rpc, send_epoch_2) request.put ("amount", "1"); // Test that the correct error is given if there is insufficient work - auto insufficient = system.work_generate_limited (nano::genesis_hash, min_difficulty, target_difficulty); + auto insufficient = system.work_generate_limited (nano::dev::genesis->hash (), min_difficulty, target_difficulty); request.put ("work", nano::to_string_hex (insufficient)); { auto response (wait_response (system, rpc, request)); @@ -2552,7 +2552,7 @@ TEST (rpc, account_representative_set_epoch_2) request.put ("representative", nano::keypair ().pub.to_account ()); // Test that the correct error is given if there is insufficient work - auto insufficient = system.work_generate_limited (nano::genesis_hash, min_difficulty, target_difficulty); + auto insufficient = system.work_generate_limited (nano::dev::genesis->hash (), min_difficulty, target_difficulty); request.put ("work", nano::to_string_hex (insufficient)); { auto response (wait_response (system, rpc, request)); @@ -3729,7 +3729,7 @@ TEST (rpc, account_info) ASSERT_EQ (confirmed_representative, nano::dev_genesis_key.pub.to_account ()); auto confirmed_frontier (response.get ("confirmed_frontier")); - ASSERT_EQ (nano::genesis_hash.to_string (), confirmed_frontier); + ASSERT_EQ (nano::dev::genesis->hash ().to_string (), confirmed_frontier); auto confirmed_height (response.get ("confirmed_height")); ASSERT_EQ (1, confirmed_height); @@ -4941,7 +4941,7 @@ TEST (rpc, block_confirm_confirmed) // Check confirmation history auto confirmed (node->active.list_recently_cemented ()); ASSERT_EQ (1, confirmed.size ()); - ASSERT_EQ (nano::genesis_hash, confirmed.begin ()->winner->hash ()); + ASSERT_EQ (nano::dev::genesis->hash (), confirmed.begin ()->winner->hash ()); // Check callback ASSERT_TIMELY (10s, node->stats.count (nano::stat::type::error, nano::stat::detail::http_callback, nano::stat::dir::out) != 0); // Callback result is error because callback target port isn't listening @@ -5213,7 +5213,7 @@ TEST (rpc, wallet_history) ASSERT_EQ ("receive", std::get<0> (history_l[3])); ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), std::get<1> (history_l[3])); ASSERT_EQ (nano::genesis_amount.convert_to (), std::get<2> (history_l[3])); - ASSERT_EQ (nano::genesis_hash.to_string (), std::get<3> (history_l[3])); + ASSERT_EQ (nano::dev::genesis->hash ().to_string (), std::get<3> (history_l[3])); ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), std::get<4> (history_l[3])); } @@ -5623,7 +5623,7 @@ TEST (rpc, deprecated_account_format) request.put ("account", account_text); auto response2 (wait_response (system, rpc, request)); std::string frontier (response2.get ("frontier")); - ASSERT_EQ (nano::genesis_hash.to_string (), frontier); + ASSERT_EQ (nano::dev::genesis->hash ().to_string (), frontier); boost::optional deprecated_account_format2 (response2.get_optional ("deprecated_account_format")); ASSERT_TRUE (deprecated_account_format2.is_initialized ()); } @@ -5634,7 +5634,7 @@ TEST (rpc, epoch_upgrade) auto node = add_ipc_enabled_node (system); nano::keypair key1, key2, key3; nano::keypair epoch_signer (nano::dev_genesis_key); - auto send1 (std::make_shared (nano::dev_genesis_key.pub, nano::genesis_hash, nano::dev_genesis_key.pub, nano::genesis_amount - 1, key1.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (nano::genesis_hash))); // to opened account + auto send1 (std::make_shared (nano::dev_genesis_key.pub, nano::dev::genesis->hash (), nano::dev_genesis_key.pub, nano::genesis_amount - 1, key1.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); // to opened account ASSERT_EQ (nano::process_result::progress, node->process (*send1).code); auto send2 (std::make_shared (nano::dev_genesis_key.pub, send1->hash (), nano::dev_genesis_key.pub, nano::genesis_amount - 2, key2.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send1->hash ()))); // to unopened account (pending) ASSERT_EQ (nano::process_result::progress, node->process (*send2).code); @@ -5728,7 +5728,7 @@ TEST (rpc, epoch_upgrade_multithreaded) auto node = add_ipc_enabled_node (system, node_config); nano::keypair key1, key2, key3; nano::keypair epoch_signer (nano::dev_genesis_key); - auto send1 (std::make_shared (nano::dev_genesis_key.pub, nano::genesis_hash, nano::dev_genesis_key.pub, nano::genesis_amount - 1, key1.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (nano::genesis_hash))); // to opened account + auto send1 (std::make_shared (nano::dev_genesis_key.pub, nano::dev::genesis->hash (), nano::dev_genesis_key.pub, nano::genesis_amount - 1, key1.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); // to opened account ASSERT_EQ (nano::process_result::progress, node->process (*send1).code); auto send2 (std::make_shared (nano::dev_genesis_key.pub, send1->hash (), nano::dev_genesis_key.pub, nano::genesis_amount - 2, key2.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send1->hash ()))); // to unopened account (pending) ASSERT_EQ (nano::process_result::progress, node->process (*send2).code); @@ -5821,7 +5821,7 @@ TEST (rpc, account_lazy_start) auto node1 = system.add_node (node_flags); nano::keypair key; // Generating test chain - auto send1 (std::make_shared (nano::dev_genesis_key.pub, nano::genesis_hash, nano::dev_genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (nano::genesis_hash))); + auto send1 (std::make_shared (nano::dev_genesis_key.pub, nano::dev::genesis->hash (), nano::dev_genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); ASSERT_EQ (nano::process_result::progress, node1->process (*send1).code); auto open (std::make_shared (send1->hash (), key.pub, key.pub, key.prv, key.pub, *system.work.generate (key.pub))); ASSERT_EQ (nano::process_result::progress, node1->process (*open).code); @@ -5857,7 +5857,7 @@ TEST (rpc, receive) wallet->insert_adhoc (nano::dev_genesis_key.prv); nano::keypair key1; wallet->insert_adhoc (key1.prv); - auto send1 (wallet->send_action (nano::dev_genesis_key.pub, key1.pub, node->config.receive_minimum.number (), *node->work_generate_blocking (nano::genesis_hash))); + auto send1 (wallet->send_action (nano::dev_genesis_key.pub, key1.pub, node->config.receive_minimum.number (), *node->work_generate_blocking (nano::dev::genesis->hash ()))); ASSERT_TIMELY (5s, node->balance (nano::dev_genesis_key.pub) != nano::genesis_amount); ASSERT_TIMELY (10s, !node->store.account.exists (node->store.tx_begin_read (), key1.pub)); // Send below minimum receive amount @@ -5898,7 +5898,7 @@ TEST (rpc, receive_unopened) wallet->insert_adhoc (nano::dev_genesis_key.prv); // Test receiving for unopened account nano::keypair key1; - auto send1 (wallet->send_action (nano::dev_genesis_key.pub, key1.pub, node->config.receive_minimum.number () - 1, *node->work_generate_blocking (nano::genesis_hash))); + auto send1 (wallet->send_action (nano::dev_genesis_key.pub, key1.pub, node->config.receive_minimum.number () - 1, *node->work_generate_blocking (nano::dev::genesis->hash ()))); ASSERT_TIMELY (5s, !node->balance (nano::dev_genesis_key.pub) != nano::genesis_amount); ASSERT_FALSE (node->store.account.exists (node->store.tx_begin_read (), key1.pub)); ASSERT_TRUE (node->store.block.exists (node->store.tx_begin_read (), send1->hash ())); @@ -5993,7 +5993,7 @@ TEST (rpc, receive_pruned) wallet1->insert_adhoc (nano::dev_genesis_key.prv); nano::keypair key1; wallet2->insert_adhoc (key1.prv); - auto send1 (wallet1->send_action (nano::dev_genesis_key.pub, key1.pub, node2->config.receive_minimum.number (), *node2->work_generate_blocking (nano::genesis_hash))); + auto send1 (wallet1->send_action (nano::dev_genesis_key.pub, key1.pub, node2->config.receive_minimum.number (), *node2->work_generate_blocking (nano::dev::genesis->hash ()))); ASSERT_TIMELY (5s, node2->balance (nano::dev_genesis_key.pub) != nano::genesis_amount); ASSERT_TIMELY (10s, !node2->store.account.exists (node2->store.tx_begin_read (), key1.pub)); // Send below minimum receive amount diff --git a/nano/secure/common.cpp b/nano/secure/common.cpp index c9faaec3ee..4ebd64f4eb 100644 --- a/nano/secure/common.cpp +++ b/nano/secure/common.cpp @@ -79,6 +79,9 @@ char const * live_canary_public_key_data = "7CBAF192A3763DAEC9F9BAC1B2CDF665D836 std::string const test_canary_public_key_data = nano::get_env_or_default ("NANO_TEST_CANARY_PUB", "3BAD2C554ACE05F5E528FBBCE79D51E552C55FA765CCFD89B289C4835DE5F04A"); // nano_1gxf7jcnomi7yqkkjyxwwygo5sckrohtgsgezp6u74g6ifgydw4cajwbk8bf } +nano::ledger_constants nano::dev::constants{ nano::networks::nano_dev_network }; +std::shared_ptr & nano::dev::genesis = nano::dev::constants.genesis; + nano::network_params::network_params () : network_params (network_constants::active_network) { diff --git a/nano/secure/common.hpp b/nano/secure/common.hpp index 383f7ae9f9..3648b8987e 100644 --- a/nano/secure/common.hpp +++ b/nano/secure/common.hpp @@ -396,6 +396,12 @@ class ledger_constants nano::epochs epochs; }; +namespace dev +{ + extern nano::ledger_constants constants; + extern std::shared_ptr & genesis; +} + /** Constants which depend on random values (this class should never be used globally due to CryptoPP globals potentially not being initialized) */ class random_constants { diff --git a/nano/slow_test/node.cpp b/nano/slow_test/node.cpp index 94f97e8fb4..4780ab28aa 100644 --- a/nano/slow_test/node.cpp +++ b/nano/slow_test/node.cpp @@ -483,7 +483,7 @@ TEST (node, mass_vote_by_hash) { nano::system system (1); system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - nano::block_hash previous (nano::genesis_hash); + nano::block_hash previous (nano::dev::genesis->hash ()); nano::keypair key; std::vector> blocks; for (auto i (0); i < 10000; ++i) @@ -979,7 +979,7 @@ TEST (confirmation_height, many_accounts_send_receive_self_no_elections) auto const num_accounts = 100000; - auto latest_genesis = nano::genesis_hash; + auto latest_genesis = nano::dev::genesis->hash (); std::vector keys; std::vector> open_blocks; @@ -1828,7 +1828,7 @@ TEST (node, wallet_create_block_confirm_conflicts) auto const num_blocks = 10000; // First open the other account - auto latest = nano::genesis_hash; + auto latest = nano::dev::genesis->hash (); nano::keypair key1; { auto transaction = node->store.tx_begin_write (); diff --git a/nano/test_common/system.cpp b/nano/test_common/system.cpp index 6a986d4b0f..a588829233 100644 --- a/nano/test_common/system.cpp +++ b/nano/test_common/system.cpp @@ -151,7 +151,7 @@ nano::system::~system () void nano::system::ledger_initialization_set (std::vector const & reps, nano::amount const & reserve) { - nano::block_hash previous = nano::genesis_hash; + nano::block_hash previous = nano::dev::genesis->hash (); auto amount = (nano::genesis_amount - reserve.number ()) / reps.size (); auto balance = nano::genesis_amount; for (auto const & i : reps) diff --git a/nano/test_common/testutil.cpp b/nano/test_common/testutil.cpp index 3e972817be..1f5939913a 100644 --- a/nano/test_common/testutil.cpp +++ b/nano/test_common/testutil.cpp @@ -19,7 +19,6 @@ nano::keypair const & nano::zero_key (dev_constants.zero_key); nano::keypair const & nano::dev_genesis_key (dev_constants.dev_genesis_key); nano::account const & nano::nano_dev_account (dev_constants.nano_dev_account); nano::account const & nano::genesis_account (dev_constants.genesis_account ()); -nano::block_hash const & nano::genesis_hash (dev_constants.genesis_hash ()); nano::uint128_t const & nano::genesis_amount (dev_constants.genesis_amount); nano::account const & nano::burn_account (dev_constants.burn_account); diff --git a/nano/test_common/testutil.hpp b/nano/test_common/testutil.hpp index 74cf8bc960..bf890b286b 100644 --- a/nano/test_common/testutil.hpp +++ b/nano/test_common/testutil.hpp @@ -55,7 +55,6 @@ class system; extern nano::keypair const & zero_key; extern nano::keypair const & dev_genesis_key; -extern nano::block_hash const & genesis_hash; extern nano::public_key const & nano_dev_account; extern nano::public_key const & genesis_account; extern nano::public_key const & burn_account; From 32c94550fade5b6d5375df73dc7a85f6dc2070f3 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Tue, 20 Jul 2021 18:50:47 +0100 Subject: [PATCH 092/346] Removing nano::genesis_account variable and replacing usages with nano::dev::genesis->account () --- nano/core_test/active_transactions.cpp | 10 +- nano/core_test/block_store.cpp | 50 +-- nano/core_test/bootstrap.cpp | 10 +- nano/core_test/confirmation_height.cpp | 46 +-- nano/core_test/election.cpp | 2 +- nano/core_test/frontiers_confirmation.cpp | 24 +- nano/core_test/gap_cache.cpp | 10 +- nano/core_test/ledger.cpp | 472 +++++++++++----------- nano/core_test/node.cpp | 12 +- nano/core_test/system.cpp | 14 +- nano/core_test/vote_processor.cpp | 4 +- nano/core_test/voting.cpp | 2 +- nano/core_test/wallet.cpp | 66 +-- nano/core_test/wallets.cpp | 12 +- nano/load_test/entry.cpp | 2 +- nano/qt_test/qt.cpp | 6 +- nano/rpc_test/rpc.cpp | 80 ++-- nano/slow_test/node.cpp | 6 +- nano/test_common/testutil.cpp | 1 - nano/test_common/testutil.hpp | 1 - 20 files changed, 414 insertions(+), 416 deletions(-) diff --git a/nano/core_test/active_transactions.cpp b/nano/core_test/active_transactions.cpp index 3154b0d8e8..d7cdd33a54 100644 --- a/nano/core_test/active_transactions.cpp +++ b/nano/core_test/active_transactions.cpp @@ -584,7 +584,7 @@ TEST (active_transactions, dropped_cleanup) nano::genesis genesis; auto block = genesis.open; - block->sideband_set (nano::block_sideband (nano::genesis_account, 0, nano::genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); + block->sideband_set (nano::block_sideband (nano::dev::genesis->account (), 0, nano::genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); // Add to network filter to ensure proper cleanup after the election is dropped std::vector block_bytes; @@ -1232,7 +1232,7 @@ TEST (active_transactions, pessimistic_elections) ASSERT_EQ (2, node.active.expired_optimistic_election_infos.size ()); ASSERT_EQ (2, node.active.expired_optimistic_election_infos.size ()); auto election_started_it = node.active.expired_optimistic_election_infos.get ().begin (); - ASSERT_EQ (election_started_it->account, nano::genesis_account); + ASSERT_EQ (election_started_it->account, nano::dev::genesis->account ()); ASSERT_EQ (election_started_it->election_started, true); ASSERT_EQ ((++election_started_it)->election_started, false); @@ -1253,7 +1253,7 @@ TEST (active_transactions, pessimistic_elections) nano::confirmation_height_info key1_confirmation_height_info; { auto transaction = node.store.tx_begin_read (); - node.store.confirmation_height.get (transaction, nano::genesis_account, genesis_confirmation_height_info); + node.store.confirmation_height.get (transaction, nano::dev::genesis->account (), genesis_confirmation_height_info); ASSERT_EQ (2, genesis_confirmation_height_info.height); node.store.confirmation_height.get (transaction, key.pub, key1_confirmation_height_info); ASSERT_EQ (0, key1_confirmation_height_info.height); @@ -1275,7 +1275,7 @@ TEST (active_transactions, pessimistic_elections) { auto transaction = node.store.tx_begin_read (); - node.store.confirmation_height.get (transaction, nano::genesis_account, genesis_confirmation_height_info); + node.store.confirmation_height.get (transaction, nano::dev::genesis->account (), genesis_confirmation_height_info); ASSERT_EQ (3, genesis_confirmation_height_info.height); node.store.confirmation_height.get (transaction, key.pub, key1_confirmation_height_info); ASSERT_EQ (0, key1_confirmation_height_info.height); @@ -1299,7 +1299,7 @@ TEST (active_transactions, pessimistic_elections) { auto transaction = node.store.tx_begin_read (); - node.store.confirmation_height.get (transaction, nano::genesis_account, genesis_confirmation_height_info); + node.store.confirmation_height.get (transaction, nano::dev::genesis->account (), genesis_confirmation_height_info); ASSERT_EQ (3, genesis_confirmation_height_info.height); node.store.confirmation_height.get (transaction, key.pub, key1_confirmation_height_info); ASSERT_EQ (1, key1_confirmation_height_info.height); diff --git a/nano/core_test/block_store.cpp b/nano/core_test/block_store.cpp index 995b8dad7c..0897a2550d 100644 --- a/nano/core_test/block_store.cpp +++ b/nano/core_test/block_store.cpp @@ -330,7 +330,7 @@ TEST (block_store, genesis) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger_cache); nano::account_info info; - ASSERT_FALSE (store->account.get (transaction, nano::genesis_account, info)); + ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis->account (), info)); ASSERT_EQ (hash, info.head); auto block1 (store->block.get (transaction, info.head)); ASSERT_NE (nullptr, block1); @@ -340,13 +340,13 @@ TEST (block_store, genesis) ASSERT_EQ (info.block_count, 1); // Genesis block should be confirmed by default nano::confirmation_height_info confirmation_height_info; - ASSERT_FALSE (store->confirmation_height.get (transaction, nano::genesis_account, confirmation_height_info)); + ASSERT_FALSE (store->confirmation_height.get (transaction, nano::dev::genesis->account (), confirmation_height_info)); ASSERT_EQ (confirmation_height_info.height, 1); ASSERT_EQ (confirmation_height_info.frontier, hash); auto dev_pub_text (nano::dev_genesis_key.pub.to_string ()); auto dev_pub_account (nano::dev_genesis_key.pub.to_account ()); auto dev_prv_text (nano::dev_genesis_key.prv.to_string ()); - ASSERT_EQ (nano::genesis_account, nano::dev_genesis_key.pub); + ASSERT_EQ (nano::dev::genesis->account (), nano::dev_genesis_key.pub); } TEST (bootstrap, simple) @@ -689,10 +689,10 @@ TEST (mdb_block_store, supported_version_upgrades) store.initialize (transaction, ledger.cache); // Lower the database version to the minimum version supported for upgrade. store.version.put (transaction, store.minimum_version); - store.confirmation_height.del (transaction, nano::genesis_account); + store.confirmation_height.del (transaction, nano::dev::genesis->account ()); ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "accounts_v1", MDB_CREATE, &store.accounts_v1_handle)); ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "open", MDB_CREATE, &store.open_blocks_handle)); - modify_account_info_to_v14 (store, transaction, nano::genesis_account, 1, nano::dev::genesis->hash ()); + modify_account_info_to_v14 (store, transaction, nano::dev::genesis->account (), 1, nano::dev::genesis->hash ()); write_block_w_sideband_v18 (store, store.open_blocks_handle, transaction, *nano::genesis ().open); } @@ -1285,9 +1285,9 @@ TEST (mdb_block_store, upgrade_v14_v15) auto transaction (store.tx_begin_write ()); store.initialize (transaction, ledger.cache); nano::account_info account_info; - ASSERT_FALSE (store.account.get (transaction, nano::genesis_account, account_info)); + ASSERT_FALSE (store.account.get (transaction, nano::dev::genesis->account (), account_info)); nano::confirmation_height_info confirmation_height_info; - ASSERT_FALSE (store.confirmation_height.get (transaction, nano::genesis_account, confirmation_height_info)); + ASSERT_FALSE (store.confirmation_height.get (transaction, nano::dev::genesis->account (), confirmation_height_info)); ASSERT_EQ (confirmation_height_info.height, 1); ASSERT_EQ (confirmation_height_info.frontier, genesis.hash ()); // These databases get removed after an upgrade, so readd them @@ -1302,10 +1302,10 @@ TEST (mdb_block_store, upgrade_v14_v15) ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, state_send).code); // Lower the database to the previous version store.version.put (transaction, 14); - store.confirmation_height.del (transaction, nano::genesis_account); - modify_account_info_to_v14 (store, transaction, nano::genesis_account, confirmation_height_info.height, state_send.hash ()); + store.confirmation_height.del (transaction, nano::dev::genesis->account ()); + modify_account_info_to_v14 (store, transaction, nano::dev::genesis->account (), confirmation_height_info.height, state_send.hash ()); - store.pending.del (transaction, nano::pending_key (nano::genesis_account, state_send.hash ())); + store.pending.del (transaction, nano::pending_key (nano::dev::genesis->account (), state_send.hash ())); write_sideband_v14 (store, transaction, state_send, store.state_blocks_v1_handle); write_sideband_v14 (store, transaction, epoch, store.state_blocks_v1_handle); @@ -1317,18 +1317,18 @@ TEST (mdb_block_store, upgrade_v14_v15) store.block.del (transaction, epoch.hash ()); // Turn pending into v14 - ASSERT_FALSE (mdb_put (store.env.tx (transaction), store.pending_v0_handle, nano::mdb_val (nano::pending_key (nano::dev_genesis_key.pub, send.hash ())), nano::mdb_val (nano::pending_info_v14 (nano::genesis_account, nano::Gxrb_ratio, nano::epoch::epoch_0)), 0)); - ASSERT_FALSE (mdb_put (store.env.tx (transaction), store.pending_v1_handle, nano::mdb_val (nano::pending_key (nano::dev_genesis_key.pub, state_send.hash ())), nano::mdb_val (nano::pending_info_v14 (nano::genesis_account, nano::Gxrb_ratio, nano::epoch::epoch_1)), 0)); + ASSERT_FALSE (mdb_put (store.env.tx (transaction), store.pending_v0_handle, nano::mdb_val (nano::pending_key (nano::dev_genesis_key.pub, send.hash ())), nano::mdb_val (nano::pending_info_v14 (nano::dev::genesis->account (), nano::Gxrb_ratio, nano::epoch::epoch_0)), 0)); + ASSERT_FALSE (mdb_put (store.env.tx (transaction), store.pending_v1_handle, nano::mdb_val (nano::pending_key (nano::dev_genesis_key.pub, state_send.hash ())), nano::mdb_val (nano::pending_info_v14 (nano::dev::genesis->account (), nano::Gxrb_ratio, nano::epoch::epoch_1)), 0)); // This should fail as sizes are no longer correct for account_info nano::mdb_val value; - ASSERT_FALSE (mdb_get (store.env.tx (transaction), store.accounts_v1_handle, nano::mdb_val (nano::genesis_account), value)); + ASSERT_FALSE (mdb_get (store.env.tx (transaction), store.accounts_v1_handle, nano::mdb_val (nano::dev::genesis->account ()), value)); nano::account_info info; ASSERT_NE (value.size (), info.db_size ()); - store.account.del (transaction, nano::genesis_account); + store.account.del (transaction, nano::dev::genesis->account ()); // Confirmation height for the account should be deleted - ASSERT_TRUE (mdb_get (store.env.tx (transaction), store.confirmation_height_handle, nano::mdb_val (nano::genesis_account), value)); + ASSERT_TRUE (mdb_get (store.env.tx (transaction), store.confirmation_height_handle, nano::mdb_val (nano::dev::genesis->account ()), value)); } // Now do the upgrade @@ -1339,18 +1339,18 @@ TEST (mdb_block_store, upgrade_v14_v15) // Size of account_info should now equal that set in db nano::mdb_val value; - ASSERT_FALSE (mdb_get (store.env.tx (transaction), store.accounts_handle, nano::mdb_val (nano::genesis_account), value)); + ASSERT_FALSE (mdb_get (store.env.tx (transaction), store.accounts_handle, nano::mdb_val (nano::dev::genesis->account ()), value)); nano::account_info info (value); ASSERT_EQ (value.size (), info.db_size ()); // Confirmation height should exist nano::confirmation_height_info confirmation_height_info; - ASSERT_FALSE (store.confirmation_height.get (transaction, nano::genesis_account, confirmation_height_info)); + ASSERT_FALSE (store.confirmation_height.get (transaction, nano::dev::genesis->account (), confirmation_height_info)); ASSERT_EQ (confirmation_height_info.height, 1); ASSERT_EQ (confirmation_height_info.frontier, genesis.hash ()); // accounts_v1, state_blocks_v1 & pending_v1 tables should be deleted - auto error_get_accounts_v1 (mdb_get (store.env.tx (transaction), store.accounts_v1_handle, nano::mdb_val (nano::genesis_account), value)); + auto error_get_accounts_v1 (mdb_get (store.env.tx (transaction), store.accounts_v1_handle, nano::mdb_val (nano::dev::genesis->account ()), value)); ASSERT_NE (error_get_accounts_v1, MDB_SUCCESS); auto error_get_pending_v1 (mdb_get (store.env.tx (transaction), store.pending_v1_handle, nano::mdb_val (nano::pending_key (nano::dev_genesis_key.pub, state_send.hash ())), value)); ASSERT_NE (error_get_pending_v1, MDB_SUCCESS); @@ -1395,15 +1395,15 @@ TEST (mdb_block_store, upgrade_v15_v16) // The representation table should get removed after, so readd it so that we can later confirm this actually happens auto txn = store.env.tx (transaction); ASSERT_FALSE (mdb_dbi_open (txn, "representation", MDB_CREATE, &store.representation_handle)); - auto weight = ledger.cache.rep_weights.representation_get (nano::genesis_account); - ASSERT_EQ (MDB_SUCCESS, mdb_put (txn, store.representation_handle, nano::mdb_val (nano::genesis_account), nano::mdb_val (nano::uint128_union (weight)), 0)); + auto weight = ledger.cache.rep_weights.representation_get (nano::dev::genesis->account ()); + ASSERT_EQ (MDB_SUCCESS, mdb_put (txn, store.representation_handle, nano::mdb_val (nano::dev::genesis->account ()), nano::mdb_val (nano::uint128_union (weight)), 0)); ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "open", MDB_CREATE, &store.open_blocks_handle)); write_block_w_sideband_v18 (store, store.open_blocks_handle, transaction, *genesis.open); // Lower the database to the previous version store.version.put (transaction, 15); // Confirm the rep weight exists in the database - ASSERT_EQ (MDB_SUCCESS, mdb_get (store.env.tx (transaction), store.representation_handle, nano::mdb_val (nano::genesis_account), value)); - store.confirmation_height.del (transaction, nano::genesis_account); + ASSERT_EQ (MDB_SUCCESS, mdb_get (store.env.tx (transaction), store.representation_handle, nano::mdb_val (nano::dev::genesis->account ()), value)); + store.confirmation_height.del (transaction, nano::dev::genesis->account ()); } // Now do the upgrade @@ -1413,7 +1413,7 @@ TEST (mdb_block_store, upgrade_v15_v16) auto transaction (store.tx_begin_read ()); // The representation table should now be deleted - auto error_get_representation (mdb_get (store.env.tx (transaction), store.representation_handle, nano::mdb_val (nano::genesis_account), value)); + auto error_get_representation (mdb_get (store.env.tx (transaction), store.representation_handle, nano::mdb_val (nano::dev::genesis->account ()), value)); ASSERT_NE (MDB_SUCCESS, error_get_representation); ASSERT_EQ (store.representation_handle, 0); @@ -1448,7 +1448,7 @@ TEST (mdb_block_store, upgrade_v16_v17) ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block1).code); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block2).code); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block3).code); - modify_confirmation_height_to_v15 (store, transaction, nano::genesis_account, confirmation_height); + modify_confirmation_height_to_v15 (store, transaction, nano::dev::genesis->account (), confirmation_height); ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "open", MDB_CREATE, &store.open_blocks_handle)); write_block_w_sideband_v18 (store, store.open_blocks_handle, transaction, *genesis.open); @@ -1468,7 +1468,7 @@ TEST (mdb_block_store, upgrade_v16_v17) auto transaction (store.tx_begin_read ()); nano::confirmation_height_info confirmation_height_info; - ASSERT_FALSE (store.confirmation_height.get (transaction, nano::genesis_account, confirmation_height_info)); + ASSERT_FALSE (store.confirmation_height.get (transaction, nano::dev::genesis->account (), confirmation_height_info)); ASSERT_EQ (confirmation_height_info.height, confirmation_height); // Check confirmation height frontier is correct diff --git a/nano/core_test/bootstrap.cpp b/nano/core_test/bootstrap.cpp index a3a14b4592..ef13cba3e3 100644 --- a/nano/core_test/bootstrap.cpp +++ b/nano/core_test/bootstrap.cpp @@ -1867,9 +1867,9 @@ TEST (bulk_pull_account, basics) nano::keypair key1; system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); system.wallet (0)->insert_adhoc (key1.prv); - auto send1 (system.wallet (0)->send_action (nano::genesis_account, key1.pub, 25)); - auto send2 (system.wallet (0)->send_action (nano::genesis_account, key1.pub, 10)); - auto send3 (system.wallet (0)->send_action (nano::genesis_account, key1.pub, 2)); + auto send1 (system.wallet (0)->send_action (nano::dev::genesis->account (), key1.pub, 25)); + auto send2 (system.wallet (0)->send_action (nano::dev::genesis->account (), key1.pub, 10)); + auto send3 (system.wallet (0)->send_action (nano::dev::genesis->account (), key1.pub, 2)); ASSERT_TIMELY (5s, system.nodes[0]->balance (key1.pub) == 25); auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); @@ -1888,7 +1888,7 @@ TEST (bulk_pull_account, basics) auto block_data (request->get_next ()); ASSERT_EQ (send2->hash (), block_data.first.get ()->hash); ASSERT_EQ (nano::uint128_union (10), block_data.second.get ()->amount); - ASSERT_EQ (nano::genesis_account, block_data.second.get ()->source); + ASSERT_EQ (nano::dev::genesis->account (), block_data.second.get ()->source); ASSERT_EQ (nullptr, request->get_next ().first.get ()); } @@ -1902,7 +1902,7 @@ TEST (bulk_pull_account, basics) auto block_data (request->get_next ()); ASSERT_NE (nullptr, block_data.first.get ()); ASSERT_NE (nullptr, block_data.second.get ()); - ASSERT_EQ (nano::genesis_account, block_data.second.get ()->source); + ASSERT_EQ (nano::dev::genesis->account (), block_data.second.get ()->source); block_data = request->get_next (); ASSERT_EQ (nullptr, block_data.first.get ()); ASSERT_EQ (nullptr, block_data.second.get ()); diff --git a/nano/core_test/confirmation_height.cpp b/nano/core_test/confirmation_height.cpp index f42df2dac8..6dba764a97 100644 --- a/nano/core_test/confirmation_height.cpp +++ b/nano/core_test/confirmation_height.cpp @@ -98,9 +98,9 @@ TEST (confirmation_height, multiple_accounts) nano::send_block send3 (send2.hash (), key3.pub, node->online_reps.delta () + 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send2.hash ())); // Open all accounts - nano::open_block open1 (send1.hash (), nano::genesis_account, key1.pub, key1.prv, key1.pub, *system.work.generate (key1.pub)); - nano::open_block open2 (send2.hash (), nano::genesis_account, key2.pub, key2.prv, key2.pub, *system.work.generate (key2.pub)); - nano::open_block open3 (send3.hash (), nano::genesis_account, key3.pub, key3.prv, key3.pub, *system.work.generate (key3.pub)); + nano::open_block open1 (send1.hash (), nano::dev::genesis->account (), key1.pub, key1.prv, key1.pub, *system.work.generate (key1.pub)); + nano::open_block open2 (send2.hash (), nano::dev::genesis->account (), key2.pub, key2.prv, key2.pub, *system.work.generate (key2.pub)); + nano::open_block open3 (send3.hash (), nano::dev::genesis->account (), key3.pub, key3.prv, key3.pub, *system.work.generate (key3.pub)); // Send and receive various blocks to these accounts nano::send_block send4 (open1.hash (), key2.pub, 50, key1.prv, key1.pub, *system.work.generate (open1.hash ())); @@ -225,11 +225,11 @@ TEST (confirmation_height, gap_bootstrap) auto & node1 = *system.add_node (node_flags); nano::genesis genesis; nano::keypair destination; - auto send1 (std::make_shared (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); + auto send1 (std::make_shared (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); node1.work_generate_blocking (*send1); - auto send2 (std::make_shared (nano::genesis_account, send1->hash (), nano::genesis_account, nano::genesis_amount - 2 * nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); + auto send2 (std::make_shared (nano::dev::genesis->account (), send1->hash (), nano::dev::genesis->account (), nano::genesis_amount - 2 * nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); node1.work_generate_blocking (*send2); - auto send3 (std::make_shared (nano::genesis_account, send2->hash (), nano::genesis_account, nano::genesis_amount - 3 * nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); + auto send3 (std::make_shared (nano::dev::genesis->account (), send2->hash (), nano::dev::genesis->account (), nano::genesis_amount - 3 * nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); node1.work_generate_blocking (*send3); auto open1 (std::make_shared (send1->hash (), destination.pub, destination.pub, destination.prv, destination.pub, 0)); node1.work_generate_blocking (*open1); @@ -311,11 +311,11 @@ TEST (confirmation_height, gap_live) system.wallet (1)->insert_adhoc (destination.prv); nano::genesis genesis; - auto send1 (std::make_shared (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - 1, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); + auto send1 (std::make_shared (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - 1, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); node->work_generate_blocking (*send1); - auto send2 (std::make_shared (nano::genesis_account, send1->hash (), nano::genesis_account, nano::genesis_amount - 2, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); + auto send2 (std::make_shared (nano::dev::genesis->account (), send1->hash (), nano::dev::genesis->account (), nano::genesis_amount - 2, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); node->work_generate_blocking (*send2); - auto send3 (std::make_shared (nano::genesis_account, send2->hash (), nano::genesis_account, nano::genesis_amount - 3, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); + auto send3 (std::make_shared (nano::dev::genesis->account (), send2->hash (), nano::dev::genesis->account (), nano::genesis_amount - 3, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); node->work_generate_blocking (*send3); auto open1 (std::make_shared (send1->hash (), destination.pub, destination.pub, destination.prv, destination.pub, 0)); @@ -396,10 +396,10 @@ TEST (confirmation_height, send_receive_between_2_accounts) nano::send_block send1 (latest, key1.pub, node->online_reps.delta () + 2, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (latest)); - nano::open_block open1 (send1.hash (), nano::genesis_account, key1.pub, key1.prv, key1.pub, *system.work.generate (key1.pub)); - nano::send_block send2 (open1.hash (), nano::genesis_account, 1000, key1.prv, key1.pub, *system.work.generate (open1.hash ())); - nano::send_block send3 (send2.hash (), nano::genesis_account, 900, key1.prv, key1.pub, *system.work.generate (send2.hash ())); - nano::send_block send4 (send3.hash (), nano::genesis_account, 500, key1.prv, key1.pub, *system.work.generate (send3.hash ())); + nano::open_block open1 (send1.hash (), nano::dev::genesis->account (), key1.pub, key1.prv, key1.pub, *system.work.generate (key1.pub)); + nano::send_block send2 (open1.hash (), nano::dev::genesis->account (), 1000, key1.prv, key1.pub, *system.work.generate (open1.hash ())); + nano::send_block send3 (send2.hash (), nano::dev::genesis->account (), 900, key1.prv, key1.pub, *system.work.generate (send2.hash ())); + nano::send_block send4 (send3.hash (), nano::dev::genesis->account (), 500, key1.prv, key1.pub, *system.work.generate (send3.hash ())); nano::receive_block receive1 (send1.hash (), send2.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send1.hash ())); nano::receive_block receive2 (receive1.hash (), send3.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (receive1.hash ())); @@ -569,7 +569,7 @@ TEST (confirmation_height, all_block_types) nano::state_block state_send3 (key2.pub, state_send2->hash (), 0, nano::Gxrb_ratio - 1, key1.pub, key2.prv, key2.pub, *system.work.generate (state_send2->hash ())); nano::state_block state_send4 (key1.pub, state_send1.hash (), 0, nano::Gxrb_ratio - 2, nano::dev_genesis_key.pub, key1.prv, key1.pub, *system.work.generate (state_send1.hash ())); - nano::state_block state_receive3 (nano::genesis_account, send1.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio * 2 + 1, state_send4.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send1.hash ())); + nano::state_block state_receive3 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio * 2 + 1, state_send4.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send1.hash ())); { auto transaction (store.tx_begin_write ()); @@ -683,12 +683,12 @@ TEST (confirmation_height, conflict_rollback_cemented) { auto transaction (node1->store.tx_begin_write ()); ASSERT_TRUE (node1->store.block.exists (transaction, publish1.block->hash ())); - node1->store.confirmation_height.put (transaction, nano::genesis_account, nano::confirmation_height_info{ 2, send2->hash () }); + node1->store.confirmation_height.put (transaction, nano::dev::genesis->account (), nano::confirmation_height_info{ 2, send2->hash () }); } { auto transaction (node2->store.tx_begin_write ()); ASSERT_TRUE (node2->store.block.exists (transaction, publish2.block->hash ())); - node2->store.confirmation_height.put (transaction, nano::genesis_account, nano::confirmation_height_info{ 2, send2->hash () }); + node2->store.confirmation_height.put (transaction, nano::dev::genesis->account (), nano::confirmation_height_info{ 2, send2->hash () }); } auto rollback_log_entry = boost::str (boost::format ("Failed to roll back %1%") % send2->hash ().to_string ()); @@ -832,7 +832,7 @@ TEST (confirmation_heightDeathTest, modified_chain) } ASSERT_EQ (nano::process_result::progress, ledger.process (store->tx_begin_write (), *send).code); - store->confirmation_height.put (store->tx_begin_write (), nano::genesis_account, { 1, nano::dev::genesis->hash () }); + store->confirmation_height.put (store->tx_begin_write (), nano::dev::genesis->account (), { 1, nano::dev::genesis->hash () }); nano::confirmation_height_unbounded unbounded_processor ( ledger, write_database_queue, 10ms, logging, logger, stopped, batch_write_size, [] (auto const &) {}, [] (auto const &) {}, [] () { return 0; }); @@ -906,7 +906,7 @@ TEST (confirmation_heightDeathTest, modified_chain_account_removed) // Reset conditions and test with the bounded processor ASSERT_EQ (nano::process_result::progress, ledger.process (store->tx_begin_write (), *open).code); - store->confirmation_height.put (store->tx_begin_write (), nano::genesis_account, { 1, nano::dev::genesis->hash () }); + store->confirmation_height.put (store->tx_begin_write (), nano::dev::genesis->account (), { 1, nano::dev::genesis->hash () }); nano::confirmation_height_bounded bounded_processor ( ledger, write_database_queue, 10ms, logging, logger, stopped, batch_write_size, [] (auto const &) {}, [] (auto const &) {}, [] () { return 0; }); @@ -1120,7 +1120,7 @@ TEST (confirmation_height, cemented_gap_below_receive) nano::keypair dummy_key; nano::send_block dummy_send (send1.hash (), dummy_key.pub, nano::genesis_amount - nano::Gxrb_ratio * 3, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send1.hash ())); - nano::open_block open (send.hash (), nano::genesis_account, key1.pub, key1.prv, key1.pub, *system.work.generate (key1.pub)); + nano::open_block open (send.hash (), nano::dev::genesis->account (), key1.pub, key1.prv, key1.pub, *system.work.generate (key1.pub)); nano::receive_block receive1 (open.hash (), send1.hash (), key1.prv, key1.pub, *system.work.generate (open.hash ())); nano::send_block send2 (receive1.hash (), nano::dev_genesis_key.pub, nano::Gxrb_ratio, key1.prv, key1.pub, *system.work.generate (receive1.hash ())); @@ -1132,7 +1132,7 @@ TEST (confirmation_height, cemented_gap_below_receive) nano::send_block send3 (dummy_send1.hash (), key2.pub, nano::genesis_amount - nano::Gxrb_ratio * 4, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (dummy_send1.hash ())); nano::send_block dummy_send2 (send3.hash (), dummy_key.pub, nano::genesis_amount - nano::Gxrb_ratio * 5, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send3.hash ())); - auto open1 = std::make_shared (send3.hash (), nano::genesis_account, key2.pub, key2.prv, key2.pub, *system.work.generate (key2.pub)); + auto open1 = std::make_shared (send3.hash (), nano::dev::genesis->account (), key2.pub, key2.prv, key2.pub, *system.work.generate (key2.pub)); { auto transaction = node->store.tx_begin_write (); @@ -1205,7 +1205,7 @@ TEST (confirmation_height, cemented_gap_below_no_cache) nano::keypair dummy_key; nano::send_block dummy_send (send1.hash (), dummy_key.pub, nano::genesis_amount - nano::Gxrb_ratio * 3, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send1.hash ())); - nano::open_block open (send.hash (), nano::genesis_account, key1.pub, key1.prv, key1.pub, *system.work.generate (key1.pub)); + nano::open_block open (send.hash (), nano::dev::genesis->account (), key1.pub, key1.prv, key1.pub, *system.work.generate (key1.pub)); nano::receive_block receive1 (open.hash (), send1.hash (), key1.prv, key1.pub, *system.work.generate (open.hash ())); nano::send_block send2 (receive1.hash (), nano::dev_genesis_key.pub, nano::Gxrb_ratio, key1.prv, key1.pub, *system.work.generate (receive1.hash ())); @@ -1217,7 +1217,7 @@ TEST (confirmation_height, cemented_gap_below_no_cache) nano::send_block send3 (dummy_send1.hash (), key2.pub, nano::genesis_amount - nano::Gxrb_ratio * 4, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (dummy_send1.hash ())); nano::send_block dummy_send2 (send3.hash (), dummy_key.pub, nano::genesis_amount - nano::Gxrb_ratio * 5, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send3.hash ())); - auto open1 = std::make_shared (send3.hash (), nano::genesis_account, key2.pub, key2.prv, key2.pub, *system.work.generate (key2.pub)); + auto open1 = std::make_shared (send3.hash (), nano::dev::genesis->account (), key2.pub, key2.prv, key2.pub, *system.work.generate (key2.pub)); { auto transaction = node->store.tx_begin_write (); @@ -1241,7 +1241,7 @@ TEST (confirmation_height, cemented_gap_below_no_cache) // Force some blocks to be cemented so that the cached confirmed info variable is empty { auto transaction (node->store.tx_begin_write ()); - node->store.confirmation_height.put (transaction, nano::genesis_account, nano::confirmation_height_info{ 3, send1.hash () }); + node->store.confirmation_height.put (transaction, nano::dev::genesis->account (), nano::confirmation_height_info{ 3, send1.hash () }); node->store.confirmation_height.put (transaction, key1.pub, nano::confirmation_height_info{ 2, receive1.hash () }); } diff --git a/nano/core_test/election.cpp b/nano/core_test/election.cpp index 4afcfb0e3b..3c0d77e32f 100644 --- a/nano/core_test/election.cpp +++ b/nano/core_test/election.cpp @@ -11,7 +11,7 @@ TEST (election, construction) nano::system system (1); nano::genesis genesis; auto & node = *system.nodes[0]; - genesis.open->sideband_set (nano::block_sideband (nano::genesis_account, 0, nano::genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); + genesis.open->sideband_set (nano::block_sideband (nano::dev::genesis->account (), 0, nano::genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); node.block_confirm (genesis.open); node.scheduler.flush (); auto election = node.active.election (genesis.open->qualified_root ()); diff --git a/nano/core_test/frontiers_confirmation.cpp b/nano/core_test/frontiers_confirmation.cpp index faa6edea93..ea4674dfbe 100644 --- a/nano/core_test/frontiers_confirmation.cpp +++ b/nano/core_test/frontiers_confirmation.cpp @@ -31,16 +31,16 @@ TEST (frontiers_confirmation, prioritize_frontiers) nano::send_block send6 (send5.hash (), key4.pub, node->config.online_weight_minimum.number () + 6000, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send5.hash ())); // Open all accounts and add other sends to get different uncemented counts (as well as some which are the same) - nano::open_block open1 (send1.hash (), nano::genesis_account, key1.pub, key1.prv, key1.pub, *system.work.generate (key1.pub)); + nano::open_block open1 (send1.hash (), nano::dev::genesis->account (), key1.pub, key1.prv, key1.pub, *system.work.generate (key1.pub)); nano::send_block send7 (open1.hash (), nano::dev_genesis_key.pub, 500, key1.prv, key1.pub, *system.work.generate (open1.hash ())); - nano::open_block open2 (send4.hash (), nano::genesis_account, key2.pub, key2.prv, key2.pub, *system.work.generate (key2.pub)); + nano::open_block open2 (send4.hash (), nano::dev::genesis->account (), key2.pub, key2.prv, key2.pub, *system.work.generate (key2.pub)); - nano::open_block open3 (send5.hash (), nano::genesis_account, key3.pub, key3.prv, key3.pub, *system.work.generate (key3.pub)); + nano::open_block open3 (send5.hash (), nano::dev::genesis->account (), key3.pub, key3.prv, key3.pub, *system.work.generate (key3.pub)); nano::send_block send8 (open3.hash (), nano::dev_genesis_key.pub, 500, key3.prv, key3.pub, *system.work.generate (open3.hash ())); nano::send_block send9 (send8.hash (), nano::dev_genesis_key.pub, 200, key3.prv, key3.pub, *system.work.generate (send8.hash ())); - nano::open_block open4 (send6.hash (), nano::genesis_account, key4.pub, key4.prv, key4.pub, *system.work.generate (key4.pub)); + nano::open_block open4 (send6.hash (), nano::dev::genesis->account (), key4.pub, key4.prv, key4.pub, *system.work.generate (key4.pub)); nano::send_block send10 (open4.hash (), nano::dev_genesis_key.pub, 500, key4.prv, key4.pub, *system.work.generate (open4.hash ())); nano::send_block send11 (send10.hash (), nano::dev_genesis_key.pub, 200, key4.prv, key4.pub, *system.work.generate (send10.hash ())); @@ -78,8 +78,8 @@ TEST (frontiers_confirmation, prioritize_frontiers) node->active.prioritize_frontiers_for_confirmation (transaction, std::chrono::seconds (1), std::chrono::seconds (1)); ASSERT_EQ (node->active.priority_cementable_frontiers_size (), num_accounts); // Check the order of accounts is as expected (greatest number of uncemented blocks at the front). key3 and key4 have the same value, the order is unspecified so check both - std::array desired_order_1{ nano::genesis_account, key3.pub, key4.pub, key1.pub, key2.pub }; - std::array desired_order_2{ nano::genesis_account, key4.pub, key3.pub, key1.pub, key2.pub }; + std::array desired_order_1{ nano::dev::genesis->account (), key3.pub, key4.pub, key1.pub, key2.pub }; + std::array desired_order_2{ nano::dev::genesis->account (), key4.pub, key3.pub, key1.pub, key2.pub }; ASSERT_TRUE (priority_orders_match (node->active.priority_cementable_frontiers, desired_order_1) || priority_orders_match (node->active.priority_cementable_frontiers, desired_order_2)); } @@ -91,7 +91,7 @@ TEST (frontiers_confirmation, prioritize_frontiers) node->active.prioritize_frontiers_for_confirmation (transaction, std::chrono::seconds (1), std::chrono::seconds (1)); ASSERT_EQ (node->active.priority_cementable_frontiers_size (), num_accounts - 3); ASSERT_EQ (node->active.priority_wallet_cementable_frontiers_size (), num_accounts - 2); - std::array local_desired_order{ nano::genesis_account, key1.pub, key2.pub }; + std::array local_desired_order{ nano::dev::genesis->account (), key1.pub, key2.pub }; ASSERT_TRUE (priority_orders_match (node->active.priority_wallet_cementable_frontiers, local_desired_order)); std::array desired_order_1{ key3.pub, key4.pub }; std::array desired_order_2{ key4.pub, key3.pub }; @@ -105,8 +105,8 @@ TEST (frontiers_confirmation, prioritize_frontiers) node->active.prioritize_frontiers_for_confirmation (transaction, std::chrono::seconds (1), std::chrono::seconds (1)); ASSERT_EQ (node->active.priority_cementable_frontiers_size (), 0); ASSERT_EQ (node->active.priority_wallet_cementable_frontiers_size (), num_accounts); - std::array desired_order_1{ nano::genesis_account, key3.pub, key4.pub, key1.pub, key2.pub }; - std::array desired_order_2{ nano::genesis_account, key4.pub, key3.pub, key1.pub, key2.pub }; + std::array desired_order_1{ nano::dev::genesis->account (), key3.pub, key4.pub, key1.pub, key2.pub }; + std::array desired_order_2{ nano::dev::genesis->account (), key4.pub, key3.pub, key1.pub, key2.pub }; ASSERT_TRUE (priority_orders_match (node->active.priority_wallet_cementable_frontiers, desired_order_1) || priority_orders_match (node->active.priority_wallet_cementable_frontiers, desired_order_2)); } @@ -128,7 +128,7 @@ TEST (frontiers_confirmation, prioritize_frontiers) } transaction.refresh (); node->active.prioritize_frontiers_for_confirmation (transaction, std::chrono::seconds (1), std::chrono::seconds (1)); - ASSERT_TRUE (priority_orders_match (node->active.priority_wallet_cementable_frontiers, std::array{ key3.pub, nano::genesis_account, key4.pub, key1.pub, key2.pub })); + ASSERT_TRUE (priority_orders_match (node->active.priority_wallet_cementable_frontiers, std::array{ key3.pub, nano::dev::genesis->account (), key4.pub, key1.pub, key2.pub })); uint64_t election_count = 0; node->active.confirm_prioritized_frontiers (transaction, 100, election_count); @@ -159,11 +159,11 @@ TEST (frontiers_confirmation, prioritize_frontiers_max_optimistic_elections) for (auto i = 0; i < max_optimistic_election_count * 2; ++i) { auto transaction = node->store.tx_begin_write (); - auto latest = node->latest (nano::genesis_account); + auto latest = node->latest (nano::dev::genesis->account ()); nano::keypair key; nano::send_block send (latest, key.pub, node->config.online_weight_minimum.number () + 10000, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (latest)); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, send).code); - nano::open_block open (send.hash (), nano::genesis_account, key.pub, key.prv, key.pub, *system.work.generate (key.pub)); + nano::open_block open (send.hash (), nano::dev::genesis->account (), key.pub, key.prv, key.pub, *system.work.generate (key.pub)); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, open).code); } diff --git a/nano/core_test/gap_cache.cpp b/nano/core_test/gap_cache.cpp index e4679c8a46..c12624c116 100644 --- a/nano/core_test/gap_cache.cpp +++ b/nano/core_test/gap_cache.cpp @@ -69,8 +69,8 @@ TEST (gap_cache, gap_bootstrap) nano::keypair key; auto send (std::make_shared (latest, key.pub, nano::genesis_amount - 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (latest))); node1.process (*send); - ASSERT_EQ (nano::genesis_amount - 100, node1.balance (nano::genesis_account)); - ASSERT_EQ (nano::genesis_amount, node2.balance (nano::genesis_account)); + ASSERT_EQ (nano::genesis_amount - 100, node1.balance (nano::dev::genesis->account ())); + ASSERT_EQ (nano::genesis_amount, node2.balance (nano::dev::genesis->account ())); // Confirm send block, allowing voting on the upcoming block node1.block_confirm (send); auto election = node1.active.election (send->qualified_root ()); @@ -81,9 +81,9 @@ TEST (gap_cache, gap_bootstrap) system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); auto latest_block (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, 100)); ASSERT_NE (nullptr, latest_block); - ASSERT_EQ (nano::genesis_amount - 200, node1.balance (nano::genesis_account)); - ASSERT_EQ (nano::genesis_amount, node2.balance (nano::genesis_account)); - ASSERT_TIMELY (10s, node2.balance (nano::genesis_account) == nano::genesis_amount - 200); + ASSERT_EQ (nano::genesis_amount - 200, node1.balance (nano::dev::genesis->account ())); + ASSERT_EQ (nano::genesis_amount, node2.balance (nano::dev::genesis->account ())); + ASSERT_TIMELY (10s, node2.balance (nano::dev::genesis->account ()) == nano::genesis_amount - 200); } TEST (gap_cache, two_dependencies) diff --git a/nano/core_test/ledger.cpp b/nano/core_test/ledger.cpp index bec09a76ac..01f322b0d0 100644 --- a/nano/core_test/ledger.cpp +++ b/nano/core_test/ledger.cpp @@ -49,19 +49,19 @@ TEST (ledger, genesis_balance) nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - auto balance (ledger.account_balance (transaction, nano::genesis_account)); + auto balance (ledger.account_balance (transaction, nano::dev::genesis->account ())); ASSERT_EQ (nano::genesis_amount, balance); - auto amount (ledger.amount (transaction, nano::genesis_account)); + auto amount (ledger.amount (transaction, nano::dev::genesis->account ())); ASSERT_EQ (nano::genesis_amount, amount); nano::account_info info; - ASSERT_FALSE (store->account.get (transaction, nano::genesis_account, info)); + ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis->account (), info)); ASSERT_EQ (1, ledger.cache.account_count); // Frontier time should have been updated when genesis balance was added ASSERT_GE (nano::seconds_since_epoch (), info.modified); ASSERT_LT (nano::seconds_since_epoch () - info.modified, 10); // Genesis block should be confirmed by default nano::confirmation_height_info confirmation_height_info; - ASSERT_FALSE (store->confirmation_height.get (transaction, nano::genesis_account, confirmation_height_info)); + ASSERT_FALSE (store->confirmation_height.get (transaction, nano::dev::genesis->account (), confirmation_height_info)); ASSERT_EQ (confirmation_height_info.height, 1); ASSERT_EQ (confirmation_height_info.frontier, genesis.hash ()); } @@ -76,7 +76,7 @@ TEST (ledger, process_modifies_sideband) nano::genesis genesis; store->initialize (store->tx_begin_write (), ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (store->tx_begin_write (), send1).code); ASSERT_EQ (send1.sideband ().timestamp, store->block.get (store->tx_begin_read (), send1.hash ())->sideband ().timestamp); } @@ -406,7 +406,7 @@ TEST (ledger, weight) nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::genesis_account)); + ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::dev::genesis->account ())); } TEST (ledger, representative_change) @@ -1557,15 +1557,15 @@ TEST (ledger, block_destination_source) balance -= nano::Gxrb_ratio; nano::send_block block1 (genesis.hash (), dest.pub, balance, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); balance -= nano::Gxrb_ratio; - nano::send_block block2 (block1.hash (), nano::genesis_account, balance, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (block1.hash ())); + nano::send_block block2 (block1.hash (), nano::dev::genesis->account (), balance, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (block1.hash ())); balance += nano::Gxrb_ratio; nano::receive_block block3 (block2.hash (), block2.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (block2.hash ())); balance -= nano::Gxrb_ratio; - nano::state_block block4 (nano::genesis_account, block3.hash (), nano::genesis_account, balance, dest.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (block3.hash ())); + nano::state_block block4 (nano::dev::genesis->account (), block3.hash (), nano::dev::genesis->account (), balance, dest.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (block3.hash ())); balance -= nano::Gxrb_ratio; - nano::state_block block5 (nano::genesis_account, block4.hash (), nano::genesis_account, balance, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (block4.hash ())); + nano::state_block block5 (nano::dev::genesis->account (), block4.hash (), nano::dev::genesis->account (), balance, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (block4.hash ())); balance += nano::Gxrb_ratio; - nano::state_block block6 (nano::genesis_account, block5.hash (), nano::genesis_account, balance, block5.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (block5.hash ())); + nano::state_block block6 (nano::dev::genesis->account (), block5.hash (), nano::dev::genesis->account (), balance, block5.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (block5.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block1).code); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block2).code); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block3).code); @@ -1575,13 +1575,13 @@ TEST (ledger, block_destination_source) ASSERT_EQ (balance, ledger.balance (transaction, block6.hash ())); ASSERT_EQ (dest.pub, ledger.block_destination (transaction, block1)); ASSERT_TRUE (ledger.block_source (transaction, block1).is_zero ()); - ASSERT_EQ (nano::genesis_account, ledger.block_destination (transaction, block2)); + ASSERT_EQ (nano::dev::genesis->account (), ledger.block_destination (transaction, block2)); ASSERT_TRUE (ledger.block_source (transaction, block2).is_zero ()); ASSERT_TRUE (ledger.block_destination (transaction, block3).is_zero ()); ASSERT_EQ (block2.hash (), ledger.block_source (transaction, block3)); ASSERT_EQ (dest.pub, ledger.block_destination (transaction, block4)); ASSERT_TRUE (ledger.block_source (transaction, block4).is_zero ()); - ASSERT_EQ (nano::genesis_account, ledger.block_destination (transaction, block5)); + ASSERT_EQ (nano::dev::genesis->account (), ledger.block_destination (transaction, block5)); ASSERT_TRUE (ledger.block_source (transaction, block5).is_zero ()); ASSERT_TRUE (ledger.block_destination (transaction, block6).is_zero ()); ASSERT_EQ (block5.hash (), ledger.block_source (transaction, block6)); @@ -1598,9 +1598,9 @@ TEST (ledger, state_account) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - ASSERT_EQ (nano::genesis_account, ledger.account (transaction, send1.hash ())); + ASSERT_EQ (nano::dev::genesis->account (), ledger.account (transaction, send1.hash ())); } TEST (ledger, state_send_receive) @@ -1614,7 +1614,7 @@ TEST (ledger, state_send_receive) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send2 (store->block.get (transaction, send1.hash ())); @@ -1622,13 +1622,13 @@ TEST (ledger, state_send_receive) ASSERT_EQ (send1, *send2); ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, send1.hash ())); - ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::genesis_account)); - ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); + ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); + ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()))); ASSERT_EQ (2, send2->sideband ().height); ASSERT_TRUE (send2->sideband ().details.is_send); ASSERT_FALSE (send2->sideband ().details.is_receive); ASSERT_FALSE (send2->sideband ().details.is_epoch); - nano::state_block receive1 (nano::genesis_account, send1.hash (), nano::genesis_account, nano::genesis_amount, send1.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount, send1.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); ASSERT_TRUE (store->block.exists (transaction, receive1.hash ())); auto receive2 (store->block.get (transaction, receive1.hash ())); @@ -1636,8 +1636,8 @@ TEST (ledger, state_send_receive) ASSERT_EQ (receive1, *receive2); ASSERT_EQ (nano::genesis_amount, ledger.balance (transaction, receive1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, receive1.hash ())); - ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::genesis_account)); - ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); + ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::dev::genesis->account ())); + ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()))); ASSERT_EQ (store->account.count (transaction), ledger.cache.account_count); ASSERT_EQ (3, receive2->sideband ().height); ASSERT_FALSE (receive2->sideband ().details.is_send); @@ -1656,7 +1656,7 @@ TEST (ledger, state_receive) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::send_block send1 (genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block send1 (genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send2 (store->block.get (transaction, send1.hash ())); @@ -1664,8 +1664,8 @@ TEST (ledger, state_receive) ASSERT_EQ (send1, *send2); ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, send1.hash ())); - ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::genesis_account)); - nano::state_block receive1 (nano::genesis_account, send1.hash (), nano::genesis_account, nano::genesis_amount, send1.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); + ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); + nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount, send1.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); ASSERT_TRUE (store->block.exists (transaction, receive1.hash ())); auto receive2 (store->block.get (transaction, receive1.hash ())); @@ -1673,7 +1673,7 @@ TEST (ledger, state_receive) ASSERT_EQ (receive1, *receive2); ASSERT_EQ (nano::genesis_amount, ledger.balance (transaction, receive1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, receive1.hash ())); - ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::genesis_account)); + ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::dev::genesis->account ())); ASSERT_EQ (3, receive2->sideband ().height); ASSERT_FALSE (receive2->sideband ().details.is_send); ASSERT_TRUE (receive2->sideband ().details.is_receive); @@ -1692,7 +1692,7 @@ TEST (ledger, state_rep_change) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair rep; - nano::state_block change1 (nano::genesis_account, genesis.hash (), rep.pub, nano::genesis_amount, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block change1 (nano::dev::genesis->account (), genesis.hash (), rep.pub, nano::genesis_amount, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, change1).code); ASSERT_TRUE (store->block.exists (transaction, change1.hash ())); auto change2 (store->block.get (transaction, change1.hash ())); @@ -1700,7 +1700,7 @@ TEST (ledger, state_rep_change) ASSERT_EQ (change1, *change2); ASSERT_EQ (nano::genesis_amount, ledger.balance (transaction, change1.hash ())); ASSERT_EQ (0, ledger.amount (transaction, change1.hash ())); - ASSERT_EQ (0, ledger.weight (nano::genesis_account)); + ASSERT_EQ (0, ledger.weight (nano::dev::genesis->account ())); ASSERT_EQ (nano::genesis_amount, ledger.weight (rep.pub)); ASSERT_EQ (2, change2->sideband ().height); ASSERT_FALSE (change2->sideband ().details.is_send); @@ -1720,7 +1720,7 @@ TEST (ledger, state_open) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send2 (store->block.get (transaction, send1.hash ())); @@ -1728,9 +1728,9 @@ TEST (ledger, state_open) ASSERT_EQ (send1, *send2); ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, send1.hash ())); - ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::genesis_account)); + ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (destination.pub, send1.hash ()))); - nano::state_block open1 (destination.pub, 0, nano::genesis_account, nano::Gxrb_ratio, send1.hash (), destination.prv, destination.pub, *pool.generate (destination.pub)); + nano::state_block open1 (destination.pub, 0, nano::dev::genesis->account (), nano::Gxrb_ratio, send1.hash (), destination.prv, destination.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open1).code); ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (destination.pub, send1.hash ()))); ASSERT_TRUE (store->block.exists (transaction, open1.hash ())); @@ -1739,7 +1739,7 @@ TEST (ledger, state_open) ASSERT_EQ (open1, *open2); ASSERT_EQ (nano::Gxrb_ratio, ledger.balance (transaction, open1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, open1.hash ())); - ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::genesis_account)); + ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::dev::genesis->account ())); ASSERT_EQ (ledger.cache.account_count, store->account.count (transaction)); ASSERT_EQ (1, open2->sideband ().height); ASSERT_FALSE (open2->sideband ().details.is_send); @@ -1759,9 +1759,9 @@ TEST (ledger, send_after_state_fail) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - nano::send_block send2 (send1.hash (), nano::genesis_account, nano::genesis_amount - (2 * nano::Gxrb_ratio), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); + nano::send_block send2 (send1.hash (), nano::dev::genesis->account (), nano::genesis_amount - (2 * nano::Gxrb_ratio), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::block_position, ledger.process (transaction, send2).code); } @@ -1777,7 +1777,7 @@ TEST (ledger, receive_after_state_fail) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::receive_block receive1 (send1.hash (), send1.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::block_position, ledger.process (transaction, receive1).code); @@ -1795,7 +1795,7 @@ TEST (ledger, change_after_state_fail) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::keypair rep; nano::change_block change1 (send1.hash (), rep.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); @@ -1813,7 +1813,7 @@ TEST (ledger, state_unreceivable_fail) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::send_block send1 (genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block send1 (genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send2 (store->block.get (transaction, send1.hash ())); @@ -1821,8 +1821,8 @@ TEST (ledger, state_unreceivable_fail) ASSERT_EQ (send1, *send2); ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, send1.hash ())); - ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::genesis_account)); - nano::state_block receive1 (nano::genesis_account, send1.hash (), nano::genesis_account, nano::genesis_amount, 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); + ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); + nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount, 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::gap_source, ledger.process (transaction, receive1).code); } @@ -1837,7 +1837,7 @@ TEST (ledger, state_receive_bad_amount_fail) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::send_block send1 (genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block send1 (genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send2 (store->block.get (transaction, send1.hash ())); @@ -1845,8 +1845,8 @@ TEST (ledger, state_receive_bad_amount_fail) ASSERT_EQ (send1, *send2); ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, send1.hash ())); - ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::genesis_account)); - nano::state_block receive1 (nano::genesis_account, send1.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, send1.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); + ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); + nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, send1.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::balance_mismatch, ledger.process (transaction, receive1).code); } @@ -1861,10 +1861,10 @@ TEST (ledger, state_no_link_amount_fail) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::keypair rep; - nano::state_block change1 (nano::genesis_account, send1.hash (), rep.pub, nano::genesis_amount, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block change1 (nano::dev::genesis->account (), send1.hash (), rep.pub, nano::genesis_amount, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::balance_mismatch, ledger.process (transaction, change1).code); } @@ -1879,7 +1879,7 @@ TEST (ledger, state_receive_wrong_account_fail) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send2 (store->block.get (transaction, send1.hash ())); @@ -1887,9 +1887,9 @@ TEST (ledger, state_receive_wrong_account_fail) ASSERT_EQ (send1, *send2); ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, send1.hash ())); - ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::genesis_account)); + ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); nano::keypair key; - nano::state_block receive1 (key.pub, 0, nano::genesis_account, nano::Gxrb_ratio, send1.hash (), key.prv, key.pub, *pool.generate (key.pub)); + nano::state_block receive1 (key.pub, 0, nano::dev::genesis->account (), nano::Gxrb_ratio, send1.hash (), key.prv, key.pub, *pool.generate (key.pub)); ASSERT_EQ (nano::process_result::unreceivable, ledger.process (transaction, receive1).code); } @@ -1905,11 +1905,11 @@ TEST (ledger, state_open_state_fork) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - nano::state_block open1 (destination.pub, 0, nano::genesis_account, nano::Gxrb_ratio, send1.hash (), destination.prv, destination.pub, *pool.generate (destination.pub)); + nano::state_block open1 (destination.pub, 0, nano::dev::genesis->account (), nano::Gxrb_ratio, send1.hash (), destination.prv, destination.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open1).code); - nano::open_block open2 (send1.hash (), nano::genesis_account, destination.pub, destination.prv, destination.pub, *pool.generate (destination.pub)); + nano::open_block open2 (send1.hash (), nano::dev::genesis->account (), destination.pub, destination.prv, destination.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::fork, ledger.process (transaction, open2).code); ASSERT_EQ (open1.root (), open2.root ()); } @@ -1926,11 +1926,11 @@ TEST (ledger, state_state_open_fork) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - nano::open_block open1 (send1.hash (), nano::genesis_account, destination.pub, destination.prv, destination.pub, *pool.generate (destination.pub)); + nano::open_block open1 (send1.hash (), nano::dev::genesis->account (), destination.pub, destination.prv, destination.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open1).code); - nano::state_block open2 (destination.pub, 0, nano::genesis_account, nano::Gxrb_ratio, send1.hash (), destination.prv, destination.pub, *pool.generate (destination.pub)); + nano::state_block open2 (destination.pub, 0, nano::dev::genesis->account (), nano::Gxrb_ratio, send1.hash (), destination.prv, destination.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::fork, ledger.process (transaction, open2).code); ASSERT_EQ (open1.root (), open2.root ()); ASSERT_EQ (store->account.count (transaction), ledger.cache.account_count); @@ -1948,9 +1948,9 @@ TEST (ledger, state_open_previous_fail) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - nano::state_block open1 (destination.pub, 1, nano::genesis_account, nano::Gxrb_ratio, send1.hash (), destination.prv, destination.pub, *pool.generate (1)); + nano::state_block open1 (destination.pub, 1, nano::dev::genesis->account (), nano::Gxrb_ratio, send1.hash (), destination.prv, destination.pub, *pool.generate (1)); ASSERT_EQ (nano::process_result::gap_previous, ledger.process (transaction, open1).code); } @@ -1966,9 +1966,9 @@ TEST (ledger, state_open_source_fail) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - nano::state_block open1 (destination.pub, 0, nano::genesis_account, 0, 0, destination.prv, destination.pub, *pool.generate (destination.pub)); + nano::state_block open1 (destination.pub, 0, nano::dev::genesis->account (), 0, 0, destination.prv, destination.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::gap_source, ledger.process (transaction, open1).code); } @@ -1984,7 +1984,7 @@ TEST (ledger, state_send_change) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair rep; - nano::state_block send1 (nano::genesis_account, genesis.hash (), rep.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), rep.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send2 (store->block.get (transaction, send1.hash ())); @@ -1992,7 +1992,7 @@ TEST (ledger, state_send_change) ASSERT_EQ (send1, *send2); ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, send1.hash ())); - ASSERT_EQ (0, ledger.weight (nano::genesis_account)); + ASSERT_EQ (0, ledger.weight (nano::dev::genesis->account ())); ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (rep.pub)); ASSERT_EQ (2, send2->sideband ().height); ASSERT_TRUE (send2->sideband ().details.is_send); @@ -2011,7 +2011,7 @@ TEST (ledger, state_receive_change) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send2 (store->block.get (transaction, send1.hash ())); @@ -2019,9 +2019,9 @@ TEST (ledger, state_receive_change) ASSERT_EQ (send1, *send2); ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, send1.hash ())); - ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::genesis_account)); + ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); nano::keypair rep; - nano::state_block receive1 (nano::genesis_account, send1.hash (), rep.pub, nano::genesis_amount, send1.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), rep.pub, nano::genesis_amount, send1.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); ASSERT_TRUE (store->block.exists (transaction, receive1.hash ())); auto receive2 (store->block.get (transaction, receive1.hash ())); @@ -2029,7 +2029,7 @@ TEST (ledger, state_receive_change) ASSERT_EQ (receive1, *receive2); ASSERT_EQ (nano::genesis_amount, ledger.balance (transaction, receive1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, receive1.hash ())); - ASSERT_EQ (0, ledger.weight (nano::genesis_account)); + ASSERT_EQ (0, ledger.weight (nano::dev::genesis->account ())); ASSERT_EQ (nano::genesis_amount, ledger.weight (rep.pub)); ASSERT_EQ (3, receive2->sideband ().height); ASSERT_FALSE (receive2->sideband ().details.is_send); @@ -2049,13 +2049,13 @@ TEST (ledger, state_open_old) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - nano::open_block open1 (send1.hash (), nano::genesis_account, destination.pub, destination.prv, destination.pub, *pool.generate (destination.pub)); + nano::open_block open1 (send1.hash (), nano::dev::genesis->account (), destination.pub, destination.prv, destination.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open1).code); ASSERT_EQ (nano::Gxrb_ratio, ledger.balance (transaction, open1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, open1.hash ())); - ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::genesis_account)); + ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::dev::genesis->account ())); } TEST (ledger, state_receive_old) @@ -2070,17 +2070,17 @@ TEST (ledger, state_receive_old) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - nano::state_block send2 (nano::genesis_account, send1.hash (), nano::genesis_account, nano::genesis_amount - (2 * nano::Gxrb_ratio), destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block send2 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount - (2 * nano::Gxrb_ratio), destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); - nano::open_block open1 (send1.hash (), nano::genesis_account, destination.pub, destination.prv, destination.pub, *pool.generate (destination.pub)); + nano::open_block open1 (send1.hash (), nano::dev::genesis->account (), destination.pub, destination.prv, destination.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open1).code); nano::receive_block receive1 (open1.hash (), send2.hash (), destination.prv, destination.pub, *pool.generate (open1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); ASSERT_EQ (2 * nano::Gxrb_ratio, ledger.balance (transaction, receive1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, receive1.hash ())); - ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::genesis_account)); + ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::dev::genesis->account ())); } TEST (ledger, state_rollback_send) @@ -2094,23 +2094,23 @@ TEST (ledger, state_rollback_send) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send2 (store->block.get (transaction, send1.hash ())); ASSERT_NE (nullptr, send2); ASSERT_EQ (send1, *send2); - ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.account_balance (transaction, nano::genesis_account)); - ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::genesis_account)); + ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.account_balance (transaction, nano::dev::genesis->account ())); + ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); nano::pending_info info; - ASSERT_FALSE (store->pending.get (transaction, nano::pending_key (nano::genesis_account, send1.hash ()), info)); - ASSERT_EQ (nano::genesis_account, info.source); + ASSERT_FALSE (store->pending.get (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()), info)); + ASSERT_EQ (nano::dev::genesis->account (), info.source); ASSERT_EQ (nano::Gxrb_ratio, info.amount.number ()); ASSERT_FALSE (ledger.rollback (transaction, send1.hash ())); ASSERT_FALSE (store->block.exists (transaction, send1.hash ())); - ASSERT_EQ (nano::genesis_amount, ledger.account_balance (transaction, nano::genesis_account)); - ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::genesis_account)); - ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); + ASSERT_EQ (nano::genesis_amount, ledger.account_balance (transaction, nano::dev::genesis->account ())); + ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::dev::genesis->account ())); + ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()))); ASSERT_TRUE (store->block.successor (transaction, genesis.hash ()).is_zero ()); ASSERT_EQ (store->account.count (transaction), ledger.cache.account_count); } @@ -2126,19 +2126,19 @@ TEST (ledger, state_rollback_receive) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - nano::state_block receive1 (nano::genesis_account, send1.hash (), nano::genesis_account, nano::genesis_amount, send1.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount, send1.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); - ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::genesis_account, receive1.hash ()))); + ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), receive1.hash ()))); ASSERT_FALSE (ledger.rollback (transaction, receive1.hash ())); nano::pending_info info; - ASSERT_FALSE (store->pending.get (transaction, nano::pending_key (nano::genesis_account, send1.hash ()), info)); - ASSERT_EQ (nano::genesis_account, info.source); + ASSERT_FALSE (store->pending.get (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()), info)); + ASSERT_EQ (nano::dev::genesis->account (), info.source); ASSERT_EQ (nano::Gxrb_ratio, info.amount.number ()); ASSERT_FALSE (store->block.exists (transaction, receive1.hash ())); - ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.account_balance (transaction, nano::genesis_account)); - ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::genesis_account)); + ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.account_balance (transaction, nano::dev::genesis->account ())); + ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); ASSERT_EQ (store->account.count (transaction), ledger.cache.account_count); } @@ -2154,17 +2154,17 @@ TEST (ledger, state_rollback_received_send) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key; - nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::state_block receive1 (key.pub, 0, key.pub, nano::Gxrb_ratio, send1.hash (), key.prv, key.pub, *pool.generate (key.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); - ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::genesis_account, receive1.hash ()))); + ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), receive1.hash ()))); ASSERT_FALSE (ledger.rollback (transaction, send1.hash ())); - ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); + ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()))); ASSERT_FALSE (store->block.exists (transaction, send1.hash ())); ASSERT_FALSE (store->block.exists (transaction, receive1.hash ())); - ASSERT_EQ (nano::genesis_amount, ledger.account_balance (transaction, nano::genesis_account)); - ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::genesis_account)); + ASSERT_EQ (nano::genesis_amount, ledger.account_balance (transaction, nano::dev::genesis->account ())); + ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::dev::genesis->account ())); ASSERT_EQ (0, ledger.account_balance (transaction, key.pub)); ASSERT_EQ (0, ledger.weight (key.pub)); ASSERT_EQ (store->account.count (transaction), ledger.cache.account_count); @@ -2182,12 +2182,12 @@ TEST (ledger, state_rep_change_rollback) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair rep; - nano::state_block change1 (nano::genesis_account, genesis.hash (), rep.pub, nano::genesis_amount, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block change1 (nano::dev::genesis->account (), genesis.hash (), rep.pub, nano::genesis_amount, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, change1).code); ASSERT_FALSE (ledger.rollback (transaction, change1.hash ())); ASSERT_FALSE (store->block.exists (transaction, change1.hash ())); - ASSERT_EQ (nano::genesis_amount, ledger.account_balance (transaction, nano::genesis_account)); - ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::genesis_account)); + ASSERT_EQ (nano::genesis_amount, ledger.account_balance (transaction, nano::dev::genesis->account ())); + ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::dev::genesis->account ())); ASSERT_EQ (0, ledger.weight (rep.pub)); } @@ -2203,17 +2203,17 @@ TEST (ledger, state_open_rollback) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - nano::state_block open1 (destination.pub, 0, nano::genesis_account, nano::Gxrb_ratio, send1.hash (), destination.prv, destination.pub, *pool.generate (destination.pub)); + nano::state_block open1 (destination.pub, 0, nano::dev::genesis->account (), nano::Gxrb_ratio, send1.hash (), destination.prv, destination.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open1).code); ASSERT_FALSE (ledger.rollback (transaction, open1.hash ())); ASSERT_FALSE (store->block.exists (transaction, open1.hash ())); ASSERT_EQ (0, ledger.account_balance (transaction, destination.pub)); - ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::genesis_account)); + ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); nano::pending_info info; ASSERT_FALSE (store->pending.get (transaction, nano::pending_key (destination.pub, send1.hash ()), info)); - ASSERT_EQ (nano::genesis_account, info.source); + ASSERT_EQ (nano::dev::genesis->account (), info.source); ASSERT_EQ (nano::Gxrb_ratio, info.amount.number ()); ASSERT_EQ (store->account.count (transaction), ledger.cache.account_count); } @@ -2230,12 +2230,12 @@ TEST (ledger, state_send_change_rollback) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair rep; - nano::state_block send1 (nano::genesis_account, genesis.hash (), rep.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), rep.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_FALSE (ledger.rollback (transaction, send1.hash ())); ASSERT_FALSE (store->block.exists (transaction, send1.hash ())); - ASSERT_EQ (nano::genesis_amount, ledger.account_balance (transaction, nano::genesis_account)); - ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::genesis_account)); + ASSERT_EQ (nano::genesis_amount, ledger.account_balance (transaction, nano::dev::genesis->account ())); + ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::dev::genesis->account ())); ASSERT_EQ (0, ledger.weight (rep.pub)); ASSERT_EQ (store->account.count (transaction), ledger.cache.account_count); } @@ -2251,15 +2251,15 @@ TEST (ledger, state_receive_change_rollback) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::keypair rep; - nano::state_block receive1 (nano::genesis_account, send1.hash (), rep.pub, nano::genesis_amount, send1.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), rep.pub, nano::genesis_amount, send1.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); ASSERT_FALSE (ledger.rollback (transaction, receive1.hash ())); ASSERT_FALSE (store->block.exists (transaction, receive1.hash ())); - ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.account_balance (transaction, nano::genesis_account)); - ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::genesis_account)); + ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.account_balance (transaction, nano::dev::genesis->account ())); + ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); ASSERT_EQ (0, ledger.weight (rep.pub)); ASSERT_EQ (store->account.count (transaction), ledger.cache.account_count); } @@ -2276,41 +2276,41 @@ TEST (ledger, epoch_blocks_v1_general) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block epoch1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block epoch1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch1).code); ASSERT_FALSE (epoch1.sideband ().details.is_send); ASSERT_FALSE (epoch1.sideband ().details.is_receive); ASSERT_TRUE (epoch1.sideband ().details.is_epoch); ASSERT_EQ (nano::epoch::epoch_1, epoch1.sideband ().details.epoch); ASSERT_EQ (nano::epoch::epoch_0, epoch1.sideband ().source_epoch); // Not used for epoch blocks - nano::state_block epoch2 (nano::genesis_account, epoch1.hash (), nano::genesis_account, nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (epoch1.hash ())); + nano::state_block epoch2 (nano::dev::genesis->account (), epoch1.hash (), nano::dev::genesis->account (), nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (epoch1.hash ())); ASSERT_EQ (nano::process_result::block_position, ledger.process (transaction, epoch2).code); nano::account_info genesis_info; - ASSERT_FALSE (ledger.store.account.get (transaction, nano::genesis_account, genesis_info)); + ASSERT_FALSE (ledger.store.account.get (transaction, nano::dev::genesis->account (), genesis_info)); ASSERT_EQ (genesis_info.epoch (), nano::epoch::epoch_1); ASSERT_FALSE (ledger.rollback (transaction, epoch1.hash ())); - ASSERT_FALSE (ledger.store.account.get (transaction, nano::genesis_account, genesis_info)); + ASSERT_FALSE (ledger.store.account.get (transaction, nano::dev::genesis->account (), genesis_info)); ASSERT_EQ (genesis_info.epoch (), nano::epoch::epoch_0); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch1).code); - ASSERT_FALSE (ledger.store.account.get (transaction, nano::genesis_account, genesis_info)); + ASSERT_FALSE (ledger.store.account.get (transaction, nano::dev::genesis->account (), genesis_info)); ASSERT_EQ (genesis_info.epoch (), nano::epoch::epoch_1); ASSERT_FALSE (epoch1.sideband ().details.is_send); ASSERT_FALSE (epoch1.sideband ().details.is_receive); ASSERT_TRUE (epoch1.sideband ().details.is_epoch); ASSERT_EQ (nano::epoch::epoch_1, epoch1.sideband ().details.epoch); ASSERT_EQ (nano::epoch::epoch_0, epoch1.sideband ().source_epoch); // Not used for epoch blocks - nano::change_block change1 (epoch1.hash (), nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (epoch1.hash ())); + nano::change_block change1 (epoch1.hash (), nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (epoch1.hash ())); ASSERT_EQ (nano::process_result::block_position, ledger.process (transaction, change1).code); - nano::state_block send1 (nano::genesis_account, epoch1.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (epoch1.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), epoch1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (epoch1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (send1.sideband ().details.is_send); ASSERT_FALSE (send1.sideband ().details.is_receive); ASSERT_FALSE (send1.sideband ().details.is_epoch); ASSERT_EQ (nano::epoch::epoch_1, send1.sideband ().details.epoch); ASSERT_EQ (nano::epoch::epoch_0, send1.sideband ().source_epoch); // Not used for send blocks - nano::open_block open1 (send1.hash (), nano::genesis_account, destination.pub, destination.prv, destination.pub, *pool.generate (destination.pub)); + nano::open_block open1 (send1.hash (), nano::dev::genesis->account (), destination.pub, destination.prv, destination.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::unreceivable, ledger.process (transaction, open1).code); - nano::state_block epoch3 (destination.pub, 0, nano::genesis_account, 0, ledger.epoch_link (nano::epoch::epoch_1), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (destination.pub)); + nano::state_block epoch3 (destination.pub, 0, nano::dev::genesis->account (), 0, ledger.epoch_link (nano::epoch::epoch_1), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::representative_mismatch, ledger.process (transaction, epoch3).code); nano::state_block epoch4 (destination.pub, 0, 0, 0, ledger.epoch_link (nano::epoch::epoch_1), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch4).code); @@ -2328,7 +2328,7 @@ TEST (ledger, epoch_blocks_v1_general) ASSERT_EQ (0, ledger.balance (transaction, epoch4.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.balance (transaction, receive2.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, receive2.hash ())); - ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::genesis_account)); + ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.weight (destination.pub)); ASSERT_FALSE (receive2.sideband ().details.is_send); ASSERT_TRUE (receive2.sideband ().details.is_receive); @@ -2347,42 +2347,42 @@ TEST (ledger, epoch_blocks_v2_general) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block epoch1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block epoch1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); // Trying to upgrade from epoch 0 to epoch 2. It is a requirement epoch upgrades are sequential unless the account is unopened ASSERT_EQ (nano::process_result::block_position, ledger.process (transaction, epoch1).code); // Set it to the first epoch and it should now succeed - epoch1 = nano::state_block (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, epoch1.work); + epoch1 = nano::state_block (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, epoch1.work); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch1).code); ASSERT_EQ (nano::epoch::epoch_1, epoch1.sideband ().details.epoch); ASSERT_EQ (nano::epoch::epoch_0, epoch1.sideband ().source_epoch); // Not used for epoch blocks - nano::state_block epoch2 (nano::genesis_account, epoch1.hash (), nano::genesis_account, nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (epoch1.hash ())); + nano::state_block epoch2 (nano::dev::genesis->account (), epoch1.hash (), nano::dev::genesis->account (), nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (epoch1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch2).code); ASSERT_EQ (nano::epoch::epoch_2, epoch2.sideband ().details.epoch); ASSERT_EQ (nano::epoch::epoch_0, epoch2.sideband ().source_epoch); // Not used for epoch blocks - nano::state_block epoch3 (nano::genesis_account, epoch2.hash (), nano::genesis_account, nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (epoch2.hash ())); + nano::state_block epoch3 (nano::dev::genesis->account (), epoch2.hash (), nano::dev::genesis->account (), nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (epoch2.hash ())); ASSERT_EQ (nano::process_result::block_position, ledger.process (transaction, epoch3).code); nano::account_info genesis_info; - ASSERT_FALSE (ledger.store.account.get (transaction, nano::genesis_account, genesis_info)); + ASSERT_FALSE (ledger.store.account.get (transaction, nano::dev::genesis->account (), genesis_info)); ASSERT_EQ (genesis_info.epoch (), nano::epoch::epoch_2); ASSERT_FALSE (ledger.rollback (transaction, epoch1.hash ())); - ASSERT_FALSE (ledger.store.account.get (transaction, nano::genesis_account, genesis_info)); + ASSERT_FALSE (ledger.store.account.get (transaction, nano::dev::genesis->account (), genesis_info)); ASSERT_EQ (genesis_info.epoch (), nano::epoch::epoch_0); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch1).code); - ASSERT_FALSE (ledger.store.account.get (transaction, nano::genesis_account, genesis_info)); + ASSERT_FALSE (ledger.store.account.get (transaction, nano::dev::genesis->account (), genesis_info)); ASSERT_EQ (genesis_info.epoch (), nano::epoch::epoch_1); - nano::change_block change1 (epoch1.hash (), nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (epoch1.hash ())); + nano::change_block change1 (epoch1.hash (), nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (epoch1.hash ())); ASSERT_EQ (nano::process_result::block_position, ledger.process (transaction, change1).code); - nano::state_block send1 (nano::genesis_account, epoch1.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (epoch1.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), epoch1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (epoch1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_EQ (nano::epoch::epoch_1, send1.sideband ().details.epoch); ASSERT_EQ (nano::epoch::epoch_0, send1.sideband ().source_epoch); // Not used for send blocks - nano::open_block open1 (send1.hash (), nano::genesis_account, destination.pub, destination.prv, destination.pub, *pool.generate (destination.pub)); + nano::open_block open1 (send1.hash (), nano::dev::genesis->account (), destination.pub, destination.prv, destination.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::unreceivable, ledger.process (transaction, open1).code); nano::state_block epoch4 (destination.pub, 0, 0, 0, ledger.epoch_link (nano::epoch::epoch_1), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch4).code); ASSERT_EQ (nano::epoch::epoch_1, epoch4.sideband ().details.epoch); ASSERT_EQ (nano::epoch::epoch_0, epoch4.sideband ().source_epoch); // Not used for epoch blocks - nano::state_block epoch5 (destination.pub, epoch4.hash (), nano::genesis_account, 0, ledger.epoch_link (nano::epoch::epoch_2), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (epoch4.hash ())); + nano::state_block epoch5 (destination.pub, epoch4.hash (), nano::dev::genesis->account (), 0, ledger.epoch_link (nano::epoch::epoch_2), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (epoch4.hash ())); ASSERT_EQ (nano::process_result::representative_mismatch, ledger.process (transaction, epoch5).code); nano::state_block epoch6 (destination.pub, epoch4.hash (), 0, 0, ledger.epoch_link (nano::epoch::epoch_2), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (epoch4.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch6).code); @@ -2397,7 +2397,7 @@ TEST (ledger, epoch_blocks_v2_general) ASSERT_EQ (0, ledger.balance (transaction, epoch6.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.balance (transaction, receive2.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, receive2.hash ())); - ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::genesis_account)); + ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.weight (destination.pub)); } @@ -2413,11 +2413,11 @@ TEST (ledger, epoch_blocks_receive_upgrade) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - nano::state_block epoch1 (nano::genesis_account, send1.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, ledger.epoch_link (nano::epoch::epoch_1), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block epoch1 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, ledger.epoch_link (nano::epoch::epoch_1), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch1).code); - nano::state_block send2 (nano::genesis_account, epoch1.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio * 2, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (epoch1.hash ())); + nano::state_block send2 (nano::dev::genesis->account (), epoch1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio * 2, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (epoch1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); ASSERT_EQ (nano::epoch::epoch_1, send2.sideband ().details.epoch); ASSERT_EQ (nano::epoch::epoch_0, send2.sideband ().source_epoch); // Not used for send blocks @@ -2454,14 +2454,14 @@ TEST (ledger, epoch_blocks_receive_upgrade) ASSERT_EQ (nano::process_result::unreceivable, ledger.process (transaction, open2).code); // Upgrade to epoch 2 and send to destination. Try to create an open block from an epoch 2 source block. nano::keypair destination3; - nano::state_block epoch2 (nano::genesis_account, send2.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio * 2, ledger.epoch_link (nano::epoch::epoch_2), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send2.hash ())); + nano::state_block epoch2 (nano::dev::genesis->account (), send2.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio * 2, ledger.epoch_link (nano::epoch::epoch_2), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send2.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch2).code); - nano::state_block send4 (nano::genesis_account, epoch2.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio * 3, destination3.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (epoch2.hash ())); + nano::state_block send4 (nano::dev::genesis->account (), epoch2.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio * 3, destination3.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (epoch2.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send4).code); nano::open_block open3 (send4.hash (), destination3.pub, destination3.pub, destination3.prv, destination3.pub, *pool.generate (destination3.pub)); ASSERT_EQ (nano::process_result::unreceivable, ledger.process (transaction, open3).code); // Send it to an epoch 1 account - nano::state_block send5 (nano::genesis_account, send4.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio * 4, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send4.hash ())); + nano::state_block send5 (nano::dev::genesis->account (), send4.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio * 4, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send4.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send5).code); ASSERT_FALSE (ledger.store.account.get (transaction, destination.pub, destination_info)); ASSERT_EQ (destination_info.epoch (), nano::epoch::epoch_1); @@ -2473,7 +2473,7 @@ TEST (ledger, epoch_blocks_receive_upgrade) ASSERT_EQ (destination_info.epoch (), nano::epoch::epoch_2); // Upgrade an unopened account straight to epoch 2 nano::keypair destination4; - nano::state_block send6 (nano::genesis_account, send5.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio * 5, destination4.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send5.hash ())); + nano::state_block send6 (nano::dev::genesis->account (), send5.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio * 5, destination4.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send5.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send6).code); nano::state_block epoch4 (destination4.pub, 0, 0, 0, ledger.epoch_link (nano::epoch::epoch_2), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (destination4.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch4).code); @@ -2496,15 +2496,15 @@ TEST (ledger, epoch_blocks_fork) nano::keypair destination; nano::send_block send1 (genesis.hash (), nano::account (0), nano::genesis_amount, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - nano::state_block epoch1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block epoch1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::fork, ledger.process (transaction, epoch1).code); - nano::state_block epoch2 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block epoch2 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::fork, ledger.process (transaction, epoch2).code); - nano::state_block epoch3 (nano::genesis_account, send1.hash (), nano::genesis_account, nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block epoch3 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch3).code); ASSERT_EQ (nano::epoch::epoch_1, epoch3.sideband ().details.epoch); ASSERT_EQ (nano::epoch::epoch_0, epoch3.sideband ().source_epoch); // Not used for epoch state blocks - nano::state_block epoch4 (nano::genesis_account, send1.hash (), nano::genesis_account, nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block epoch4 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::fork, ledger.process (transaction, epoch2).code); } @@ -2562,9 +2562,9 @@ TEST (ledger, epoch_open_pending) ASSERT_EQ (blocks[0].verified, nano::signature_verification::valid_epoch); // New block to process epoch open auto send1 = builder.state () - .account (nano::genesis_account) + .account (nano::dev::genesis->account ()) .previous (nano::dev::genesis->hash ()) - .representative (nano::genesis_account) + .representative (nano::dev::genesis->account ()) .balance (nano::genesis_amount - 100) .link (key1.pub) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) @@ -2590,9 +2590,9 @@ TEST (ledger, block_hash_account_conflict) * in the ledger and not an account */ auto send1 = builder.state () - .account (nano::genesis_account) + .account (nano::dev::genesis->account ()) .previous (genesis.hash ()) - .representative (nano::genesis_account) + .representative (nano::dev::genesis->account ()) .balance (nano::genesis_amount - 100) .link (key1.pub) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) @@ -2602,7 +2602,7 @@ TEST (ledger, block_hash_account_conflict) auto receive1 = builder.state () .account (key1.pub) .previous (0) - .representative (nano::genesis_account) + .representative (nano::dev::genesis->account ()) .balance (100) .link (send1->hash ()) .sign (key1.prv, key1.pub) @@ -2618,7 +2618,7 @@ TEST (ledger, block_hash_account_conflict) auto send2 = builder.state () .account (key1.pub) .previous (receive1->hash ()) - .representative (nano::genesis_account) + .representative (nano::dev::genesis->account ()) .balance (90) .link (receive1->hash ()) .sign (key1.prv, key1.pub) @@ -2679,14 +2679,14 @@ TEST (ledger, could_fit) nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; // Test legacy and state change blocks could_fit - nano::change_block change1 (genesis.hash (), nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); - nano::state_block change2 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::change_block change1 (genesis.hash (), nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block change2 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_TRUE (ledger.could_fit (transaction, change1)); ASSERT_TRUE (ledger.could_fit (transaction, change2)); // Test legacy and state send nano::keypair key1; nano::send_block send1 (change1.hash (), key1.pub, nano::genesis_amount - 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (change1.hash ())); - nano::state_block send2 (nano::genesis_account, change1.hash (), nano::genesis_account, nano::genesis_amount - 1, key1.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (change1.hash ())); + nano::state_block send2 (nano::dev::genesis->account (), change1.hash (), nano::dev::genesis->account (), nano::genesis_amount - 1, key1.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (change1.hash ())); ASSERT_FALSE (ledger.could_fit (transaction, send1)); ASSERT_FALSE (ledger.could_fit (transaction, send2)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, change1).code); @@ -2695,8 +2695,8 @@ TEST (ledger, could_fit) ASSERT_TRUE (ledger.could_fit (transaction, send1)); ASSERT_TRUE (ledger.could_fit (transaction, send2)); // Test legacy and state open - nano::open_block open1 (send2.hash (), nano::genesis_account, key1.pub, key1.prv, key1.pub, *pool.generate (key1.pub)); - nano::state_block open2 (key1.pub, 0, nano::genesis_account, 1, send2.hash (), key1.prv, key1.pub, *pool.generate (key1.pub)); + nano::open_block open1 (send2.hash (), nano::dev::genesis->account (), key1.pub, key1.prv, key1.pub, *pool.generate (key1.pub)); + nano::state_block open2 (key1.pub, 0, nano::dev::genesis->account (), 1, send2.hash (), key1.prv, key1.pub, *pool.generate (key1.pub)); ASSERT_FALSE (ledger.could_fit (transaction, open1)); ASSERT_FALSE (ledger.could_fit (transaction, open2)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); @@ -2708,17 +2708,17 @@ TEST (ledger, could_fit) ASSERT_TRUE (ledger.could_fit (transaction, open1)); ASSERT_TRUE (ledger.could_fit (transaction, open2)); // Create another send to receive - nano::state_block send3 (nano::genesis_account, send2.hash (), nano::genesis_account, nano::genesis_amount - 2, key1.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send2.hash ())); + nano::state_block send3 (nano::dev::genesis->account (), send2.hash (), nano::dev::genesis->account (), nano::genesis_amount - 2, key1.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send2.hash ())); // Test legacy and state receive nano::receive_block receive1 (open1.hash (), send3.hash (), key1.prv, key1.pub, *pool.generate (open1.hash ())); - nano::state_block receive2 (key1.pub, open1.hash (), nano::genesis_account, 2, send3.hash (), key1.prv, key1.pub, *pool.generate (open1.hash ())); + nano::state_block receive2 (key1.pub, open1.hash (), nano::dev::genesis->account (), 2, send3.hash (), key1.prv, key1.pub, *pool.generate (open1.hash ())); ASSERT_FALSE (ledger.could_fit (transaction, receive1)); ASSERT_FALSE (ledger.could_fit (transaction, receive2)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send3).code); ASSERT_TRUE (ledger.could_fit (transaction, receive1)); ASSERT_TRUE (ledger.could_fit (transaction, receive2)); // Test epoch (state) - nano::state_block epoch1 (key1.pub, receive1.hash (), nano::genesis_account, 2, ledger.epoch_link (nano::epoch::epoch_1), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (receive1.hash ())); + nano::state_block epoch1 (key1.pub, receive1.hash (), nano::dev::genesis->account (), 2, ledger.epoch_link (nano::epoch::epoch_1), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (receive1.hash ())); ASSERT_FALSE (ledger.could_fit (transaction, epoch1)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); ASSERT_TRUE (ledger.could_fit (transaction, receive1)); @@ -2734,7 +2734,7 @@ TEST (ledger, unchecked_epoch) auto & node1 (*system.nodes[0]); nano::genesis genesis; nano::keypair destination; - auto send1 (std::make_shared (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); + auto send1 (std::make_shared (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); node1.work_generate_blocking (*send1); auto open1 (std::make_shared (destination.pub, 0, destination.pub, nano::Gxrb_ratio, send1->hash (), destination.prv, destination.pub, 0)); node1.work_generate_blocking (*open1); @@ -2774,7 +2774,7 @@ TEST (ledger, unchecked_epoch_invalid) auto & node1 (*system.add_node (node_config)); nano::genesis genesis; nano::keypair destination; - auto send1 (std::make_shared (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); + auto send1 (std::make_shared (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); node1.work_generate_blocking (*send1); auto open1 (std::make_shared (destination.pub, 0, destination.pub, nano::Gxrb_ratio, send1->hash (), destination.prv, destination.pub, 0)); node1.work_generate_blocking (*open1); @@ -2826,7 +2826,7 @@ TEST (ledger, unchecked_open) auto & node1 (*system.nodes[0]); nano::genesis genesis; nano::keypair destination; - auto send1 (std::make_shared (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); + auto send1 (std::make_shared (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); node1.work_generate_blocking (*send1); auto open1 (std::make_shared (send1->hash (), destination.pub, destination.pub, destination.prv, destination.pub, 0)); node1.work_generate_blocking (*open1); @@ -2863,9 +2863,9 @@ TEST (ledger, unchecked_receive) auto & node1 (*system.nodes[0]); nano::genesis genesis; nano::keypair destination; - auto send1 (std::make_shared (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); + auto send1 (std::make_shared (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); node1.work_generate_blocking (*send1); - auto send2 (std::make_shared (nano::genesis_account, send1->hash (), nano::genesis_account, nano::genesis_amount - 2 * nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); + auto send2 (std::make_shared (nano::dev::genesis->account (), send1->hash (), nano::dev::genesis->account (), nano::genesis_amount - 2 * nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); node1.work_generate_blocking (*send2); auto open1 (std::make_shared (send1->hash (), destination.pub, destination.pub, destination.prv, destination.pub, 0)); node1.work_generate_blocking (*open1); @@ -2923,14 +2923,14 @@ TEST (ledger, confirmation_height_not_updated) nano::keypair key; nano::send_block send1 (account_info.head, key.pub, 50, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (account_info.head)); nano::confirmation_height_info confirmation_height_info; - ASSERT_FALSE (store->confirmation_height.get (transaction, nano::genesis_account, confirmation_height_info)); + ASSERT_FALSE (store->confirmation_height.get (transaction, nano::dev::genesis->account (), confirmation_height_info)); ASSERT_EQ (1, confirmation_height_info.height); ASSERT_EQ (genesis.hash (), confirmation_height_info.frontier); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - ASSERT_FALSE (store->confirmation_height.get (transaction, nano::genesis_account, confirmation_height_info)); + ASSERT_FALSE (store->confirmation_height.get (transaction, nano::dev::genesis->account (), confirmation_height_info)); ASSERT_EQ (1, confirmation_height_info.height); ASSERT_EQ (genesis.hash (), confirmation_height_info.frontier); - nano::open_block open1 (send1.hash (), nano::genesis_account, key.pub, key.prv, key.pub, *pool.generate (key.pub)); + nano::open_block open1 (send1.hash (), nano::dev::genesis->account (), key.pub, key.prv, key.pub, *pool.generate (key.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open1).code); ASSERT_TRUE (store->confirmation_height.get (transaction, key.pub, confirmation_height_info)); ASSERT_EQ (0, confirmation_height_info.height); @@ -3078,9 +3078,9 @@ TEST (ledger, dependents_confirmed) nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; auto send1 = builder.state () - .account (nano::genesis_account) + .account (nano::dev::genesis->account ()) .previous (genesis.hash ()) - .representative (nano::genesis_account) + .representative (nano::dev::genesis->account ()) .balance (nano::genesis_amount - 100) .link (key1.pub) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) @@ -3089,9 +3089,9 @@ TEST (ledger, dependents_confirmed) ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, *send1).code); ASSERT_TRUE (ledger.dependents_confirmed (transaction, *send1)); auto send2 = builder.state () - .account (nano::genesis_account) + .account (nano::dev::genesis->account ()) .previous (send1->hash ()) - .representative (nano::genesis_account) + .representative (nano::dev::genesis->account ()) .balance (nano::genesis_amount - 200) .link (key1.pub) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) @@ -3102,7 +3102,7 @@ TEST (ledger, dependents_confirmed) auto receive1 = builder.state () .account (key1.pub) .previous (0) - .representative (nano::genesis_account) + .representative (nano::dev::genesis->account ()) .balance (100) .link (send1->hash ()) .sign (key1.prv, key1.pub) @@ -3111,14 +3111,14 @@ TEST (ledger, dependents_confirmed) ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, *receive1).code); ASSERT_FALSE (ledger.dependents_confirmed (transaction, *receive1)); nano::confirmation_height_info height; - ASSERT_FALSE (ledger.store.confirmation_height.get (transaction, nano::genesis_account, height)); + ASSERT_FALSE (ledger.store.confirmation_height.get (transaction, nano::dev::genesis->account (), height)); height.height += 1; - ledger.store.confirmation_height.put (transaction, nano::genesis_account, height); + ledger.store.confirmation_height.put (transaction, nano::dev::genesis->account (), height); ASSERT_TRUE (ledger.dependents_confirmed (transaction, *receive1)); auto receive2 = builder.state () .account (key1.pub) .previous (receive1->hash ()) - .representative (nano::genesis_account) + .representative (nano::dev::genesis->account ()) .balance (200) .link (send2->hash ()) .sign (key1.prv, key1.pub) @@ -3130,9 +3130,9 @@ TEST (ledger, dependents_confirmed) height.height += 1; ledger.store.confirmation_height.put (transaction, key1.pub, height); ASSERT_FALSE (ledger.dependents_confirmed (transaction, *receive2)); - ASSERT_FALSE (ledger.store.confirmation_height.get (transaction, nano::genesis_account, height)); + ASSERT_FALSE (ledger.store.confirmation_height.get (transaction, nano::dev::genesis->account (), height)); height.height += 1; - ledger.store.confirmation_height.put (transaction, nano::genesis_account, height); + ledger.store.confirmation_height.put (transaction, nano::dev::genesis->account (), height); ASSERT_TRUE (ledger.dependents_confirmed (transaction, *receive2)); } @@ -3151,9 +3151,9 @@ TEST (ledger, dependents_confirmed_pruning) nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; auto send1 = builder.state () - .account (nano::genesis_account) + .account (nano::dev::genesis->account ()) .previous (genesis.hash ()) - .representative (nano::genesis_account) + .representative (nano::dev::genesis->account ()) .balance (nano::genesis_amount - 100) .link (key1.pub) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) @@ -3161,9 +3161,9 @@ TEST (ledger, dependents_confirmed_pruning) .build_shared (); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, *send1).code); auto send2 = builder.state () - .account (nano::genesis_account) + .account (nano::dev::genesis->account ()) .previous (send1->hash ()) - .representative (nano::genesis_account) + .representative (nano::dev::genesis->account ()) .balance (nano::genesis_amount - 200) .link (key1.pub) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) @@ -3171,15 +3171,15 @@ TEST (ledger, dependents_confirmed_pruning) .build_shared (); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, *send2).code); nano::confirmation_height_info height; - ASSERT_FALSE (ledger.store.confirmation_height.get (transaction, nano::genesis_account, height)); + ASSERT_FALSE (ledger.store.confirmation_height.get (transaction, nano::dev::genesis->account (), height)); height.height = 3; - ledger.store.confirmation_height.put (transaction, nano::genesis_account, height); + ledger.store.confirmation_height.put (transaction, nano::dev::genesis->account (), height); ASSERT_TRUE (ledger.block_confirmed (transaction, send1->hash ())); ASSERT_EQ (2, ledger.pruning_action (transaction, send2->hash (), 1)); auto receive1 = builder.state () .account (key1.pub) .previous (0) - .representative (nano::genesis_account) + .representative (nano::dev::genesis->account ()) .balance (100) .link (send1->hash ()) .sign (key1.prv, key1.pub) @@ -3203,9 +3203,9 @@ TEST (ledger, block_confirmed) nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; auto send1 = builder.state () - .account (nano::genesis_account) + .account (nano::dev::genesis->account ()) .previous (genesis.hash ()) - .representative (nano::genesis_account) + .representative (nano::dev::genesis->account ()) .balance (nano::genesis_amount - 100) .link (key1.pub) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) @@ -3216,9 +3216,9 @@ TEST (ledger, block_confirmed) ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, *send1).code); ASSERT_FALSE (ledger.block_confirmed (transaction, send1->hash ())); nano::confirmation_height_info height; - ASSERT_FALSE (ledger.store.confirmation_height.get (transaction, nano::genesis_account, height)); + ASSERT_FALSE (ledger.store.confirmation_height.get (transaction, nano::dev::genesis->account (), height)); ++height.height; - ledger.store.confirmation_height.put (transaction, nano::genesis_account, height); + ledger.store.confirmation_height.put (transaction, nano::dev::genesis->account (), height); ASSERT_TRUE (ledger.block_confirmed (transaction, send1->hash ())); } @@ -3249,16 +3249,16 @@ TEST (ledger, cache) ASSERT_EQ (account_count, cache_a.account_count); ASSERT_EQ (block_count, cache_a.block_count); ASSERT_EQ (cemented_count, cache_a.cemented_count); - ASSERT_EQ (genesis_weight, cache_a.rep_weights.representation_get (nano::genesis_account)); + ASSERT_EQ (genesis_weight, cache_a.rep_weights.representation_get (nano::dev::genesis->account ())); ASSERT_EQ (pruned_count, cache_a.pruned_count); }; nano::keypair key; - auto const latest = ledger.latest (store->tx_begin_read (), nano::genesis_account); + auto const latest = ledger.latest (store->tx_begin_read (), nano::dev::genesis->account ()); auto send = builder.state () - .account (nano::genesis_account) + .account (nano::dev::genesis->account ()) .previous (latest) - .representative (nano::genesis_account) + .representative (nano::dev::genesis->account ()) .balance (nano::genesis_amount - (i + 1)) .link (key.pub) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) @@ -3296,10 +3296,10 @@ TEST (ledger, cache) { auto transaction (store->tx_begin_write ()); nano::confirmation_height_info height; - ASSERT_FALSE (ledger.store.confirmation_height.get (transaction, nano::genesis_account, height)); + ASSERT_FALSE (ledger.store.confirmation_height.get (transaction, nano::dev::genesis->account (), height)); ++height.height; height.frontier = send->hash (); - ledger.store.confirmation_height.put (transaction, nano::genesis_account, height); + ledger.store.confirmation_height.put (transaction, nano::dev::genesis->account (), height); ASSERT_TRUE (ledger.block_confirmed (transaction, send->hash ())); ++ledger.cache.cemented_count; } @@ -3346,20 +3346,20 @@ TEST (ledger, pruning_action) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send1_stored (store->block.get (transaction, send1.hash ())); ASSERT_NE (nullptr, send1_stored); ASSERT_EQ (send1, *send1_stored); - ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); - nano::state_block send2 (nano::genesis_account, send1.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio * 2, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); + ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()))); + nano::state_block send2 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); ASSERT_TRUE (store->block.exists (transaction, send2.hash ())); // Pruning action ASSERT_EQ (1, ledger.pruning_action (transaction, send1.hash (), 1)); ASSERT_EQ (0, ledger.pruning_action (transaction, genesis.hash (), 1)); - ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); + ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()))); ASSERT_FALSE (store->block.exists (transaction, send1.hash ())); ASSERT_TRUE (ledger.block_or_pruned_exists (transaction, send1.hash ())); // Pruned ledger start without proper flags emulation @@ -3370,13 +3370,13 @@ TEST (ledger, pruning_action) ASSERT_TRUE (store->block.exists (transaction, genesis.hash ())); ASSERT_TRUE (store->block.exists (transaction, send2.hash ())); // Receiving pruned block - nano::state_block receive1 (nano::genesis_account, send2.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, send1.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send2.hash ())); + nano::state_block receive1 (nano::dev::genesis->account (), send2.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, send1.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send2.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); ASSERT_TRUE (store->block.exists (transaction, receive1.hash ())); auto receive1_stored (store->block.get (transaction, receive1.hash ())); ASSERT_NE (nullptr, receive1_stored); ASSERT_EQ (receive1, *receive1_stored); - ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); + ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()))); ASSERT_EQ (4, receive1_stored->sideband ().height); ASSERT_FALSE (receive1_stored->sideband ().details.is_send); ASSERT_TRUE (receive1_stored->sideband ().details.is_receive); @@ -3407,10 +3407,10 @@ TEST (ledger, pruning_large_chain) auto last_hash (genesis.hash ()); for (auto i (0); i < send_receive_pairs; i++) { - nano::state_block send (nano::genesis_account, last_hash, nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (last_hash)); + nano::state_block send (nano::dev::genesis->account (), last_hash, nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (last_hash)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); ASSERT_TRUE (store->block.exists (transaction, send.hash ())); - nano::state_block receive (nano::genesis_account, send.hash (), nano::genesis_account, nano::genesis_amount, send.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send.hash ())); + nano::state_block receive (nano::dev::genesis->account (), send.hash (), nano::dev::genesis->account (), nano::genesis_amount, send.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive).code); ASSERT_TRUE (store->block.exists (transaction, receive.hash ())); last_hash = receive.hash (); @@ -3440,12 +3440,12 @@ TEST (ledger, pruning_source_rollback) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block epoch1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block epoch1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch1).code); - nano::state_block send1 (nano::genesis_account, epoch1.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (epoch1.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), epoch1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (epoch1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); - nano::state_block send2 (nano::genesis_account, send1.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio * 2, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); + ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()))); + nano::state_block send2 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); ASSERT_TRUE (store->block.exists (transaction, send2.hash ())); // Pruning action @@ -3456,26 +3456,26 @@ TEST (ledger, pruning_source_rollback) ASSERT_TRUE (store->pruned.exists (transaction, epoch1.hash ())); ASSERT_TRUE (store->block.exists (transaction, genesis.hash ())); nano::pending_info info; - ASSERT_FALSE (store->pending.get (transaction, nano::pending_key (nano::genesis_account, send1.hash ()), info)); - ASSERT_EQ (nano::genesis_account, info.source); + ASSERT_FALSE (store->pending.get (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()), info)); + ASSERT_EQ (nano::dev::genesis->account (), info.source); ASSERT_EQ (nano::Gxrb_ratio, info.amount.number ()); ASSERT_EQ (nano::epoch::epoch_1, info.epoch); // Receiving pruned block - nano::state_block receive1 (nano::genesis_account, send2.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, send1.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send2.hash ())); + nano::state_block receive1 (nano::dev::genesis->account (), send2.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, send1.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send2.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); - ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); + ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()))); ASSERT_EQ (2, ledger.cache.pruned_count); ASSERT_EQ (5, ledger.cache.block_count); // Rollback receive block ASSERT_FALSE (ledger.rollback (transaction, receive1.hash ())); nano::pending_info info2; - ASSERT_FALSE (store->pending.get (transaction, nano::pending_key (nano::genesis_account, send1.hash ()), info2)); - ASSERT_NE (nano::genesis_account, info2.source); // Tradeoff to not store pruned blocks accounts + ASSERT_FALSE (store->pending.get (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()), info2)); + ASSERT_NE (nano::dev::genesis->account (), info2.source); // Tradeoff to not store pruned blocks accounts ASSERT_EQ (nano::Gxrb_ratio, info2.amount.number ()); ASSERT_EQ (nano::epoch::epoch_1, info2.epoch); // Process receive block again ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); - ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); + ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()))); ASSERT_EQ (2, ledger.cache.pruned_count); ASSERT_EQ (5, ledger.cache.block_count); } @@ -3492,18 +3492,18 @@ TEST (ledger, pruning_source_rollback_legacy) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::send_block send1 (genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block send1 (genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); + ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()))); nano::keypair key1; nano::send_block send2 (send1.hash (), key1.pub, nano::genesis_amount - 2 * nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); ASSERT_TRUE (store->block.exists (transaction, send2.hash ())); ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (key1.pub, send2.hash ()))); - nano::send_block send3 (send2.hash (), nano::genesis_account, nano::genesis_amount - 3 * nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send2.hash ())); + nano::send_block send3 (send2.hash (), nano::dev::genesis->account (), nano::genesis_amount - 3 * nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send2.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send3).code); ASSERT_TRUE (store->block.exists (transaction, send3.hash ())); - ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (nano::genesis_account, send3.hash ()))); + ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send3.hash ()))); // Pruning action ASSERT_EQ (2, ledger.pruning_action (transaction, send2.hash (), 1)); ASSERT_FALSE (store->block.exists (transaction, send2.hash ())); @@ -3512,35 +3512,35 @@ TEST (ledger, pruning_source_rollback_legacy) ASSERT_TRUE (store->pruned.exists (transaction, send1.hash ())); ASSERT_TRUE (store->block.exists (transaction, genesis.hash ())); nano::pending_info info1; - ASSERT_FALSE (store->pending.get (transaction, nano::pending_key (nano::genesis_account, send1.hash ()), info1)); - ASSERT_EQ (nano::genesis_account, info1.source); + ASSERT_FALSE (store->pending.get (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()), info1)); + ASSERT_EQ (nano::dev::genesis->account (), info1.source); ASSERT_EQ (nano::Gxrb_ratio, info1.amount.number ()); ASSERT_EQ (nano::epoch::epoch_0, info1.epoch); nano::pending_info info2; ASSERT_FALSE (store->pending.get (transaction, nano::pending_key (key1.pub, send2.hash ()), info2)); - ASSERT_EQ (nano::genesis_account, info2.source); + ASSERT_EQ (nano::dev::genesis->account (), info2.source); ASSERT_EQ (nano::Gxrb_ratio, info2.amount.number ()); ASSERT_EQ (nano::epoch::epoch_0, info2.epoch); // Receiving pruned block nano::receive_block receive1 (send3.hash (), send1.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send3.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); - ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); + ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()))); ASSERT_EQ (2, ledger.cache.pruned_count); ASSERT_EQ (5, ledger.cache.block_count); // Rollback receive block ASSERT_FALSE (ledger.rollback (transaction, receive1.hash ())); nano::pending_info info3; - ASSERT_FALSE (store->pending.get (transaction, nano::pending_key (nano::genesis_account, send1.hash ()), info3)); - ASSERT_NE (nano::genesis_account, info3.source); // Tradeoff to not store pruned blocks accounts + ASSERT_FALSE (store->pending.get (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()), info3)); + ASSERT_NE (nano::dev::genesis->account (), info3.source); // Tradeoff to not store pruned blocks accounts ASSERT_EQ (nano::Gxrb_ratio, info3.amount.number ()); ASSERT_EQ (nano::epoch::epoch_0, info3.epoch); // Process receive block again ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); - ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); + ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()))); ASSERT_EQ (2, ledger.cache.pruned_count); ASSERT_EQ (5, ledger.cache.block_count); // Receiving pruned block (open) - nano::open_block open1 (send2.hash (), nano::genesis_account, key1.pub, key1.prv, key1.pub, *pool.generate (key1.pub)); + nano::open_block open1 (send2.hash (), nano::dev::genesis->account (), key1.pub, key1.prv, key1.pub, *pool.generate (key1.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open1).code); ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (key1.pub, send2.hash ()))); ASSERT_EQ (2, ledger.cache.pruned_count); @@ -3549,7 +3549,7 @@ TEST (ledger, pruning_source_rollback_legacy) ASSERT_FALSE (ledger.rollback (transaction, open1.hash ())); nano::pending_info info4; ASSERT_FALSE (store->pending.get (transaction, nano::pending_key (key1.pub, send2.hash ()), info4)); - ASSERT_NE (nano::genesis_account, info4.source); // Tradeoff to not store pruned blocks accounts + ASSERT_NE (nano::dev::genesis->account (), info4.source); // Tradeoff to not store pruned blocks accounts ASSERT_EQ (nano::Gxrb_ratio, info4.amount.number ()); ASSERT_EQ (nano::epoch::epoch_0, info4.epoch); // Process open block again @@ -3571,7 +3571,7 @@ TEST (ledger, pruning_process_error) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_EQ (0, ledger.cache.pruned_count); ASSERT_EQ (2, ledger.cache.block_count); @@ -3582,7 +3582,7 @@ TEST (ledger, pruning_process_error) // Attempt to process pruned block again ASSERT_EQ (nano::process_result::old, ledger.process (transaction, send1).code); // Attept to process new block after pruned - nano::state_block send2 (nano::genesis_account, send1.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio * 2, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block send2 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::gap_previous, ledger.process (transaction, send2).code); ASSERT_EQ (1, ledger.cache.pruned_count); ASSERT_EQ (2, ledger.cache.block_count); @@ -3601,18 +3601,18 @@ TEST (ledger, pruning_legacy_blocks) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::send_block send1 (genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block send1 (genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (nano::genesis_account, send1.hash ()))); + ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()))); nano::receive_block receive1 (send1.hash (), send1.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); nano::change_block change1 (receive1.hash (), key1.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (receive1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, change1).code); nano::send_block send2 (change1.hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (change1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); - nano::open_block open1 (send2.hash (), nano::genesis_account, key1.pub, key1.prv, key1.pub, *pool.generate (key1.pub)); + nano::open_block open1 (send2.hash (), nano::dev::genesis->account (), key1.pub, key1.prv, key1.pub, *pool.generate (key1.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open1).code); - nano::send_block send3 (open1.hash (), nano::genesis_account, 0, key1.prv, key1.pub, *pool.generate (open1.hash ())); + nano::send_block send3 (open1.hash (), nano::dev::genesis->account (), 0, key1.prv, key1.pub, *pool.generate (open1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send3).code); // Pruning action ASSERT_EQ (3, ledger.pruning_action (transaction, change1.hash (), 2)); @@ -3646,10 +3646,10 @@ TEST (ledger, pruning_safe_functions) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); - nano::state_block send2 (nano::genesis_account, send1.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio * 2, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block send2 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); ASSERT_TRUE (store->block.exists (transaction, send2.hash ())); // Pruning action @@ -3673,7 +3673,7 @@ TEST (ledger, pruning_safe_functions) ASSERT_TRUE (ledger.account_safe (transaction, send1.hash (), error).is_zero ()); ASSERT_TRUE (error); error = false; - ASSERT_EQ (nano::genesis_account, ledger.account_safe (transaction, send2.hash (), error)); + ASSERT_EQ (nano::dev::genesis->account (), ledger.account_safe (transaction, send2.hash (), error)); ASSERT_FALSE (error); } @@ -3689,10 +3689,10 @@ TEST (ledger, hash_root_random) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::genesis_account, genesis.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); - nano::state_block send2 (nano::genesis_account, send1.hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio * 2, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block send2 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); ASSERT_TRUE (store->block.exists (transaction, send2.hash ())); // Pruning action @@ -3752,13 +3752,13 @@ TEST (ledger, migrate_lmdb_to_rocksdb) ASSERT_FALSE (store.init_error ()); // Lower the database to the max version unsupported for upgrades - store.confirmation_height.put (transaction, nano::genesis_account, { 2, send->hash () }); + store.confirmation_height.put (transaction, nano::dev::genesis->account (), { 2, send->hash () }); store.online_weight.put (transaction, 100, nano::amount (2)); store.frontier.put (transaction, nano::block_hash (2), nano::account (5)); store.peer.put (transaction, endpoint_key); - store.pending.put (transaction, nano::pending_key (nano::genesis_account, send->hash ()), nano::pending_info (nano::genesis_account, 100, nano::epoch::epoch_0)); + store.pending.put (transaction, nano::pending_key (nano::dev::genesis->account (), send->hash ()), nano::pending_info (nano::dev::genesis->account (), 100, nano::epoch::epoch_0)); store.pruned.put (transaction, send->hash ()); store.unchecked.put (transaction, nano::dev::genesis->hash (), send); store.version.put (transaction, version); @@ -3774,7 +3774,7 @@ TEST (ledger, migrate_lmdb_to_rocksdb) auto rocksdb_transaction (rocksdb_store.tx_begin_read ()); nano::pending_info pending_info; - ASSERT_FALSE (rocksdb_store.pending.get (rocksdb_transaction, nano::pending_key (nano::genesis_account, send->hash ()), pending_info)); + ASSERT_FALSE (rocksdb_store.pending.get (rocksdb_transaction, nano::pending_key (nano::dev::genesis->account (), send->hash ()), pending_info)); for (auto i = rocksdb_store.online_weight.begin (rocksdb_transaction); i != rocksdb_store.online_weight.end (); ++i) { @@ -3791,7 +3791,7 @@ TEST (ledger, migrate_lmdb_to_rocksdb) ASSERT_EQ (rocksdb_store.version.get (rocksdb_transaction), version); ASSERT_EQ (rocksdb_store.frontier.get (rocksdb_transaction, 2), 5); nano::confirmation_height_info confirmation_height_info; - ASSERT_FALSE (rocksdb_store.confirmation_height.get (rocksdb_transaction, nano::genesis_account, confirmation_height_info)); + ASSERT_FALSE (rocksdb_store.confirmation_height.get (rocksdb_transaction, nano::dev::genesis->account (), confirmation_height_info)); ASSERT_EQ (confirmation_height_info.height, 2); ASSERT_EQ (confirmation_height_info.frontier, send->hash ()); ASSERT_TRUE (rocksdb_store.final_vote.get (rocksdb_transaction, nano::root (send->previous ())).size () == 1); @@ -3799,7 +3799,7 @@ TEST (ledger, migrate_lmdb_to_rocksdb) auto unchecked_infos = rocksdb_store.unchecked.get (rocksdb_transaction, nano::dev::genesis->hash ()); ASSERT_EQ (unchecked_infos.size (), 1); - ASSERT_EQ (unchecked_infos.front ().account, nano::genesis_account); + ASSERT_EQ (unchecked_infos.front ().account, nano::dev::genesis->account ()); ASSERT_EQ (*unchecked_infos.front ().block, *send); } @@ -3819,11 +3819,11 @@ TEST (ledger, unconfirmed_frontiers) nano::state_block_builder builder; nano::keypair key; - auto const latest = ledger.latest (store->tx_begin_read (), nano::genesis_account); + auto const latest = ledger.latest (store->tx_begin_read (), nano::dev::genesis->account ()); auto send = builder.make_block () - .account (nano::genesis_account) + .account (nano::dev::genesis->account ()) .previous (latest) - .representative (nano::genesis_account) + .representative (nano::dev::genesis->account ()) .balance (nano::genesis_amount - 100) .link (key.pub) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) @@ -3835,7 +3835,7 @@ TEST (ledger, unconfirmed_frontiers) unconfirmed_frontiers = ledger.unconfirmed_frontiers (); ASSERT_EQ (unconfirmed_frontiers.size (), 1); ASSERT_EQ (unconfirmed_frontiers.begin ()->first, 1); - nano::uncemented_info uncemented_info1{ latest, send->hash (), nano::genesis_account }; + nano::uncemented_info uncemented_info1{ latest, send->hash (), nano::dev::genesis->account () }; auto uncemented_info2 = unconfirmed_frontiers.begin ()->second; ASSERT_EQ (uncemented_info1.account, uncemented_info2.account); ASSERT_EQ (uncemented_info1.cemented_frontier, uncemented_info2.cemented_frontier); diff --git a/nano/core_test/node.cpp b/nano/core_test/node.cpp index 615634a51a..88be824a28 100644 --- a/nano/core_test/node.cpp +++ b/nano/core_test/node.cpp @@ -2073,16 +2073,16 @@ TEST (node, DISABLED_unconfirmed_send) nano::keypair key0; wallet1->insert_adhoc (key0.prv); wallet0->insert_adhoc (nano::dev_genesis_key.prv); - auto send1 (wallet0->send_action (nano::genesis_account, key0.pub, 2 * nano::Mxrb_ratio)); + auto send1 (wallet0->send_action (nano::dev::genesis->account (), key0.pub, 2 * nano::Mxrb_ratio)); ASSERT_TIMELY (10s, node1.balance (key0.pub) == 2 * nano::Mxrb_ratio && !node1.bootstrap_initiator.in_progress ()); auto latest (node1.latest (key0.pub)); - nano::state_block send2 (key0.pub, latest, nano::genesis_account, nano::Mxrb_ratio, nano::genesis_account, key0.prv, key0.pub, *node0.work_generate_blocking (latest)); + nano::state_block send2 (key0.pub, latest, nano::dev::genesis->account (), nano::Mxrb_ratio, nano::dev::genesis->account (), key0.prv, key0.pub, *node0.work_generate_blocking (latest)); { auto transaction (node1.store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, node1.ledger.process (transaction, send2).code); } - auto send3 (wallet1->send_action (key0.pub, nano::genesis_account, nano::Mxrb_ratio)); - ASSERT_TIMELY (10s, node0.balance (nano::genesis_account) == nano::genesis_amount); + auto send3 (wallet1->send_action (key0.pub, nano::dev::genesis->account (), nano::Mxrb_ratio)); + ASSERT_TIMELY (10s, node0.balance (nano::dev::genesis->account ()) == nano::genesis_amount); } // Test that nodes can track nodes that have rep weight for priority broadcasting @@ -3059,9 +3059,9 @@ TEST (node, vote_by_hash_epoch_block_republish) .work (*system.work.generate (genesis.hash ())) .build_shared (); auto epoch1 = nano::state_block_builder () - .account (nano::genesis_account) + .account (nano::dev::genesis->account ()) .previous (genesis.hash ()) - .representative (nano::genesis_account) + .representative (nano::dev::genesis->account ()) .balance (nano::genesis_amount) .link (node1.ledger.epoch_link (nano::epoch::epoch_1)) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) diff --git a/nano/core_test/system.cpp b/nano/core_test/system.cpp index caf83c68f3..370efa8382 100644 --- a/nano/core_test/system.cpp +++ b/nano/core_test/system.cpp @@ -29,7 +29,7 @@ TEST (system, system_genesis) for (auto & i : system.nodes) { auto transaction (i->store.tx_begin_read ()); - ASSERT_EQ (nano::genesis_amount, i->ledger.account_balance (transaction, nano::genesis_account)); + ASSERT_EQ (nano::genesis_amount, i->ledger.account_balance (transaction, nano::dev::genesis->account ())); } } @@ -40,7 +40,7 @@ TEST (system, DISABLED_generate_send_existing) nano::thread_runner runner (system.io_ctx, node1.config.io_threads); system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); nano::keypair stake_preserver; - auto send_block (system.wallet (0)->send_action (nano::genesis_account, stake_preserver.pub, nano::genesis_amount / 3 * 2, true)); + auto send_block (system.wallet (0)->send_action (nano::dev::genesis->account (), stake_preserver.pub, nano::genesis_amount / 3 * 2, true)); nano::account_info info1; { auto transaction (node1.store.tx_begin_read ()); @@ -52,11 +52,11 @@ TEST (system, DISABLED_generate_send_existing) // Have stake_preserver receive funds after generate_send_existing so it isn't chosen as the destination { auto transaction (node1.store.tx_begin_write ()); - auto open_block (std::make_shared (send_block->hash (), nano::genesis_account, stake_preserver.pub, stake_preserver.prv, stake_preserver.pub, 0)); + auto open_block (std::make_shared (send_block->hash (), nano::dev::genesis->account (), stake_preserver.pub, stake_preserver.prv, stake_preserver.pub, 0)); node1.work_generate_blocking (*open_block); ASSERT_EQ (nano::process_result::progress, node1.ledger.process (transaction, *open_block).code); } - ASSERT_GT (node1.balance (stake_preserver.pub), node1.balance (nano::genesis_account)); + ASSERT_GT (node1.balance (stake_preserver.pub), node1.balance (nano::dev::genesis->account ())); nano::account_info info2; { auto transaction (node1.store.tx_begin_read ()); @@ -94,14 +94,14 @@ TEST (system, DISABLED_generate_send_new) ASSERT_EQ (node1.store.account.end (), iterator1); } nano::keypair stake_preserver; - auto send_block (system.wallet (0)->send_action (nano::genesis_account, stake_preserver.pub, nano::genesis_amount / 3 * 2, true)); + auto send_block (system.wallet (0)->send_action (nano::dev::genesis->account (), stake_preserver.pub, nano::genesis_amount / 3 * 2, true)); { auto transaction (node1.store.tx_begin_write ()); - auto open_block (std::make_shared (send_block->hash (), nano::genesis_account, stake_preserver.pub, stake_preserver.prv, stake_preserver.pub, 0)); + auto open_block (std::make_shared (send_block->hash (), nano::dev::genesis->account (), stake_preserver.pub, stake_preserver.prv, stake_preserver.pub, 0)); node1.work_generate_blocking (*open_block); ASSERT_EQ (nano::process_result::progress, node1.ledger.process (transaction, *open_block).code); } - ASSERT_GT (node1.balance (stake_preserver.pub), node1.balance (nano::genesis_account)); + ASSERT_GT (node1.balance (stake_preserver.pub), node1.balance (nano::dev::genesis->account ())); std::vector accounts; accounts.push_back (nano::dev_genesis_key.pub); // This indirectly waits for online weight to stabilize, required to prevent intermittent failures diff --git a/nano/core_test/vote_processor.cpp b/nano/core_test/vote_processor.cpp index 4f5737698d..c8ca56b665 100644 --- a/nano/core_test/vote_processor.cpp +++ b/nano/core_test/vote_processor.cpp @@ -28,7 +28,7 @@ TEST (vote_processor, codes) ASSERT_EQ (nano::vote_code::indeterminate, node.vote_processor.vote_blocking (vote, channel)); // First vote from an account for an ongoing election - genesis.open->sideband_set (nano::block_sideband (nano::genesis_account, 0, nano::genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); + genesis.open->sideband_set (nano::block_sideband (nano::dev::genesis->account (), 0, nano::genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); node.block_confirm (genesis.open); ASSERT_NE (nullptr, node.active.election (genesis.open->qualified_root ())); ASSERT_EQ (nano::vote_code::vote, node.vote_processor.vote_blocking (vote, channel)); @@ -78,7 +78,7 @@ TEST (vote_processor, invalid_signature) vote_invalid->signature.bytes[0] ^= 1; auto channel = std::make_shared (node); - genesis.open->sideband_set (nano::block_sideband (nano::genesis_account, 0, nano::genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); + genesis.open->sideband_set (nano::block_sideband (nano::dev::genesis->account (), 0, nano::genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); node.block_confirm (genesis.open); auto election = node.active.election (genesis.open->qualified_root ()); ASSERT_TRUE (election); diff --git a/nano/core_test/voting.cpp b/nano/core_test/voting.cpp index c7e7eb03cb..08bd52677f 100644 --- a/nano/core_test/voting.cpp +++ b/nano/core_test/voting.cpp @@ -112,7 +112,7 @@ TEST (vote_generator, session) nano::vote_generator_session generator_session (node->active.generator); boost::thread thread ([node, &generator_session] () { nano::thread_role::set (nano::thread_role::name::request_loop); - generator_session.add (nano::genesis_account, nano::dev::genesis->hash ()); + generator_session.add (nano::dev::genesis->account (), nano::dev::genesis->hash ()); ASSERT_EQ (0, node->stats.count (nano::stat::type::vote, nano::stat::detail::vote_indeterminate)); generator_session.flush (); }); diff --git a/nano/core_test/wallet.cpp b/nano/core_test/wallet.cpp index fc295738e8..e6d86cad55 100644 --- a/nano/core_test/wallet.cpp +++ b/nano/core_test/wallet.cpp @@ -18,7 +18,7 @@ TEST (wallet, no_special_keys_accounts) ASSERT_FALSE (init); auto transaction (env.tx_begin_write ()); nano::kdf kdf; - nano::wallet_store wallet (init, kdf, transaction, nano::genesis_account, 1, "0"); + nano::wallet_store wallet (init, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (init); nano::keypair key1; ASSERT_FALSE (wallet.exists (transaction, key1.pub)); @@ -39,7 +39,7 @@ TEST (wallet, no_key) ASSERT_FALSE (init); auto transaction (env.tx_begin_write ()); nano::kdf kdf; - nano::wallet_store wallet (init, kdf, transaction, nano::genesis_account, 1, "0"); + nano::wallet_store wallet (init, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (init); nano::keypair key1; nano::raw_key prv1; @@ -54,7 +54,7 @@ TEST (wallet, fetch_locked) ASSERT_FALSE (init); auto transaction (env.tx_begin_write ()); nano::kdf kdf; - nano::wallet_store wallet (init, kdf, transaction, nano::genesis_account, 1, "0"); + nano::wallet_store wallet (init, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_TRUE (wallet.valid_password (transaction)); nano::keypair key1; ASSERT_EQ (key1.pub, wallet.insert_adhoc (transaction, key1.prv)); @@ -76,7 +76,7 @@ TEST (wallet, retrieval) ASSERT_FALSE (init); auto transaction (env.tx_begin_write ()); nano::kdf kdf; - nano::wallet_store wallet (init, kdf, transaction, nano::genesis_account, 1, "0"); + nano::wallet_store wallet (init, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (init); nano::keypair key1; ASSERT_TRUE (wallet.valid_password (transaction)); @@ -98,7 +98,7 @@ TEST (wallet, empty_iteration) ASSERT_FALSE (init); auto transaction (env.tx_begin_write ()); nano::kdf kdf; - nano::wallet_store wallet (init, kdf, transaction, nano::genesis_account, 1, "0"); + nano::wallet_store wallet (init, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (init); auto i (wallet.begin (transaction)); auto j (wallet.end ()); @@ -112,7 +112,7 @@ TEST (wallet, one_item_iteration) ASSERT_FALSE (init); auto transaction (env.tx_begin_write ()); nano::kdf kdf; - nano::wallet_store wallet (init, kdf, transaction, nano::genesis_account, 1, "0"); + nano::wallet_store wallet (init, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (init); nano::keypair key1; wallet.insert_adhoc (transaction, key1.prv); @@ -140,7 +140,7 @@ TEST (wallet, two_item_iteration) nano::kdf kdf; { auto transaction (env.tx_begin_write ()); - nano::wallet_store wallet (init, kdf, transaction, nano::genesis_account, 1, "0"); + nano::wallet_store wallet (init, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (init); wallet.insert_adhoc (transaction, key1.prv); wallet.insert_adhoc (transaction, key2.prv); @@ -278,7 +278,7 @@ TEST (wallet, find_none) ASSERT_FALSE (init); auto transaction (env.tx_begin_write ()); nano::kdf kdf; - nano::wallet_store wallet (init, kdf, transaction, nano::genesis_account, 1, "0"); + nano::wallet_store wallet (init, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (init); nano::account account (1000); ASSERT_EQ (wallet.end (), wallet.find (transaction, account)); @@ -291,7 +291,7 @@ TEST (wallet, find_existing) ASSERT_FALSE (init); auto transaction (env.tx_begin_write ()); nano::kdf kdf; - nano::wallet_store wallet (init, kdf, transaction, nano::genesis_account, 1, "0"); + nano::wallet_store wallet (init, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (init); nano::keypair key1; ASSERT_FALSE (wallet.exists (transaction, key1.pub)); @@ -310,7 +310,7 @@ TEST (wallet, rekey) ASSERT_FALSE (init); auto transaction (env.tx_begin_write ()); nano::kdf kdf; - nano::wallet_store wallet (init, kdf, transaction, nano::genesis_account, 1, "0"); + nano::wallet_store wallet (init, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (init); nano::raw_key password; wallet.password.value (password); @@ -382,7 +382,7 @@ TEST (wallet, hash_password) ASSERT_FALSE (init); auto transaction (env.tx_begin_write ()); nano::kdf kdf; - nano::wallet_store wallet (init, kdf, transaction, nano::genesis_account, 1, "0"); + nano::wallet_store wallet (init, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (init); nano::raw_key hash1; wallet.derive_key (hash1, transaction, ""); @@ -432,25 +432,25 @@ TEST (wallet, reopen_default_password) ASSERT_FALSE (init); nano::kdf kdf; { - nano::wallet_store wallet (init, kdf, transaction, nano::genesis_account, 1, "0"); + nano::wallet_store wallet (init, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (init); ASSERT_TRUE (wallet.valid_password (transaction)); } { bool init; - nano::wallet_store wallet (init, kdf, transaction, nano::genesis_account, 1, "0"); + nano::wallet_store wallet (init, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (init); ASSERT_TRUE (wallet.valid_password (transaction)); } { - nano::wallet_store wallet (init, kdf, transaction, nano::genesis_account, 1, "0"); + nano::wallet_store wallet (init, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (init); wallet.rekey (transaction, ""); ASSERT_TRUE (wallet.valid_password (transaction)); } { bool init; - nano::wallet_store wallet (init, kdf, transaction, nano::genesis_account, 1, "0"); + nano::wallet_store wallet (init, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (init); ASSERT_FALSE (wallet.valid_password (transaction)); wallet.attempt_password (transaction, " "); @@ -467,10 +467,10 @@ TEST (wallet, representative) ASSERT_FALSE (error); auto transaction (env.tx_begin_write ()); nano::kdf kdf; - nano::wallet_store wallet (error, kdf, transaction, nano::genesis_account, 1, "0"); + nano::wallet_store wallet (error, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (error); ASSERT_FALSE (wallet.is_representative (transaction)); - ASSERT_EQ (nano::genesis_account, wallet.representative (transaction)); + ASSERT_EQ (nano::dev::genesis->account (), wallet.representative (transaction)); ASSERT_FALSE (wallet.is_representative (transaction)); nano::keypair key; wallet.representative_set (transaction, key.pub); @@ -488,11 +488,11 @@ TEST (wallet, serialize_json_empty) ASSERT_FALSE (error); auto transaction (env.tx_begin_write ()); nano::kdf kdf; - nano::wallet_store wallet1 (error, kdf, transaction, nano::genesis_account, 1, "0"); + nano::wallet_store wallet1 (error, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (error); std::string serialized; wallet1.serialize_json (transaction, serialized); - nano::wallet_store wallet2 (error, kdf, transaction, nano::genesis_account, 1, "1", serialized); + nano::wallet_store wallet2 (error, kdf, transaction, nano::dev::genesis->account (), 1, "1", serialized); ASSERT_FALSE (error); nano::raw_key password1; nano::raw_key password2; @@ -513,13 +513,13 @@ TEST (wallet, serialize_json_one) ASSERT_FALSE (error); auto transaction (env.tx_begin_write ()); nano::kdf kdf; - nano::wallet_store wallet1 (error, kdf, transaction, nano::genesis_account, 1, "0"); + nano::wallet_store wallet1 (error, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (error); nano::keypair key; wallet1.insert_adhoc (transaction, key.prv); std::string serialized; wallet1.serialize_json (transaction, serialized); - nano::wallet_store wallet2 (error, kdf, transaction, nano::genesis_account, 1, "1", serialized); + nano::wallet_store wallet2 (error, kdf, transaction, nano::dev::genesis->account (), 1, "1", serialized); ASSERT_FALSE (error); nano::raw_key password1; nano::raw_key password2; @@ -542,14 +542,14 @@ TEST (wallet, serialize_json_password) ASSERT_FALSE (error); auto transaction (env.tx_begin_write ()); nano::kdf kdf; - nano::wallet_store wallet1 (error, kdf, transaction, nano::genesis_account, 1, "0"); + nano::wallet_store wallet1 (error, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (error); nano::keypair key; wallet1.rekey (transaction, "password"); wallet1.insert_adhoc (transaction, key.prv); std::string serialized; wallet1.serialize_json (transaction, serialized); - nano::wallet_store wallet2 (error, kdf, transaction, nano::genesis_account, 1, "1", serialized); + nano::wallet_store wallet2 (error, kdf, transaction, nano::dev::genesis->account (), 1, "1", serialized); ASSERT_FALSE (error); ASSERT_FALSE (wallet2.valid_password (transaction)); ASSERT_FALSE (wallet2.attempt_password (transaction, "password")); @@ -575,11 +575,11 @@ TEST (wallet_store, move) ASSERT_FALSE (error); auto transaction (env.tx_begin_write ()); nano::kdf kdf; - nano::wallet_store wallet1 (error, kdf, transaction, nano::genesis_account, 1, "0"); + nano::wallet_store wallet1 (error, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (error); nano::keypair key1; wallet1.insert_adhoc (transaction, key1.prv); - nano::wallet_store wallet2 (error, kdf, transaction, nano::genesis_account, 1, "1"); + nano::wallet_store wallet2 (error, kdf, transaction, nano::dev::genesis->account (), 1, "1"); ASSERT_FALSE (error); nano::keypair key2; wallet2.insert_adhoc (transaction, key2.prv); @@ -733,7 +733,7 @@ TEST (wallet, deterministic_keys) ASSERT_FALSE (init); auto transaction (env.tx_begin_write ()); nano::kdf kdf; - nano::wallet_store wallet (init, kdf, transaction, nano::genesis_account, 1, "0"); + nano::wallet_store wallet (init, kdf, transaction, nano::dev::genesis->account (), 1, "0"); auto key1 = wallet.deterministic_key (transaction, 0); auto key2 = wallet.deterministic_key (transaction, 0); ASSERT_EQ (key1, key2); @@ -776,7 +776,7 @@ TEST (wallet, reseed) ASSERT_FALSE (init); auto transaction (env.tx_begin_write ()); nano::kdf kdf; - nano::wallet_store wallet (init, kdf, transaction, nano::genesis_account, 1, "0"); + nano::wallet_store wallet (init, kdf, transaction, nano::dev::genesis->account (), 1, "0"); nano::raw_key seed1; seed1 = 1; nano::raw_key seed2; @@ -1163,11 +1163,11 @@ TEST (wallet, search_pending) wallet.insert_adhoc (nano::dev_genesis_key.prv); nano::block_builder builder; auto send = builder.state () - .account (nano::genesis_account) + .account (nano::dev::genesis->account ()) .previous (nano::dev::genesis->hash ()) - .representative (nano::genesis_account) + .representative (nano::dev::genesis->account ()) .balance (nano::genesis_amount - node.config.receive_minimum.number ()) - .link (nano::genesis_account) + .link (nano::dev::genesis->account ()) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build (); @@ -1180,7 +1180,7 @@ TEST (wallet, search_pending) ASSERT_NE (nullptr, election); // Erase the key so the confirmation does not trigger an automatic receive - wallet.store.erase (node.wallets.tx_begin_write (), nano::genesis_account); + wallet.store.erase (node.wallets.tx_begin_write (), nano::dev::genesis->account ()); // Now confirm the election election->force_confirm (); @@ -1193,8 +1193,8 @@ TEST (wallet, search_pending) // Pending search should create the receive block ASSERT_EQ (2, node.ledger.cache.block_count); ASSERT_FALSE (wallet.search_pending (wallet.wallets.tx_begin_read ())); - ASSERT_TIMELY (3s, node.balance (nano::genesis_account) == nano::genesis_amount); - auto receive_hash = node.ledger.latest (node.store.tx_begin_read (), nano::genesis_account); + ASSERT_TIMELY (3s, node.balance (nano::dev::genesis->account ()) == nano::genesis_amount); + auto receive_hash = node.ledger.latest (node.store.tx_begin_read (), nano::dev::genesis->account ()); auto receive = node.block (receive_hash); ASSERT_NE (nullptr, receive); ASSERT_EQ (receive->sideband ().height, 3); diff --git a/nano/core_test/wallets.cpp b/nano/core_test/wallets.cpp index 862d35fa59..e0a9e47762 100644 --- a/nano/core_test/wallets.cpp +++ b/nano/core_test/wallets.cpp @@ -166,11 +166,11 @@ TEST (wallets, search_pending) wallet->insert_adhoc (nano::dev_genesis_key.prv); nano::block_builder builder; auto send = builder.state () - .account (nano::genesis_account) + .account (nano::dev::genesis->account ()) .previous (nano::dev::genesis->hash ()) - .representative (nano::genesis_account) + .representative (nano::dev::genesis->account ()) .balance (nano::genesis_amount - node.config.receive_minimum.number ()) - .link (nano::genesis_account) + .link (nano::dev::genesis->account ()) .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build (); @@ -190,7 +190,7 @@ TEST (wallets, search_pending) ASSERT_NE (nullptr, election); // Erase the key so the confirmation does not trigger an automatic receive - wallet->store.erase (node.wallets.tx_begin_write (), nano::genesis_account); + wallet->store.erase (node.wallets.tx_begin_write (), nano::dev::genesis->account ()); // Now confirm the election election->force_confirm (); @@ -210,8 +210,8 @@ TEST (wallets, search_pending) { node.wallets.search_pending (wallet_id); } - ASSERT_TIMELY (3s, node.balance (nano::genesis_account) == nano::genesis_amount); - auto receive_hash = node.ledger.latest (node.store.tx_begin_read (), nano::genesis_account); + ASSERT_TIMELY (3s, node.balance (nano::dev::genesis->account ()) == nano::genesis_amount); + auto receive_hash = node.ledger.latest (node.store.tx_begin_read (), nano::dev::genesis->account ()); auto receive = node.block (receive_hash); ASSERT_NE (nullptr, receive); ASSERT_EQ (receive->sideband ().height, 3); diff --git a/nano/load_test/entry.cpp b/nano/load_test/entry.cpp index e64b096cd4..454b2379fe 100644 --- a/nano/load_test/entry.cpp +++ b/nano/load_test/entry.cpp @@ -437,7 +437,7 @@ int main (int argc, char * const * argv) // Send from genesis account to different accounts and receive the funds boost::asio::spawn (ioc, [&ioc, &primary_node_results, &wallet, destination_account, &send_calls_remaining] (boost::asio::yield_context yield) { - send_receive (ioc, wallet, nano::genesis_account.to_account (), destination_account->as_string, send_calls_remaining, primary_node_results, yield); + send_receive (ioc, wallet, nano::dev::genesis->account ().to_account (), destination_account->as_string, send_calls_remaining, primary_node_results, yield); }); } diff --git a/nano/qt_test/qt.cpp b/nano/qt_test/qt.cpp index 33d12da731..74dd5d9fcc 100644 --- a/nano/qt_test/qt.cpp +++ b/nano/qt_test/qt.cpp @@ -350,7 +350,7 @@ TEST (wallet, process_block) nano_qt::eventloop_processor processor; nano::system system (1); nano::account account; - nano::block_hash latest (system.nodes[0]->latest (nano::genesis_account)); + nano::block_hash latest (system.nodes[0]->latest (nano::dev::genesis->account ())); system.wallet (0)->insert_adhoc (nano::keypair ().prv); { auto transaction (system.nodes[0]->wallets.tx_begin_read ()); @@ -655,7 +655,7 @@ TEST (wallet, block_viewer) ASSERT_NE (-1, wallet->advanced.layout->indexOf (wallet->advanced.block_viewer)); QTest::mouseClick (wallet->advanced.block_viewer, Qt::LeftButton); ASSERT_EQ (wallet->block_viewer.window, wallet->main_stack->currentWidget ()); - nano::block_hash latest (system.nodes[0]->latest (nano::genesis_account)); + nano::block_hash latest (system.nodes[0]->latest (nano::dev::genesis->account ())); QTest::keyClicks (wallet->block_viewer.hash, latest.to_string ().c_str ()); QTest::mouseClick (wallet->block_viewer.retrieve, Qt::LeftButton); ASSERT_FALSE (wallet->block_viewer.block->toPlainText ().toStdString ().empty ()); @@ -906,7 +906,7 @@ TEST (wallet, DISABLED_synchronizing) wallet->start (); { auto transaction (system1.nodes[0]->store.tx_begin_write ()); - auto latest (system1.nodes[0]->ledger.latest (transaction, nano::genesis_account)); + auto latest (system1.nodes[0]->ledger.latest (transaction, nano::dev::genesis->account ())); nano::send_block send (latest, key1, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system1.work.generate (latest)); system1.nodes[0]->ledger.process (transaction, send); } diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index 9cabbd06d7..2a81df5490 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -663,7 +663,7 @@ TEST (rpc, wallet_representative) request.put ("action", "wallet_representative"); auto response (wait_response (system, rpc, request)); std::string account_text1 (response.get ("representative")); - ASSERT_EQ (account_text1, nano::genesis_account.to_account ()); + ASSERT_EQ (account_text1, nano::dev::genesis->account ().to_account ()); } TEST (rpc, wallet_representative_set) @@ -822,7 +822,7 @@ TEST (rpc, wallet_export) rpc_ctx->io_scope->reset (); auto transaction (node->wallets.tx_begin_write ()); nano::kdf kdf; - nano::wallet_store store (error, kdf, transaction, nano::genesis_account, 1, "0", wallet_json); + nano::wallet_store store (error, kdf, transaction, nano::dev::genesis->account (), 1, "0", wallet_json); ASSERT_FALSE (error); ASSERT_TRUE (store.exists (transaction, nano::dev_genesis_key.pub)); } @@ -877,7 +877,7 @@ TEST (rpc, block) auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "block"); - request.put ("hash", node->latest (nano::genesis_account).to_string ()); + request.put ("hash", node->latest (nano::dev::genesis->account ()).to_string ()); auto response (wait_response (system, rpc, request)); auto contents (response.get ("contents")); ASSERT_FALSE (contents.empty ()); @@ -1086,9 +1086,9 @@ TEST (rpc, history) auto receive (system.wallet (0)->receive_action (send->hash (), nano::dev_genesis_key.pub, node0->config.receive_minimum.number (), send->link ().as_account ())); ASSERT_NE (nullptr, receive); nano::genesis genesis; - nano::state_block usend (nano::genesis_account, node0->latest (nano::genesis_account), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node0->work_generate_blocking (node0->latest (nano::genesis_account))); - nano::state_block ureceive (nano::genesis_account, usend.hash (), nano::genesis_account, nano::genesis_amount, usend.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node0->work_generate_blocking (usend.hash ())); - nano::state_block uchange (nano::genesis_account, ureceive.hash (), nano::keypair ().pub, nano::genesis_amount, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node0->work_generate_blocking (ureceive.hash ())); + nano::state_block usend (nano::dev::genesis->account (), node0->latest (nano::dev::genesis->account ()), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node0->work_generate_blocking (node0->latest (nano::dev::genesis->account ()))); + nano::state_block ureceive (nano::dev::genesis->account (), usend.hash (), nano::dev::genesis->account (), nano::genesis_amount, usend.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node0->work_generate_blocking (usend.hash ())); + nano::state_block uchange (nano::dev::genesis->account (), ureceive.hash (), nano::keypair ().pub, nano::genesis_amount, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node0->work_generate_blocking (ureceive.hash ())); { auto transaction (node0->store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, node0->ledger.process (transaction, usend).code); @@ -1143,9 +1143,9 @@ TEST (rpc, account_history) auto receive (system.wallet (0)->receive_action (send->hash (), nano::dev_genesis_key.pub, node0->config.receive_minimum.number (), send->link ().as_account ())); ASSERT_NE (nullptr, receive); nano::genesis genesis; - nano::state_block usend (nano::genesis_account, node0->latest (nano::genesis_account), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node0->work_generate_blocking (node0->latest (nano::genesis_account))); - nano::state_block ureceive (nano::genesis_account, usend.hash (), nano::genesis_account, nano::genesis_amount, usend.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node0->work_generate_blocking (usend.hash ())); - nano::state_block uchange (nano::genesis_account, ureceive.hash (), nano::keypair ().pub, nano::genesis_amount, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node0->work_generate_blocking (ureceive.hash ())); + nano::state_block usend (nano::dev::genesis->account (), node0->latest (nano::dev::genesis->account ()), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node0->work_generate_blocking (node0->latest (nano::dev::genesis->account ()))); + nano::state_block ureceive (nano::dev::genesis->account (), usend.hash (), nano::dev::genesis->account (), nano::genesis_amount, usend.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node0->work_generate_blocking (usend.hash ())); + nano::state_block uchange (nano::dev::genesis->account (), ureceive.hash (), nano::keypair ().pub, nano::genesis_amount, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node0->work_generate_blocking (ureceive.hash ())); { auto transaction (node0->store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, node0->ledger.process (transaction, usend).code); @@ -1156,7 +1156,7 @@ TEST (rpc, account_history) { boost::property_tree::ptree request; request.put ("action", "account_history"); - request.put ("account", nano::genesis_account.to_account ()); + request.put ("account", nano::dev::genesis->account ().to_account ()); request.put ("count", 100); auto response (wait_response (system, rpc, request, 10s)); std::vector> history_l; @@ -1197,7 +1197,7 @@ TEST (rpc, account_history) { boost::property_tree::ptree request; request.put ("action", "account_history"); - request.put ("account", nano::genesis_account.to_account ()); + request.put ("account", nano::dev::genesis->account ().to_account ()); request.put ("reverse", true); request.put ("count", 1); auto response (wait_response (system, rpc, request, 10s)); @@ -1283,9 +1283,9 @@ TEST (rpc, history_pruning) node0->process_active (send); auto receive (std::make_shared (send->hash (), send->hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node0->work.generate (send->hash ()))); node0->process_active (receive); - auto usend (std::make_shared (nano::genesis_account, receive->hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::genesis_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node0->work_generate_blocking (receive->hash ()))); - auto ureceive (std::make_shared (nano::genesis_account, usend->hash (), nano::genesis_account, nano::genesis_amount, usend->hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node0->work_generate_blocking (usend->hash ()))); - auto uchange (std::make_shared (nano::genesis_account, ureceive->hash (), nano::keypair ().pub, nano::genesis_amount, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node0->work_generate_blocking (ureceive->hash ()))); + auto usend (std::make_shared (nano::dev::genesis->account (), receive->hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node0->work_generate_blocking (receive->hash ()))); + auto ureceive (std::make_shared (nano::dev::genesis->account (), usend->hash (), nano::dev::genesis->account (), nano::genesis_amount, usend->hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node0->work_generate_blocking (usend->hash ()))); + auto uchange (std::make_shared (nano::dev::genesis->account (), ureceive->hash (), nano::keypair ().pub, nano::genesis_amount, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node0->work_generate_blocking (ureceive->hash ()))); node0->process_active (usend); node0->process_active (ureceive); node0->process_active (uchange); @@ -1546,7 +1546,7 @@ TEST (rpc, process_subtype_send) auto [rpc, rpc_ctx] = add_rpc (system, node1); nano::keypair key; auto latest (node1->latest (nano::dev_genesis_key.pub)); - nano::state_block send (nano::genesis_account, latest, nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); + nano::state_block send (nano::dev::genesis->account (), latest, nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); boost::property_tree::ptree request; request.put ("action", "process"); std::string json; @@ -1572,7 +1572,7 @@ TEST (rpc, process_subtype_open) auto & node2 = *system.add_node (); nano::keypair key; auto latest (node1->latest (nano::dev_genesis_key.pub)); - auto send = std::make_shared (nano::genesis_account, latest, nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); + auto send = std::make_shared (nano::dev::genesis->account (), latest, nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); ASSERT_EQ (nano::process_result::progress, node1->process (*send).code); ASSERT_EQ (nano::process_result::progress, node2.process (*send).code); auto [rpc, rpc_ctx] = add_rpc (system, node1); @@ -1602,7 +1602,7 @@ TEST (rpc, process_subtype_receive) auto node1 = add_ipc_enabled_node (system); auto & node2 = *system.add_node (); auto latest (node1->latest (nano::dev_genesis_key.pub)); - auto send = std::make_shared (nano::genesis_account, latest, nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); + auto send = std::make_shared (nano::dev::genesis->account (), latest, nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); ASSERT_EQ (nano::process_result::progress, node1->process (*send).code); ASSERT_EQ (nano::process_result::progress, node2.process (*send).code); auto [rpc, rpc_ctx] = add_rpc (system, node1); @@ -1636,7 +1636,7 @@ TEST (rpc, process_ledger_insufficient_work) auto latest (node->latest (nano::dev_genesis_key.pub)); auto min_difficulty = node->network_params.network.publish_thresholds.entry; auto max_difficulty = node->network_params.network.publish_thresholds.epoch_1; - nano::state_block send (nano::genesis_account, latest, nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, system.work_generate_limited (latest, min_difficulty, max_difficulty)); + nano::state_block send (nano::dev::genesis->account (), latest, nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, system.work_generate_limited (latest, min_difficulty, max_difficulty)); ASSERT_LT (send.difficulty (), max_difficulty); ASSERT_GE (send.difficulty (), min_difficulty); boost::property_tree::ptree request; @@ -2478,11 +2478,11 @@ TEST (rpc, account_representative) auto node = add_ipc_enabled_node (system); auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; - request.put ("account", nano::genesis_account.to_account ()); + request.put ("account", nano::dev::genesis->account ().to_account ()); request.put ("action", "account_representative"); auto response (wait_response (system, rpc, request)); std::string account_text1 (response.get ("representative")); - ASSERT_EQ (account_text1, nano::genesis_account.to_account ()); + ASSERT_EQ (account_text1, nano::dev::genesis->account ().to_account ()); } TEST (rpc, account_representative_set) @@ -2493,7 +2493,7 @@ TEST (rpc, account_representative_set) auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; nano::keypair rep; - request.put ("account", nano::genesis_account.to_account ()); + request.put ("account", nano::dev::genesis->account ().to_account ()); request.put ("representative", rep.pub.to_account ()); request.put ("wallet", node->wallets.items.begin ()->first.to_string ()); request.put ("action", "account_representative_set"); @@ -2517,7 +2517,7 @@ TEST (rpc, account_representative_set_work_disabled) auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; nano::keypair rep; - request.put ("account", nano::genesis_account.to_account ()); + request.put ("account", nano::dev::genesis->account ().to_account ()); request.put ("representative", rep.pub.to_account ()); request.put ("wallet", node->wallets.items.begin ()->first.to_string ()); request.put ("action", "account_representative_set"); @@ -2569,7 +2569,7 @@ TEST (rpc, bootstrap) nano::system system1 (1); auto node1 = system1.nodes[0]; auto latest (node1->latest (nano::dev_genesis_key.pub)); - nano::send_block send (latest, nano::genesis_account, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); + nano::send_block send (latest, nano::dev::genesis->account (), 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); { auto transaction (node1->store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, node1->ledger.process (transaction, send).code); @@ -2585,7 +2585,7 @@ TEST (rpc, bootstrap) system0.poll (); } system1.deadline_set (10s); - while (node->latest (nano::genesis_account) != node1->latest (nano::genesis_account)) + while (node->latest (nano::dev::genesis->account ()) != node1->latest (nano::dev::genesis->account ())) { ASSERT_NO_ERROR (system0.poll ()); ASSERT_NO_ERROR (system1.poll ()); @@ -2624,7 +2624,7 @@ TEST (rpc, representatives) representatives.push_back (account); } ASSERT_EQ (1, representatives.size ()); - ASSERT_EQ (nano::genesis_account, representatives[0]); + ASSERT_EQ (nano::dev::genesis->account (), representatives[0]); } // wallet_seed is only available over IPC's unsafe encoding, and when running on test network @@ -2700,7 +2700,7 @@ TEST (rpc, wallet_frontiers) frontiers.push_back (nano::account (i->second.get (""))); } ASSERT_EQ (1, frontiers.size ()); - ASSERT_EQ (node->latest (nano::genesis_account), frontiers[0]); + ASSERT_EQ (node->latest (nano::dev::genesis->account ()), frontiers[0]); } TEST (rpc, work_validate) @@ -2848,7 +2848,7 @@ TEST (rpc, bootstrap_any) auto node = add_ipc_enabled_node (system0); nano::system system1 (1); auto latest (system1.nodes[0]->latest (nano::dev_genesis_key.pub)); - nano::send_block send (latest, nano::genesis_account, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system1.nodes[0]->work_generate_blocking (latest)); + nano::send_block send (latest, nano::dev::genesis->account (), 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system1.nodes[0]->work_generate_blocking (latest)); { auto transaction (system1.nodes[0]->store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, system1.nodes[0]->ledger.process (transaction, send).code); @@ -2985,7 +2985,7 @@ TEST (rpc, accounts_frontiers) std::string account_text (frontiers.first); ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), account_text); std::string frontier_text (frontiers.second.get ("")); - ASSERT_EQ (node->latest (nano::genesis_account), nano::block_hash{ frontier_text }); + ASSERT_EQ (node->latest (nano::dev::genesis->account ()), nano::block_hash{ frontier_text }); } } @@ -3093,14 +3093,14 @@ TEST (rpc, blocks) request.put ("action", "blocks"); boost::property_tree::ptree entry; boost::property_tree::ptree peers_l; - entry.put ("", node->latest (nano::genesis_account).to_string ()); + entry.put ("", node->latest (nano::dev::genesis->account ()).to_string ()); peers_l.push_back (std::make_pair ("", entry)); request.add_child ("hashes", peers_l); auto response (wait_response (system, rpc, request)); for (auto & blocks : response.get_child ("blocks")) { std::string hash_text (blocks.first); - ASSERT_EQ (node->latest (nano::genesis_account).to_string (), hash_text); + ASSERT_EQ (node->latest (nano::dev::genesis->account ()).to_string (), hash_text); std::string blocks_text (blocks.second.get ("")); ASSERT_FALSE (blocks_text.empty ()); } @@ -3203,7 +3203,7 @@ TEST (rpc, pending_exists) auto node = add_ipc_enabled_node (system); nano::keypair key1; system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - auto hash0 (node->latest (nano::genesis_account)); + auto hash0 (node->latest (nano::dev::genesis->account ())); auto block1 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key1.pub, 100)); node->scheduler.flush (); ASSERT_TIMELY (5s, !node->active.active (*block1)); @@ -3368,7 +3368,7 @@ TEST (rpc, work_get) std::string work_text (response.get ("work")); uint64_t work (1); auto transaction (node->wallets.tx_begin_read ()); - node->wallets.items.begin ()->second->store.work_get (transaction, nano::genesis_account, work); + node->wallets.items.begin ()->second->store.work_get (transaction, nano::dev::genesis->account (), work); ASSERT_EQ (nano::to_string_hex (work), work_text); } @@ -3390,7 +3390,7 @@ TEST (rpc, wallet_work_get) ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), account_text); std::string work_text (works.second.get ("")); uint64_t work (1); - node->wallets.items.begin ()->second->store.work_get (transaction, nano::genesis_account, work); + node->wallets.items.begin ()->second->store.work_get (transaction, nano::dev::genesis->account (), work); ASSERT_EQ (nano::to_string_hex (work), work_text); } } @@ -3412,7 +3412,7 @@ TEST (rpc, work_set) ASSERT_TRUE (success.empty ()); uint64_t work1 (1); auto transaction (node->wallets.tx_begin_read ()); - node->wallets.items.begin ()->second->store.work_get (transaction, nano::genesis_account, work1); + node->wallets.items.begin ()->second->store.work_get (transaction, nano::dev::genesis->account (), work1); ASSERT_EQ (work1, work0); } @@ -3775,7 +3775,7 @@ TEST (rpc, json_block_input) auto node1 = add_ipc_enabled_node (system); nano::keypair key; system.wallet (0)->insert_adhoc (key.prv); - nano::state_block send (nano::genesis_account, node1->latest (nano::dev_genesis_key.pub), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0); + nano::state_block send (nano::dev::genesis->account (), node1->latest (nano::dev_genesis_key.pub), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0); auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request; request.put ("action", "sign"); @@ -3829,7 +3829,7 @@ TEST (rpc, blocks_info) for (auto & blocks : response.get_child ("blocks")) { std::string hash_text (blocks.first); - ASSERT_EQ (node->latest (nano::genesis_account).to_string (), hash_text); + ASSERT_EQ (node->latest (nano::dev::genesis->account ()).to_string (), hash_text); std::string account_text (blocks.second.get ("block_account")); ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), account_text); std::string amount_text (blocks.second.get ("amount")); @@ -3851,7 +3851,7 @@ TEST (rpc, blocks_info) request.put ("action", "blocks_info"); boost::property_tree::ptree entry; boost::property_tree::ptree hashes; - entry.put ("", node->latest (nano::genesis_account).to_string ()); + entry.put ("", node->latest (nano::dev::genesis->account ()).to_string ()); hashes.push_back (std::make_pair ("", entry)); request.add_child ("hashes", hashes); { @@ -5222,7 +5222,7 @@ TEST (rpc, sign_hash) nano::system system; auto node1 = add_ipc_enabled_node (system); nano::keypair key; - nano::state_block send (nano::genesis_account, node1->latest (nano::dev_genesis_key.pub), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0); + nano::state_block send (nano::dev::genesis->account (), node1->latest (nano::dev_genesis_key.pub), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0); auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request; request.put ("action", "sign"); @@ -5245,7 +5245,7 @@ TEST (rpc, sign_block) auto node1 = add_ipc_enabled_node (system); nano::keypair key; system.wallet (0)->insert_adhoc (key.prv); - nano::state_block send (nano::genesis_account, node1->latest (nano::dev_genesis_key.pub), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0); + nano::state_block send (nano::dev::genesis->account (), node1->latest (nano::dev_genesis_key.pub), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0); auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request; request.put ("action", "sign"); @@ -5321,7 +5321,7 @@ TEST (rpc, block_confirmed) nano::send_block send1 (latest, key.pub, 300, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (latest)); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, send1).code); - nano::open_block open1 (send1.hash (), nano::genesis_account, key.pub, key.prv, key.pub, *system.work.generate (key.pub)); + nano::open_block open1 (send1.hash (), nano::dev::genesis->account (), key.pub, key.prv, key.pub, *system.work.generate (key.pub)); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, open1).code); } rpc_ctx->io_scope->renew (); diff --git a/nano/slow_test/node.cpp b/nano/slow_test/node.cpp index 4780ab28aa..e9492dfbce 100644 --- a/nano/slow_test/node.cpp +++ b/nano/slow_test/node.cpp @@ -648,7 +648,7 @@ TEST (confirmation_height, long_chains) // First open the other account nano::send_block send (latest, key1.pub, nano::genesis_amount - nano::Gxrb_ratio + num_blocks + 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (latest)); - nano::open_block open (send.hash (), nano::genesis_account, key1.pub, key1.prv, key1.pub, *system.work.generate (key1.pub)); + nano::open_block open (send.hash (), nano::dev::genesis->account (), key1.pub, key1.prv, key1.pub, *system.work.generate (key1.pub)); { auto transaction = node->store.tx_begin_write (); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, send).code); @@ -674,11 +674,11 @@ TEST (confirmation_height, long_chains) // Send one from destination to genesis and pocket it nano::send_block send1 (previous_destination_chain_hash, nano::dev_genesis_key.pub, nano::Gxrb_ratio - 2, key1.prv, key1.pub, *system.work.generate (previous_destination_chain_hash)); - auto receive1 (std::make_shared (nano::dev_genesis_key.pub, previous_genesis_chain_hash, nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio + 1, send1.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (previous_genesis_chain_hash))); + auto receive1 (std::make_shared (nano::dev_genesis_key.pub, previous_genesis_chain_hash, nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio + 1, send1.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (previous_genesis_chain_hash))); // Unpocketed. Send to a non-existing account to prevent auto receives from the wallet adjusting expected confirmation height nano::keypair key2; - nano::state_block send2 (nano::genesis_account, receive1->hash (), nano::genesis_account, nano::genesis_amount - nano::Gxrb_ratio, key2.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (receive1->hash ())); + nano::state_block send2 (nano::dev::genesis->account (), receive1->hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, key2.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (receive1->hash ())); { auto transaction = node->store.tx_begin_write (); diff --git a/nano/test_common/testutil.cpp b/nano/test_common/testutil.cpp index 1f5939913a..acc71493b6 100644 --- a/nano/test_common/testutil.cpp +++ b/nano/test_common/testutil.cpp @@ -18,7 +18,6 @@ nano::ledger_constants dev_constants (nano::networks::nano_dev_network); nano::keypair const & nano::zero_key (dev_constants.zero_key); nano::keypair const & nano::dev_genesis_key (dev_constants.dev_genesis_key); nano::account const & nano::nano_dev_account (dev_constants.nano_dev_account); -nano::account const & nano::genesis_account (dev_constants.genesis_account ()); nano::uint128_t const & nano::genesis_amount (dev_constants.genesis_amount); nano::account const & nano::burn_account (dev_constants.burn_account); diff --git a/nano/test_common/testutil.hpp b/nano/test_common/testutil.hpp index bf890b286b..b7876ef3ed 100644 --- a/nano/test_common/testutil.hpp +++ b/nano/test_common/testutil.hpp @@ -56,7 +56,6 @@ class system; extern nano::keypair const & zero_key; extern nano::keypair const & dev_genesis_key; extern nano::public_key const & nano_dev_account; -extern nano::public_key const & genesis_account; extern nano::public_key const & burn_account; extern nano::uint128_t const & genesis_amount; From dea9382b0779ac61d329b7fa3fd66a78092b7d88 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Tue, 20 Jul 2021 18:59:54 +0100 Subject: [PATCH 093/346] Removing unused variable. --- nano/test_common/testutil.cpp | 1 - nano/test_common/testutil.hpp | 1 - 2 files changed, 2 deletions(-) diff --git a/nano/test_common/testutil.cpp b/nano/test_common/testutil.cpp index acc71493b6..512763dce7 100644 --- a/nano/test_common/testutil.cpp +++ b/nano/test_common/testutil.cpp @@ -15,7 +15,6 @@ namespace nano::ledger_constants dev_constants (nano::networks::nano_dev_network); } -nano::keypair const & nano::zero_key (dev_constants.zero_key); nano::keypair const & nano::dev_genesis_key (dev_constants.dev_genesis_key); nano::account const & nano::nano_dev_account (dev_constants.nano_dev_account); nano::uint128_t const & nano::genesis_amount (dev_constants.genesis_amount); diff --git a/nano/test_common/testutil.hpp b/nano/test_common/testutil.hpp index b7876ef3ed..0f5f42284e 100644 --- a/nano/test_common/testutil.hpp +++ b/nano/test_common/testutil.hpp @@ -53,7 +53,6 @@ class telemetry_data; class network_params; class system; -extern nano::keypair const & zero_key; extern nano::keypair const & dev_genesis_key; extern nano::public_key const & nano_dev_account; extern nano::public_key const & burn_account; From 1016cfee9616d56fb8e0107fc263778c5aafe158 Mon Sep 17 00:00:00 2001 From: Zach Hyatt Date: Tue, 20 Jul 2021 13:00:09 -0500 Subject: [PATCH 094/346] Enable blank issue with preference noted for using pre-set templates (#3378) --- .github/ISSUE_TEMPLATE.md | 80 ++++--------------------------- .github/ISSUE_TEMPLATE/config.yml | 2 +- 2 files changed, 11 insertions(+), 71 deletions(-) diff --git a/.github/ISSUE_TEMPLATE.md b/.github/ISSUE_TEMPLATE.md index b85184a9ef..cfb468b5c3 100644 --- a/.github/ISSUE_TEMPLATE.md +++ b/.github/ISSUE_TEMPLATE.md @@ -1,79 +1,19 @@ - -**Description of bug:** - - - -**Steps to reproduce the issue:** -1. -2. -3. - -**Describe the results you received:** - - -**Describe the results you expected:** - - -**Additional information you deem important (e.g. issue happens only occasionally):** - -**Environment**: - - - -**logs** - - diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml index 101dd62ed8..09fd58f2ee 100644 --- a/.github/ISSUE_TEMPLATE/config.yml +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -1,4 +1,4 @@ -blank_issues_enabled: false +blank_issues_enabled: true contact_links: - name: Report a security vulnerability url: https://docs.nano.org/node-implementation/contributing/#security-vulnerability-disclosure From 8ff11c6c9ae5cda9582add4db8058b43d565f8e0 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Tue, 20 Jul 2021 19:03:39 +0100 Subject: [PATCH 095/346] Using burn_account constant in nano::dev namespace. --- nano/rpc_test/rpc.cpp | 2 +- nano/test_common/testutil.cpp | 1 - nano/test_common/testutil.hpp | 1 - 3 files changed, 1 insertion(+), 3 deletions(-) diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index 2a81df5490..15ec73580c 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -5127,7 +5127,7 @@ TEST (rpc, unopened_burn) system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); auto genesis (node->latest (nano::dev_genesis_key.pub)); ASSERT_FALSE (genesis.is_zero ()); - auto send (system.wallet (0)->send_action (nano::dev_genesis_key.pub, nano::burn_account, 1)); + auto send (system.wallet (0)->send_action (nano::dev_genesis_key.pub, nano::dev::constants.burn_account, 1)); ASSERT_NE (nullptr, send); auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; diff --git a/nano/test_common/testutil.cpp b/nano/test_common/testutil.cpp index 512763dce7..36838a9929 100644 --- a/nano/test_common/testutil.cpp +++ b/nano/test_common/testutil.cpp @@ -18,7 +18,6 @@ nano::ledger_constants dev_constants (nano::networks::nano_dev_network); nano::keypair const & nano::dev_genesis_key (dev_constants.dev_genesis_key); nano::account const & nano::nano_dev_account (dev_constants.nano_dev_account); nano::uint128_t const & nano::genesis_amount (dev_constants.genesis_amount); -nano::account const & nano::burn_account (dev_constants.burn_account); void nano::wait_peer_connections (nano::system & system_a) { diff --git a/nano/test_common/testutil.hpp b/nano/test_common/testutil.hpp index 0f5f42284e..9dc3b07ba8 100644 --- a/nano/test_common/testutil.hpp +++ b/nano/test_common/testutil.hpp @@ -55,7 +55,6 @@ class system; extern nano::keypair const & dev_genesis_key; extern nano::public_key const & nano_dev_account; -extern nano::public_key const & burn_account; extern nano::uint128_t const & genesis_amount; class stringstream_mt_sink : public boost::iostreams::sink From 12ce2bedc166441e10447d28faf4bfd1604d6d71 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Tue, 20 Jul 2021 19:43:41 +0100 Subject: [PATCH 096/346] Moving nano::dev_genesis_key to nano::dev::genesis_key to consolidate unit test related variables in a single place. --- nano/core_test/active_transactions.cpp | 268 ++++---- nano/core_test/block_store.cpp | 80 +-- nano/core_test/bootstrap.cpp | 336 +++++----- nano/core_test/confirmation_height.cpp | 200 +++--- nano/core_test/confirmation_solicitor.cpp | 14 +- nano/core_test/conflicts.cpp | 18 +- nano/core_test/election.cpp | 60 +- nano/core_test/election_scheduler.cpp | 44 +- nano/core_test/frontiers_confirmation.cpp | 48 +- nano/core_test/gap_cache.cpp | 12 +- nano/core_test/ledger.cpp | 630 +++++++++--------- nano/core_test/ledger_walker.cpp | 14 +- nano/core_test/network.cpp | 84 +-- nano/core_test/network_filter.cpp | 12 +- nano/core_test/node.cpp | 754 +++++++++++----------- nano/core_test/processor_service.cpp | 12 +- nano/core_test/request_aggregator.cpp | 84 +-- nano/core_test/system.cpp | 20 +- nano/core_test/telemetry.cpp | 12 +- nano/core_test/uint256_union.cpp | 4 +- nano/core_test/vote_processor.cpp | 60 +- nano/core_test/voting.cpp | 52 +- nano/core_test/wallet.cpp | 134 ++-- nano/core_test/wallets.cpp | 12 +- nano/core_test/websocket.cpp | 102 +-- nano/load_test/entry.cpp | 2 +- nano/nano_node/entry.cpp | 32 +- nano/qt_test/qt.cpp | 88 +-- nano/rpc_test/rpc.cpp | 754 +++++++++++----------- nano/secure/common.cpp | 2 +- nano/secure/common.hpp | 2 +- nano/slow_test/node.cpp | 140 ++-- nano/test_common/system.cpp | 10 +- nano/test_common/testutil.cpp | 1 - nano/test_common/testutil.hpp | 1 - 35 files changed, 2048 insertions(+), 2050 deletions(-) diff --git a/nano/core_test/active_transactions.cpp b/nano/core_test/active_transactions.cpp index d7cdd33a54..c2d7acf0da 100644 --- a/nano/core_test/active_transactions.cpp +++ b/nano/core_test/active_transactions.cpp @@ -22,7 +22,7 @@ TEST (active_transactions, confirm_active) .previous (genesis.hash ()) .destination (nano::public_key ()) .balance (nano::genesis_amount - 100) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, node1.process (*send).code); @@ -43,13 +43,13 @@ TEST (active_transactions, confirm_active) auto election = node2.active.election (send->qualified_root ()); ASSERT_NE (nullptr, election); // Add key to node1 - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); // Add representative to disabled rep crawler auto peers (node2.network.random_set (1)); ASSERT_FALSE (peers.empty ()); { nano::lock_guard guard (node2.rep_crawler.probable_reps_mutex); - node2.rep_crawler.probable_reps.emplace (nano::dev_genesis_key.pub, nano::genesis_amount, *peers.begin ()); + node2.rep_crawler.probable_reps.emplace (nano::dev::genesis_key.pub, nano::genesis_amount, *peers.begin ()); } ASSERT_TIMELY (5s, election->votes ().size () != 1); // Votes were inserted (except for not_an_account) auto confirm_req_count (election->confirmation_request_count.load ()); @@ -83,24 +83,24 @@ TEST (active_transactions, confirm_frontier) auto & node2 = *system.add_node (node_flags2); // Add key to node1 - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); // Add representative to disabled rep crawler auto peers (node2.network.random_set (1)); ASSERT_FALSE (peers.empty ()); { nano::lock_guard guard (node2.rep_crawler.probable_reps_mutex); - node2.rep_crawler.probable_reps.emplace (nano::dev_genesis_key.pub, nano::genesis_amount, *peers.begin ()); + node2.rep_crawler.probable_reps.emplace (nano::dev::genesis_key.pub, nano::genesis_amount, *peers.begin ()); } nano::genesis genesis; nano::state_block_builder builder; auto send = builder - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - 100) .link (nano::public_key ()) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); auto send_copy = builder.make_block ().from (*send).build_shared (); @@ -130,13 +130,13 @@ TEST (active_transactions, keep_local) nano::genesis genesis; //key 1/2 will be managed by the wallet nano::keypair key1, key2, key3, key4, key5, key6; - wallet.insert_adhoc (nano::dev_genesis_key.prv); - auto send1 (wallet.send_action (nano::dev_genesis_key.pub, key1.pub, node.config.receive_minimum.number ())); - auto send2 (wallet.send_action (nano::dev_genesis_key.pub, key2.pub, node.config.receive_minimum.number ())); - auto send3 (wallet.send_action (nano::dev_genesis_key.pub, key3.pub, node.config.receive_minimum.number ())); - auto send4 (wallet.send_action (nano::dev_genesis_key.pub, key4.pub, node.config.receive_minimum.number ())); - auto send5 (wallet.send_action (nano::dev_genesis_key.pub, key5.pub, node.config.receive_minimum.number ())); - auto send6 (wallet.send_action (nano::dev_genesis_key.pub, key6.pub, node.config.receive_minimum.number ())); + wallet.insert_adhoc (nano::dev::genesis_key.prv); + auto send1 (wallet.send_action (nano::dev::genesis_key.pub, key1.pub, node.config.receive_minimum.number ())); + auto send2 (wallet.send_action (nano::dev::genesis_key.pub, key2.pub, node.config.receive_minimum.number ())); + auto send3 (wallet.send_action (nano::dev::genesis_key.pub, key3.pub, node.config.receive_minimum.number ())); + auto send4 (wallet.send_action (nano::dev::genesis_key.pub, key4.pub, node.config.receive_minimum.number ())); + auto send5 (wallet.send_action (nano::dev::genesis_key.pub, key5.pub, node.config.receive_minimum.number ())); + auto send6 (wallet.send_action (nano::dev::genesis_key.pub, key6.pub, node.config.receive_minimum.number ())); // should not drop wallet created transactions ASSERT_TIMELY (5s, node.active.size () == 1); for (auto const & block : { send1, send2, send3, send4, send5, send6 }) @@ -188,16 +188,16 @@ TEST (active_transactions, inactive_votes_cache) { nano::system system (1); auto & node = *system.nodes[0]; - nano::block_hash latest (node.latest (nano::dev_genesis_key.pub)); + nano::block_hash latest (node.latest (nano::dev::genesis_key.pub)); nano::keypair key; auto send = nano::send_block_builder () .previous (latest) .destination (key.pub) .balance (nano::genesis_amount - 100) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (latest)) .build_shared (); - auto vote (std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, std::numeric_limits::max (), std::vector (1, send->hash ()))); + auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), std::vector (1, send->hash ()))); node.vote_processor.vote (vote, std::make_shared (node)); ASSERT_TIMELY (5s, node.active.inactive_votes_cache_size () == 1); node.process_active (send); @@ -210,16 +210,16 @@ TEST (active_transactions, inactive_votes_cache_non_final) { nano::system system (1); auto & node = *system.nodes[0]; - nano::block_hash latest (node.latest (nano::dev_genesis_key.pub)); + nano::block_hash latest (node.latest (nano::dev::genesis_key.pub)); nano::keypair key; auto send = nano::send_block_builder () .previous (latest) .destination (key.pub) .balance (nano::genesis_amount - 100) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (latest)) .build_shared (); - auto vote (std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, 0, std::vector (1, send->hash ()))); // Non-final vote + auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, std::vector (1, send->hash ()))); // Non-final vote node.vote_processor.vote (vote, std::make_shared (node)); ASSERT_TIMELY (5s, node.active.inactive_votes_cache_size () == 1); node.process_active (send); @@ -235,24 +235,24 @@ TEST (active_transactions, inactive_votes_cache_fork) { nano::system system (1); auto & node = *system.nodes[0]; - nano::block_hash latest (node.latest (nano::dev_genesis_key.pub)); + nano::block_hash latest (node.latest (nano::dev::genesis_key.pub)); nano::keypair key; nano::send_block_builder builder; auto send1 = builder.make_block () .previous (latest) .destination (key.pub) .balance (nano::genesis_amount - 100) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (latest)) .build_shared (); auto send2 = builder.make_block () .previous (latest) .destination (key.pub) .balance (nano::genesis_amount - 200) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (latest)) .build_shared (); - auto vote (std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, std::numeric_limits::max (), std::vector (1, send1->hash ()))); + auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), std::vector (1, send1->hash ()))); node.vote_processor.vote (vote, std::make_shared (node)); auto channel1 (node.network.udp_channels.create (node.network.endpoint ())); ASSERT_TIMELY (5s, node.active.inactive_votes_cache_size () == 1); @@ -279,14 +279,14 @@ TEST (active_transactions, inactive_votes_cache_existing_vote) nano::node_config node_config (nano::get_available_port (), system.logging); node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto & node = *system.add_node (node_config); - nano::block_hash latest (node.latest (nano::dev_genesis_key.pub)); + nano::block_hash latest (node.latest (nano::dev::genesis_key.pub)); nano::keypair key; nano::block_builder builder; auto send = builder.send () .previous (latest) .destination (key.pub) .balance (nano::genesis_amount - 100 * nano::Gxrb_ratio) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (latest)) .build_shared (); auto open = builder.state () @@ -336,21 +336,21 @@ TEST (active_transactions, inactive_votes_cache_multiple_votes) nano::node_config node_config (nano::get_available_port (), system.logging); node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto & node = *system.add_node (node_config); - nano::block_hash latest (node.latest (nano::dev_genesis_key.pub)); + nano::block_hash latest (node.latest (nano::dev::genesis_key.pub)); nano::keypair key1; nano::block_builder builder; auto send1 = builder.send () .previous (latest) .destination (key1.pub) .balance (nano::genesis_amount - 100 * nano::Gxrb_ratio) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (latest)) .build_shared (); auto send2 = builder.send () .previous (send1->hash ()) .destination (key1.pub) .balance (100 * nano::Gxrb_ratio) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send1->hash ())) .build_shared (); auto open = builder.state () @@ -369,11 +369,11 @@ TEST (active_transactions, inactive_votes_cache_multiple_votes) // Process votes auto vote1 (std::make_shared (key1.pub, key1.prv, 0, std::vector (1, send1->hash ()))); node.vote_processor.vote (vote1, std::make_shared (node)); - auto vote2 (std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, 0, std::vector (1, send1->hash ()))); + auto vote2 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, std::vector (1, send1->hash ()))); node.vote_processor.vote (vote2, std::make_shared (node)); ASSERT_TIMELY (5s, node.active.find_inactive_votes_cache (send1->hash ()).voters.size () == 2); ASSERT_EQ (1, node.active.inactive_votes_cache_size ()); - node.scheduler.activate (nano::dev_genesis_key.pub, node.store.tx_begin_read ()); + node.scheduler.activate (nano::dev::genesis_key.pub, node.store.tx_begin_read ()); node.scheduler.flush (); auto election = node.active.election (send1->qualified_root ()); ASSERT_NE (nullptr, election); @@ -387,7 +387,7 @@ TEST (active_transactions, inactive_votes_cache_election_start) nano::node_config node_config (nano::get_available_port (), system.logging); node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto & node = *system.add_node (node_config); - nano::block_hash latest (node.latest (nano::dev_genesis_key.pub)); + nano::block_hash latest (node.latest (nano::dev::genesis_key.pub)); nano::keypair key1, key2; nano::send_block_builder send_block_builder; nano::state_block_builder state_block_builder; @@ -395,14 +395,14 @@ TEST (active_transactions, inactive_votes_cache_election_start) .previous (latest) .destination (key1.pub) .balance (nano::genesis_amount - 5000 * nano::Gxrb_ratio) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (latest)) .build_shared (); auto send2 = send_block_builder.make_block () .previous (send1->hash ()) .destination (key2.pub) .balance (nano::genesis_amount - 10000 * nano::Gxrb_ratio) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send1->hash ())) .build_shared (); auto open1 = state_block_builder.make_block () @@ -436,14 +436,14 @@ TEST (active_transactions, inactive_votes_cache_election_start) .previous (send2->hash ()) .destination (nano::keypair ().pub) .balance (send2->balance ().number () - 1) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send2->hash ())) .build_shared (); auto send4 = send_block_builder.make_block () .previous (send3->hash ()) .destination (nano::keypair ().pub) .balance (send3->balance ().number () - 1) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send3->hash ())) .build_shared (); // Inactive votes @@ -459,7 +459,7 @@ TEST (active_transactions, inactive_votes_cache_election_start) // Only open1 & open2 blocks elections should start (send4 is missing previous block in ledger) ASSERT_TIMELY (5s, 2 == node.active.size ()); // Confirm elections with weight quorum - auto vote0 (std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, std::numeric_limits::max (), hashes)); // Final vote for confirmation + auto vote0 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), hashes)); // Final vote for confirmation node.vote_processor.vote (vote0, std::make_shared (node)); ASSERT_TIMELY (5s, node.active.empty ()); ASSERT_TIMELY (5s, 5 == node.ledger.cache.cemented_count); @@ -496,12 +496,12 @@ TEST (active_transactions, vote_replays) nano::keypair key; nano::state_block_builder builder; auto send1 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) .link (key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); ASSERT_NE (nullptr, send1); @@ -520,7 +520,7 @@ TEST (active_transactions, vote_replays) nano::blocks_confirm (node, { send1, open1 }); ASSERT_EQ (2, node.active.size ()); // First vote is not a replay and confirms the election, second vote should be a replay since the election has confirmed but not yet removed - auto vote_send1 (std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, std::numeric_limits::max (), send1)); + auto vote_send1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), send1)); ASSERT_EQ (nano::vote_code::vote, node.active.vote (vote_send1)); ASSERT_EQ (2, node.active.size ()); ASSERT_EQ (nano::vote_code::replay, node.active.vote (vote_send1)); @@ -528,7 +528,7 @@ TEST (active_transactions, vote_replays) ASSERT_TIMELY (3s, node.active.size () == 1); ASSERT_EQ (nano::vote_code::replay, node.active.vote (vote_send1)); // Open new account - auto vote_open1 (std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, std::numeric_limits::max (), open1)); + auto vote_open1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), open1)); ASSERT_EQ (nano::vote_code::vote, node.active.vote (vote_open1)); ASSERT_EQ (nano::vote_code::replay, node.active.vote (vote_open1)); ASSERT_TIMELY (3s, node.active.empty ()); @@ -548,7 +548,7 @@ TEST (active_transactions, vote_replays) node.process_active (send2); nano::blocks_confirm (node, { send2 }); ASSERT_EQ (1, node.active.size ()); - auto vote1_send2 (std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, std::numeric_limits::max (), send2)); + auto vote1_send2 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), send2)); auto vote2_send2 (std::make_shared (key.pub, key.prv, 0, send2)); ASSERT_EQ (nano::vote_code::vote, node.active.vote (vote2_send2)); ASSERT_EQ (1, node.active.size ()); @@ -650,12 +650,12 @@ TEST (active_transactions, republish_winner) nano::keypair key; nano::state_block_builder builder; auto send1 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) .link (key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); @@ -667,12 +667,12 @@ TEST (active_transactions, republish_winner) for (auto i (0); i < 5; i++) { auto fork = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - 1 - i) .link (key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); node1.process_active (fork); @@ -683,12 +683,12 @@ TEST (active_transactions, republish_winner) // Process new fork with vote to change winner auto fork = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - 2 * nano::Gxrb_ratio) .link (key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); @@ -696,7 +696,7 @@ TEST (active_transactions, republish_winner) node1.block_processor.flush (); auto election = node1.active.election (fork->qualified_root ()); ASSERT_NE (nullptr, election); - auto vote = std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, std::numeric_limits::max (), std::vector{ fork->hash () }); + auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), std::vector{ fork->hash () }); node1.vote_processor.vote (vote, std::make_shared (node1)); node1.vote_processor.flush (); node1.block_processor.flush (); @@ -716,12 +716,12 @@ TEST (active_transactions, fork_filter_cleanup) nano::keypair key; nano::state_block_builder builder; auto send1 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) .link (key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); std::vector block_bytes; @@ -734,12 +734,12 @@ TEST (active_transactions, fork_filter_cleanup) for (auto i (0); i < 10; i++) { auto fork = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - 1 - i) .link (key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); node1.process_active (fork); @@ -785,12 +785,12 @@ TEST (active_transactions, fork_replacement_tally) { balance -= amount + i; auto send = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (latest) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (balance) .link (keys[i].pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (latest)) .build_shared (); node1.process_active (send); @@ -806,7 +806,7 @@ TEST (active_transactions, fork_replacement_tally) .build_shared (); node1.process_active (open); // Confirmation - auto vote (std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, std::numeric_limits::max (), std::vector{ send->hash (), open->hash () })); + auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), std::vector{ send->hash (), open->hash () })); node1.vote_processor.vote (vote, std::make_shared (node1)); } node1.block_processor.flush (); @@ -814,12 +814,12 @@ TEST (active_transactions, fork_replacement_tally) nano::keypair key; auto send_last = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (latest) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (balance - 2 * nano::Gxrb_ratio) .link (key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (latest)) .build_shared (); @@ -827,12 +827,12 @@ TEST (active_transactions, fork_replacement_tally) for (auto i (0); i < reps_count; i++) { auto fork = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (latest) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (balance - nano::Gxrb_ratio - i) .link (key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (latest)) .build_shared (); node1.process_active (fork); @@ -848,12 +848,12 @@ TEST (active_transactions, fork_replacement_tally) for (auto i (0); i < reps_count; i++) { auto fork = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (latest) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (balance - 1 - i) .link (key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (latest)) .build_shared (); auto vote (std::make_shared (keys[i].pub, keys[i].prv, 0, std::vector{ fork->hash () })); @@ -886,7 +886,7 @@ TEST (active_transactions, fork_replacement_tally) ASSERT_FALSE (blocks1.find (send_last->hash ()) != blocks1.end ()); // Process vote for correct block & replace existing lowest tally block - auto vote (std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, 0, std::vector{ send_last->hash () })); + auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, std::vector{ send_last->hash () })); node1.vote_processor.vote (vote, std::make_shared (node1)); node1.vote_processor.flush (); node2.network.flood_block (send_last); @@ -905,7 +905,7 @@ TEST (active_transactions, fork_replacement_tally) } ASSERT_FALSE (votes2.find (keys[max_blocks].pub) != votes2.end ()); ASSERT_FALSE (votes2.find (keys[max_blocks + 1].pub) != votes2.end ()); - ASSERT_TRUE (votes2.find (nano::dev_genesis_key.pub) != votes2.end ()); + ASSERT_TRUE (votes2.find (nano::dev::genesis_key.pub) != votes2.end ()); } namespace nano @@ -917,15 +917,15 @@ TEST (active_transactions, confirmation_consistency) nano::node_config node_config (nano::get_available_port (), system.logging); node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto & node = *system.add_node (node_config); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); for (unsigned i = 0; i < 10; ++i) { - auto block (system.wallet (0)->send_action (nano::dev_genesis_key.pub, nano::public_key (), node.config.receive_minimum.number ())); + auto block (system.wallet (0)->send_action (nano::dev::genesis_key.pub, nano::public_key (), node.config.receive_minimum.number ())); ASSERT_NE (nullptr, block); system.deadline_set (5s); while (!node.ledger.block_confirmed (node.store.tx_begin_read (), block->hash ())) { - node.scheduler.activate (nano::dev_genesis_key.pub, node.store.tx_begin_read ()); + node.scheduler.activate (nano::dev::genesis_key.pub, node.store.tx_begin_read ()); ASSERT_NO_ERROR (system.poll (5ms)); } ASSERT_NO_ERROR (system.poll_until_true (1s, [&node, &block, i] { @@ -947,7 +947,7 @@ TEST (active_transactions, confirm_new) .previous (genesis.hash ()) .destination (nano::public_key ()) .balance (nano::genesis_amount - 100) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); node1.process_active (send); @@ -956,7 +956,7 @@ TEST (active_transactions, confirm_new) ASSERT_EQ (1, node1.active.size ()); auto & node2 = *system.add_node (); // Add key to node2 - system.wallet (1)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (1)->insert_adhoc (nano::dev::genesis_key.prv); // Let node2 know about the block ASSERT_TIMELY (5s, node2.block (send->hash ())); // Wait confirmation @@ -974,24 +974,24 @@ TEST (active_transactions, conflicting_block_vote_existing_election) nano::keypair key; nano::state_block_builder builder; auto send = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - 100) .link (key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); auto fork = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - 200) .link (key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); - auto vote_fork (std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, std::numeric_limits::max (), fork)); + auto vote_fork (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), fork)); ASSERT_EQ (nano::process_result::progress, node.process_local (send).code); node.scheduler.flush (); @@ -1020,30 +1020,30 @@ TEST (active_transactions, activate_account_chain) nano::keypair key; nano::state_block_builder builder; auto send = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) - .representative (nano::dev_genesis_key.pub) - .link (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) + .link (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - 1) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build (); auto send2 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (send->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .link (key.pub) .balance (nano::genesis_amount - 2) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send->hash ())) .build (); auto send3 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (send2->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .link (key.pub) .balance (nano::genesis_amount - 3) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send2->hash ())) .build (); auto open = builder.make_block () @@ -1070,19 +1070,19 @@ TEST (active_transactions, activate_account_chain) ASSERT_EQ (nano::process_result::progress, node.process (*open).code); ASSERT_EQ (nano::process_result::progress, node.process (*receive).code); - node.scheduler.activate (nano::dev_genesis_key.pub, node.store.tx_begin_read ()); + node.scheduler.activate (nano::dev::genesis_key.pub, node.store.tx_begin_read ()); node.scheduler.flush (); auto election1 = node.active.election (send->qualified_root ()); ASSERT_EQ (1, node.active.size ()); ASSERT_EQ (1, election1->blocks ().count (send->hash ())); - node.scheduler.activate (nano::dev_genesis_key.pub, node.store.tx_begin_read ()); + node.scheduler.activate (nano::dev::genesis_key.pub, node.store.tx_begin_read ()); auto election2 = node.active.election (send->qualified_root ()); ASSERT_EQ (election2, election1); election1->force_confirm (); ASSERT_TIMELY (3s, node.block_confirmed (send->hash ())); // On cementing, the next election is started ASSERT_TIMELY (3s, node.active.active (send2->qualified_root ())); - node.scheduler.activate (nano::dev_genesis_key.pub, node.store.tx_begin_read ()); + node.scheduler.activate (nano::dev::genesis_key.pub, node.store.tx_begin_read ()); auto election3 = node.active.election (send2->qualified_root ()); ASSERT_NE (nullptr, election3); ASSERT_EQ (1, election3->blocks ().count (send2->hash ())); @@ -1091,7 +1091,7 @@ TEST (active_transactions, activate_account_chain) // On cementing, the next election is started ASSERT_TIMELY (3s, node.active.active (open->qualified_root ())); ASSERT_TIMELY (3s, node.active.active (send3->qualified_root ())); - node.scheduler.activate (nano::dev_genesis_key.pub, node.store.tx_begin_read ()); + node.scheduler.activate (nano::dev::genesis_key.pub, node.store.tx_begin_read ()); auto election4 = node.active.election (send3->qualified_root ()); ASSERT_NE (nullptr, election4); ASSERT_EQ (1, election4->blocks ().count (send3->hash ())); @@ -1120,21 +1120,21 @@ TEST (active_transactions, activate_inactive) nano::keypair key; nano::state_block_builder builder; auto send = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .link (key.pub) .balance (nano::genesis_amount - 1) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); auto send2 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (send->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .link (nano::keypair ().pub) .balance (nano::genesis_amount - 2) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send->hash ())) .build_shared (); auto open = builder.make_block () @@ -1181,24 +1181,24 @@ TEST (active_transactions, pessimistic_elections) nano::keypair key; nano::state_block_builder builder; auto send = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) - .representative (nano::dev_genesis_key.pub) - .link (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) + .link (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - 1) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, node.process (*send).code); auto send2 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (send->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .link (key.pub) .balance (nano::genesis_amount - 2) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send->hash ())) .build (); @@ -1320,24 +1320,24 @@ TEST (active_transactions, list_active) nano::keypair key; nano::state_block_builder builder; auto send = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) - .representative (nano::dev_genesis_key.pub) - .link (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) + .link (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - 1) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, node.process (*send).code); auto send2 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (send->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .link (key.pub) .balance (nano::genesis_amount - 2) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send->hash ())) .build_shared (); @@ -1375,12 +1375,12 @@ TEST (active_transactions, vacancy) auto & node = *system.add_node (config); nano::state_block_builder builder; auto send = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) - .representative (nano::dev_genesis_key.pub) - .link (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) + .link (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); std::atomic updated = false; @@ -1388,7 +1388,7 @@ TEST (active_transactions, vacancy) ASSERT_EQ (nano::process_result::progress, node.process (*send).code); ASSERT_EQ (1, node.active.vacancy ()); ASSERT_EQ (0, node.active.size ()); - node.scheduler.activate (nano::dev_genesis_key.pub, node.store.tx_begin_read ()); + node.scheduler.activate (nano::dev::genesis_key.pub, node.store.tx_begin_read ()); ASSERT_TIMELY (1s, updated); updated = false; ASSERT_EQ (0, node.active.vacancy ()); @@ -1413,12 +1413,12 @@ TEST (active_transactions, fifo) nano::state_block_builder builder; // Construct two pending entries that can be received simultaneously auto send0 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .link (key0.pub) .balance (nano::genesis_amount - 1) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, node.process (*send0).code); @@ -1426,12 +1426,12 @@ TEST (active_transactions, fifo) ASSERT_TIMELY (1s, node.block_confirmed (send0->hash ())); ASSERT_TIMELY (1s, node.active.empty ()); auto send1 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (send0->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .link (key1.pub) .balance (nano::genesis_amount - 2) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send0->hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, node.process (*send1).code); @@ -1442,7 +1442,7 @@ TEST (active_transactions, fifo) auto receive0 = builder.make_block () .account (key0.pub) .previous (0) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .link (send0->hash ()) .balance (1) .sign (key0.prv, key0.pub) @@ -1452,7 +1452,7 @@ TEST (active_transactions, fifo) auto receive1 = builder.make_block () .account (key1.pub) .previous (0) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .link (send1->hash ()) .balance (1) .sign (key1.prv, key1.pub) diff --git a/nano/core_test/block_store.cpp b/nano/core_test/block_store.cpp index 0897a2550d..bf68e4d18f 100644 --- a/nano/core_test/block_store.cpp +++ b/nano/core_test/block_store.cpp @@ -343,10 +343,10 @@ TEST (block_store, genesis) ASSERT_FALSE (store->confirmation_height.get (transaction, nano::dev::genesis->account (), confirmation_height_info)); ASSERT_EQ (confirmation_height_info.height, 1); ASSERT_EQ (confirmation_height_info.frontier, hash); - auto dev_pub_text (nano::dev_genesis_key.pub.to_string ()); - auto dev_pub_account (nano::dev_genesis_key.pub.to_account ()); - auto dev_prv_text (nano::dev_genesis_key.prv.to_string ()); - ASSERT_EQ (nano::dev::genesis->account (), nano::dev_genesis_key.pub); + auto dev_pub_text (nano::dev::genesis_key.pub.to_string ()); + auto dev_pub_account (nano::dev::genesis_key.pub.to_account ()); + auto dev_prv_text (nano::dev::genesis_key.prv.to_string ()); + ASSERT_EQ (nano::dev::genesis->account (), nano::dev::genesis_key.pub); } TEST (bootstrap, simple) @@ -932,8 +932,8 @@ TEST (block_store, DISABLED_change_dupsort) // Unchecked is no longer dupsort ta auto transaction (store.tx_begin_write ()); ASSERT_EQ (0, mdb_drop (store.env.tx (transaction), store.unchecked_handle, 1)); ASSERT_EQ (0, mdb_dbi_open (store.env.tx (transaction), "unchecked", MDB_CREATE, &store.unchecked_handle)); - auto send1 (std::make_shared (0, 0, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); - auto send2 (std::make_shared (1, 0, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); + auto send1 (std::make_shared (0, 0, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); + auto send2 (std::make_shared (1, 0, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); ASSERT_NE (send1->hash (), send2->hash ()); store.unchecked.put (transaction, send1->hash (), send1); store.unchecked.put (transaction, send1->hash (), send2); @@ -1016,29 +1016,29 @@ TEST (mdb_block_store, sideband_height) auto transaction (store.tx_begin_write ()); store.initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::send_block send (genesis.hash (), nano::dev_genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block send (genesis.hash (), nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); - nano::receive_block receive (send.hash (), send.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send.hash ())); + nano::receive_block receive (send.hash (), send.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive).code); - nano::change_block change (receive.hash (), 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (receive.hash ())); + nano::change_block change (receive.hash (), 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (receive.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, change).code); - nano::state_block state_send1 (nano::dev_genesis_key.pub, change.hash (), 0, nano::genesis_amount - nano::Gxrb_ratio, key1.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (change.hash ())); + nano::state_block state_send1 (nano::dev::genesis_key.pub, change.hash (), 0, nano::genesis_amount - nano::Gxrb_ratio, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (change.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, state_send1).code); - nano::state_block state_send2 (nano::dev_genesis_key.pub, state_send1.hash (), 0, nano::genesis_amount - 2 * nano::Gxrb_ratio, key2.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (state_send1.hash ())); + nano::state_block state_send2 (nano::dev::genesis_key.pub, state_send1.hash (), 0, nano::genesis_amount - 2 * nano::Gxrb_ratio, key2.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, state_send2).code); - nano::state_block state_send3 (nano::dev_genesis_key.pub, state_send2.hash (), 0, nano::genesis_amount - 3 * nano::Gxrb_ratio, key3.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (state_send2.hash ())); + nano::state_block state_send3 (nano::dev::genesis_key.pub, state_send2.hash (), 0, nano::genesis_amount - 3 * nano::Gxrb_ratio, key3.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_send2.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, state_send3).code); nano::state_block state_open (key1.pub, 0, 0, nano::Gxrb_ratio, state_send1.hash (), key1.prv, key1.pub, *pool.generate (key1.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, state_open).code); - nano::state_block epoch (key1.pub, state_open.hash (), 0, nano::Gxrb_ratio, ledger.epoch_link (nano::epoch::epoch_1), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (state_open.hash ())); + nano::state_block epoch (key1.pub, state_open.hash (), 0, nano::Gxrb_ratio, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_open.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch).code); ASSERT_EQ (nano::epoch::epoch_1, store.block.version (transaction, epoch.hash ())); - nano::state_block epoch_open (key2.pub, 0, 0, 0, ledger.epoch_link (nano::epoch::epoch_1), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (key2.pub)); + nano::state_block epoch_open (key2.pub, 0, 0, 0, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (key2.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch_open).code); ASSERT_EQ (nano::epoch::epoch_1, store.block.version (transaction, epoch_open.hash ())); nano::state_block state_receive (key2.pub, epoch_open.hash (), 0, nano::Gxrb_ratio, state_send2.hash (), key2.prv, key2.pub, *pool.generate (epoch_open.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, state_receive).code); - nano::open_block open (state_send3.hash (), nano::dev_genesis_key.pub, key3.pub, key3.prv, key3.pub, *pool.generate (key3.pub)); + nano::open_block open (state_send3.hash (), nano::dev::genesis_key.pub, key3.pub, key3.prv, key3.pub, *pool.generate (key3.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open).code); auto block1 (store.block.get (transaction, genesis.hash ())); ASSERT_EQ (block1->sideband ().height, 1); @@ -1274,9 +1274,9 @@ TEST (mdb_block_store, upgrade_v14_v15) nano::genesis genesis; nano::network_params network_params; nano::work_pool pool (std::numeric_limits::max ()); - nano::send_block send (genesis.hash (), nano::dev_genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); - nano::state_block epoch (nano::dev_genesis_key.pub, send.hash (), nano::dev_genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, network_params.ledger.epochs.link (nano::epoch::epoch_1), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send.hash ())); - nano::state_block state_send (nano::dev_genesis_key.pub, epoch.hash (), nano::dev_genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (epoch.hash ())); + nano::send_block send (genesis.hash (), nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block epoch (nano::dev::genesis_key.pub, send.hash (), nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, network_params.ledger.epochs.link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send.hash ())); + nano::state_block state_send (nano::dev::genesis_key.pub, epoch.hash (), nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch.hash ())); { nano::logger_mt logger; nano::mdb_store store (logger, path); @@ -1317,8 +1317,8 @@ TEST (mdb_block_store, upgrade_v14_v15) store.block.del (transaction, epoch.hash ()); // Turn pending into v14 - ASSERT_FALSE (mdb_put (store.env.tx (transaction), store.pending_v0_handle, nano::mdb_val (nano::pending_key (nano::dev_genesis_key.pub, send.hash ())), nano::mdb_val (nano::pending_info_v14 (nano::dev::genesis->account (), nano::Gxrb_ratio, nano::epoch::epoch_0)), 0)); - ASSERT_FALSE (mdb_put (store.env.tx (transaction), store.pending_v1_handle, nano::mdb_val (nano::pending_key (nano::dev_genesis_key.pub, state_send.hash ())), nano::mdb_val (nano::pending_info_v14 (nano::dev::genesis->account (), nano::Gxrb_ratio, nano::epoch::epoch_1)), 0)); + ASSERT_FALSE (mdb_put (store.env.tx (transaction), store.pending_v0_handle, nano::mdb_val (nano::pending_key (nano::dev::genesis_key.pub, send.hash ())), nano::mdb_val (nano::pending_info_v14 (nano::dev::genesis->account (), nano::Gxrb_ratio, nano::epoch::epoch_0)), 0)); + ASSERT_FALSE (mdb_put (store.env.tx (transaction), store.pending_v1_handle, nano::mdb_val (nano::pending_key (nano::dev::genesis_key.pub, state_send.hash ())), nano::mdb_val (nano::pending_info_v14 (nano::dev::genesis->account (), nano::Gxrb_ratio, nano::epoch::epoch_1)), 0)); // This should fail as sizes are no longer correct for account_info nano::mdb_val value; @@ -1352,7 +1352,7 @@ TEST (mdb_block_store, upgrade_v14_v15) // accounts_v1, state_blocks_v1 & pending_v1 tables should be deleted auto error_get_accounts_v1 (mdb_get (store.env.tx (transaction), store.accounts_v1_handle, nano::mdb_val (nano::dev::genesis->account ()), value)); ASSERT_NE (error_get_accounts_v1, MDB_SUCCESS); - auto error_get_pending_v1 (mdb_get (store.env.tx (transaction), store.pending_v1_handle, nano::mdb_val (nano::pending_key (nano::dev_genesis_key.pub, state_send.hash ())), value)); + auto error_get_pending_v1 (mdb_get (store.env.tx (transaction), store.pending_v1_handle, nano::mdb_val (nano::pending_key (nano::dev::genesis_key.pub, state_send.hash ())), value)); ASSERT_NE (error_get_pending_v1, MDB_SUCCESS); auto error_get_state_v1 (mdb_get (store.env.tx (transaction), store.state_blocks_v1_handle, nano::mdb_val (state_send.hash ()), value)); ASSERT_NE (error_get_state_v1, MDB_SUCCESS); @@ -1366,9 +1366,9 @@ TEST (mdb_block_store, upgrade_v14_v15) ASSERT_EQ (block->sideband ().details.epoch, nano::epoch::epoch_0); ASSERT_EQ (info.epoch (), nano::epoch::epoch_1); nano::pending_info pending_info; - store.pending.get (transaction, nano::pending_key (nano::dev_genesis_key.pub, send.hash ()), pending_info); + store.pending.get (transaction, nano::pending_key (nano::dev::genesis_key.pub, send.hash ()), pending_info); ASSERT_EQ (pending_info.epoch, nano::epoch::epoch_0); - store.pending.get (transaction, nano::pending_key (nano::dev_genesis_key.pub, state_send.hash ()), pending_info); + store.pending.get (transaction, nano::pending_key (nano::dev::genesis_key.pub, state_send.hash ()), pending_info); ASSERT_EQ (pending_info.epoch, nano::epoch::epoch_1); // Version should be correct @@ -1430,9 +1430,9 @@ TEST (mdb_block_store, upgrade_v16_v17) } nano::genesis genesis; nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block block1 (nano::dev_genesis_key.pub, genesis.hash (), nano::dev_genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); - nano::state_block block2 (nano::dev_genesis_key.pub, block1.hash (), nano::dev_genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio - 1, nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (block1.hash ())); - nano::state_block block3 (nano::dev_genesis_key.pub, block2.hash (), nano::dev_genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio - 2, nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (block2.hash ())); + nano::state_block block1 (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block block2 (nano::dev::genesis_key.pub, block1.hash (), nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio - 1, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (block1.hash ())); + nano::state_block block3 (nano::dev::genesis_key.pub, block2.hash (), nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio - 2, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (block2.hash ())); auto code = [&block1, &block2, &block3] (auto confirmation_height, nano::block_hash const & expected_cemented_frontier) { auto path (nano::unique_path ()); @@ -1499,16 +1499,16 @@ TEST (mdb_block_store, upgrade_v17_v18) nano::keypair key3; nano::network_params network_params; nano::work_pool pool (std::numeric_limits::max ()); - nano::send_block send_zero (genesis.hash (), nano::dev_genesis_key.pub, nano::genesis_amount, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); - nano::state_block state_receive_zero (nano::dev_genesis_key.pub, send_zero.hash (), nano::dev_genesis_key.pub, nano::genesis_amount, send_zero.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send_zero.hash ())); - nano::state_block epoch (nano::dev_genesis_key.pub, state_receive_zero.hash (), nano::dev_genesis_key.pub, nano::genesis_amount, network_params.ledger.epochs.link (nano::epoch::epoch_1), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (state_receive_zero.hash ())); - nano::state_block state_send (nano::dev_genesis_key.pub, epoch.hash (), nano::dev_genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (epoch.hash ())); - nano::state_block state_receive (nano::dev_genesis_key.pub, state_send.hash (), nano::dev_genesis_key.pub, nano::genesis_amount, state_send.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (state_send.hash ())); - nano::state_block state_change (nano::dev_genesis_key.pub, state_receive.hash (), nano::dev_genesis_key.pub, nano::genesis_amount, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (state_receive.hash ())); - nano::state_block state_send_change (nano::dev_genesis_key.pub, state_change.hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio, key1.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (state_change.hash ())); - nano::state_block epoch_first (key1.pub, 0, 0, 0, network_params.ledger.epochs.link (nano::epoch::epoch_2), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (key1.pub)); + nano::send_block send_zero (genesis.hash (), nano::dev::genesis_key.pub, nano::genesis_amount, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block state_receive_zero (nano::dev::genesis_key.pub, send_zero.hash (), nano::dev::genesis_key.pub, nano::genesis_amount, send_zero.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send_zero.hash ())); + nano::state_block epoch (nano::dev::genesis_key.pub, state_receive_zero.hash (), nano::dev::genesis_key.pub, nano::genesis_amount, network_params.ledger.epochs.link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_receive_zero.hash ())); + nano::state_block state_send (nano::dev::genesis_key.pub, epoch.hash (), nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch.hash ())); + nano::state_block state_receive (nano::dev::genesis_key.pub, state_send.hash (), nano::dev::genesis_key.pub, nano::genesis_amount, state_send.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_send.hash ())); + nano::state_block state_change (nano::dev::genesis_key.pub, state_receive.hash (), nano::dev::genesis_key.pub, nano::genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_receive.hash ())); + nano::state_block state_send_change (nano::dev::genesis_key.pub, state_change.hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_change.hash ())); + nano::state_block epoch_first (key1.pub, 0, 0, 0, network_params.ledger.epochs.link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (key1.pub)); nano::state_block state_receive2 (key1.pub, epoch_first.hash (), key1.pub, nano::Gxrb_ratio, state_send_change.hash (), key1.prv, key1.pub, *pool.generate (epoch_first.hash ())); - nano::state_block state_send2 (nano::dev_genesis_key.pub, state_send_change.hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio * 2, key2.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (state_send_change.hash ())); + nano::state_block state_send2 (nano::dev::genesis_key.pub, state_send_change.hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio * 2, key2.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_send_change.hash ())); nano::state_block state_open (key2.pub, 0, key2.pub, nano::Gxrb_ratio, state_send2.hash (), key2.prv, key2.pub, *pool.generate (key2.pub)); nano::state_block state_send_epoch_link (key2.pub, state_open.hash (), key2.pub, 0, network_params.ledger.epochs.link (nano::epoch::epoch_2), key2.prv, key2.pub, *pool.generate (state_open.hash ())); { @@ -1700,11 +1700,11 @@ TEST (mdb_block_store, upgrade_v18_v19) nano::keypair key1; nano::work_pool pool (std::numeric_limits::max ()); nano::network_params network_params; - nano::send_block send (nano::dev::genesis->hash (), nano::dev_genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); - nano::receive_block receive (send.hash (), send.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send.hash ())); - nano::change_block change (receive.hash (), 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (receive.hash ())); - nano::state_block state_epoch (nano::dev_genesis_key.pub, change.hash (), 0, nano::genesis_amount, network_params.ledger.epochs.link (nano::epoch::epoch_1), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (change.hash ())); - nano::state_block state_send (nano::dev_genesis_key.pub, state_epoch.hash (), 0, nano::genesis_amount - nano::Gxrb_ratio, key1.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (state_epoch.hash ())); + nano::send_block send (nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::receive_block receive (send.hash (), send.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send.hash ())); + nano::change_block change (receive.hash (), 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (receive.hash ())); + nano::state_block state_epoch (nano::dev::genesis_key.pub, change.hash (), 0, nano::genesis_amount, network_params.ledger.epochs.link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (change.hash ())); + nano::state_block state_send (nano::dev::genesis_key.pub, state_epoch.hash (), 0, nano::genesis_amount - nano::Gxrb_ratio, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_epoch.hash ())); nano::state_block state_open (key1.pub, 0, 0, nano::Gxrb_ratio, state_send.hash (), key1.prv, key1.pub, *pool.generate (key1.pub)); { diff --git a/nano/core_test/bootstrap.cpp b/nano/core_test/bootstrap.cpp index ef13cba3e3..1727864619 100644 --- a/nano/core_test/bootstrap.cpp +++ b/nano/core_test/bootstrap.cpp @@ -26,11 +26,11 @@ TEST (bulk_pull, genesis_to_end) nano::system system (1); auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); auto req = std::make_unique (); - req->start = nano::dev_genesis_key.pub; + req->start = nano::dev::genesis_key.pub; req->end.clear (); connection->requests.push (std::unique_ptr{}); auto request (std::make_shared (connection, std::move (req))); - ASSERT_EQ (system.nodes[0]->latest (nano::dev_genesis_key.pub), request->current); + ASSERT_EQ (system.nodes[0]->latest (nano::dev::genesis_key.pub), request->current); ASSERT_EQ (request->request->end, request->request->end); } @@ -40,11 +40,11 @@ TEST (bulk_pull, no_end) nano::system system (1); auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); auto req = std::make_unique (); - req->start = nano::dev_genesis_key.pub; + req->start = nano::dev::genesis_key.pub; req->end = 1; connection->requests.push (std::unique_ptr{}); auto request (std::make_shared (connection, std::move (req))); - ASSERT_EQ (system.nodes[0]->latest (nano::dev_genesis_key.pub), request->current); + ASSERT_EQ (system.nodes[0]->latest (nano::dev::genesis_key.pub), request->current); ASSERT_TRUE (request->request->end.is_zero ()); } @@ -52,9 +52,9 @@ TEST (bulk_pull, end_not_owned) { nano::system system (1); nano::keypair key2; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - ASSERT_NE (nullptr, system.wallet (0)->send_action (nano::dev_genesis_key.pub, key2.pub, 100)); - nano::block_hash latest (system.nodes[0]->latest (nano::dev_genesis_key.pub)); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); + ASSERT_NE (nullptr, system.wallet (0)->send_action (nano::dev::genesis_key.pub, key2.pub, 100)); + nano::block_hash latest (system.nodes[0]->latest (nano::dev::genesis_key.pub)); nano::open_block open (0, 1, 2, nano::keypair ().prv, 4, 5); open.hashables.account = key2.pub; open.hashables.representative = key2.pub; @@ -79,7 +79,7 @@ TEST (bulk_pull, none) auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); nano::genesis genesis; auto req = std::make_unique (); - req->start = nano::dev_genesis_key.pub; + req->start = nano::dev::genesis_key.pub; req->end = genesis.hash (); connection->requests.push (std::unique_ptr{}); auto request (std::make_shared (connection, std::move (req))); @@ -92,7 +92,7 @@ TEST (bulk_pull, get_next_on_open) nano::system system (1); auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); auto req = std::make_unique (); - req->start = nano::dev_genesis_key.pub; + req->start = nano::dev::genesis_key.pub; req->end.clear (); connection->requests.push (std::unique_ptr{}); auto request (std::make_shared (connection, std::move (req))); @@ -145,9 +145,9 @@ TEST (bulk_pull, count_limit) auto node0 (system.nodes[0]); nano::genesis genesis; - auto send1 (std::make_shared (node0->latest (nano::dev_genesis_key.pub), nano::dev_genesis_key.pub, 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (node0->latest (nano::dev_genesis_key.pub)))); + auto send1 (std::make_shared (node0->latest (nano::dev::genesis_key.pub), nano::dev::genesis_key.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (node0->latest (nano::dev::genesis_key.pub)))); ASSERT_EQ (nano::process_result::progress, node0->process (*send1).code); - auto receive1 (std::make_shared (send1->hash (), send1->hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send1->hash ()))); + auto receive1 (std::make_shared (send1->hash (), send1->hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1->hash ()))); ASSERT_EQ (nano::process_result::progress, node0->process (*receive1).code); auto connection (std::make_shared (std::make_shared (*node0), node0)); @@ -196,19 +196,19 @@ TEST (bootstrap_processor, process_one) nano::node_flags node_flags; node_flags.disable_bootstrap_bulk_push_client = true; auto node0 = system.add_node (node_config, node_flags); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - auto send (system.wallet (0)->send_action (nano::dev_genesis_key.pub, nano::dev_genesis_key.pub, 100)); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); + auto send (system.wallet (0)->send_action (nano::dev::genesis_key.pub, nano::dev::genesis_key.pub, 100)); ASSERT_NE (nullptr, send); node_config.peering_port = nano::get_available_port (); node_flags.disable_rep_crawler = true; auto node1 (std::make_shared (system.io_ctx, nano::unique_path (), node_config, system.work, node_flags)); - nano::block_hash hash1 (node0->latest (nano::dev_genesis_key.pub)); - nano::block_hash hash2 (node1->latest (nano::dev_genesis_key.pub)); + nano::block_hash hash1 (node0->latest (nano::dev::genesis_key.pub)); + nano::block_hash hash2 (node1->latest (nano::dev::genesis_key.pub)); ASSERT_NE (hash1, hash2); node1->bootstrap_initiator.bootstrap (node0->network.endpoint (), false); - ASSERT_NE (node1->latest (nano::dev_genesis_key.pub), node0->latest (nano::dev_genesis_key.pub)); - ASSERT_TIMELY (10s, node1->latest (nano::dev_genesis_key.pub) == node0->latest (nano::dev_genesis_key.pub)); + ASSERT_NE (node1->latest (nano::dev::genesis_key.pub), node0->latest (nano::dev::genesis_key.pub)); + ASSERT_TIMELY (10s, node1->latest (nano::dev::genesis_key.pub) == node0->latest (nano::dev::genesis_key.pub)); ASSERT_EQ (0, node1->active.size ()); node1->stop (); } @@ -221,12 +221,12 @@ TEST (bootstrap_processor, process_two) nano::node_flags node_flags; node_flags.disable_bootstrap_bulk_push_client = true; auto node0 (system.add_node (config, node_flags)); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - nano::block_hash hash1 (node0->latest (nano::dev_genesis_key.pub)); - ASSERT_NE (nullptr, system.wallet (0)->send_action (nano::dev_genesis_key.pub, nano::dev_genesis_key.pub, 50)); - nano::block_hash hash2 (node0->latest (nano::dev_genesis_key.pub)); - ASSERT_NE (nullptr, system.wallet (0)->send_action (nano::dev_genesis_key.pub, nano::dev_genesis_key.pub, 50)); - nano::block_hash hash3 (node0->latest (nano::dev_genesis_key.pub)); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); + nano::block_hash hash1 (node0->latest (nano::dev::genesis_key.pub)); + ASSERT_NE (nullptr, system.wallet (0)->send_action (nano::dev::genesis_key.pub, nano::dev::genesis_key.pub, 50)); + nano::block_hash hash2 (node0->latest (nano::dev::genesis_key.pub)); + ASSERT_NE (nullptr, system.wallet (0)->send_action (nano::dev::genesis_key.pub, nano::dev::genesis_key.pub, 50)); + nano::block_hash hash3 (node0->latest (nano::dev::genesis_key.pub)); ASSERT_NE (hash1, hash2); ASSERT_NE (hash1, hash3); ASSERT_NE (hash2, hash3); @@ -234,8 +234,8 @@ TEST (bootstrap_processor, process_two) auto node1 (std::make_shared (system.io_ctx, nano::get_available_port (), nano::unique_path (), system.logging, system.work)); ASSERT_FALSE (node1->init_error ()); node1->bootstrap_initiator.bootstrap (node0->network.endpoint (), false); - ASSERT_NE (node1->latest (nano::dev_genesis_key.pub), node0->latest (nano::dev_genesis_key.pub)); - ASSERT_TIMELY (10s, node1->latest (nano::dev_genesis_key.pub) == node0->latest (nano::dev_genesis_key.pub)); + ASSERT_NE (node1->latest (nano::dev::genesis_key.pub), node0->latest (nano::dev::genesis_key.pub)); + ASSERT_TIMELY (10s, node1->latest (nano::dev::genesis_key.pub) == node0->latest (nano::dev::genesis_key.pub)); node1->stop (); } @@ -251,24 +251,24 @@ TEST (bootstrap_processor, process_state) nano::genesis genesis; nano::state_block_builder builder; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto block1 = builder - .account (nano::dev_genesis_key.pub) - .previous (node0->latest (nano::dev_genesis_key.pub)) - .representative (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) + .previous (node0->latest (nano::dev::genesis_key.pub)) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - 100) - .link (nano::dev_genesis_key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .link (nano::dev::genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (0) .build_shared (); auto block2 = builder .make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (block1->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount) .link (block1->hash ()) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (0) .build_shared (); @@ -278,11 +278,11 @@ TEST (bootstrap_processor, process_state) node0->process (*block2); auto node1 (std::make_shared (system.io_ctx, nano::get_available_port (), nano::unique_path (), system.logging, system.work, node_flags)); - ASSERT_EQ (node0->latest (nano::dev_genesis_key.pub), block2->hash ()); - ASSERT_NE (node1->latest (nano::dev_genesis_key.pub), block2->hash ()); + ASSERT_EQ (node0->latest (nano::dev::genesis_key.pub), block2->hash ()); + ASSERT_NE (node1->latest (nano::dev::genesis_key.pub), block2->hash ()); node1->bootstrap_initiator.bootstrap (node0->network.endpoint (), false); - ASSERT_NE (node1->latest (nano::dev_genesis_key.pub), node0->latest (nano::dev_genesis_key.pub)); - ASSERT_TIMELY (10s, node1->latest (nano::dev_genesis_key.pub) == node0->latest (nano::dev_genesis_key.pub)); + ASSERT_NE (node1->latest (nano::dev::genesis_key.pub), node0->latest (nano::dev::genesis_key.pub)); + ASSERT_TIMELY (10s, node1->latest (nano::dev::genesis_key.pub) == node0->latest (nano::dev::genesis_key.pub)); ASSERT_TIMELY (10s, node1->active.empty ()); node1->stop (); } @@ -297,15 +297,15 @@ TEST (bootstrap_processor, process_new) auto node1 (system.add_node (config, node_flags)); config.peering_port = nano::get_available_port (); auto node2 (system.add_node (config, node_flags)); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::keypair key2; system.wallet (1)->insert_adhoc (key2.prv); - auto send (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key2.pub, node1->config.receive_minimum.number ())); + auto send (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key2.pub, node1->config.receive_minimum.number ())); ASSERT_NE (nullptr, send); ASSERT_TIMELY (10s, !node1->balance (key2.pub).is_zero ()); auto receive (node2->block (node2->latest (key2.pub))); ASSERT_NE (nullptr, receive); - nano::uint128_t balance1 (node1->balance (nano::dev_genesis_key.pub)); + nano::uint128_t balance1 (node1->balance (nano::dev::genesis_key.pub)); nano::uint128_t balance2 (node1->balance (key2.pub)); ASSERT_TIMELY (10s, node1->block_confirmed (send->hash ()) && node1->block_confirmed (receive->hash ()) && node1->active.empty () && node2->active.empty ()); // All blocks should be propagated & confirmed @@ -313,7 +313,7 @@ TEST (bootstrap_processor, process_new) ASSERT_FALSE (node3->init_error ()); node3->bootstrap_initiator.bootstrap (node1->network.endpoint (), false); ASSERT_TIMELY (10s, node3->balance (key2.pub) == balance2); - ASSERT_EQ (balance1, node3->balance (nano::dev_genesis_key.pub)); + ASSERT_EQ (balance1, node3->balance (nano::dev::genesis_key.pub)); node3->stop (); } @@ -326,19 +326,19 @@ TEST (bootstrap_processor, pull_diamond) node_flags.disable_bootstrap_bulk_push_client = true; auto node0 (system.add_node (config, node_flags)); nano::keypair key; - auto send1 (std::make_shared (node0->latest (nano::dev_genesis_key.pub), key.pub, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (node0->latest (nano::dev_genesis_key.pub)))); + auto send1 (std::make_shared (node0->latest (nano::dev::genesis_key.pub), key.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (node0->latest (nano::dev::genesis_key.pub)))); ASSERT_EQ (nano::process_result::progress, node0->process (*send1).code); auto open (std::make_shared (send1->hash (), 1, key.pub, key.prv, key.pub, *system.work.generate (key.pub))); ASSERT_EQ (nano::process_result::progress, node0->process (*open).code); - auto send2 (std::make_shared (open->hash (), nano::dev_genesis_key.pub, std::numeric_limits::max () - 100, key.prv, key.pub, *system.work.generate (open->hash ()))); + auto send2 (std::make_shared (open->hash (), nano::dev::genesis_key.pub, std::numeric_limits::max () - 100, key.prv, key.pub, *system.work.generate (open->hash ()))); ASSERT_EQ (nano::process_result::progress, node0->process (*send2).code); - auto receive (std::make_shared (send1->hash (), send2->hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send1->hash ()))); + auto receive (std::make_shared (send1->hash (), send2->hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1->hash ()))); ASSERT_EQ (nano::process_result::progress, node0->process (*receive).code); auto node1 (std::make_shared (system.io_ctx, nano::get_available_port (), nano::unique_path (), system.logging, system.work)); ASSERT_FALSE (node1->init_error ()); node1->bootstrap_initiator.bootstrap (node0->network.endpoint (), false); - ASSERT_TIMELY (10s, node1->balance (nano::dev_genesis_key.pub) == 100); - ASSERT_EQ (100, node1->balance (nano::dev_genesis_key.pub)); + ASSERT_TIMELY (10s, node1->balance (nano::dev::genesis_key.pub) == 100); + ASSERT_EQ (100, node1->balance (nano::dev::genesis_key.pub)); node1->stop (); } @@ -359,12 +359,12 @@ TEST (bootstrap_processor, DISABLED_pull_requeue_network_error) nano::state_block_builder builder; auto send1 = builder - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) .link (key1.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); @@ -377,7 +377,7 @@ TEST (bootstrap_processor, DISABLED_pull_requeue_network_error) nano::unique_lock lock (node1->bootstrap_initiator.connections->mutex); ASSERT_FALSE (attempt->stopped); ++attempt->pulling; - node1->bootstrap_initiator.connections->pulls.emplace_back (nano::dev_genesis_key.pub, send1->hash (), genesis.hash (), attempt->incremental_id); + node1->bootstrap_initiator.connections->pulls.emplace_back (nano::dev::genesis_key.pub, send1->hash (), genesis.hash (), attempt->incremental_id); node1->bootstrap_initiator.connections->request_pull (lock); node2->stop (); } @@ -395,19 +395,19 @@ TEST (bootstrap_processor, push_diamond) auto node1 (std::make_shared (system.io_ctx, nano::get_available_port (), nano::unique_path (), system.logging, system.work)); ASSERT_FALSE (node1->init_error ()); auto wallet1 (node1->wallets.create (100)); - wallet1->insert_adhoc (nano::dev_genesis_key.prv); + wallet1->insert_adhoc (nano::dev::genesis_key.prv); wallet1->insert_adhoc (key.prv); - auto send1 (std::make_shared (node0->latest (nano::dev_genesis_key.pub), key.pub, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (node0->latest (nano::dev_genesis_key.pub)))); + auto send1 (std::make_shared (node0->latest (nano::dev::genesis_key.pub), key.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (node0->latest (nano::dev::genesis_key.pub)))); ASSERT_EQ (nano::process_result::progress, node1->process (*send1).code); auto open (std::make_shared (send1->hash (), 1, key.pub, key.prv, key.pub, *system.work.generate (key.pub))); ASSERT_EQ (nano::process_result::progress, node1->process (*open).code); - auto send2 (std::make_shared (open->hash (), nano::dev_genesis_key.pub, std::numeric_limits::max () - 100, key.prv, key.pub, *system.work.generate (open->hash ()))); + auto send2 (std::make_shared (open->hash (), nano::dev::genesis_key.pub, std::numeric_limits::max () - 100, key.prv, key.pub, *system.work.generate (open->hash ()))); ASSERT_EQ (nano::process_result::progress, node1->process (*send2).code); - auto receive (std::make_shared (send1->hash (), send2->hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send1->hash ()))); + auto receive (std::make_shared (send1->hash (), send2->hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1->hash ()))); ASSERT_EQ (nano::process_result::progress, node1->process (*receive).code); node1->bootstrap_initiator.bootstrap (node0->network.endpoint (), false); - ASSERT_TIMELY (10s, node0->balance (nano::dev_genesis_key.pub) == 100); - ASSERT_EQ (100, node0->balance (nano::dev_genesis_key.pub)); + ASSERT_TIMELY (10s, node0->balance (nano::dev::genesis_key.pub) == 100); + ASSERT_EQ (100, node0->balance (nano::dev::genesis_key.pub)); node1->stop (); } @@ -424,8 +424,8 @@ TEST (bootstrap_processor, push_diamond_pruning) node_flags.enable_pruning = true; auto node1 (std::make_shared (system.io_ctx, nano::unique_path (), config, system.work, node_flags, 1)); ASSERT_FALSE (node1->init_error ()); - auto latest (node0->latest (nano::dev_genesis_key.pub)); - auto send1 (std::make_shared (latest, key.pub, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (latest))); + auto latest (node0->latest (nano::dev::genesis_key.pub)); + auto send1 (std::make_shared (latest, key.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest))); ASSERT_EQ (nano::process_result::progress, node1->process (*send1).code); auto open (std::make_shared (send1->hash (), 1, key.pub, key.prv, key.pub, *system.work.generate (key.pub))); ASSERT_EQ (nano::process_result::progress, node1->process (*open).code); @@ -433,9 +433,9 @@ TEST (bootstrap_processor, push_diamond_pruning) node1->bootstrap_initiator.bootstrap (node0->network.endpoint (), false); ASSERT_TIMELY (10s, node0->balance (key.pub) == nano::genesis_amount); // Process more blocks & prune old - auto send2 (std::make_shared (open->hash (), nano::dev_genesis_key.pub, std::numeric_limits::max () - 100, key.prv, key.pub, *system.work.generate (open->hash ()))); + auto send2 (std::make_shared (open->hash (), nano::dev::genesis_key.pub, std::numeric_limits::max () - 100, key.prv, key.pub, *system.work.generate (open->hash ()))); ASSERT_EQ (nano::process_result::progress, node1->process (*send2).code); - auto receive (std::make_shared (send1->hash (), send2->hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send1->hash ()))); + auto receive (std::make_shared (send1->hash (), send2->hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1->hash ()))); ASSERT_EQ (nano::process_result::progress, node1->process (*receive).code); { auto transaction (node1->store.tx_begin_write ()); @@ -453,8 +453,8 @@ TEST (bootstrap_processor, push_diamond_pruning) } // 2nd bootstrap node1->bootstrap_initiator.bootstrap (node0->network.endpoint (), false); - ASSERT_TIMELY (10s, node0->balance (nano::dev_genesis_key.pub) == 100); - ASSERT_EQ (100, node0->balance (nano::dev_genesis_key.pub)); + ASSERT_TIMELY (10s, node0->balance (nano::dev::genesis_key.pub) == 100); + ASSERT_EQ (100, node0->balance (nano::dev::genesis_key.pub)); node1->stop (); } @@ -468,13 +468,13 @@ TEST (bootstrap_processor, push_one) auto node1 (std::make_shared (system.io_ctx, nano::get_available_port (), nano::unique_path (), system.logging, system.work)); auto wallet (node1->wallets.create (nano::random_wallet_id ())); ASSERT_NE (nullptr, wallet); - wallet->insert_adhoc (nano::dev_genesis_key.prv); - nano::uint128_t balance1 (node1->balance (nano::dev_genesis_key.pub)); - auto send (wallet->send_action (nano::dev_genesis_key.pub, key1.pub, 100)); + wallet->insert_adhoc (nano::dev::genesis_key.prv); + nano::uint128_t balance1 (node1->balance (nano::dev::genesis_key.pub)); + auto send (wallet->send_action (nano::dev::genesis_key.pub, key1.pub, 100)); ASSERT_NE (nullptr, send); - ASSERT_NE (balance1, node1->balance (nano::dev_genesis_key.pub)); + ASSERT_NE (balance1, node1->balance (nano::dev::genesis_key.pub)); node1->bootstrap_initiator.bootstrap (node0->network.endpoint (), false); - ASSERT_TIMELY (10s, node0->balance (nano::dev_genesis_key.pub) != balance1); + ASSERT_TIMELY (10s, node0->balance (nano::dev::genesis_key.pub) != balance1); node1->stop (); } @@ -494,12 +494,12 @@ TEST (bootstrap_processor, lazy_hash) nano::state_block_builder builder; auto send1 = builder - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) .link (key1.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node0->work_generate_blocking (genesis.hash ())) .build_shared (); auto receive1 = builder @@ -569,12 +569,12 @@ TEST (bootstrap_processor, lazy_hash_bootstrap_id) nano::state_block_builder builder; auto send1 = builder - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) .link (key1.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node0->work_generate_blocking (genesis.hash ())) .build_shared (); auto receive1 = builder @@ -646,52 +646,52 @@ TEST (bootstrap_processor, lazy_hash_pruning) nano::state_block_builder builder; auto send1 = builder - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) - .link (nano::dev_genesis_key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .link (nano::dev::genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node0->work_generate_blocking (genesis.hash ())) .build_shared (); auto receive1 = builder .make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (send1->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount) .link (send1->hash ()) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node0->work_generate_blocking (send1->hash ())) .build_shared (); auto change1 = builder .make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (receive1->hash ()) .representative (key1.pub) .balance (nano::genesis_amount) .link (0) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node0->work_generate_blocking (receive1->hash ())) .build_shared (); auto change2 = builder .make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (change1->hash ()) .representative (key2.pub) .balance (nano::genesis_amount) .link (0) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node0->work_generate_blocking (change1->hash ())) .build_shared (); auto send2 = builder .make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (change2->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) .link (key1.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node0->work_generate_blocking (change2->hash ())) .build_shared (); auto receive2 = builder @@ -780,12 +780,12 @@ TEST (bootstrap_processor, lazy_max_pull_count) nano::state_block_builder builder; auto send1 = builder - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) .link (key1.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node0->work_generate_blocking (genesis.hash ())) .build_shared (); auto receive1 = builder @@ -832,7 +832,7 @@ TEST (bootstrap_processor, lazy_max_pull_count) .make_block () .account (key2.pub) .previous (change1->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::Gxrb_ratio) .link (0) .sign (key2.prv, key2.pub) @@ -883,23 +883,23 @@ TEST (bootstrap_processor, lazy_unclear_state_link) nano::state_block_builder builder; auto send1 = builder - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) .link (key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, node1->process (*send1).code); auto send2 = builder .make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (send1->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - 2 * nano::Gxrb_ratio) .link (key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send1->hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, node1->process (*send2).code); @@ -946,12 +946,12 @@ TEST (bootstrap_processor, lazy_unclear_state_link_not_existing) nano::state_block_builder builder; auto send1 = builder - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) .link (key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, node1->process (*send1).code); @@ -998,23 +998,23 @@ TEST (bootstrap_processor, DISABLED_lazy_destinations) nano::state_block_builder builder; auto send1 = builder - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) .link (key1.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, node1->process (*send1).code); auto send2 = builder .make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (send1->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - 2 * nano::Gxrb_ratio) .link (key2.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send1->hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, node1->process (*send2).code); @@ -1063,23 +1063,23 @@ TEST (bootstrap_processor, lazy_pruning_missing_block) nano::state_block_builder builder; auto send1 = builder - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) .link (key1.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); node1->process_active (send1); auto send2 = builder .make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (send1->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - 2 * nano::Gxrb_ratio) .link (key2.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send1->hash ())) .build_shared (); node1->process_active (send2); @@ -1158,12 +1158,12 @@ TEST (bootstrap_processor, lazy_cancel) nano::state_block_builder builder; auto send1 = builder - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) .link (key1.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node0->work_generate_blocking (genesis.hash ())) .build_shared (); @@ -1198,12 +1198,12 @@ TEST (bootstrap_processor, wallet_lazy_frontier) nano::state_block_builder builder; auto send1 = builder - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) .link (key1.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node0->work_generate_blocking (genesis.hash ())) .build_shared (); auto receive1 = builder @@ -1277,12 +1277,12 @@ TEST (bootstrap_processor, wallet_lazy_pending) nano::state_block_builder builder; auto send1 = builder - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) .link (key1.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node0->work_generate_blocking (genesis.hash ())) .build_shared (); auto receive1 = builder @@ -1339,12 +1339,12 @@ TEST (bootstrap_processor, multiple_attempts) nano::state_block_builder builder; auto send1 = builder - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) .link (key1.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node1->work_generate_blocking (genesis.hash ())) .build_shared (); auto receive1 = builder @@ -1433,7 +1433,7 @@ TEST (frontier_req, begin) req->count = std::numeric_limitscount)>::max (); connection->requests.push (std::unique_ptr{}); auto request (std::make_shared (connection, std::move (req))); - ASSERT_EQ (nano::dev_genesis_key.pub, request->current); + ASSERT_EQ (nano::dev::genesis_key.pub, request->current); nano::genesis genesis; ASSERT_EQ (genesis.hash (), request->frontier); } @@ -1443,7 +1443,7 @@ TEST (frontier_req, end) nano::system system (1); auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); auto req = std::make_unique (); - req->start = nano::dev_genesis_key.pub.number () + 1; + req->start = nano::dev::genesis_key.pub.number () + 1; req->age = std::numeric_limitsage)>::max (); req->count = std::numeric_limitscount)>::max (); connection->requests.push (std::unique_ptr{}); @@ -1461,12 +1461,12 @@ TEST (frontier_req, count) nano::state_block_builder builder; auto send1 = builder - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) .link (key1.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (0) .build_shared (); node1->work_generate_blocking (*send1); @@ -1475,7 +1475,7 @@ TEST (frontier_req, count) .make_block () .account (key1.pub) .previous (0) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::Gxrb_ratio) .link (send1->hash ()) .sign (key1.prv, key1.pub) @@ -1491,7 +1491,7 @@ TEST (frontier_req, count) req->count = 1; connection->requests.push (std::unique_ptr{}); auto request (std::make_shared (connection, std::move (req))); - ASSERT_EQ (nano::dev_genesis_key.pub, request->current); + ASSERT_EQ (nano::dev::genesis_key.pub, request->current); ASSERT_EQ (send1->hash (), request->frontier); } @@ -1505,7 +1505,7 @@ TEST (frontier_req, time_bound) req->count = std::numeric_limitscount)>::max (); connection->requests.push (std::unique_ptr{}); auto request (std::make_shared (connection, std::move (req))); - ASSERT_EQ (nano::dev_genesis_key.pub, request->current); + ASSERT_EQ (nano::dev::genesis_key.pub, request->current); // Wait 2 seconds until age of account will be > 1 seconds std::this_thread::sleep_for (std::chrono::milliseconds (2100)); auto req2 (std::make_unique ()); @@ -1528,7 +1528,7 @@ TEST (frontier_req, time_cutoff) req->count = std::numeric_limitscount)>::max (); connection->requests.push (std::unique_ptr{}); auto request (std::make_shared (connection, std::move (req))); - ASSERT_EQ (nano::dev_genesis_key.pub, request->current); + ASSERT_EQ (nano::dev::genesis_key.pub, request->current); nano::genesis genesis; ASSERT_EQ (genesis.hash (), request->frontier); // Wait 4 seconds until age of account will be > 3 seconds @@ -1550,13 +1550,13 @@ TEST (frontier_req, confirmed_frontier) nano::genesis genesis; nano::raw_key priv_key; // Public key before genesis in accounts table - while (nano::pub_key (priv_key).number () >= nano::dev_genesis_key.pub.number ()) + while (nano::pub_key (priv_key).number () >= nano::dev::genesis_key.pub.number ()) { priv_key = nano::keypair ().prv; } nano::keypair key_before_genesis (priv_key.to_string ()); // Public key after genesis in accounts table - while (nano::pub_key (priv_key).number () <= nano::dev_genesis_key.pub.number ()) + while (nano::pub_key (priv_key).number () <= nano::dev::genesis_key.pub.number ()) { priv_key = nano::keypair ().prv; } @@ -1564,24 +1564,24 @@ TEST (frontier_req, confirmed_frontier) nano::state_block_builder builder; auto send1 = builder - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) .link (key_before_genesis.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (0) .build_shared (); node1->work_generate_blocking (*send1); ASSERT_EQ (nano::process_result::progress, node1->process (*send1).code); auto send2 = builder .make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (send1->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - 2 * nano::Gxrb_ratio) .link (key_after_genesis.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (0) .build_shared (); node1->work_generate_blocking (*send2); @@ -1590,7 +1590,7 @@ TEST (frontier_req, confirmed_frontier) .make_block () .account (key_before_genesis.pub) .previous (0) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::Gxrb_ratio) .link (send1->hash ()) .sign (key_before_genesis.prv, key_before_genesis.pub) @@ -1602,7 +1602,7 @@ TEST (frontier_req, confirmed_frontier) .make_block () .account (key_after_genesis.pub) .previous (0) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::Gxrb_ratio) .link (send2->hash ()) .sign (key_after_genesis.prv, key_after_genesis.pub) @@ -1622,7 +1622,7 @@ TEST (frontier_req, confirmed_frontier) ASSERT_TRUE (req->header.frontier_req_is_only_confirmed_present ()); connection->requests.push (std::unique_ptr{}); auto request (std::make_shared (connection, std::move (req))); - ASSERT_EQ (nano::dev_genesis_key.pub, request->current); + ASSERT_EQ (nano::dev::genesis_key.pub, request->current); ASSERT_EQ (genesis.hash (), request->frontier); // Request starting with account before genesis (confirmed only) @@ -1636,7 +1636,7 @@ TEST (frontier_req, confirmed_frontier) ASSERT_TRUE (req2->header.frontier_req_is_only_confirmed_present ()); connection2->requests.push (std::unique_ptr{}); auto request2 (std::make_shared (connection2, std::move (req2))); - ASSERT_EQ (nano::dev_genesis_key.pub, request2->current); + ASSERT_EQ (nano::dev::genesis_key.pub, request2->current); ASSERT_EQ (genesis.hash (), request2->frontier); // Request starting with account after genesis (confirmed only) @@ -1719,21 +1719,21 @@ TEST (bulk, genesis) node_flags.disable_bootstrap_bulk_push_client = true; node_flags.disable_lazy_bootstrap = true; auto node1 = system.add_node (config, node_flags); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto node2 (std::make_shared (system.io_ctx, nano::get_available_port (), nano::unique_path (), system.logging, system.work)); ASSERT_FALSE (node2->init_error ()); - nano::block_hash latest1 (node1->latest (nano::dev_genesis_key.pub)); - nano::block_hash latest2 (node2->latest (nano::dev_genesis_key.pub)); + nano::block_hash latest1 (node1->latest (nano::dev::genesis_key.pub)); + nano::block_hash latest2 (node2->latest (nano::dev::genesis_key.pub)); ASSERT_EQ (latest1, latest2); nano::keypair key2; - auto send (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key2.pub, 100)); + auto send (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key2.pub, 100)); ASSERT_NE (nullptr, send); - nano::block_hash latest3 (node1->latest (nano::dev_genesis_key.pub)); + nano::block_hash latest3 (node1->latest (nano::dev::genesis_key.pub)); ASSERT_NE (latest1, latest3); node2->bootstrap_initiator.bootstrap (node1->network.endpoint (), false); - ASSERT_TIMELY (10s, node2->latest (nano::dev_genesis_key.pub) == node1->latest (nano::dev_genesis_key.pub)); - ASSERT_EQ (node2->latest (nano::dev_genesis_key.pub), node1->latest (nano::dev_genesis_key.pub)); + ASSERT_TIMELY (10s, node2->latest (nano::dev::genesis_key.pub) == node1->latest (nano::dev::genesis_key.pub)); + ASSERT_EQ (node2->latest (nano::dev::genesis_key.pub), node1->latest (nano::dev::genesis_key.pub)); node2->stop (); } @@ -1746,7 +1746,7 @@ TEST (bulk, offline_send) node_flags.disable_bootstrap_bulk_push_client = true; node_flags.disable_lazy_bootstrap = true; auto node1 = system.add_node (config, node_flags); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto node2 (std::make_shared (system.io_ctx, nano::get_available_port (), nano::unique_path (), system.logging, system.work)); ASSERT_FALSE (node2->init_error ()); node2->start (); @@ -1754,9 +1754,9 @@ TEST (bulk, offline_send) nano::keypair key2; auto wallet (node2->wallets.create (nano::random_wallet_id ())); wallet->insert_adhoc (key2.prv); - auto send1 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key2.pub, node1->config.receive_minimum.number ())); + auto send1 (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key2.pub, node1->config.receive_minimum.number ())); ASSERT_NE (nullptr, send1); - ASSERT_NE (std::numeric_limits::max (), node1->balance (nano::dev_genesis_key.pub)); + ASSERT_NE (std::numeric_limits::max (), node1->balance (nano::dev::genesis_key.pub)); node1->block_processor.flush (); node1->scheduler.flush (); // Wait to finish election background tasks @@ -1771,7 +1771,7 @@ TEST (bulk, offline_send) ASSERT_NO_ERROR (system.poll ()); } while (node1->network.empty () || node2->network.empty ()); // Send block arrival via bootstrap - ASSERT_TIMELY (10s, node2->balance (nano::dev_genesis_key.pub) != std::numeric_limits::max ()); + ASSERT_TIMELY (10s, node2->balance (nano::dev::genesis_key.pub) != std::numeric_limits::max ()); // Receiving send block ASSERT_TIMELY (20s, node2->balance (key2.pub) == node1->config.receive_minimum.number ()); node2->stop (); @@ -1789,25 +1789,25 @@ TEST (bulk, genesis_pruning) node_flags.disable_ongoing_bootstrap = true; node_flags.enable_pruning = true; auto node1 = system.add_node (config, node_flags); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); node_flags.enable_pruning = false; auto node2 (std::make_shared (system.io_ctx, nano::get_available_port (), nano::unique_path (), system.logging, system.work, node_flags)); ASSERT_FALSE (node2->init_error ()); - nano::block_hash latest1 (node1->latest (nano::dev_genesis_key.pub)); - nano::block_hash latest2 (node2->latest (nano::dev_genesis_key.pub)); + nano::block_hash latest1 (node1->latest (nano::dev::genesis_key.pub)); + nano::block_hash latest2 (node2->latest (nano::dev::genesis_key.pub)); ASSERT_EQ (latest1, latest2); nano::keypair key2; - auto send1 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key2.pub, 100)); + auto send1 (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key2.pub, 100)); ASSERT_NE (nullptr, send1); - auto send2 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key2.pub, 100)); + auto send2 (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key2.pub, 100)); ASSERT_NE (nullptr, send2); - auto send3 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key2.pub, 100)); + auto send3 (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key2.pub, 100)); ASSERT_NE (nullptr, send3); { auto transaction (node1->wallets.tx_begin_write ()); - system.wallet (0)->store.erase (transaction, nano::dev_genesis_key.pub); + system.wallet (0)->store.erase (transaction, nano::dev::genesis_key.pub); } - nano::block_hash latest3 (node1->latest (nano::dev_genesis_key.pub)); + nano::block_hash latest3 (node1->latest (nano::dev::genesis_key.pub)); ASSERT_NE (latest1, latest3); ASSERT_EQ (send3->hash (), latest3); // Confirm last block to prune previous @@ -1855,8 +1855,8 @@ TEST (bulk, genesis_pruning) // New bootstrap ASSERT_TIMELY (5s, node2->bootstrap_initiator.connections->connections_count == 0); node2->bootstrap_initiator.bootstrap (node1->network.endpoint (), false); - ASSERT_TIMELY (10s, node2->latest (nano::dev_genesis_key.pub) == node1->latest (nano::dev_genesis_key.pub)); - ASSERT_EQ (node2->latest (nano::dev_genesis_key.pub), node1->latest (nano::dev_genesis_key.pub)); + ASSERT_TIMELY (10s, node2->latest (nano::dev::genesis_key.pub) == node1->latest (nano::dev::genesis_key.pub)); + ASSERT_EQ (node2->latest (nano::dev::genesis_key.pub), node1->latest (nano::dev::genesis_key.pub)); node2->stop (); } @@ -1865,7 +1865,7 @@ TEST (bulk_pull_account, basics) nano::system system (1); system.nodes[0]->config.receive_minimum = 20; nano::keypair key1; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); system.wallet (0)->insert_adhoc (key1.prv); auto send1 (system.wallet (0)->send_action (nano::dev::genesis->account (), key1.pub, 25)); auto send2 (system.wallet (0)->send_action (nano::dev::genesis->account (), key1.pub, 10)); diff --git a/nano/core_test/confirmation_height.cpp b/nano/core_test/confirmation_height.cpp index 6dba764a97..edd60acc3c 100644 --- a/nano/core_test/confirmation_height.cpp +++ b/nano/core_test/confirmation_height.cpp @@ -38,15 +38,15 @@ TEST (confirmation_height, single) node_flags.confirmation_height_processor_mode = mode_a; auto node = system.add_node (node_flags); nano::keypair key1; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - nano::block_hash latest1 (node->latest (nano::dev_genesis_key.pub)); - auto send1 (std::make_shared (nano::dev_genesis_key.pub, latest1, nano::dev_genesis_key.pub, amount - 100, key1.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (latest1))); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); + nano::block_hash latest1 (node->latest (nano::dev::genesis_key.pub)); + auto send1 (std::make_shared (nano::dev::genesis_key.pub, latest1, nano::dev::genesis_key.pub, amount - 100, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest1))); // Check confirmation heights before, should be uninitialized (1 for genesis). nano::confirmation_height_info confirmation_height_info; add_callback_stats (*node); auto transaction = node->store.tx_begin_read (); - ASSERT_FALSE (node->store.confirmation_height.get (transaction, nano::dev_genesis_key.pub, confirmation_height_info)); + ASSERT_FALSE (node->store.confirmation_height.get (transaction, nano::dev::genesis_key.pub, confirmation_height_info)); ASSERT_EQ (1, confirmation_height_info.height); ASSERT_EQ (nano::dev::genesis->hash (), confirmation_height_info.frontier); @@ -58,7 +58,7 @@ TEST (confirmation_height, single) { auto transaction = node->store.tx_begin_write (); ASSERT_TRUE (node->ledger.block_confirmed (transaction, send1->hash ())); - ASSERT_FALSE (node->store.confirmation_height.get (transaction, nano::dev_genesis_key.pub, confirmation_height_info)); + ASSERT_FALSE (node->store.confirmation_height.get (transaction, nano::dev::genesis_key.pub, confirmation_height_info)); ASSERT_EQ (2, confirmation_height_info.height); ASSERT_EQ (send1->hash (), confirmation_height_info.frontier); @@ -90,12 +90,12 @@ TEST (confirmation_height, multiple_accounts) nano::keypair key1; nano::keypair key2; nano::keypair key3; - nano::block_hash latest1 (system.nodes[0]->latest (nano::dev_genesis_key.pub)); + nano::block_hash latest1 (system.nodes[0]->latest (nano::dev::genesis_key.pub)); // Send to all accounts - nano::send_block send1 (latest1, key1.pub, node->online_reps.delta () + 300, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (latest1)); - nano::send_block send2 (send1.hash (), key2.pub, node->online_reps.delta () + 200, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send1.hash ())); - nano::send_block send3 (send2.hash (), key3.pub, node->online_reps.delta () + 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send2.hash ())); + nano::send_block send1 (latest1, key1.pub, node->online_reps.delta () + 300, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest1)); + nano::send_block send2 (send1.hash (), key2.pub, node->online_reps.delta () + 200, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1.hash ())); + nano::send_block send3 (send2.hash (), key3.pub, node->online_reps.delta () + 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send2.hash ())); // Open all accounts nano::open_block open1 (send1.hash (), nano::dev::genesis->account (), key1.pub, key1.prv, key1.pub, *system.work.generate (key1.pub)); @@ -132,7 +132,7 @@ TEST (confirmation_height, multiple_accounts) // Check confirmation heights of all the accounts (except genesis) are uninitialized (0), // as we have any just added them to the ledger and not processed any live transactions yet. nano::confirmation_height_info confirmation_height_info; - ASSERT_FALSE (node->store.confirmation_height.get (transaction, nano::dev_genesis_key.pub, confirmation_height_info)); + ASSERT_FALSE (node->store.confirmation_height.get (transaction, nano::dev::genesis_key.pub, confirmation_height_info)); ASSERT_EQ (1, confirmation_height_info.height); ASSERT_EQ (nano::dev::genesis->hash (), confirmation_height_info.frontier); ASSERT_TRUE (node->store.confirmation_height.get (transaction, key1.pub, confirmation_height_info)); @@ -162,8 +162,8 @@ TEST (confirmation_height, multiple_accounts) auto & store = node->store; auto transaction = node->store.tx_begin_read (); ASSERT_TRUE (node->ledger.block_confirmed (transaction, receive3->hash ())); - ASSERT_FALSE (store.account.get (transaction, nano::dev_genesis_key.pub, account_info)); - ASSERT_FALSE (node->store.confirmation_height.get (transaction, nano::dev_genesis_key.pub, confirmation_height_info)); + ASSERT_FALSE (store.account.get (transaction, nano::dev::genesis_key.pub, account_info)); + ASSERT_FALSE (node->store.confirmation_height.get (transaction, nano::dev::genesis_key.pub, confirmation_height_info)); ASSERT_EQ (4, confirmation_height_info.height); ASSERT_EQ (send3.hash (), confirmation_height_info.frontier); ASSERT_EQ (4, account_info.block_count); @@ -198,7 +198,7 @@ TEST (confirmation_height, multiple_accounts) // Confirm the other latest can't be rolled back either ASSERT_TRUE (node->ledger.rollback (transaction, node->latest (key3.pub))); - ASSERT_TRUE (node->ledger.rollback (transaction, node->latest (nano::dev_genesis_key.pub))); + ASSERT_TRUE (node->ledger.rollback (transaction, node->latest (nano::dev::genesis_key.pub))); // Attempt some others which have been cemented ASSERT_TRUE (node->ledger.rollback (transaction, open1.hash ())); @@ -225,11 +225,11 @@ TEST (confirmation_height, gap_bootstrap) auto & node1 = *system.add_node (node_flags); nano::genesis genesis; nano::keypair destination; - auto send1 (std::make_shared (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); + auto send1 (std::make_shared (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send1); - auto send2 (std::make_shared (nano::dev::genesis->account (), send1->hash (), nano::dev::genesis->account (), nano::genesis_amount - 2 * nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); + auto send2 (std::make_shared (nano::dev::genesis->account (), send1->hash (), nano::dev::genesis->account (), nano::genesis_amount - 2 * nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send2); - auto send3 (std::make_shared (nano::dev::genesis->account (), send2->hash (), nano::dev::genesis->account (), nano::genesis_amount - 3 * nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); + auto send3 (std::make_shared (nano::dev::genesis->account (), send2->hash (), nano::dev::genesis->account (), nano::genesis_amount - 3 * nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send3); auto open1 (std::make_shared (send1->hash (), destination.pub, destination.pub, destination.prv, destination.pub, 0)); node1.work_generate_blocking (*open1); @@ -259,7 +259,7 @@ TEST (confirmation_height, gap_bootstrap) ASSERT_EQ (unchecked_count, 2); nano::confirmation_height_info confirmation_height_info; - ASSERT_FALSE (node1.store.confirmation_height.get (transaction, nano::dev_genesis_key.pub, confirmation_height_info)); + ASSERT_FALSE (node1.store.confirmation_height.get (transaction, nano::dev::genesis_key.pub, confirmation_height_info)); ASSERT_EQ (1, confirmation_height_info.height); ASSERT_EQ (genesis.hash (), confirmation_height_info.frontier); } @@ -275,7 +275,7 @@ TEST (confirmation_height, gap_bootstrap) ASSERT_EQ (unchecked_count, 0); nano::confirmation_height_info confirmation_height_info; - ASSERT_FALSE (node1.store.confirmation_height.get (transaction, nano::dev_genesis_key.pub, confirmation_height_info)); + ASSERT_FALSE (node1.store.confirmation_height.get (transaction, nano::dev::genesis_key.pub, confirmation_height_info)); ASSERT_EQ (1, confirmation_height_info.height); ASSERT_EQ (genesis.hash (), confirmation_height_info.frontier); ASSERT_TRUE (node1.store.confirmation_height.get (transaction, destination.pub, confirmation_height_info)); @@ -307,15 +307,15 @@ TEST (confirmation_height, gap_live) node_config.receive_minimum = nano::genesis_amount; // Prevent auto-receive & open1/receive1/receive2 blocks conflicts system.add_node (node_config, node_flags); nano::keypair destination; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); system.wallet (1)->insert_adhoc (destination.prv); nano::genesis genesis; - auto send1 (std::make_shared (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - 1, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); + auto send1 (std::make_shared (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - 1, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node->work_generate_blocking (*send1); - auto send2 (std::make_shared (nano::dev::genesis->account (), send1->hash (), nano::dev::genesis->account (), nano::genesis_amount - 2, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); + auto send2 (std::make_shared (nano::dev::genesis->account (), send1->hash (), nano::dev::genesis->account (), nano::genesis_amount - 2, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node->work_generate_blocking (*send2); - auto send3 (std::make_shared (nano::dev::genesis->account (), send2->hash (), nano::dev::genesis->account (), nano::genesis_amount - 3, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); + auto send3 (std::make_shared (nano::dev::genesis->account (), send2->hash (), nano::dev::genesis->account (), nano::genesis_amount - 3, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node->work_generate_blocking (*send3); auto open1 (std::make_shared (send1->hash (), destination.pub, destination.pub, destination.prv, destination.pub, 0)); @@ -341,7 +341,7 @@ TEST (confirmation_height, gap_live) { auto transaction = node->store.tx_begin_read (); nano::confirmation_height_info confirmation_height_info; - ASSERT_FALSE (node->store.confirmation_height.get (transaction, nano::dev_genesis_key.pub, confirmation_height_info)); + ASSERT_FALSE (node->store.confirmation_height.get (transaction, nano::dev::genesis_key.pub, confirmation_height_info)); ASSERT_EQ (1, confirmation_height_info.height); ASSERT_EQ (nano::dev::genesis->hash (), confirmation_height_info.frontier); } @@ -363,7 +363,7 @@ TEST (confirmation_height, gap_live) nano::confirmation_height_info confirmation_height_info; ASSERT_TRUE (node->ledger.block_confirmed (transaction, receive2->hash ())); - ASSERT_FALSE (node->store.confirmation_height.get (transaction, nano::dev_genesis_key.pub, confirmation_height_info)); + ASSERT_FALSE (node->store.confirmation_height.get (transaction, nano::dev::genesis_key.pub, confirmation_height_info)); ASSERT_EQ (4, confirmation_height_info.height); ASSERT_EQ (send3->hash (), confirmation_height_info.frontier); ASSERT_FALSE (node->store.confirmation_height.get (transaction, destination.pub, confirmation_height_info)); @@ -392,24 +392,24 @@ TEST (confirmation_height, send_receive_between_2_accounts) node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto node = system.add_node (node_config, node_flags); nano::keypair key1; - nano::block_hash latest (node->latest (nano::dev_genesis_key.pub)); + nano::block_hash latest (node->latest (nano::dev::genesis_key.pub)); - nano::send_block send1 (latest, key1.pub, node->online_reps.delta () + 2, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (latest)); + nano::send_block send1 (latest, key1.pub, node->online_reps.delta () + 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); nano::open_block open1 (send1.hash (), nano::dev::genesis->account (), key1.pub, key1.prv, key1.pub, *system.work.generate (key1.pub)); nano::send_block send2 (open1.hash (), nano::dev::genesis->account (), 1000, key1.prv, key1.pub, *system.work.generate (open1.hash ())); nano::send_block send3 (send2.hash (), nano::dev::genesis->account (), 900, key1.prv, key1.pub, *system.work.generate (send2.hash ())); nano::send_block send4 (send3.hash (), nano::dev::genesis->account (), 500, key1.prv, key1.pub, *system.work.generate (send3.hash ())); - nano::receive_block receive1 (send1.hash (), send2.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send1.hash ())); - nano::receive_block receive2 (receive1.hash (), send3.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (receive1.hash ())); - nano::receive_block receive3 (receive2.hash (), send4.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (receive2.hash ())); + nano::receive_block receive1 (send1.hash (), send2.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1.hash ())); + nano::receive_block receive2 (receive1.hash (), send3.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (receive1.hash ())); + nano::receive_block receive3 (receive2.hash (), send4.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (receive2.hash ())); - nano::send_block send5 (receive3.hash (), key1.pub, node->online_reps.delta () + 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (receive3.hash ())); + nano::send_block send5 (receive3.hash (), key1.pub, node->online_reps.delta () + 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (receive3.hash ())); auto receive4 = std::make_shared (send4.hash (), send5.hash (), key1.prv, key1.pub, *system.work.generate (send4.hash ())); // Unpocketed send nano::keypair key2; - nano::send_block send6 (send5.hash (), key2.pub, node->online_reps.delta (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send5.hash ())); + nano::send_block send6 (send5.hash (), key2.pub, node->online_reps.delta (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send5.hash ())); { auto transaction = node->store.tx_begin_write (); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, send1).code); @@ -443,8 +443,8 @@ TEST (confirmation_height, send_receive_between_2_accounts) ASSERT_TRUE (node->ledger.block_confirmed (transaction, receive4->hash ())); nano::account_info account_info; nano::confirmation_height_info confirmation_height_info; - ASSERT_FALSE (node->store.account.get (transaction, nano::dev_genesis_key.pub, account_info)); - ASSERT_FALSE (node->store.confirmation_height.get (transaction, nano::dev_genesis_key.pub, confirmation_height_info)); + ASSERT_FALSE (node->store.account.get (transaction, nano::dev::genesis_key.pub, account_info)); + ASSERT_FALSE (node->store.confirmation_height.get (transaction, nano::dev::genesis_key.pub, confirmation_height_info)); ASSERT_EQ (6, confirmation_height_info.height); ASSERT_EQ (send5.hash (), confirmation_height_info.frontier); ASSERT_EQ (7, account_info.block_count); @@ -476,19 +476,19 @@ TEST (confirmation_height, send_receive_self) nano::node_config node_config (nano::get_available_port (), system.logging); node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto node = system.add_node (node_config, node_flags); - nano::block_hash latest (node->latest (nano::dev_genesis_key.pub)); + nano::block_hash latest (node->latest (nano::dev::genesis_key.pub)); - nano::send_block send1 (latest, nano::dev_genesis_key.pub, nano::genesis_amount - 2, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (latest)); - nano::receive_block receive1 (send1.hash (), send1.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send1.hash ())); - nano::send_block send2 (receive1.hash (), nano::dev_genesis_key.pub, nano::genesis_amount - 2, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (receive1.hash ())); - nano::send_block send3 (send2.hash (), nano::dev_genesis_key.pub, nano::genesis_amount - 3, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send2.hash ())); + nano::send_block send1 (latest, nano::dev::genesis_key.pub, nano::genesis_amount - 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); + nano::receive_block receive1 (send1.hash (), send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1.hash ())); + nano::send_block send2 (receive1.hash (), nano::dev::genesis_key.pub, nano::genesis_amount - 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (receive1.hash ())); + nano::send_block send3 (send2.hash (), nano::dev::genesis_key.pub, nano::genesis_amount - 3, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send2.hash ())); - nano::receive_block receive2 (send3.hash (), send2.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send3.hash ())); - auto receive3 = std::make_shared (receive2.hash (), send3.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (receive2.hash ())); + nano::receive_block receive2 (send3.hash (), send2.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send3.hash ())); + auto receive3 = std::make_shared (receive2.hash (), send3.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (receive2.hash ())); // Send to another account to prevent automatic receiving on the genesis account nano::keypair key1; - nano::send_block send4 (receive3->hash (), key1.pub, node->online_reps.delta (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (receive3->hash ())); + nano::send_block send4 (receive3->hash (), key1.pub, node->online_reps.delta (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (receive3->hash ())); { auto transaction = node->store.tx_begin_write (); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, send1).code); @@ -513,9 +513,9 @@ TEST (confirmation_height, send_receive_self) auto transaction (node->store.tx_begin_read ()); ASSERT_TRUE (node->ledger.block_confirmed (transaction, receive3->hash ())); nano::account_info account_info; - ASSERT_FALSE (node->store.account.get (transaction, nano::dev_genesis_key.pub, account_info)); + ASSERT_FALSE (node->store.account.get (transaction, nano::dev::genesis_key.pub, account_info)); nano::confirmation_height_info confirmation_height_info; - ASSERT_FALSE (node->store.confirmation_height.get (transaction, nano::dev_genesis_key.pub, confirmation_height_info)); + ASSERT_FALSE (node->store.confirmation_height.get (transaction, nano::dev::genesis_key.pub, confirmation_height_info)); ASSERT_EQ (7, confirmation_height_info.height); ASSERT_EQ (receive3->hash (), confirmation_height_info.frontier); ASSERT_EQ (8, account_info.block_count); @@ -539,14 +539,14 @@ TEST (confirmation_height, all_block_types) nano::node_config node_config (nano::get_available_port (), system.logging); node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto node = system.add_node (node_config, node_flags); - nano::block_hash latest (node->latest (nano::dev_genesis_key.pub)); + nano::block_hash latest (node->latest (nano::dev::genesis_key.pub)); nano::keypair key1; nano::keypair key2; auto & store = node->store; - nano::send_block send (latest, key1.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (latest)); - nano::send_block send1 (send.hash (), key2.pub, nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send.hash ())); + nano::send_block send (latest, key1.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); + nano::send_block send1 (send.hash (), key2.pub, nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send.hash ())); - nano::open_block open (send.hash (), nano::dev_genesis_key.pub, key1.pub, key1.prv, key1.pub, *system.work.generate (key1.pub)); + nano::open_block open (send.hash (), nano::dev::genesis_key.pub, key1.pub, key1.prv, key1.pub, *system.work.generate (key1.pub)); nano::state_block state_open (key2.pub, 0, 0, nano::Gxrb_ratio, send1.hash (), key2.prv, key2.pub, *system.work.generate (key2.pub)); nano::send_block send2 (open.hash (), key2.pub, 0, key1.prv, key1.pub, *system.work.generate (open.hash ())); @@ -557,19 +557,19 @@ TEST (confirmation_height, all_block_types) nano::change_block change (receive.hash (), key2.pub, key1.prv, key1.pub, *system.work.generate (receive.hash ())); - nano::state_block state_change (key2.pub, state_send.hash (), nano::dev_genesis_key.pub, nano::Gxrb_ratio, 0, key2.prv, key2.pub, *system.work.generate (state_send.hash ())); + nano::state_block state_change (key2.pub, state_send.hash (), nano::dev::genesis_key.pub, nano::Gxrb_ratio, 0, key2.prv, key2.pub, *system.work.generate (state_send.hash ())); - nano::state_block epoch (key2.pub, state_change.hash (), nano::dev_genesis_key.pub, nano::Gxrb_ratio, node->ledger.epoch_link (nano::epoch::epoch_1), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (state_change.hash ())); + nano::state_block epoch (key2.pub, state_change.hash (), nano::dev::genesis_key.pub, nano::Gxrb_ratio, node->ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (state_change.hash ())); - nano::state_block epoch1 (key1.pub, change.hash (), key2.pub, nano::Gxrb_ratio, node->ledger.epoch_link (nano::epoch::epoch_1), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (change.hash ())); + nano::state_block epoch1 (key1.pub, change.hash (), key2.pub, nano::Gxrb_ratio, node->ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (change.hash ())); nano::state_block state_send1 (key1.pub, epoch1.hash (), 0, nano::Gxrb_ratio - 1, key2.pub, key1.prv, key1.pub, *system.work.generate (epoch1.hash ())); nano::state_block state_receive2 (key2.pub, epoch.hash (), 0, nano::Gxrb_ratio + 1, state_send1.hash (), key2.prv, key2.pub, *system.work.generate (epoch.hash ())); auto state_send2 = std::make_shared (key2.pub, state_receive2.hash (), 0, nano::Gxrb_ratio, key1.pub, key2.prv, key2.pub, *system.work.generate (state_receive2.hash ())); nano::state_block state_send3 (key2.pub, state_send2->hash (), 0, nano::Gxrb_ratio - 1, key1.pub, key2.prv, key2.pub, *system.work.generate (state_send2->hash ())); - nano::state_block state_send4 (key1.pub, state_send1.hash (), 0, nano::Gxrb_ratio - 2, nano::dev_genesis_key.pub, key1.prv, key1.pub, *system.work.generate (state_send1.hash ())); - nano::state_block state_receive3 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio * 2 + 1, state_send4.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send1.hash ())); + nano::state_block state_send4 (key1.pub, state_send1.hash (), 0, nano::Gxrb_ratio - 2, nano::dev::genesis_key.pub, key1.prv, key1.pub, *system.work.generate (state_send1.hash ())); + nano::state_block state_receive3 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio * 2 + 1, state_send4.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1.hash ())); { auto transaction (store.tx_begin_write ()); @@ -611,8 +611,8 @@ TEST (confirmation_height, all_block_types) ASSERT_TRUE (node->ledger.block_confirmed (transaction, state_send2->hash ())); nano::account_info account_info; nano::confirmation_height_info confirmation_height_info; - ASSERT_FALSE (node->store.account.get (transaction, nano::dev_genesis_key.pub, account_info)); - ASSERT_FALSE (node->store.confirmation_height.get (transaction, nano::dev_genesis_key.pub, confirmation_height_info)); + ASSERT_FALSE (node->store.account.get (transaction, nano::dev::genesis_key.pub, account_info)); + ASSERT_FALSE (node->store.confirmation_height.get (transaction, nano::dev::genesis_key.pub, confirmation_height_info)); ASSERT_EQ (3, confirmation_height_info.height); ASSERT_EQ (send1.hash (), confirmation_height_info.frontier); ASSERT_LE (4, account_info.block_count); @@ -656,10 +656,10 @@ TEST (confirmation_height, conflict_rollback_cemented) ASSERT_EQ (1, node1->network.size ()); nano::keypair key1; nano::genesis genesis; - auto send1 (std::make_shared (genesis.hash (), key1.pub, nano::genesis_amount - 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (genesis.hash ()))); + auto send1 (std::make_shared (genesis.hash (), key1.pub, nano::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (genesis.hash ()))); nano::publish publish1 (send1); nano::keypair key2; - auto send2 (std::make_shared (genesis.hash (), key2.pub, nano::genesis_amount - 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (genesis.hash ()))); + auto send2 (std::make_shared (genesis.hash (), key2.pub, nano::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (genesis.hash ()))); nano::publish publish2 (send2); auto channel1 (node1->network.udp_channels.create (node1->network.endpoint ())); node1->network.inbound (publish1, channel1); @@ -671,7 +671,7 @@ TEST (confirmation_height, conflict_rollback_cemented) node2->scheduler.flush (); ASSERT_EQ (1, node1->active.size ()); ASSERT_EQ (1, node2->active.size ()); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); node1->network.inbound (publish2, channel1); node1->block_processor.flush (); node2->network.inbound (publish1, channel2); @@ -729,7 +729,7 @@ TEST (confirmation_heightDeathTest, rollback_added_block) nano::write_database_queue write_database_queue (false); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - auto send = std::make_shared (genesis.hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + auto send = std::make_shared (genesis.hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); { auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); @@ -759,9 +759,9 @@ TEST (confirmation_height, observers) node_flags.confirmation_height_processor_mode = mode_a; auto node1 = system.add_node (node_flags); nano::keypair key1; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - nano::block_hash latest1 (node1->latest (nano::dev_genesis_key.pub)); - auto send1 (std::make_shared (latest1, key1.pub, amount - node1->config.receive_minimum.number (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (latest1))); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); + nano::block_hash latest1 (node1->latest (nano::dev::genesis_key.pub)); + auto send1 (std::make_shared (latest1, key1.pub, amount - node1->config.receive_minimum.number (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest1))); add_callback_stats (*node1); @@ -806,7 +806,7 @@ TEST (confirmation_heightDeathTest, modified_chain) nano::write_database_queue write_database_queue (false); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - auto send = std::make_shared (nano::dev::genesis->hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + auto send = std::make_shared (nano::dev::genesis->hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); { auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); @@ -877,7 +877,7 @@ TEST (confirmation_heightDeathTest, modified_chain_account_removed) nano::write_database_queue write_database_queue (false); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - auto send = std::make_shared (nano::dev::genesis->hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + auto send = std::make_shared (nano::dev::genesis->hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); auto open = std::make_shared (key1.pub, 0, 0, nano::Gxrb_ratio, send->hash (), key1.prv, key1.pub, *pool.generate (key1.pub)); { auto transaction (store->tx_begin_write ()); @@ -936,12 +936,12 @@ TEST (confirmation_height, pending_observer_callbacks) node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto node = system.add_node (node_config, node_flags); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - nano::block_hash latest (node->latest (nano::dev_genesis_key.pub)); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); + nano::block_hash latest (node->latest (nano::dev::genesis_key.pub)); nano::keypair key1; - nano::send_block send (latest, key1.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (latest)); - auto send1 = std::make_shared (send.hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send.hash ())); + nano::send_block send (latest, key1.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); + auto send1 = std::make_shared (send.hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send.hash ())); { auto transaction = node->store.tx_begin_write (); @@ -979,16 +979,16 @@ TEST (confirmation_height, callback_confirmed_history) node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto node = system.add_node (node_config, node_flags); - nano::block_hash latest (node->latest (nano::dev_genesis_key.pub)); + nano::block_hash latest (node->latest (nano::dev::genesis_key.pub)); nano::keypair key1; - auto send = std::make_shared (latest, key1.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (latest)); + auto send = std::make_shared (latest, key1.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); { auto transaction = node->store.tx_begin_write (); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, *send).code); } - auto send1 = std::make_shared (send->hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send->hash ())); + auto send1 = std::make_shared (send->hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send->hash ())); add_callback_stats (*node); @@ -1060,12 +1060,12 @@ TEST (confirmation_height, dependent_election) node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto node = system.add_node (node_config, node_flags); - nano::block_hash latest (node->latest (nano::dev_genesis_key.pub)); + nano::block_hash latest (node->latest (nano::dev::genesis_key.pub)); nano::keypair key1; - auto send = std::make_shared (latest, key1.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (latest)); - auto send1 = std::make_shared (send->hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send->hash ())); - auto send2 = std::make_shared (send1->hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio * 3, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send1->hash ())); + auto send = std::make_shared (latest, key1.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); + auto send1 = std::make_shared (send->hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send->hash ())); + auto send2 = std::make_shared (send1->hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio * 3, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1->hash ())); { auto transaction = node->store.tx_begin_write (); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, *send).code); @@ -1110,27 +1110,27 @@ TEST (confirmation_height, cemented_gap_below_receive) node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto node = system.add_node (node_config, node_flags); - nano::block_hash latest (node->latest (nano::dev_genesis_key.pub)); + nano::block_hash latest (node->latest (nano::dev::genesis_key.pub)); nano::keypair key1; system.wallet (0)->insert_adhoc (key1.prv); - nano::send_block send (latest, key1.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (latest)); - nano::send_block send1 (send.hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send.hash ())); + nano::send_block send (latest, key1.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); + nano::send_block send1 (send.hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send.hash ())); nano::keypair dummy_key; - nano::send_block dummy_send (send1.hash (), dummy_key.pub, nano::genesis_amount - nano::Gxrb_ratio * 3, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send1.hash ())); + nano::send_block dummy_send (send1.hash (), dummy_key.pub, nano::genesis_amount - nano::Gxrb_ratio * 3, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1.hash ())); nano::open_block open (send.hash (), nano::dev::genesis->account (), key1.pub, key1.prv, key1.pub, *system.work.generate (key1.pub)); nano::receive_block receive1 (open.hash (), send1.hash (), key1.prv, key1.pub, *system.work.generate (open.hash ())); - nano::send_block send2 (receive1.hash (), nano::dev_genesis_key.pub, nano::Gxrb_ratio, key1.prv, key1.pub, *system.work.generate (receive1.hash ())); + nano::send_block send2 (receive1.hash (), nano::dev::genesis_key.pub, nano::Gxrb_ratio, key1.prv, key1.pub, *system.work.generate (receive1.hash ())); - nano::receive_block receive2 (dummy_send.hash (), send2.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (dummy_send.hash ())); - nano::send_block dummy_send1 (receive2.hash (), dummy_key.pub, nano::genesis_amount - nano::Gxrb_ratio * 3, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (receive2.hash ())); + nano::receive_block receive2 (dummy_send.hash (), send2.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (dummy_send.hash ())); + nano::send_block dummy_send1 (receive2.hash (), dummy_key.pub, nano::genesis_amount - nano::Gxrb_ratio * 3, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (receive2.hash ())); nano::keypair key2; system.wallet (0)->insert_adhoc (key2.prv); - nano::send_block send3 (dummy_send1.hash (), key2.pub, nano::genesis_amount - nano::Gxrb_ratio * 4, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (dummy_send1.hash ())); - nano::send_block dummy_send2 (send3.hash (), dummy_key.pub, nano::genesis_amount - nano::Gxrb_ratio * 5, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send3.hash ())); + nano::send_block send3 (dummy_send1.hash (), key2.pub, nano::genesis_amount - nano::Gxrb_ratio * 4, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (dummy_send1.hash ())); + nano::send_block dummy_send2 (send3.hash (), dummy_key.pub, nano::genesis_amount - nano::Gxrb_ratio * 5, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send3.hash ())); auto open1 = std::make_shared (send3.hash (), nano::dev::genesis->account (), key2.pub, key2.prv, key2.pub, *system.work.generate (key2.pub)); @@ -1195,27 +1195,27 @@ TEST (confirmation_height, cemented_gap_below_no_cache) node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto node = system.add_node (node_config, node_flags); - nano::block_hash latest (node->latest (nano::dev_genesis_key.pub)); + nano::block_hash latest (node->latest (nano::dev::genesis_key.pub)); nano::keypair key1; system.wallet (0)->insert_adhoc (key1.prv); - nano::send_block send (latest, key1.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (latest)); - nano::send_block send1 (send.hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send.hash ())); + nano::send_block send (latest, key1.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); + nano::send_block send1 (send.hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send.hash ())); nano::keypair dummy_key; - nano::send_block dummy_send (send1.hash (), dummy_key.pub, nano::genesis_amount - nano::Gxrb_ratio * 3, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send1.hash ())); + nano::send_block dummy_send (send1.hash (), dummy_key.pub, nano::genesis_amount - nano::Gxrb_ratio * 3, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1.hash ())); nano::open_block open (send.hash (), nano::dev::genesis->account (), key1.pub, key1.prv, key1.pub, *system.work.generate (key1.pub)); nano::receive_block receive1 (open.hash (), send1.hash (), key1.prv, key1.pub, *system.work.generate (open.hash ())); - nano::send_block send2 (receive1.hash (), nano::dev_genesis_key.pub, nano::Gxrb_ratio, key1.prv, key1.pub, *system.work.generate (receive1.hash ())); + nano::send_block send2 (receive1.hash (), nano::dev::genesis_key.pub, nano::Gxrb_ratio, key1.prv, key1.pub, *system.work.generate (receive1.hash ())); - nano::receive_block receive2 (dummy_send.hash (), send2.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (dummy_send.hash ())); - nano::send_block dummy_send1 (receive2.hash (), dummy_key.pub, nano::genesis_amount - nano::Gxrb_ratio * 3, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (receive2.hash ())); + nano::receive_block receive2 (dummy_send.hash (), send2.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (dummy_send.hash ())); + nano::send_block dummy_send1 (receive2.hash (), dummy_key.pub, nano::genesis_amount - nano::Gxrb_ratio * 3, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (receive2.hash ())); nano::keypair key2; system.wallet (0)->insert_adhoc (key2.prv); - nano::send_block send3 (dummy_send1.hash (), key2.pub, nano::genesis_amount - nano::Gxrb_ratio * 4, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (dummy_send1.hash ())); - nano::send_block dummy_send2 (send3.hash (), dummy_key.pub, nano::genesis_amount - nano::Gxrb_ratio * 5, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send3.hash ())); + nano::send_block send3 (dummy_send1.hash (), key2.pub, nano::genesis_amount - nano::Gxrb_ratio * 4, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (dummy_send1.hash ())); + nano::send_block dummy_send2 (send3.hash (), dummy_key.pub, nano::genesis_amount - nano::Gxrb_ratio * 5, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send3.hash ())); auto open1 = std::make_shared (send3.hash (), nano::dev::genesis->account (), key2.pub, key2.prv, key2.pub, *system.work.generate (key2.pub)); @@ -1278,12 +1278,12 @@ TEST (confirmation_height, election_winner_details_clearing) node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto node = system.add_node (node_config, node_flags); - nano::block_hash latest (node->latest (nano::dev_genesis_key.pub)); + nano::block_hash latest (node->latest (nano::dev::genesis_key.pub)); nano::keypair key1; - auto send = std::make_shared (latest, key1.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (latest)); - auto send1 = std::make_shared (send->hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send->hash ())); - auto send2 = std::make_shared (send1->hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio * 3, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send1->hash ())); + auto send = std::make_shared (latest, key1.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); + auto send1 = std::make_shared (send->hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send->hash ())); + auto send2 = std::make_shared (send1->hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio * 3, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1->hash ())); { auto transaction = node->store.tx_begin_write (); @@ -1344,7 +1344,7 @@ TEST (confirmation_height, election_winner_details_clearing_node_process_confirm nano::system system (1); auto node = system.nodes.front (); - auto send = std::make_shared (nano::dev::genesis->hash (), nano::dev_genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ())); + auto send = std::make_shared (nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ())); // Add to election_winner_details. Use an unrealistic iteration so that it should fall into the else case and do a cleanup node->active.add_election_winner_details (send->hash (), nullptr); nano::election_status election; @@ -1372,8 +1372,8 @@ TEST (confirmation_height, unbounded_block_cache_iteration) nano::work_pool pool (std::numeric_limits::max ()); nano::logging logging; nano::keypair key1; - auto send = std::make_shared (genesis.hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); - auto send1 = std::make_shared (send->hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send->hash ())); + auto send = std::make_shared (genesis.hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + auto send1 = std::make_shared (send->hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send->hash ())); { auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); @@ -1422,7 +1422,7 @@ TEST (confirmation_height, pruned_source) nano::write_database_queue write_database_queue (false); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1, key2; - auto send1 = std::make_shared (nano::dev_genesis_key.pub, genesis.hash (), nano::dev_genesis_key.pub, nano::genesis_amount - 100, key1.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + auto send1 = std::make_shared (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::genesis_amount - 100, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); auto open1 = std::make_shared (key1.pub, 0, key1.pub, 100, send1->hash (), key1.prv, key1.pub, *pool.generate (key1.pub)); auto send2 = std::make_shared (key1.pub, open1->hash (), key1.pub, 50, key2.pub, key1.prv, key1.pub, *pool.generate (open1->hash ())); auto send3 = std::make_shared (key1.pub, send2->hash (), key1.pub, 25, key2.pub, key1.prv, key1.pub, *pool.generate (send2->hash ())); diff --git a/nano/core_test/confirmation_solicitor.cpp b/nano/core_test/confirmation_solicitor.cpp index 13a297c8d2..19572e40ee 100644 --- a/nano/core_test/confirmation_solicitor.cpp +++ b/nano/core_test/confirmation_solicitor.cpp @@ -19,16 +19,16 @@ TEST (confirmation_solicitor, batches) auto & node2 = *system.add_node (node_flags); auto channel1 (node2.network.udp_channels.create (node1.network.endpoint ())); // Solicitor will only solicit from this representative - nano::representative representative (nano::dev_genesis_key.pub, nano::genesis_amount, channel1); + nano::representative representative (nano::dev::genesis_key.pub, nano::genesis_amount, channel1); std::vector representatives{ representative }; nano::confirmation_solicitor solicitor (node2.network, node2.config); solicitor.prepare (representatives); // Ensure the representatives are correct ASSERT_EQ (1, representatives.size ()); ASSERT_EQ (channel1, representatives.front ().channel); - ASSERT_EQ (nano::dev_genesis_key.pub, representatives.front ().account); + ASSERT_EQ (nano::dev::genesis_key.pub, representatives.front ().account); ASSERT_TIMELY (3s, node2.network.size () == 1); - auto send (std::make_shared (nano::dev::genesis->hash (), nano::keypair ().pub, nano::genesis_amount - 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); + auto send (std::make_shared (nano::dev::genesis->hash (), nano::keypair ().pub, nano::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); send->sideband_set ({}); { nano::lock_guard guard (node2.active.mutex); @@ -63,16 +63,16 @@ TEST (confirmation_solicitor, different_hash) auto & node2 = *system.add_node (node_flags); auto channel1 (node2.network.udp_channels.create (node1.network.endpoint ())); // Solicitor will only solicit from this representative - nano::representative representative (nano::dev_genesis_key.pub, nano::genesis_amount, channel1); + nano::representative representative (nano::dev::genesis_key.pub, nano::genesis_amount, channel1); std::vector representatives{ representative }; nano::confirmation_solicitor solicitor (node2.network, node2.config); solicitor.prepare (representatives); // Ensure the representatives are correct ASSERT_EQ (1, representatives.size ()); ASSERT_EQ (channel1, representatives.front ().channel); - ASSERT_EQ (nano::dev_genesis_key.pub, representatives.front ().account); + ASSERT_EQ (nano::dev::genesis_key.pub, representatives.front ().account); ASSERT_TIMELY (3s, node2.network.size () == 1); - auto send (std::make_shared (nano::dev::genesis->hash (), nano::keypair ().pub, nano::genesis_amount - 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); + auto send (std::make_shared (nano::dev::genesis->hash (), nano::keypair ().pub, nano::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); send->sideband_set ({}); auto election (std::make_shared (node2, send, nullptr, nullptr, nano::election_behavior::normal)); // Add a vote for something else, not the winner @@ -108,7 +108,7 @@ TEST (confirmation_solicitor, bypass_max_requests_cap) ASSERT_EQ (max_representatives + 1, representatives.size ()); solicitor.prepare (representatives); ASSERT_TIMELY (3s, node2.network.size () == 1); - auto send (std::make_shared (nano::dev::genesis->hash (), nano::keypair ().pub, nano::genesis_amount - 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); + auto send (std::make_shared (nano::dev::genesis->hash (), nano::keypair ().pub, nano::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); send->sideband_set ({}); auto election (std::make_shared (node2, send, nullptr, nullptr, nano::election_behavior::normal)); // Add a vote for something else, not the winner diff --git a/nano/core_test/conflicts.cpp b/nano/core_test/conflicts.cpp index 33940baba1..cfbb4c3b6c 100644 --- a/nano/core_test/conflicts.cpp +++ b/nano/core_test/conflicts.cpp @@ -14,11 +14,11 @@ TEST (conflicts, start_stop) auto & node1 (*system.nodes[0]); nano::genesis genesis; nano::keypair key1; - auto send1 (std::make_shared (genesis.hash (), key1.pub, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); + auto send1 (std::make_shared (genesis.hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send1); ASSERT_EQ (nano::process_result::progress, node1.process (*send1).code); ASSERT_EQ (0, node1.active.size ()); - node1.scheduler.activate (nano::dev_genesis_key.pub, node1.store.tx_begin_read ()); + node1.scheduler.activate (nano::dev::genesis_key.pub, node1.store.tx_begin_read ()); node1.scheduler.flush (); auto election1 = node1.active.election (send1->qualified_root ()); ASSERT_EQ (1, node1.active.size ()); @@ -32,14 +32,14 @@ TEST (conflicts, add_existing) auto & node1 (*system.nodes[0]); nano::genesis genesis; nano::keypair key1; - auto send1 (std::make_shared (genesis.hash (), key1.pub, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); + auto send1 (std::make_shared (genesis.hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send1); ASSERT_EQ (nano::process_result::progress, node1.process (*send1).code); - node1.scheduler.activate (nano::dev_genesis_key.pub, node1.store.tx_begin_read ()); + node1.scheduler.activate (nano::dev::genesis_key.pub, node1.store.tx_begin_read ()); nano::keypair key2; - auto send2 (std::make_shared (genesis.hash (), key2.pub, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); + auto send2 (std::make_shared (genesis.hash (), key2.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); send2->sideband_set ({}); - node1.scheduler.activate (nano::dev_genesis_key.pub, node1.store.tx_begin_read ()); + node1.scheduler.activate (nano::dev::genesis_key.pub, node1.store.tx_begin_read ()); node1.scheduler.flush (); auto election1 = node1.active.election (send2->qualified_root ()); ASSERT_NE (nullptr, election1); @@ -57,16 +57,16 @@ TEST (conflicts, add_two) auto & node1 (*system.nodes[0]); nano::genesis genesis; nano::keypair key1; - auto send1 (std::make_shared (genesis.hash (), key1.pub, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); + auto send1 (std::make_shared (genesis.hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send1); ASSERT_EQ (nano::process_result::progress, node1.process (*send1).code); node1.block_confirm (send1); node1.active.election (send1->qualified_root ())->force_confirm (); nano::keypair key2; - auto send2 (std::make_shared (send1->hash (), key2.pub, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); + auto send2 (std::make_shared (send1->hash (), key2.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send2); ASSERT_EQ (nano::process_result::progress, node1.process (*send2).code); - node1.scheduler.activate (nano::dev_genesis_key.pub, node1.store.tx_begin_read ()); + node1.scheduler.activate (nano::dev::genesis_key.pub, node1.store.tx_begin_read ()); node1.scheduler.flush (); ASSERT_EQ (2, node1.active.size ()); } diff --git a/nano/core_test/election.cpp b/nano/core_test/election.cpp index 3c0d77e32f..c731faa69f 100644 --- a/nano/core_test/election.cpp +++ b/nano/core_test/election.cpp @@ -28,24 +28,24 @@ TEST (election, quorum_minimum_flip_success) nano::keypair key1; nano::block_builder builder; auto send1 = builder.state () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (node1.online_reps.delta ()) .link (key1.pub) .work (0) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .build_shared (); node1.work_generate_blocking (*send1); nano::keypair key2; auto send2 = builder.state () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (node1.online_reps.delta ()) .link (key2.pub) .work (0) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .build_shared (); node1.work_generate_blocking (*send2); node1.process_active (send1); @@ -57,7 +57,7 @@ TEST (election, quorum_minimum_flip_success) auto election = node1.active.election (send1->qualified_root ()); ASSERT_NE (nullptr, election); ASSERT_EQ (2, election->blocks ().size ()); - auto vote1 (std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, std::numeric_limits::max (), send2)); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), send2)); ASSERT_EQ (nano::vote_code::vote, node1.active.vote (vote1)); node1.block_processor.flush (); ASSERT_NE (nullptr, node1.block (send2->hash ())); @@ -74,24 +74,24 @@ TEST (election, quorum_minimum_flip_fail) nano::keypair key1; nano::block_builder builder; auto send1 = builder.state () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (node1.online_reps.delta () - 1) .link (key1.pub) .work (0) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .build_shared (); node1.work_generate_blocking (*send1); nano::keypair key2; auto send2 = builder.state () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (node1.online_reps.delta () - 1) .link (key2.pub) .work (0) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .build_shared (); node1.work_generate_blocking (*send2); node1.process_active (send1); @@ -103,7 +103,7 @@ TEST (election, quorum_minimum_flip_fail) auto election = node1.active.election (send1->qualified_root ()); ASSERT_NE (nullptr, election); ASSERT_EQ (2, election->blocks ().size ()); - auto vote1 (std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, std::numeric_limits::max (), send2)); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), send2)); ASSERT_EQ (nano::vote_code::vote, node1.active.vote (vote1)); node1.block_processor.flush (); ASSERT_NE (nullptr, node1.block (send1->hash ())); @@ -120,23 +120,23 @@ TEST (election, quorum_minimum_confirm_success) nano::keypair key1; nano::block_builder builder; auto send1 = builder.state () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (node1.online_reps.delta ()) .link (key1.pub) .work (0) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .build_shared (); node1.work_generate_blocking (*send1); node1.process_active (send1); node1.block_processor.flush (); - node1.scheduler.activate (nano::dev_genesis_key.pub, node1.store.tx_begin_read ()); + node1.scheduler.activate (nano::dev::genesis_key.pub, node1.store.tx_begin_read ()); node1.scheduler.flush (); auto election = node1.active.election (send1->qualified_root ()); ASSERT_NE (nullptr, election); ASSERT_EQ (1, election->blocks ().size ()); - auto vote1 (std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, std::numeric_limits::max (), send1)); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), send1)); ASSERT_EQ (nano::vote_code::vote, node1.active.vote (vote1)); node1.block_processor.flush (); ASSERT_NE (nullptr, node1.block (send1->hash ())); @@ -153,23 +153,23 @@ TEST (election, quorum_minimum_confirm_fail) nano::keypair key1; nano::block_builder builder; auto send1 = builder.state () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (node1.online_reps.delta () - 1) .link (key1.pub) .work (0) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .build_shared (); node1.work_generate_blocking (*send1); node1.process_active (send1); node1.block_processor.flush (); - node1.scheduler.activate (nano::dev_genesis_key.pub, node1.store.tx_begin_read ()); + node1.scheduler.activate (nano::dev::genesis_key.pub, node1.store.tx_begin_read ()); node1.scheduler.flush (); auto election = node1.active.election (send1->qualified_root ()); ASSERT_NE (nullptr, election); ASSERT_EQ (1, election->blocks ().size ()); - auto vote1 (std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, std::numeric_limits::max (), send1)); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), send1)); ASSERT_EQ (nano::vote_code::vote, node1.active.vote (vote1)); node1.block_processor.flush (); ASSERT_NE (nullptr, node1.block (send1->hash ())); @@ -184,18 +184,18 @@ TEST (election, quorum_minimum_update_weight_before_quorum_checks) nano::node_config node_config (nano::get_available_port (), system.logging); node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto & node1 = *system.add_node (node_config); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto amount = ((nano::uint256_t (node_config.online_weight_minimum.number ()) * nano::online_reps::online_weight_quorum) / 100).convert_to () - 1; nano::keypair key1; nano::block_builder builder; auto send1 = builder.state () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (amount) .link (key1.pub) .work (0) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .build_shared (); node1.work_generate_blocking (*send1); auto open1 = builder.state () @@ -235,12 +235,12 @@ TEST (election, quorum_minimum_update_weight_before_quorum_checks) node2.block_processor.flush (); ASSERT_EQ (node2.ledger.cache.block_count, 4); - node1.scheduler.activate (nano::dev_genesis_key.pub, node1.store.tx_begin_read ()); + node1.scheduler.activate (nano::dev::genesis_key.pub, node1.store.tx_begin_read ()); node1.scheduler.flush (); auto election = node1.active.election (send1->qualified_root ()); ASSERT_NE (nullptr, election); ASSERT_EQ (1, election->blocks ().size ()); - auto vote1 (std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, std::numeric_limits::max (), send1)); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), send1)); ASSERT_EQ (nano::vote_code::vote, node1.active.vote (vote1)); auto vote2 (std::make_shared (key1.pub, key1.prv, std::numeric_limits::max (), send1)); auto channel = node1.network.find_channel (node2.network.endpoint ()); diff --git a/nano/core_test/election_scheduler.cpp b/nano/core_test/election_scheduler.cpp index 368ee24f05..565d5d05e3 100644 --- a/nano/core_test/election_scheduler.cpp +++ b/nano/core_test/election_scheduler.cpp @@ -18,16 +18,16 @@ TEST (election_scheduler, activate_one_timely) nano::system system{ 1 }; nano::state_block_builder builder; auto send1 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) - .link (nano::dev_genesis_key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .link (nano::dev::genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); system.nodes[0]->ledger.process (system.nodes[0]->store.tx_begin_write (), *send1); - system.nodes[0]->scheduler.activate (nano::dev_genesis_key.pub, system.nodes[0]->store.tx_begin_read ()); + system.nodes[0]->scheduler.activate (nano::dev::genesis_key.pub, system.nodes[0]->store.tx_begin_read ()); ASSERT_TIMELY (1s, system.nodes[0]->active.election (send1->qualified_root ())); } @@ -36,16 +36,16 @@ TEST (election_scheduler, activate_one_flush) nano::system system{ 1 }; nano::state_block_builder builder; auto send1 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) - .link (nano::dev_genesis_key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .link (nano::dev::genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); system.nodes[0]->ledger.process (system.nodes[0]->store.tx_begin_write (), *send1); - system.nodes[0]->scheduler.activate (nano::dev_genesis_key.pub, system.nodes[0]->store.tx_begin_read ()); + system.nodes[0]->scheduler.activate (nano::dev::genesis_key.pub, system.nodes[0]->store.tx_begin_read ()); system.nodes[0]->scheduler.flush (); ASSERT_NE (nullptr, system.nodes[0]->active.election (send1->qualified_root ())); } @@ -61,12 +61,12 @@ TEST (election_scheduler, no_vacancy) // Activating accounts depends on confirmed dependencies. First, prepare 2 accounts auto send = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .link (key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); auto receive = builder.make_block () @@ -87,12 +87,12 @@ TEST (election_scheduler, no_vacancy) // Second, process two eligble transactions auto block0 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (send->hash ()) - .representative (nano::dev_genesis_key.pub) - .link (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) + .link (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - 2 * nano::Gxrb_ratio) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send->hash ())) .build_shared (); auto block1 = builder.make_block () @@ -106,7 +106,7 @@ TEST (election_scheduler, no_vacancy) .build_shared (); ASSERT_EQ (nano::process_result::progress, node.process (*block0).code); ASSERT_EQ (nano::process_result::progress, node.process (*block1).code); - node.scheduler.activate (nano::dev_genesis_key.pub, node.store.tx_begin_read ()); + node.scheduler.activate (nano::dev::genesis_key.pub, node.store.tx_begin_read ()); // There is vacancy so it should be inserted ASSERT_TIMELY (1s, node.active.size () == 1); node.scheduler.activate (key.pub, node.store.tx_begin_read ()); @@ -134,16 +134,16 @@ TEST (election_scheduler, flush_vacancy) nano::keypair key; auto send = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .link (key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, node.process (*send).code); - node.scheduler.activate (nano::dev_genesis_key.pub, node.store.tx_begin_read ()); + node.scheduler.activate (nano::dev::genesis_key.pub, node.store.tx_begin_read ()); // Ensure this call does not block, even though no elections can be activated. node.scheduler.flush (); ASSERT_EQ (0, node.active.size ()); diff --git a/nano/core_test/frontiers_confirmation.cpp b/nano/core_test/frontiers_confirmation.cpp index ea4674dfbe..009a2e37a1 100644 --- a/nano/core_test/frontiers_confirmation.cpp +++ b/nano/core_test/frontiers_confirmation.cpp @@ -20,29 +20,29 @@ TEST (frontiers_confirmation, prioritize_frontiers) nano::keypair key2; nano::keypair key3; nano::keypair key4; - nano::block_hash latest1 (node->latest (nano::dev_genesis_key.pub)); + nano::block_hash latest1 (node->latest (nano::dev::genesis_key.pub)); // Send different numbers of blocks all accounts - nano::send_block send1 (latest1, key1.pub, node->config.online_weight_minimum.number () + 10000, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (latest1)); - nano::send_block send2 (send1.hash (), key1.pub, node->config.online_weight_minimum.number () + 8500, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send1.hash ())); - nano::send_block send3 (send2.hash (), key1.pub, node->config.online_weight_minimum.number () + 8000, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send2.hash ())); - nano::send_block send4 (send3.hash (), key2.pub, node->config.online_weight_minimum.number () + 7500, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send3.hash ())); - nano::send_block send5 (send4.hash (), key3.pub, node->config.online_weight_minimum.number () + 6500, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send4.hash ())); - nano::send_block send6 (send5.hash (), key4.pub, node->config.online_weight_minimum.number () + 6000, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send5.hash ())); + nano::send_block send1 (latest1, key1.pub, node->config.online_weight_minimum.number () + 10000, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest1)); + nano::send_block send2 (send1.hash (), key1.pub, node->config.online_weight_minimum.number () + 8500, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1.hash ())); + nano::send_block send3 (send2.hash (), key1.pub, node->config.online_weight_minimum.number () + 8000, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send2.hash ())); + nano::send_block send4 (send3.hash (), key2.pub, node->config.online_weight_minimum.number () + 7500, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send3.hash ())); + nano::send_block send5 (send4.hash (), key3.pub, node->config.online_weight_minimum.number () + 6500, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send4.hash ())); + nano::send_block send6 (send5.hash (), key4.pub, node->config.online_weight_minimum.number () + 6000, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send5.hash ())); // Open all accounts and add other sends to get different uncemented counts (as well as some which are the same) nano::open_block open1 (send1.hash (), nano::dev::genesis->account (), key1.pub, key1.prv, key1.pub, *system.work.generate (key1.pub)); - nano::send_block send7 (open1.hash (), nano::dev_genesis_key.pub, 500, key1.prv, key1.pub, *system.work.generate (open1.hash ())); + nano::send_block send7 (open1.hash (), nano::dev::genesis_key.pub, 500, key1.prv, key1.pub, *system.work.generate (open1.hash ())); nano::open_block open2 (send4.hash (), nano::dev::genesis->account (), key2.pub, key2.prv, key2.pub, *system.work.generate (key2.pub)); nano::open_block open3 (send5.hash (), nano::dev::genesis->account (), key3.pub, key3.prv, key3.pub, *system.work.generate (key3.pub)); - nano::send_block send8 (open3.hash (), nano::dev_genesis_key.pub, 500, key3.prv, key3.pub, *system.work.generate (open3.hash ())); - nano::send_block send9 (send8.hash (), nano::dev_genesis_key.pub, 200, key3.prv, key3.pub, *system.work.generate (send8.hash ())); + nano::send_block send8 (open3.hash (), nano::dev::genesis_key.pub, 500, key3.prv, key3.pub, *system.work.generate (open3.hash ())); + nano::send_block send9 (send8.hash (), nano::dev::genesis_key.pub, 200, key3.prv, key3.pub, *system.work.generate (send8.hash ())); nano::open_block open4 (send6.hash (), nano::dev::genesis->account (), key4.pub, key4.prv, key4.pub, *system.work.generate (key4.pub)); - nano::send_block send10 (open4.hash (), nano::dev_genesis_key.pub, 500, key4.prv, key4.pub, *system.work.generate (open4.hash ())); - nano::send_block send11 (send10.hash (), nano::dev_genesis_key.pub, 200, key4.prv, key4.pub, *system.work.generate (send10.hash ())); + nano::send_block send10 (open4.hash (), nano::dev::genesis_key.pub, 500, key4.prv, key4.pub, *system.work.generate (open4.hash ())); + nano::send_block send11 (send10.hash (), nano::dev::genesis_key.pub, 200, key4.prv, key4.pub, *system.work.generate (send10.hash ())); { auto transaction = node->store.tx_begin_write (); @@ -85,7 +85,7 @@ TEST (frontiers_confirmation, prioritize_frontiers) { // Add some to the local node wallets and check ordering of both containers - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); system.wallet (0)->insert_adhoc (key1.prv); system.wallet (0)->insert_adhoc (key2.prv); node->active.prioritize_frontiers_for_confirmation (transaction, std::chrono::seconds (1), std::chrono::seconds (1)); @@ -111,12 +111,12 @@ TEST (frontiers_confirmation, prioritize_frontiers) } // Check that accounts which already exist have their order modified when the uncemented count changes. - nano::send_block send12 (send9.hash (), nano::dev_genesis_key.pub, 100, key3.prv, key3.pub, *system.work.generate (send9.hash ())); - nano::send_block send13 (send12.hash (), nano::dev_genesis_key.pub, 90, key3.prv, key3.pub, *system.work.generate (send12.hash ())); - nano::send_block send14 (send13.hash (), nano::dev_genesis_key.pub, 80, key3.prv, key3.pub, *system.work.generate (send13.hash ())); - nano::send_block send15 (send14.hash (), nano::dev_genesis_key.pub, 70, key3.prv, key3.pub, *system.work.generate (send14.hash ())); - nano::send_block send16 (send15.hash (), nano::dev_genesis_key.pub, 60, key3.prv, key3.pub, *system.work.generate (send15.hash ())); - nano::send_block send17 (send16.hash (), nano::dev_genesis_key.pub, 50, key3.prv, key3.pub, *system.work.generate (send16.hash ())); + nano::send_block send12 (send9.hash (), nano::dev::genesis_key.pub, 100, key3.prv, key3.pub, *system.work.generate (send9.hash ())); + nano::send_block send13 (send12.hash (), nano::dev::genesis_key.pub, 90, key3.prv, key3.pub, *system.work.generate (send12.hash ())); + nano::send_block send14 (send13.hash (), nano::dev::genesis_key.pub, 80, key3.prv, key3.pub, *system.work.generate (send13.hash ())); + nano::send_block send15 (send14.hash (), nano::dev::genesis_key.pub, 70, key3.prv, key3.pub, *system.work.generate (send14.hash ())); + nano::send_block send16 (send15.hash (), nano::dev::genesis_key.pub, 60, key3.prv, key3.pub, *system.work.generate (send15.hash ())); + nano::send_block send17 (send16.hash (), nano::dev::genesis_key.pub, 50, key3.prv, key3.pub, *system.work.generate (send16.hash ())); { auto transaction = node->store.tx_begin_write (); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, send12).code); @@ -161,7 +161,7 @@ TEST (frontiers_confirmation, prioritize_frontiers_max_optimistic_elections) auto transaction = node->store.tx_begin_write (); auto latest = node->latest (nano::dev::genesis->account ()); nano::keypair key; - nano::send_block send (latest, key.pub, node->config.online_weight_minimum.number () + 10000, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (latest)); + nano::send_block send (latest, key.pub, node->config.online_weight_minimum.number () + 10000, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, send).code); nano::open_block open (send.hash (), nano::dev::genesis->account (), key.pub, key.prv, key.pub, *system.work.generate (key.pub)); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, open).code); @@ -219,7 +219,7 @@ TEST (frontiers_confirmation, mode) nano::node_config node_config (nano::get_available_port (), system.logging); node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::always; auto node = system.add_node (node_config, node_flags); - nano::state_block send (nano::dev_genesis_key.pub, genesis.hash (), nano::dev_genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node->work_generate_blocking (genesis.hash ())); + nano::state_block send (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node->work_generate_blocking (genesis.hash ())); { auto transaction = node->store.tx_begin_write (); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, send).code); @@ -232,7 +232,7 @@ TEST (frontiers_confirmation, mode) nano::node_config node_config (nano::get_available_port (), system.logging); node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::automatic; auto node = system.add_node (node_config, node_flags); - nano::state_block send (nano::dev_genesis_key.pub, genesis.hash (), nano::dev_genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node->work_generate_blocking (genesis.hash ())); + nano::state_block send (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node->work_generate_blocking (genesis.hash ())); { auto transaction = node->store.tx_begin_write (); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, send).code); @@ -245,12 +245,12 @@ TEST (frontiers_confirmation, mode) nano::node_config node_config (nano::get_available_port (), system.logging); node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto node = system.add_node (node_config, node_flags); - nano::state_block send (nano::dev_genesis_key.pub, genesis.hash (), nano::dev_genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node->work_generate_blocking (genesis.hash ())); + nano::state_block send (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node->work_generate_blocking (genesis.hash ())); { auto transaction = node->store.tx_begin_write (); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, send).code); } - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); std::this_thread::sleep_for (std::chrono::seconds (1)); ASSERT_EQ (0, node->active.size ()); } diff --git a/nano/core_test/gap_cache.cpp b/nano/core_test/gap_cache.cpp index c12624c116..972cb08286 100644 --- a/nano/core_test/gap_cache.cpp +++ b/nano/core_test/gap_cache.cpp @@ -65,9 +65,9 @@ TEST (gap_cache, gap_bootstrap) auto & node1 (*system.nodes[0]); auto & node2 (*system.nodes[1]); - nano::block_hash latest (node1.latest (nano::dev_genesis_key.pub)); + nano::block_hash latest (node1.latest (nano::dev::genesis_key.pub)); nano::keypair key; - auto send (std::make_shared (latest, key.pub, nano::genesis_amount - 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (latest))); + auto send (std::make_shared (latest, key.pub, nano::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest))); node1.process (*send); ASSERT_EQ (nano::genesis_amount - 100, node1.balance (nano::dev::genesis->account ())); ASSERT_EQ (nano::genesis_amount, node2.balance (nano::dev::genesis->account ())); @@ -78,8 +78,8 @@ TEST (gap_cache, gap_bootstrap) election->force_confirm (); ASSERT_TIMELY (2s, node1.block_confirmed (send->hash ())); node1.active.erase (*send); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - auto latest_block (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, 100)); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); + auto latest_block (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key.pub, 100)); ASSERT_NE (nullptr, latest_block); ASSERT_EQ (nano::genesis_amount - 200, node1.balance (nano::dev::genesis->account ())); ASSERT_EQ (nano::genesis_amount, node2.balance (nano::dev::genesis->account ())); @@ -92,8 +92,8 @@ TEST (gap_cache, two_dependencies) auto & node1 (*system.nodes[0]); nano::keypair key; nano::genesis genesis; - auto send1 (std::make_shared (genesis.hash (), key.pub, 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (genesis.hash ()))); - auto send2 (std::make_shared (send1->hash (), key.pub, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send1->hash ()))); + auto send1 (std::make_shared (genesis.hash (), key.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (genesis.hash ()))); + auto send2 (std::make_shared (send1->hash (), key.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1->hash ()))); auto open (std::make_shared (send1->hash (), key.pub, key.pub, key.prv, key.pub, *system.work.generate (key.pub))); ASSERT_EQ (0, node1.gap_cache.size ()); node1.block_processor.add (send2, nano::seconds_since_epoch ()); diff --git a/nano/core_test/ledger.cpp b/nano/core_test/ledger.cpp index 01f322b0d0..67530c1059 100644 --- a/nano/core_test/ledger.cpp +++ b/nano/core_test/ledger.cpp @@ -76,7 +76,7 @@ TEST (ledger, process_modifies_sideband) nano::genesis genesis; store->initialize (store->tx_begin_write (), ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (store->tx_begin_write (), send1).code); ASSERT_EQ (send1.sideband ().timestamp, store->block.get (store->tx_begin_read (), send1.hash ())->sideband ().timestamp); } @@ -94,25 +94,25 @@ TEST (ledger, process_send) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::account_info info1; - ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info1)); + ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info1)); nano::keypair key2; - nano::send_block send (info1.head, key2.pub, 50, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (info1.head)); + nano::send_block send (info1.head, key2.pub, 50, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (info1.head)); nano::block_hash hash1 (send.hash ()); - ASSERT_EQ (nano::dev_genesis_key.pub, store->frontier.get (transaction, info1.head)); + ASSERT_EQ (nano::dev::genesis_key.pub, store->frontier.get (transaction, info1.head)); ASSERT_EQ (1, info1.block_count); // This was a valid block, it should progress. auto return1 (ledger.process (transaction, send)); - ASSERT_EQ (nano::dev_genesis_key.pub, send.sideband ().account); + ASSERT_EQ (nano::dev::genesis_key.pub, send.sideband ().account); ASSERT_EQ (2, send.sideband ().height); ASSERT_EQ (nano::genesis_amount - 50, ledger.amount (transaction, hash1)); ASSERT_TRUE (store->frontier.get (transaction, info1.head).is_zero ()); - ASSERT_EQ (nano::dev_genesis_key.pub, store->frontier.get (transaction, hash1)); + ASSERT_EQ (nano::dev::genesis_key.pub, store->frontier.get (transaction, hash1)); ASSERT_EQ (nano::process_result::progress, return1.code); - ASSERT_EQ (nano::dev_genesis_key.pub, store->block.account_calculated (send)); - ASSERT_EQ (50, ledger.account_balance (transaction, nano::dev_genesis_key.pub)); + ASSERT_EQ (nano::dev::genesis_key.pub, store->block.account_calculated (send)); + ASSERT_EQ (50, ledger.account_balance (transaction, nano::dev::genesis_key.pub)); ASSERT_EQ (nano::genesis_amount - 50, ledger.account_pending (transaction, key2.pub)); nano::account_info info2; - ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info2)); + ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info2)); ASSERT_EQ (2, info2.block_count); auto latest6 (store->block.get (transaction, info2.head)); ASSERT_NE (nullptr, latest6); @@ -135,10 +135,10 @@ TEST (ledger, process_send) ASSERT_EQ (key2.pub, store->frontier.get (transaction, hash2)); ASSERT_EQ (nano::genesis_amount - 50, ledger.account_balance (transaction, key2.pub)); ASSERT_EQ (0, ledger.account_pending (transaction, key2.pub)); - ASSERT_EQ (50, ledger.weight (nano::dev_genesis_key.pub)); + ASSERT_EQ (50, ledger.weight (nano::dev::genesis_key.pub)); ASSERT_EQ (nano::genesis_amount - 50, ledger.weight (key2.pub)); nano::account_info info3; - ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info3)); + ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info3)); auto latest2 (store->block.get (transaction, info3.head)); ASSERT_NE (nullptr, latest2); auto latest3 (dynamic_cast (latest2.get ())); @@ -157,27 +157,27 @@ TEST (ledger, process_send) ASSERT_TRUE (ledger.store.account.get (transaction, key2.pub, info5)); nano::pending_info pending1; ASSERT_FALSE (ledger.store.pending.get (transaction, nano::pending_key (key2.pub, hash1), pending1)); - ASSERT_EQ (nano::dev_genesis_key.pub, pending1.source); + ASSERT_EQ (nano::dev::genesis_key.pub, pending1.source); ASSERT_EQ (nano::genesis_amount - 50, pending1.amount.number ()); ASSERT_EQ (0, ledger.account_balance (transaction, key2.pub)); ASSERT_EQ (nano::genesis_amount - 50, ledger.account_pending (transaction, key2.pub)); - ASSERT_EQ (50, ledger.account_balance (transaction, nano::dev_genesis_key.pub)); - ASSERT_EQ (50, ledger.weight (nano::dev_genesis_key.pub)); + ASSERT_EQ (50, ledger.account_balance (transaction, nano::dev::genesis_key.pub)); + ASSERT_EQ (50, ledger.weight (nano::dev::genesis_key.pub)); ASSERT_EQ (0, ledger.weight (key2.pub)); nano::account_info info6; - ASSERT_FALSE (ledger.store.account.get (transaction, nano::dev_genesis_key.pub, info6)); + ASSERT_FALSE (ledger.store.account.get (transaction, nano::dev::genesis_key.pub, info6)); ASSERT_EQ (hash1, info6.head); ASSERT_FALSE (ledger.rollback (transaction, info6.head)); - ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::dev_genesis_key.pub)); - ASSERT_EQ (nano::dev_genesis_key.pub, store->frontier.get (transaction, info1.head)); + ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::genesis_key.pub, store->frontier.get (transaction, info1.head)); ASSERT_TRUE (store->frontier.get (transaction, hash1).is_zero ()); nano::account_info info7; - ASSERT_FALSE (ledger.store.account.get (transaction, nano::dev_genesis_key.pub, info7)); + ASSERT_FALSE (ledger.store.account.get (transaction, nano::dev::genesis_key.pub, info7)); ASSERT_EQ (1, info7.block_count); ASSERT_EQ (info1.head, info7.head); nano::pending_info pending2; ASSERT_TRUE (ledger.store.pending.get (transaction, nano::pending_key (key2.pub, hash1), pending2)); - ASSERT_EQ (nano::genesis_amount, ledger.account_balance (transaction, nano::dev_genesis_key.pub)); + ASSERT_EQ (nano::genesis_amount, ledger.account_balance (transaction, nano::dev::genesis_key.pub)); ASSERT_EQ (0, ledger.account_pending (transaction, key2.pub)); ASSERT_EQ (store->account.count (transaction), ledger.cache.account_count); } @@ -194,9 +194,9 @@ TEST (ledger, process_receive) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::account_info info1; - ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info1)); + ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info1)); nano::keypair key2; - nano::send_block send (info1.head, key2.pub, 50, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (info1.head)); + nano::send_block send (info1.head, key2.pub, 50, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (info1.head)); nano::block_hash hash1 (send.hash ()); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); nano::keypair key3; @@ -210,7 +210,7 @@ TEST (ledger, process_receive) ASSERT_EQ (1, open.sideband ().height); ASSERT_EQ (nano::genesis_amount - 50, ledger.amount (transaction, hash2)); ASSERT_EQ (nano::genesis_amount - 50, ledger.weight (key3.pub)); - nano::send_block send2 (hash1, key2.pub, 25, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (hash1)); + nano::send_block send2 (hash1, key2.pub, 25, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (hash1)); nano::block_hash hash3 (send2.hash ()); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); nano::receive_block receive (hash2, hash3, key2.prv, key2.pub, *pool.generate (hash2)); @@ -226,7 +226,7 @@ TEST (ledger, process_receive) ASSERT_EQ (nano::process_result::progress, return2.code); ASSERT_EQ (key2.pub, store->block.account_calculated (receive)); ASSERT_EQ (hash4, ledger.latest (transaction, key2.pub)); - ASSERT_EQ (25, ledger.account_balance (transaction, nano::dev_genesis_key.pub)); + ASSERT_EQ (25, ledger.account_balance (transaction, nano::dev::genesis_key.pub)); ASSERT_EQ (0, ledger.account_pending (transaction, key2.pub)); ASSERT_EQ (nano::genesis_amount - 25, ledger.account_balance (transaction, key2.pub)); ASSERT_EQ (nano::genesis_amount - 25, ledger.weight (key3.pub)); @@ -234,14 +234,14 @@ TEST (ledger, process_receive) ASSERT_TRUE (store->block.successor (transaction, hash2).is_zero ()); ASSERT_EQ (key2.pub, store->frontier.get (transaction, hash2)); ASSERT_TRUE (store->frontier.get (transaction, hash4).is_zero ()); - ASSERT_EQ (25, ledger.account_balance (transaction, nano::dev_genesis_key.pub)); + ASSERT_EQ (25, ledger.account_balance (transaction, nano::dev::genesis_key.pub)); ASSERT_EQ (25, ledger.account_pending (transaction, key2.pub)); ASSERT_EQ (nano::genesis_amount - 50, ledger.account_balance (transaction, key2.pub)); ASSERT_EQ (nano::genesis_amount - 50, ledger.weight (key3.pub)); ASSERT_EQ (hash2, ledger.latest (transaction, key2.pub)); nano::pending_info pending1; ASSERT_FALSE (ledger.store.pending.get (transaction, nano::pending_key (key2.pub, hash3), pending1)); - ASSERT_EQ (nano::dev_genesis_key.pub, pending1.source); + ASSERT_EQ (nano::dev::genesis_key.pub, pending1.source); ASSERT_EQ (25, pending1.amount.number ()); ASSERT_EQ (store->account.count (transaction), ledger.cache.account_count); } @@ -258,9 +258,9 @@ TEST (ledger, rollback_receiver) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::account_info info1; - ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info1)); + ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info1)); nano::keypair key2; - nano::send_block send (info1.head, key2.pub, 50, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (info1.head)); + nano::send_block send (info1.head, key2.pub, 50, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (info1.head)); nano::block_hash hash1 (send.hash ()); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); nano::keypair key3; @@ -268,15 +268,15 @@ TEST (ledger, rollback_receiver) nano::block_hash hash2 (open.hash ()); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open).code); ASSERT_EQ (hash2, ledger.latest (transaction, key2.pub)); - ASSERT_EQ (50, ledger.account_balance (transaction, nano::dev_genesis_key.pub)); + ASSERT_EQ (50, ledger.account_balance (transaction, nano::dev::genesis_key.pub)); ASSERT_EQ (nano::genesis_amount - 50, ledger.account_balance (transaction, key2.pub)); - ASSERT_EQ (50, ledger.weight (nano::dev_genesis_key.pub)); + ASSERT_EQ (50, ledger.weight (nano::dev::genesis_key.pub)); ASSERT_EQ (0, ledger.weight (key2.pub)); ASSERT_EQ (nano::genesis_amount - 50, ledger.weight (key3.pub)); ASSERT_FALSE (ledger.rollback (transaction, hash1)); - ASSERT_EQ (nano::genesis_amount, ledger.account_balance (transaction, nano::dev_genesis_key.pub)); + ASSERT_EQ (nano::genesis_amount, ledger.account_balance (transaction, nano::dev::genesis_key.pub)); ASSERT_EQ (0, ledger.account_balance (transaction, key2.pub)); - ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::dev_genesis_key.pub)); + ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::dev::genesis_key.pub)); ASSERT_EQ (0, ledger.weight (key2.pub)); ASSERT_EQ (0, ledger.weight (key3.pub)); nano::account_info info2; @@ -298,18 +298,18 @@ TEST (ledger, rollback_representation) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key5; - nano::change_block change1 (genesis.hash (), key5.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::change_block change1 (genesis.hash (), key5.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, change1).code); nano::keypair key3; - nano::change_block change2 (change1.hash (), key3.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (change1.hash ())); + nano::change_block change2 (change1.hash (), key3.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (change1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, change2).code); nano::keypair key2; - nano::send_block send1 (change2.hash (), key2.pub, 50, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (change2.hash ())); + nano::send_block send1 (change2.hash (), key2.pub, 50, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (change2.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::keypair key4; nano::open_block open (send1.hash (), key4.pub, key2.pub, key2.prv, key2.pub, *pool.generate (key2.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open).code); - nano::send_block send2 (send1.hash (), key2.pub, 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); + nano::send_block send2 (send1.hash (), key2.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); nano::receive_block receive1 (open.hash (), send2.hash (), key2.prv, key2.pub, *pool.generate (open.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); @@ -330,11 +330,11 @@ TEST (ledger, rollback_representation) ledger.rollback (transaction, send1.hash ()); ASSERT_EQ (nano::genesis_amount, ledger.weight (key3.pub)); nano::account_info info3; - ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info3)); + ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info3)); ASSERT_EQ (key3.pub, info3.representative); ASSERT_FALSE (ledger.rollback (transaction, change2.hash ())); nano::account_info info4; - ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info4)); + ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info4)); ASSERT_EQ (key5.pub, info4.representative); ASSERT_EQ (nano::genesis_amount, ledger.weight (key5.pub)); ASSERT_EQ (0, ledger.weight (key3.pub)); @@ -351,9 +351,9 @@ TEST (ledger, receive_rollback) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::send_block send (genesis.hash (), nano::dev_genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block send (genesis.hash (), nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); - nano::receive_block receive (send.hash (), send.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send.hash ())); + nano::receive_block receive (send.hash (), send.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive).code); ASSERT_FALSE (ledger.rollback (transaction, receive.hash ())); } @@ -370,9 +370,9 @@ TEST (ledger, process_duplicate) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::account_info info1; - ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info1)); + ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info1)); nano::keypair key2; - nano::send_block send (info1.head, key2.pub, 50, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (info1.head)); + nano::send_block send (info1.head, key2.pub, 50, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (info1.head)); nano::block_hash hash1 (send.hash ()); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); ASSERT_EQ (nano::process_result::old, ledger.process (transaction, send).code); @@ -391,7 +391,7 @@ TEST (ledger, representative_genesis) nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - auto latest (ledger.latest (transaction, nano::dev_genesis_key.pub)); + auto latest (ledger.latest (transaction, nano::dev::genesis_key.pub)); ASSERT_FALSE (latest.is_zero ()); ASSERT_EQ (genesis.open->hash (), ledger.representative (transaction, latest)); } @@ -421,30 +421,30 @@ TEST (ledger, representative_change) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::dev_genesis_key.pub)); + ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::dev::genesis_key.pub)); ASSERT_EQ (0, ledger.weight (key2.pub)); nano::account_info info1; - ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info1)); - nano::change_block block (info1.head, key2.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (info1.head)); - ASSERT_EQ (nano::dev_genesis_key.pub, store->frontier.get (transaction, info1.head)); + ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info1)); + nano::change_block block (info1.head, key2.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (info1.head)); + ASSERT_EQ (nano::dev::genesis_key.pub, store->frontier.get (transaction, info1.head)); auto return1 (ledger.process (transaction, block)); ASSERT_EQ (0, ledger.amount (transaction, block.hash ())); ASSERT_TRUE (store->frontier.get (transaction, info1.head).is_zero ()); - ASSERT_EQ (nano::dev_genesis_key.pub, store->frontier.get (transaction, block.hash ())); + ASSERT_EQ (nano::dev::genesis_key.pub, store->frontier.get (transaction, block.hash ())); ASSERT_EQ (nano::process_result::progress, return1.code); - ASSERT_EQ (nano::dev_genesis_key.pub, store->block.account_calculated (block)); - ASSERT_EQ (0, ledger.weight (nano::dev_genesis_key.pub)); + ASSERT_EQ (nano::dev::genesis_key.pub, store->block.account_calculated (block)); + ASSERT_EQ (0, ledger.weight (nano::dev::genesis_key.pub)); ASSERT_EQ (nano::genesis_amount, ledger.weight (key2.pub)); nano::account_info info2; - ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info2)); + ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info2)); ASSERT_EQ (block.hash (), info2.head); ASSERT_FALSE (ledger.rollback (transaction, info2.head)); - ASSERT_EQ (nano::dev_genesis_key.pub, store->frontier.get (transaction, info1.head)); + ASSERT_EQ (nano::dev::genesis_key.pub, store->frontier.get (transaction, info1.head)); ASSERT_TRUE (store->frontier.get (transaction, block.hash ()).is_zero ()); nano::account_info info3; - ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info3)); + ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info3)); ASSERT_EQ (info1.head, info3.head); - ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::dev_genesis_key.pub)); + ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::dev::genesis_key.pub)); ASSERT_EQ (0, ledger.weight (key2.pub)); } @@ -462,10 +462,10 @@ TEST (ledger, send_fork) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::account_info info1; - ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info1)); - nano::send_block block (info1.head, key2.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (info1.head)); + ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info1)); + nano::send_block block (info1.head, key2.pub, 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (info1.head)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block).code); - nano::send_block block2 (info1.head, key3.pub, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (info1.head)); + nano::send_block block2 (info1.head, key3.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (info1.head)); ASSERT_EQ (nano::process_result::fork, ledger.process (transaction, block2).code); } @@ -483,14 +483,14 @@ TEST (ledger, receive_fork) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::account_info info1; - ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info1)); - nano::send_block block (info1.head, key2.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (info1.head)); + ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info1)); + nano::send_block block (info1.head, key2.pub, 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (info1.head)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block).code); nano::open_block block2 (block.hash (), key2.pub, key2.pub, key2.prv, key2.pub, *pool.generate (key2.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block2).code); nano::change_block block3 (block2.hash (), key3.pub, key2.prv, key2.pub, *pool.generate (block2.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block3).code); - nano::send_block block4 (block.hash (), key2.pub, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (block.hash ())); + nano::send_block block4 (block.hash (), key2.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (block.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block4).code); nano::receive_block block5 (block2.hash (), block4.hash (), key2.prv, key2.pub, *pool.generate (block2.hash ())); ASSERT_EQ (nano::process_result::fork, ledger.process (transaction, block5).code); @@ -510,8 +510,8 @@ TEST (ledger, open_fork) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::account_info info1; - ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info1)); - nano::send_block block (info1.head, key2.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (info1.head)); + ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info1)); + nano::send_block block (info1.head, key2.pub, 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (info1.head)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block).code); nano::open_block block2 (block.hash (), key2.pub, key2.pub, key2.prv, key2.pub, *pool.generate (key2.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block2).code); @@ -542,38 +542,38 @@ TEST (ledger, representation) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - ASSERT_EQ (nano::genesis_amount, rep_weights.representation_get (nano::dev_genesis_key.pub)); + ASSERT_EQ (nano::genesis_amount, rep_weights.representation_get (nano::dev::genesis_key.pub)); nano::keypair key2; - nano::send_block block1 (genesis.hash (), key2.pub, nano::genesis_amount - 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block block1 (genesis.hash (), key2.pub, nano::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block1).code); - ASSERT_EQ (nano::genesis_amount - 100, rep_weights.representation_get (nano::dev_genesis_key.pub)); + ASSERT_EQ (nano::genesis_amount - 100, rep_weights.representation_get (nano::dev::genesis_key.pub)); nano::keypair key3; nano::open_block block2 (block1.hash (), key3.pub, key2.pub, key2.prv, key2.pub, *pool.generate (key2.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block2).code); - ASSERT_EQ (nano::genesis_amount - 100, rep_weights.representation_get (nano::dev_genesis_key.pub)); + ASSERT_EQ (nano::genesis_amount - 100, rep_weights.representation_get (nano::dev::genesis_key.pub)); ASSERT_EQ (0, rep_weights.representation_get (key2.pub)); ASSERT_EQ (100, rep_weights.representation_get (key3.pub)); - nano::send_block block3 (block1.hash (), key2.pub, nano::genesis_amount - 200, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (block1.hash ())); + nano::send_block block3 (block1.hash (), key2.pub, nano::genesis_amount - 200, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (block1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block3).code); - ASSERT_EQ (nano::genesis_amount - 200, rep_weights.representation_get (nano::dev_genesis_key.pub)); + ASSERT_EQ (nano::genesis_amount - 200, rep_weights.representation_get (nano::dev::genesis_key.pub)); ASSERT_EQ (0, rep_weights.representation_get (key2.pub)); ASSERT_EQ (100, rep_weights.representation_get (key3.pub)); nano::receive_block block4 (block2.hash (), block3.hash (), key2.prv, key2.pub, *pool.generate (block2.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block4).code); - ASSERT_EQ (nano::genesis_amount - 200, rep_weights.representation_get (nano::dev_genesis_key.pub)); + ASSERT_EQ (nano::genesis_amount - 200, rep_weights.representation_get (nano::dev::genesis_key.pub)); ASSERT_EQ (0, rep_weights.representation_get (key2.pub)); ASSERT_EQ (200, rep_weights.representation_get (key3.pub)); nano::keypair key4; nano::change_block block5 (block4.hash (), key4.pub, key2.prv, key2.pub, *pool.generate (block4.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block5).code); - ASSERT_EQ (nano::genesis_amount - 200, rep_weights.representation_get (nano::dev_genesis_key.pub)); + ASSERT_EQ (nano::genesis_amount - 200, rep_weights.representation_get (nano::dev::genesis_key.pub)); ASSERT_EQ (0, rep_weights.representation_get (key2.pub)); ASSERT_EQ (0, rep_weights.representation_get (key3.pub)); ASSERT_EQ (200, rep_weights.representation_get (key4.pub)); nano::keypair key5; nano::send_block block6 (block5.hash (), key5.pub, 100, key2.prv, key2.pub, *pool.generate (block5.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block6).code); - ASSERT_EQ (nano::genesis_amount - 200, rep_weights.representation_get (nano::dev_genesis_key.pub)); + ASSERT_EQ (nano::genesis_amount - 200, rep_weights.representation_get (nano::dev::genesis_key.pub)); ASSERT_EQ (0, rep_weights.representation_get (key2.pub)); ASSERT_EQ (0, rep_weights.representation_get (key3.pub)); ASSERT_EQ (100, rep_weights.representation_get (key4.pub)); @@ -581,7 +581,7 @@ TEST (ledger, representation) nano::keypair key6; nano::open_block block7 (block6.hash (), key6.pub, key5.pub, key5.prv, key5.pub, *pool.generate (key5.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block7).code); - ASSERT_EQ (nano::genesis_amount - 200, rep_weights.representation_get (nano::dev_genesis_key.pub)); + ASSERT_EQ (nano::genesis_amount - 200, rep_weights.representation_get (nano::dev::genesis_key.pub)); ASSERT_EQ (0, rep_weights.representation_get (key2.pub)); ASSERT_EQ (0, rep_weights.representation_get (key3.pub)); ASSERT_EQ (100, rep_weights.representation_get (key4.pub)); @@ -589,7 +589,7 @@ TEST (ledger, representation) ASSERT_EQ (100, rep_weights.representation_get (key6.pub)); nano::send_block block8 (block6.hash (), key5.pub, 0, key2.prv, key2.pub, *pool.generate (block6.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block8).code); - ASSERT_EQ (nano::genesis_amount - 200, rep_weights.representation_get (nano::dev_genesis_key.pub)); + ASSERT_EQ (nano::genesis_amount - 200, rep_weights.representation_get (nano::dev::genesis_key.pub)); ASSERT_EQ (0, rep_weights.representation_get (key2.pub)); ASSERT_EQ (0, rep_weights.representation_get (key3.pub)); ASSERT_EQ (0, rep_weights.representation_get (key4.pub)); @@ -597,7 +597,7 @@ TEST (ledger, representation) ASSERT_EQ (100, rep_weights.representation_get (key6.pub)); nano::receive_block block9 (block7.hash (), block8.hash (), key5.prv, key5.pub, *pool.generate (block7.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block9).code); - ASSERT_EQ (nano::genesis_amount - 200, rep_weights.representation_get (nano::dev_genesis_key.pub)); + ASSERT_EQ (nano::genesis_amount - 200, rep_weights.representation_get (nano::dev::genesis_key.pub)); ASSERT_EQ (0, rep_weights.representation_get (key2.pub)); ASSERT_EQ (0, rep_weights.representation_get (key3.pub)); ASSERT_EQ (0, rep_weights.representation_get (key4.pub)); @@ -617,11 +617,11 @@ TEST (ledger, double_open) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key2; - nano::send_block send1 (genesis.hash (), key2.pub, 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block send1 (genesis.hash (), key2.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::open_block open1 (send1.hash (), key2.pub, key2.pub, key2.prv, key2.pub, *pool.generate (key2.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open1).code); - nano::open_block open2 (send1.hash (), nano::dev_genesis_key.pub, key2.pub, key2.prv, key2.pub, *pool.generate (key2.pub)); + nano::open_block open2 (send1.hash (), nano::dev::genesis_key.pub, key2.pub, key2.prv, key2.pub, *pool.generate (key2.pub)); ASSERT_EQ (nano::process_result::fork, ledger.process (transaction, open2).code); } @@ -637,7 +637,7 @@ TEST (ledger, double_receive) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key2; - nano::send_block send1 (genesis.hash (), key2.pub, 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block send1 (genesis.hash (), key2.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::open_block open1 (send1.hash (), key2.pub, key2.pub, key2.prv, key2.pub, *pool.generate (key2.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open1).code); @@ -653,17 +653,17 @@ TEST (votes, check_signature) auto & node1 = *system.add_node (node_config); nano::genesis genesis; nano::keypair key1; - auto send1 (std::make_shared (genesis.hash (), key1.pub, nano::genesis_amount - 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); + auto send1 (std::make_shared (genesis.hash (), key1.pub, nano::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send1); { auto transaction (node1.store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, node1.ledger.process (transaction, *send1).code); } - node1.scheduler.activate (nano::dev_genesis_key.pub, node1.store.tx_begin_read ()); + node1.scheduler.activate (nano::dev::genesis_key.pub, node1.store.tx_begin_read ()); node1.scheduler.flush (); auto election1 = node1.active.election (send1->qualified_root ()); ASSERT_EQ (1, election1->votes ().size ()); - auto vote1 (std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, 1, send1)); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 1, send1)); vote1->signature.bytes[0] ^= 1; ASSERT_EQ (nano::vote_code::invalid, node1.vote_processor.vote_blocking (vote1, std::make_shared (node1))); vote1->signature.bytes[0] ^= 1; @@ -677,7 +677,7 @@ TEST (votes, add_one) auto & node1 (*system.nodes[0]); nano::genesis genesis; nano::keypair key1; - auto send1 (std::make_shared (genesis.hash (), key1.pub, nano::genesis_amount - 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); + auto send1 (std::make_shared (genesis.hash (), key1.pub, nano::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send1); auto transaction (node1.store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, node1.ledger.process (transaction, *send1).code); @@ -685,13 +685,13 @@ TEST (votes, add_one) node1.scheduler.flush (); auto election1 = node1.active.election (send1->qualified_root ()); ASSERT_EQ (1, election1->votes ().size ()); - auto vote1 (std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, 1, send1)); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 1, send1)); ASSERT_EQ (nano::vote_code::vote, node1.active.vote (vote1)); - auto vote2 (std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, 2, send1)); + auto vote2 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 2, send1)); ASSERT_EQ (nano::vote_code::vote, node1.active.vote (vote2)); ASSERT_EQ (2, election1->votes ().size ()); auto votes1 (election1->votes ()); - auto existing1 (votes1.find (nano::dev_genesis_key.pub)); + auto existing1 (votes1.find (nano::dev::genesis_key.pub)); ASSERT_NE (votes1.end (), existing1); ASSERT_EQ (send1->hash (), existing1->second.hash); nano::lock_guard guard (node1.active.mutex); @@ -706,7 +706,7 @@ TEST (votes, add_two) auto & node1 = *system.nodes[0]; nano::genesis genesis; nano::keypair key1; - auto send1 = std::make_shared (genesis.hash (), key1.pub, nano::genesis_amount - 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0); + auto send1 = std::make_shared (genesis.hash (), key1.pub, nano::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0); node1.work_generate_blocking (*send1); auto transaction = node1.store.tx_begin_write (); ASSERT_EQ (nano::process_result::progress, node1.ledger.process (transaction, *send1).code); @@ -714,15 +714,15 @@ TEST (votes, add_two) node1.scheduler.flush (); auto election1 = node1.active.election (send1->qualified_root ()); nano::keypair key2; - auto send2 = std::make_shared (genesis.hash (), key2.pub, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0); + auto send2 = std::make_shared (genesis.hash (), key2.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0); auto vote2 = std::make_shared (key2.pub, key2.prv, 1, send2); ASSERT_EQ (nano::vote_code::vote, node1.active.vote (vote2)); - auto vote1 = std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, 1, send1); + auto vote1 = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 1, send1); ASSERT_EQ (nano::vote_code::vote, node1.active.vote (vote1)); ASSERT_EQ (3, election1->votes ().size ()); auto votes1 = election1->votes (); - ASSERT_NE (votes1.end (), votes1.find (nano::dev_genesis_key.pub)); - ASSERT_EQ (send1->hash (), votes1[nano::dev_genesis_key.pub].hash); + ASSERT_NE (votes1.end (), votes1.find (nano::dev::genesis_key.pub)); + ASSERT_EQ (send1->hash (), votes1[nano::dev::genesis_key.pub].hash); ASSERT_NE (votes1.end (), votes1.find (key2.pub)); ASSERT_EQ (send2->hash (), votes1[key2.pub].hash); ASSERT_EQ (*send1, *election1->winner ()); @@ -741,53 +741,53 @@ TEST (votes, add_existing) nano::keypair key1; nano::block_builder builder; std::shared_ptr send1 = builder.state () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) - .representative (nano::dev_genesis_key.pub) // No representative, blocks can't confirm + .representative (nano::dev::genesis_key.pub) // No representative, blocks can't confirm .balance (nano::genesis_amount / 2 - nano::Gxrb_ratio) .link (key1.pub) .work (0) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .build (); node1.work_generate_blocking (*send1); ASSERT_EQ (nano::process_result::progress, node1.ledger.process (node1.store.tx_begin_write (), *send1).code); - node1.scheduler.activate (nano::dev_genesis_key.pub, node1.store.tx_begin_read ()); + node1.scheduler.activate (nano::dev::genesis_key.pub, node1.store.tx_begin_read ()); node1.scheduler.flush (); auto election1 = node1.active.election (send1->qualified_root ()); - auto vote1 (std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, 1, send1)); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 1, send1)); ASSERT_EQ (nano::vote_code::vote, node1.active.vote (vote1)); // Block is already processed from vote ASSERT_TRUE (node1.active.publish (send1)); - ASSERT_EQ (1, election1->last_votes[nano::dev_genesis_key.pub].timestamp); + ASSERT_EQ (1, election1->last_votes[nano::dev::genesis_key.pub].timestamp); nano::keypair key2; std::shared_ptr send2 = builder.state () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) - .representative (nano::dev_genesis_key.pub) // No representative, blocks can't confirm + .representative (nano::dev::genesis_key.pub) // No representative, blocks can't confirm .balance (nano::genesis_amount / 2 - nano::Gxrb_ratio) .link (key2.pub) .work (0) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .build (); node1.work_generate_blocking (*send2); - auto vote2 (std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, 2, send2)); + auto vote2 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 2, send2)); // Pretend we've waited the timeout nano::unique_lock lock (election1->mutex); - election1->last_votes[nano::dev_genesis_key.pub].time = std::chrono::steady_clock::now () - std::chrono::seconds (20); + election1->last_votes[nano::dev::genesis_key.pub].time = std::chrono::steady_clock::now () - std::chrono::seconds (20); lock.unlock (); ASSERT_EQ (nano::vote_code::vote, node1.active.vote (vote2)); ASSERT_FALSE (node1.active.publish (send2)); - ASSERT_EQ (2, election1->last_votes[nano::dev_genesis_key.pub].timestamp); + ASSERT_EQ (2, election1->last_votes[nano::dev::genesis_key.pub].timestamp); // Also resend the old vote, and see if we respect the timestamp lock.lock (); - election1->last_votes[nano::dev_genesis_key.pub].time = std::chrono::steady_clock::now () - std::chrono::seconds (20); + election1->last_votes[nano::dev::genesis_key.pub].time = std::chrono::steady_clock::now () - std::chrono::seconds (20); lock.unlock (); ASSERT_EQ (nano::vote_code::replay, node1.active.vote (vote1)); - ASSERT_EQ (2, election1->votes ()[nano::dev_genesis_key.pub].timestamp); + ASSERT_EQ (2, election1->votes ()[nano::dev::genesis_key.pub].timestamp); auto votes (election1->votes ()); ASSERT_EQ (2, votes.size ()); - ASSERT_NE (votes.end (), votes.find (nano::dev_genesis_key.pub)); - ASSERT_EQ (send2->hash (), votes[nano::dev_genesis_key.pub].hash); + ASSERT_NE (votes.end (), votes.find (nano::dev::genesis_key.pub)); + ASSERT_EQ (send2->hash (), votes[nano::dev::genesis_key.pub].hash); ASSERT_EQ (*send2, *election1->tally ().begin ()->second); } @@ -798,29 +798,29 @@ TEST (votes, add_old) auto & node1 (*system.nodes[0]); nano::genesis genesis; nano::keypair key1; - auto send1 (std::make_shared (genesis.hash (), key1.pub, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); + auto send1 (std::make_shared (genesis.hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send1); auto transaction (node1.store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, node1.ledger.process (transaction, *send1).code); node1.block_confirm (send1); node1.scheduler.flush (); auto election1 = node1.active.election (send1->qualified_root ()); - auto vote1 (std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, 2, send1)); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 2, send1)); auto channel (std::make_shared (node1)); node1.vote_processor.vote_blocking (vote1, channel); nano::keypair key2; - auto send2 (std::make_shared (genesis.hash (), key2.pub, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); + auto send2 (std::make_shared (genesis.hash (), key2.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send2); - auto vote2 (std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, 1, send2)); + auto vote2 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 1, send2)); { nano::lock_guard lock (election1->mutex); - election1->last_votes[nano::dev_genesis_key.pub].time = std::chrono::steady_clock::now () - std::chrono::seconds (20); + election1->last_votes[nano::dev::genesis_key.pub].time = std::chrono::steady_clock::now () - std::chrono::seconds (20); } node1.vote_processor.vote_blocking (vote2, channel); ASSERT_EQ (2, election1->votes ().size ()); auto votes (election1->votes ()); - ASSERT_NE (votes.end (), votes.find (nano::dev_genesis_key.pub)); - ASSERT_EQ (send1->hash (), votes[nano::dev_genesis_key.pub].hash); + ASSERT_NE (votes.end (), votes.find (nano::dev::genesis_key.pub)); + ASSERT_EQ (send1->hash (), votes[nano::dev::genesis_key.pub].hash); ASSERT_EQ (*send1, *election1->winner ()); } } @@ -832,9 +832,9 @@ TEST (votes, add_old_different_account) auto & node1 (*system.nodes[0]); nano::genesis genesis; nano::keypair key1; - auto send1 (std::make_shared (genesis.hash (), key1.pub, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); + auto send1 (std::make_shared (genesis.hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send1); - auto send2 (std::make_shared (send1->hash (), key1.pub, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); + auto send2 (std::make_shared (send1->hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send2); ASSERT_EQ (nano::process_result::progress, node1.process (*send1).code); ASSERT_EQ (nano::process_result::progress, node1.process (*send2).code); @@ -845,23 +845,23 @@ TEST (votes, add_old_different_account) ASSERT_NE (nullptr, election2); ASSERT_EQ (1, election1->votes ().size ()); ASSERT_EQ (1, election2->votes ().size ()); - auto vote1 (std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, 2, send1)); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 2, send1)); auto channel (std::make_shared (node1)); auto vote_result1 (node1.vote_processor.vote_blocking (vote1, channel)); ASSERT_EQ (nano::vote_code::vote, vote_result1); ASSERT_EQ (2, election1->votes ().size ()); ASSERT_EQ (1, election2->votes ().size ()); - auto vote2 (std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, 1, send2)); + auto vote2 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 1, send2)); auto vote_result2 (node1.vote_processor.vote_blocking (vote2, channel)); ASSERT_EQ (nano::vote_code::vote, vote_result2); ASSERT_EQ (2, election1->votes ().size ()); ASSERT_EQ (2, election2->votes ().size ()); auto votes1 (election1->votes ()); auto votes2 (election2->votes ()); - ASSERT_NE (votes1.end (), votes1.find (nano::dev_genesis_key.pub)); - ASSERT_NE (votes2.end (), votes2.find (nano::dev_genesis_key.pub)); - ASSERT_EQ (send1->hash (), votes1[nano::dev_genesis_key.pub].hash); - ASSERT_EQ (send2->hash (), votes2[nano::dev_genesis_key.pub].hash); + ASSERT_NE (votes1.end (), votes1.find (nano::dev::genesis_key.pub)); + ASSERT_NE (votes2.end (), votes2.find (nano::dev::genesis_key.pub)); + ASSERT_EQ (send1->hash (), votes1[nano::dev::genesis_key.pub].hash); + ASSERT_EQ (send2->hash (), votes2[nano::dev::genesis_key.pub].hash); ASSERT_EQ (*send1, *election1->winner ()); ASSERT_EQ (*send2, *election2->winner ()); } @@ -873,25 +873,25 @@ TEST (votes, add_cooldown) auto & node1 (*system.nodes[0]); nano::genesis genesis; nano::keypair key1; - auto send1 (std::make_shared (genesis.hash (), key1.pub, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); + auto send1 (std::make_shared (genesis.hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send1); auto transaction (node1.store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, node1.ledger.process (transaction, *send1).code); node1.block_confirm (send1); node1.scheduler.flush (); auto election1 = node1.active.election (send1->qualified_root ()); - auto vote1 (std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, 1, send1)); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 1, send1)); auto channel (std::make_shared (node1)); node1.vote_processor.vote_blocking (vote1, channel); nano::keypair key2; - auto send2 (std::make_shared (genesis.hash (), key2.pub, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); + auto send2 (std::make_shared (genesis.hash (), key2.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send2); - auto vote2 (std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, 2, send2)); + auto vote2 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 2, send2)); node1.vote_processor.vote_blocking (vote2, channel); ASSERT_EQ (2, election1->votes ().size ()); auto votes (election1->votes ()); - ASSERT_NE (votes.end (), votes.find (nano::dev_genesis_key.pub)); - ASSERT_EQ (send1->hash (), votes[nano::dev_genesis_key.pub].hash); + ASSERT_NE (votes.end (), votes.find (nano::dev::genesis_key.pub)); + ASSERT_EQ (send1->hash (), votes[nano::dev::genesis_key.pub].hash); ASSERT_EQ (*send1, *election1->winner ()); } @@ -902,7 +902,7 @@ TEST (ledger, successor) auto & node1 (*system.nodes[0]); nano::keypair key1; nano::genesis genesis; - nano::send_block send1 (genesis.hash (), key1.pub, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0); + nano::send_block send1 (genesis.hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0); node1.work_generate_blocking (send1); auto transaction (node1.store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, node1.ledger.process (transaction, send1).code); @@ -923,7 +923,7 @@ TEST (ledger, fail_change_old) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - nano::change_block block (genesis.hash (), key1.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::change_block block (genesis.hash (), key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); auto result1 (ledger.process (transaction, block)); ASSERT_EQ (nano::process_result::progress, result1.code); auto result2 (ledger.process (transaction, block)); @@ -942,7 +942,7 @@ TEST (ledger, fail_change_gap_previous) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - nano::change_block block (1, key1.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (nano::root (1))); + nano::change_block block (1, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::root (1))); auto result1 (ledger.process (transaction, block)); ASSERT_EQ (nano::process_result::gap_previous, result1.code); } @@ -976,11 +976,11 @@ TEST (ledger, fail_change_fork) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - nano::change_block block1 (genesis.hash (), key1.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::change_block block1 (genesis.hash (), key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); auto result1 (ledger.process (transaction, block1)); ASSERT_EQ (nano::process_result::progress, result1.code); nano::keypair key2; - nano::change_block block2 (genesis.hash (), key2.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::change_block block2 (genesis.hash (), key2.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); auto result2 (ledger.process (transaction, block2)); ASSERT_EQ (nano::process_result::fork, result2.code); } @@ -997,7 +997,7 @@ TEST (ledger, fail_send_old) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - nano::send_block block (genesis.hash (), key1.pub, 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block block (genesis.hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); auto result1 (ledger.process (transaction, block)); ASSERT_EQ (nano::process_result::progress, result1.code); auto result2 (ledger.process (transaction, block)); @@ -1016,7 +1016,7 @@ TEST (ledger, fail_send_gap_previous) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - nano::send_block block (1, key1.pub, 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (nano::root (1))); + nano::send_block block (1, key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::root (1))); auto result1 (ledger.process (transaction, block)); ASSERT_EQ (nano::process_result::gap_previous, result1.code); } @@ -1050,10 +1050,10 @@ TEST (ledger, fail_send_negative_spend) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block1).code); nano::keypair key2; - nano::send_block block2 (block1.hash (), key2.pub, 2, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (block1.hash ())); + nano::send_block block2 (block1.hash (), key2.pub, 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (block1.hash ())); ASSERT_EQ (nano::process_result::negative_spend, ledger.process (transaction, block2).code); } @@ -1069,10 +1069,10 @@ TEST (ledger, fail_send_fork) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block1).code); nano::keypair key2; - nano::send_block block2 (genesis.hash (), key2.pub, 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block block2 (genesis.hash (), key2.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::fork, ledger.process (transaction, block2).code); } @@ -1088,7 +1088,7 @@ TEST (ledger, fail_open_old) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block1).code); nano::open_block block2 (block1.hash (), 1, key1.pub, key1.prv, key1.pub, *pool.generate (key1.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block2).code); @@ -1124,7 +1124,7 @@ TEST (ledger, fail_open_bad_signature) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block1).code); nano::open_block block2 (block1.hash (), 1, key1.pub, key1.prv, key1.pub, *pool.generate (key1.pub)); block2.signature.clear (); @@ -1143,9 +1143,9 @@ TEST (ledger, fail_open_fork_previous) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block1).code); - nano::send_block block2 (block1.hash (), key1.pub, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (block1.hash ())); + nano::send_block block2 (block1.hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (block1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block2).code); nano::open_block block3 (block1.hash (), 1, key1.pub, key1.prv, key1.pub, *pool.generate (key1.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block3).code); @@ -1166,7 +1166,7 @@ TEST (ledger, fail_open_account_mismatch) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block1).code); nano::keypair badkey; nano::open_block block2 (block1.hash (), 1, badkey.pub, badkey.prv, badkey.pub, *pool.generate (badkey.pub)); @@ -1186,9 +1186,9 @@ TEST (ledger, fail_receive_old) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block1).code); - nano::send_block block2 (block1.hash (), key1.pub, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (block1.hash ())); + nano::send_block block2 (block1.hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (block1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block2).code); nano::open_block block3 (block1.hash (), 1, key1.pub, key1.prv, key1.pub, *pool.generate (key1.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block3).code); @@ -1209,10 +1209,10 @@ TEST (ledger, fail_receive_gap_source) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); auto result1 (ledger.process (transaction, block1)); ASSERT_EQ (nano::process_result::progress, result1.code); - nano::send_block block2 (block1.hash (), key1.pub, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (block1.hash ())); + nano::send_block block2 (block1.hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (block1.hash ())); auto result2 (ledger.process (transaction, block2)); ASSERT_EQ (nano::process_result::progress, result2.code); nano::open_block block3 (block1.hash (), 1, key1.pub, key1.prv, key1.pub, *pool.generate (key1.pub)); @@ -1235,7 +1235,7 @@ TEST (ledger, fail_receive_overreceive) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); auto result1 (ledger.process (transaction, block1)); ASSERT_EQ (nano::process_result::progress, result1.code); nano::open_block block2 (block1.hash (), 1, key1.pub, key1.prv, key1.pub, *pool.generate (key1.pub)); @@ -1258,10 +1258,10 @@ TEST (ledger, fail_receive_bad_signature) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); auto result1 (ledger.process (transaction, block1)); ASSERT_EQ (nano::process_result::progress, result1.code); - nano::send_block block2 (block1.hash (), key1.pub, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (block1.hash ())); + nano::send_block block2 (block1.hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (block1.hash ())); auto result2 (ledger.process (transaction, block2)); ASSERT_EQ (nano::process_result::progress, result2.code); nano::open_block block3 (block1.hash (), 1, key1.pub, key1.prv, key1.pub, *pool.generate (key1.pub)); @@ -1284,10 +1284,10 @@ TEST (ledger, fail_receive_gap_previous_opened) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); auto result1 (ledger.process (transaction, block1)); ASSERT_EQ (nano::process_result::progress, result1.code); - nano::send_block block2 (block1.hash (), key1.pub, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (block1.hash ())); + nano::send_block block2 (block1.hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (block1.hash ())); auto result2 (ledger.process (transaction, block2)); ASSERT_EQ (nano::process_result::progress, result2.code); nano::open_block block3 (block1.hash (), 1, key1.pub, key1.prv, key1.pub, *pool.generate (key1.pub)); @@ -1310,10 +1310,10 @@ TEST (ledger, fail_receive_gap_previous_unopened) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); auto result1 (ledger.process (transaction, block1)); ASSERT_EQ (nano::process_result::progress, result1.code); - nano::send_block block2 (block1.hash (), key1.pub, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (block1.hash ())); + nano::send_block block2 (block1.hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (block1.hash ())); auto result2 (ledger.process (transaction, block2)); ASSERT_EQ (nano::process_result::progress, result2.code); nano::receive_block block3 (1, block2.hash (), key1.prv, key1.pub, *pool.generate (nano::root (1))); @@ -1333,10 +1333,10 @@ TEST (ledger, fail_receive_fork_previous) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); auto result1 (ledger.process (transaction, block1)); ASSERT_EQ (nano::process_result::progress, result1.code); - nano::send_block block2 (block1.hash (), key1.pub, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (block1.hash ())); + nano::send_block block2 (block1.hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (block1.hash ())); auto result2 (ledger.process (transaction, block2)); ASSERT_EQ (nano::process_result::progress, result2.code); nano::open_block block3 (block1.hash (), 1, key1.pub, key1.prv, key1.pub, *pool.generate (key1.pub)); @@ -1363,13 +1363,13 @@ TEST (ledger, fail_receive_received_source) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - nano::send_block block1 (genesis.hash (), key1.pub, 2, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block block1 (genesis.hash (), key1.pub, 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); auto result1 (ledger.process (transaction, block1)); ASSERT_EQ (nano::process_result::progress, result1.code); - nano::send_block block2 (block1.hash (), key1.pub, 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (block1.hash ())); + nano::send_block block2 (block1.hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (block1.hash ())); auto result2 (ledger.process (transaction, block2)); ASSERT_EQ (nano::process_result::progress, result2.code); - nano::send_block block6 (block2.hash (), key1.pub, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (block2.hash ())); + nano::send_block block6 (block2.hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (block2.hash ())); auto result6 (ledger.process (transaction, block6)); ASSERT_EQ (nano::process_result::progress, result6.code); nano::open_block block3 (block1.hash (), 1, key1.pub, key1.prv, key1.pub, *pool.generate (key1.pub)); @@ -1413,10 +1413,10 @@ TEST (ledger, latest_root) nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key; ASSERT_EQ (key.pub, ledger.latest_root (transaction, key.pub)); - auto hash1 (ledger.latest (transaction, nano::dev_genesis_key.pub)); - nano::send_block send (hash1, 0, 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (hash1)); + auto hash1 (ledger.latest (transaction, nano::dev::genesis_key.pub)); + nano::send_block send (hash1, 0, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (hash1)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); - ASSERT_EQ (send.hash (), ledger.latest_root (transaction, nano::dev_genesis_key.pub)); + ASSERT_EQ (send.hash (), ledger.latest_root (transaction, nano::dev::genesis_key.pub)); } TEST (ledger, change_representative_move_representation) @@ -1432,12 +1432,12 @@ TEST (ledger, change_representative_move_representation) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); auto hash1 (genesis.hash ()); - ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::dev_genesis_key.pub)); - nano::send_block send (hash1, key1.pub, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (hash1)); + ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::dev::genesis_key.pub)); + nano::send_block send (hash1, key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (hash1)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); - ASSERT_EQ (0, ledger.weight (nano::dev_genesis_key.pub)); + ASSERT_EQ (0, ledger.weight (nano::dev::genesis_key.pub)); nano::keypair key2; - nano::change_block change (send.hash (), key2.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send.hash ())); + nano::change_block change (send.hash (), key2.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, change).code); nano::keypair key3; nano::open_block open (send.hash (), key3.pub, key1.pub, key1.prv, key1.pub, *pool.generate (key1.pub)); @@ -1457,12 +1457,12 @@ TEST (ledger, send_open_receive_rollback) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::account_info info1; - ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info1)); + ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info1)); nano::keypair key1; - nano::send_block send1 (info1.head, key1.pub, nano::genesis_amount - 50, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (info1.head)); + nano::send_block send1 (info1.head, key1.pub, nano::genesis_amount - 50, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (info1.head)); auto return1 (ledger.process (transaction, send1)); ASSERT_EQ (nano::process_result::progress, return1.code); - nano::send_block send2 (send1.hash (), key1.pub, nano::genesis_amount - 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); + nano::send_block send2 (send1.hash (), key1.pub, nano::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); auto return2 (ledger.process (transaction, send2)); ASSERT_EQ (nano::process_result::progress, return2.code); nano::keypair key2; @@ -1474,34 +1474,34 @@ TEST (ledger, send_open_receive_rollback) ASSERT_EQ (nano::process_result::progress, return5.code); nano::keypair key3; ASSERT_EQ (100, ledger.weight (key2.pub)); - ASSERT_EQ (nano::genesis_amount - 100, ledger.weight (nano::dev_genesis_key.pub)); + ASSERT_EQ (nano::genesis_amount - 100, ledger.weight (nano::dev::genesis_key.pub)); ASSERT_EQ (0, ledger.weight (key3.pub)); - nano::change_block change1 (send2.hash (), key3.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send2.hash ())); + nano::change_block change1 (send2.hash (), key3.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send2.hash ())); auto return6 (ledger.process (transaction, change1)); ASSERT_EQ (nano::process_result::progress, return6.code); ASSERT_EQ (100, ledger.weight (key2.pub)); - ASSERT_EQ (0, ledger.weight (nano::dev_genesis_key.pub)); + ASSERT_EQ (0, ledger.weight (nano::dev::genesis_key.pub)); ASSERT_EQ (nano::genesis_amount - 100, ledger.weight (key3.pub)); ASSERT_FALSE (ledger.rollback (transaction, receive.hash ())); ASSERT_EQ (50, ledger.weight (key2.pub)); - ASSERT_EQ (0, ledger.weight (nano::dev_genesis_key.pub)); + ASSERT_EQ (0, ledger.weight (nano::dev::genesis_key.pub)); ASSERT_EQ (nano::genesis_amount - 100, ledger.weight (key3.pub)); ASSERT_FALSE (ledger.rollback (transaction, open.hash ())); ASSERT_EQ (0, ledger.weight (key2.pub)); - ASSERT_EQ (0, ledger.weight (nano::dev_genesis_key.pub)); + ASSERT_EQ (0, ledger.weight (nano::dev::genesis_key.pub)); ASSERT_EQ (nano::genesis_amount - 100, ledger.weight (key3.pub)); ASSERT_FALSE (ledger.rollback (transaction, change1.hash ())); ASSERT_EQ (0, ledger.weight (key2.pub)); ASSERT_EQ (0, ledger.weight (key3.pub)); - ASSERT_EQ (nano::genesis_amount - 100, ledger.weight (nano::dev_genesis_key.pub)); + ASSERT_EQ (nano::genesis_amount - 100, ledger.weight (nano::dev::genesis_key.pub)); ASSERT_FALSE (ledger.rollback (transaction, send2.hash ())); ASSERT_EQ (0, ledger.weight (key2.pub)); ASSERT_EQ (0, ledger.weight (key3.pub)); - ASSERT_EQ (nano::genesis_amount - 50, ledger.weight (nano::dev_genesis_key.pub)); + ASSERT_EQ (nano::genesis_amount - 50, ledger.weight (nano::dev::genesis_key.pub)); ASSERT_FALSE (ledger.rollback (transaction, send1.hash ())); ASSERT_EQ (0, ledger.weight (key2.pub)); ASSERT_EQ (0, ledger.weight (key3.pub)); - ASSERT_EQ (nano::genesis_amount - 0, ledger.weight (nano::dev_genesis_key.pub)); + ASSERT_EQ (nano::genesis_amount - 0, ledger.weight (nano::dev::genesis_key.pub)); } TEST (ledger, bootstrap_rep_weight) @@ -1518,8 +1518,8 @@ TEST (ledger, bootstrap_rep_weight) { auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info1)); - nano::send_block send (info1.head, key2.pub, std::numeric_limits::max () - 50, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (info1.head)); + ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info1)); + nano::send_block send (info1.head, key2.pub, std::numeric_limits::max () - 50, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (info1.head)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); } ASSERT_EQ (2, ledger.cache.block_count); @@ -1530,8 +1530,8 @@ TEST (ledger, bootstrap_rep_weight) } { auto transaction (store->tx_begin_write ()); - ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info1)); - nano::send_block send (info1.head, key2.pub, std::numeric_limits::max () - 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (info1.head)); + ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info1)); + nano::send_block send (info1.head, key2.pub, std::numeric_limits::max () - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (info1.head)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); } ASSERT_EQ (3, ledger.cache.block_count); @@ -1555,17 +1555,17 @@ TEST (ledger, block_destination_source) nano::keypair dest; nano::uint128_t balance (nano::genesis_amount); balance -= nano::Gxrb_ratio; - nano::send_block block1 (genesis.hash (), dest.pub, balance, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block block1 (genesis.hash (), dest.pub, balance, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); balance -= nano::Gxrb_ratio; - nano::send_block block2 (block1.hash (), nano::dev::genesis->account (), balance, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (block1.hash ())); + nano::send_block block2 (block1.hash (), nano::dev::genesis->account (), balance, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (block1.hash ())); balance += nano::Gxrb_ratio; - nano::receive_block block3 (block2.hash (), block2.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (block2.hash ())); + nano::receive_block block3 (block2.hash (), block2.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (block2.hash ())); balance -= nano::Gxrb_ratio; - nano::state_block block4 (nano::dev::genesis->account (), block3.hash (), nano::dev::genesis->account (), balance, dest.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (block3.hash ())); + nano::state_block block4 (nano::dev::genesis->account (), block3.hash (), nano::dev::genesis->account (), balance, dest.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (block3.hash ())); balance -= nano::Gxrb_ratio; - nano::state_block block5 (nano::dev::genesis->account (), block4.hash (), nano::dev::genesis->account (), balance, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (block4.hash ())); + nano::state_block block5 (nano::dev::genesis->account (), block4.hash (), nano::dev::genesis->account (), balance, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (block4.hash ())); balance += nano::Gxrb_ratio; - nano::state_block block6 (nano::dev::genesis->account (), block5.hash (), nano::dev::genesis->account (), balance, block5.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (block5.hash ())); + nano::state_block block6 (nano::dev::genesis->account (), block5.hash (), nano::dev::genesis->account (), balance, block5.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (block5.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block1).code); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block2).code); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block3).code); @@ -1598,7 +1598,7 @@ TEST (ledger, state_account) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_EQ (nano::dev::genesis->account (), ledger.account (transaction, send1.hash ())); } @@ -1614,7 +1614,7 @@ TEST (ledger, state_send_receive) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send2 (store->block.get (transaction, send1.hash ())); @@ -1628,7 +1628,7 @@ TEST (ledger, state_send_receive) ASSERT_TRUE (send2->sideband ().details.is_send); ASSERT_FALSE (send2->sideband ().details.is_receive); ASSERT_FALSE (send2->sideband ().details.is_epoch); - nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount, send1.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); ASSERT_TRUE (store->block.exists (transaction, receive1.hash ())); auto receive2 (store->block.get (transaction, receive1.hash ())); @@ -1656,7 +1656,7 @@ TEST (ledger, state_receive) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::send_block send1 (genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block send1 (genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send2 (store->block.get (transaction, send1.hash ())); @@ -1665,7 +1665,7 @@ TEST (ledger, state_receive) ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, send1.hash ())); ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); - nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount, send1.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); ASSERT_TRUE (store->block.exists (transaction, receive1.hash ())); auto receive2 (store->block.get (transaction, receive1.hash ())); @@ -1692,7 +1692,7 @@ TEST (ledger, state_rep_change) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair rep; - nano::state_block change1 (nano::dev::genesis->account (), genesis.hash (), rep.pub, nano::genesis_amount, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block change1 (nano::dev::genesis->account (), genesis.hash (), rep.pub, nano::genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, change1).code); ASSERT_TRUE (store->block.exists (transaction, change1.hash ())); auto change2 (store->block.get (transaction, change1.hash ())); @@ -1720,7 +1720,7 @@ TEST (ledger, state_open) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send2 (store->block.get (transaction, send1.hash ())); @@ -1759,9 +1759,9 @@ TEST (ledger, send_after_state_fail) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - nano::send_block send2 (send1.hash (), nano::dev::genesis->account (), nano::genesis_amount - (2 * nano::Gxrb_ratio), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); + nano::send_block send2 (send1.hash (), nano::dev::genesis->account (), nano::genesis_amount - (2 * nano::Gxrb_ratio), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::block_position, ledger.process (transaction, send2).code); } @@ -1777,9 +1777,9 @@ TEST (ledger, receive_after_state_fail) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - nano::receive_block receive1 (send1.hash (), send1.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); + nano::receive_block receive1 (send1.hash (), send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::block_position, ledger.process (transaction, receive1).code); } @@ -1795,10 +1795,10 @@ TEST (ledger, change_after_state_fail) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::keypair rep; - nano::change_block change1 (send1.hash (), rep.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); + nano::change_block change1 (send1.hash (), rep.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::block_position, ledger.process (transaction, change1).code); } @@ -1813,7 +1813,7 @@ TEST (ledger, state_unreceivable_fail) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::send_block send1 (genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block send1 (genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send2 (store->block.get (transaction, send1.hash ())); @@ -1822,7 +1822,7 @@ TEST (ledger, state_unreceivable_fail) ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, send1.hash ())); ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); - nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount, 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::gap_source, ledger.process (transaction, receive1).code); } @@ -1837,7 +1837,7 @@ TEST (ledger, state_receive_bad_amount_fail) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::send_block send1 (genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block send1 (genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send2 (store->block.get (transaction, send1.hash ())); @@ -1846,7 +1846,7 @@ TEST (ledger, state_receive_bad_amount_fail) ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, send1.hash ())); ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); - nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, send1.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::balance_mismatch, ledger.process (transaction, receive1).code); } @@ -1861,10 +1861,10 @@ TEST (ledger, state_no_link_amount_fail) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::keypair rep; - nano::state_block change1 (nano::dev::genesis->account (), send1.hash (), rep.pub, nano::genesis_amount, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block change1 (nano::dev::genesis->account (), send1.hash (), rep.pub, nano::genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::balance_mismatch, ledger.process (transaction, change1).code); } @@ -1879,7 +1879,7 @@ TEST (ledger, state_receive_wrong_account_fail) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send2 (store->block.get (transaction, send1.hash ())); @@ -1905,7 +1905,7 @@ TEST (ledger, state_open_state_fork) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::state_block open1 (destination.pub, 0, nano::dev::genesis->account (), nano::Gxrb_ratio, send1.hash (), destination.prv, destination.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open1).code); @@ -1926,7 +1926,7 @@ TEST (ledger, state_state_open_fork) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::open_block open1 (send1.hash (), nano::dev::genesis->account (), destination.pub, destination.prv, destination.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open1).code); @@ -1948,7 +1948,7 @@ TEST (ledger, state_open_previous_fail) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::state_block open1 (destination.pub, 1, nano::dev::genesis->account (), nano::Gxrb_ratio, send1.hash (), destination.prv, destination.pub, *pool.generate (1)); ASSERT_EQ (nano::process_result::gap_previous, ledger.process (transaction, open1).code); @@ -1966,7 +1966,7 @@ TEST (ledger, state_open_source_fail) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::state_block open1 (destination.pub, 0, nano::dev::genesis->account (), 0, 0, destination.prv, destination.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::gap_source, ledger.process (transaction, open1).code); @@ -1984,7 +1984,7 @@ TEST (ledger, state_send_change) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair rep; - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), rep.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), rep.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send2 (store->block.get (transaction, send1.hash ())); @@ -2011,7 +2011,7 @@ TEST (ledger, state_receive_change) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send2 (store->block.get (transaction, send1.hash ())); @@ -2021,7 +2021,7 @@ TEST (ledger, state_receive_change) ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, send1.hash ())); ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); nano::keypair rep; - nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), rep.pub, nano::genesis_amount, send1.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), rep.pub, nano::genesis_amount, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); ASSERT_TRUE (store->block.exists (transaction, receive1.hash ())); auto receive2 (store->block.get (transaction, receive1.hash ())); @@ -2049,7 +2049,7 @@ TEST (ledger, state_open_old) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::open_block open1 (send1.hash (), nano::dev::genesis->account (), destination.pub, destination.prv, destination.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open1).code); @@ -2070,9 +2070,9 @@ TEST (ledger, state_receive_old) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - nano::state_block send2 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount - (2 * nano::Gxrb_ratio), destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block send2 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount - (2 * nano::Gxrb_ratio), destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); nano::open_block open1 (send1.hash (), nano::dev::genesis->account (), destination.pub, destination.prv, destination.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open1).code); @@ -2094,7 +2094,7 @@ TEST (ledger, state_rollback_send) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send2 (store->block.get (transaction, send1.hash ())); @@ -2126,9 +2126,9 @@ TEST (ledger, state_rollback_receive) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount, send1.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), receive1.hash ()))); ASSERT_FALSE (ledger.rollback (transaction, receive1.hash ())); @@ -2154,7 +2154,7 @@ TEST (ledger, state_rollback_received_send) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key; - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::state_block receive1 (key.pub, 0, key.pub, nano::Gxrb_ratio, send1.hash (), key.prv, key.pub, *pool.generate (key.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); @@ -2182,7 +2182,7 @@ TEST (ledger, state_rep_change_rollback) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair rep; - nano::state_block change1 (nano::dev::genesis->account (), genesis.hash (), rep.pub, nano::genesis_amount, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block change1 (nano::dev::genesis->account (), genesis.hash (), rep.pub, nano::genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, change1).code); ASSERT_FALSE (ledger.rollback (transaction, change1.hash ())); ASSERT_FALSE (store->block.exists (transaction, change1.hash ())); @@ -2203,7 +2203,7 @@ TEST (ledger, state_open_rollback) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::state_block open1 (destination.pub, 0, nano::dev::genesis->account (), nano::Gxrb_ratio, send1.hash (), destination.prv, destination.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open1).code); @@ -2230,7 +2230,7 @@ TEST (ledger, state_send_change_rollback) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair rep; - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), rep.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), rep.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_FALSE (ledger.rollback (transaction, send1.hash ())); ASSERT_FALSE (store->block.exists (transaction, send1.hash ())); @@ -2251,10 +2251,10 @@ TEST (ledger, state_receive_change_rollback) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::keypair rep; - nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), rep.pub, nano::genesis_amount, send1.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), rep.pub, nano::genesis_amount, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); ASSERT_FALSE (ledger.rollback (transaction, receive1.hash ())); ASSERT_FALSE (store->block.exists (transaction, receive1.hash ())); @@ -2276,14 +2276,14 @@ TEST (ledger, epoch_blocks_v1_general) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block epoch1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block epoch1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch1).code); ASSERT_FALSE (epoch1.sideband ().details.is_send); ASSERT_FALSE (epoch1.sideband ().details.is_receive); ASSERT_TRUE (epoch1.sideband ().details.is_epoch); ASSERT_EQ (nano::epoch::epoch_1, epoch1.sideband ().details.epoch); ASSERT_EQ (nano::epoch::epoch_0, epoch1.sideband ().source_epoch); // Not used for epoch blocks - nano::state_block epoch2 (nano::dev::genesis->account (), epoch1.hash (), nano::dev::genesis->account (), nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (epoch1.hash ())); + nano::state_block epoch2 (nano::dev::genesis->account (), epoch1.hash (), nano::dev::genesis->account (), nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch1.hash ())); ASSERT_EQ (nano::process_result::block_position, ledger.process (transaction, epoch2).code); nano::account_info genesis_info; ASSERT_FALSE (ledger.store.account.get (transaction, nano::dev::genesis->account (), genesis_info)); @@ -2299,9 +2299,9 @@ TEST (ledger, epoch_blocks_v1_general) ASSERT_TRUE (epoch1.sideband ().details.is_epoch); ASSERT_EQ (nano::epoch::epoch_1, epoch1.sideband ().details.epoch); ASSERT_EQ (nano::epoch::epoch_0, epoch1.sideband ().source_epoch); // Not used for epoch blocks - nano::change_block change1 (epoch1.hash (), nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (epoch1.hash ())); + nano::change_block change1 (epoch1.hash (), nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch1.hash ())); ASSERT_EQ (nano::process_result::block_position, ledger.process (transaction, change1).code); - nano::state_block send1 (nano::dev::genesis->account (), epoch1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (epoch1.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), epoch1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (send1.sideband ().details.is_send); ASSERT_FALSE (send1.sideband ().details.is_receive); @@ -2310,9 +2310,9 @@ TEST (ledger, epoch_blocks_v1_general) ASSERT_EQ (nano::epoch::epoch_0, send1.sideband ().source_epoch); // Not used for send blocks nano::open_block open1 (send1.hash (), nano::dev::genesis->account (), destination.pub, destination.prv, destination.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::unreceivable, ledger.process (transaction, open1).code); - nano::state_block epoch3 (destination.pub, 0, nano::dev::genesis->account (), 0, ledger.epoch_link (nano::epoch::epoch_1), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (destination.pub)); + nano::state_block epoch3 (destination.pub, 0, nano::dev::genesis->account (), 0, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::representative_mismatch, ledger.process (transaction, epoch3).code); - nano::state_block epoch4 (destination.pub, 0, 0, 0, ledger.epoch_link (nano::epoch::epoch_1), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (destination.pub)); + nano::state_block epoch4 (destination.pub, 0, 0, 0, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch4).code); ASSERT_FALSE (epoch4.sideband ().details.is_send); ASSERT_FALSE (epoch4.sideband ().details.is_receive); @@ -2347,19 +2347,19 @@ TEST (ledger, epoch_blocks_v2_general) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block epoch1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block epoch1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); // Trying to upgrade from epoch 0 to epoch 2. It is a requirement epoch upgrades are sequential unless the account is unopened ASSERT_EQ (nano::process_result::block_position, ledger.process (transaction, epoch1).code); // Set it to the first epoch and it should now succeed - epoch1 = nano::state_block (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, epoch1.work); + epoch1 = nano::state_block (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, epoch1.work); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch1).code); ASSERT_EQ (nano::epoch::epoch_1, epoch1.sideband ().details.epoch); ASSERT_EQ (nano::epoch::epoch_0, epoch1.sideband ().source_epoch); // Not used for epoch blocks - nano::state_block epoch2 (nano::dev::genesis->account (), epoch1.hash (), nano::dev::genesis->account (), nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (epoch1.hash ())); + nano::state_block epoch2 (nano::dev::genesis->account (), epoch1.hash (), nano::dev::genesis->account (), nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch2).code); ASSERT_EQ (nano::epoch::epoch_2, epoch2.sideband ().details.epoch); ASSERT_EQ (nano::epoch::epoch_0, epoch2.sideband ().source_epoch); // Not used for epoch blocks - nano::state_block epoch3 (nano::dev::genesis->account (), epoch2.hash (), nano::dev::genesis->account (), nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (epoch2.hash ())); + nano::state_block epoch3 (nano::dev::genesis->account (), epoch2.hash (), nano::dev::genesis->account (), nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch2.hash ())); ASSERT_EQ (nano::process_result::block_position, ledger.process (transaction, epoch3).code); nano::account_info genesis_info; ASSERT_FALSE (ledger.store.account.get (transaction, nano::dev::genesis->account (), genesis_info)); @@ -2370,21 +2370,21 @@ TEST (ledger, epoch_blocks_v2_general) ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch1).code); ASSERT_FALSE (ledger.store.account.get (transaction, nano::dev::genesis->account (), genesis_info)); ASSERT_EQ (genesis_info.epoch (), nano::epoch::epoch_1); - nano::change_block change1 (epoch1.hash (), nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (epoch1.hash ())); + nano::change_block change1 (epoch1.hash (), nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch1.hash ())); ASSERT_EQ (nano::process_result::block_position, ledger.process (transaction, change1).code); - nano::state_block send1 (nano::dev::genesis->account (), epoch1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (epoch1.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), epoch1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_EQ (nano::epoch::epoch_1, send1.sideband ().details.epoch); ASSERT_EQ (nano::epoch::epoch_0, send1.sideband ().source_epoch); // Not used for send blocks nano::open_block open1 (send1.hash (), nano::dev::genesis->account (), destination.pub, destination.prv, destination.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::unreceivable, ledger.process (transaction, open1).code); - nano::state_block epoch4 (destination.pub, 0, 0, 0, ledger.epoch_link (nano::epoch::epoch_1), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (destination.pub)); + nano::state_block epoch4 (destination.pub, 0, 0, 0, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch4).code); ASSERT_EQ (nano::epoch::epoch_1, epoch4.sideband ().details.epoch); ASSERT_EQ (nano::epoch::epoch_0, epoch4.sideband ().source_epoch); // Not used for epoch blocks - nano::state_block epoch5 (destination.pub, epoch4.hash (), nano::dev::genesis->account (), 0, ledger.epoch_link (nano::epoch::epoch_2), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (epoch4.hash ())); + nano::state_block epoch5 (destination.pub, epoch4.hash (), nano::dev::genesis->account (), 0, ledger.epoch_link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch4.hash ())); ASSERT_EQ (nano::process_result::representative_mismatch, ledger.process (transaction, epoch5).code); - nano::state_block epoch6 (destination.pub, epoch4.hash (), 0, 0, ledger.epoch_link (nano::epoch::epoch_2), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (epoch4.hash ())); + nano::state_block epoch6 (destination.pub, epoch4.hash (), 0, 0, ledger.epoch_link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch4.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch6).code); ASSERT_EQ (nano::epoch::epoch_2, epoch6.sideband ().details.epoch); ASSERT_EQ (nano::epoch::epoch_0, epoch6.sideband ().source_epoch); // Not used for epoch blocks @@ -2413,11 +2413,11 @@ TEST (ledger, epoch_blocks_receive_upgrade) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - nano::state_block epoch1 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, ledger.epoch_link (nano::epoch::epoch_1), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block epoch1 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch1).code); - nano::state_block send2 (nano::dev::genesis->account (), epoch1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio * 2, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (epoch1.hash ())); + nano::state_block send2 (nano::dev::genesis->account (), epoch1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio * 2, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); ASSERT_EQ (nano::epoch::epoch_1, send2.sideband ().details.epoch); ASSERT_EQ (nano::epoch::epoch_0, send2.sideband ().source_epoch); // Not used for send blocks @@ -2439,7 +2439,7 @@ TEST (ledger, epoch_blocks_receive_upgrade) ASSERT_EQ (destination_info.epoch (), nano::epoch::epoch_0); nano::pending_info pending_send2; ASSERT_FALSE (ledger.store.pending.get (transaction, nano::pending_key (destination.pub, send2.hash ()), pending_send2)); - ASSERT_EQ (nano::dev_genesis_key.pub, pending_send2.source); + ASSERT_EQ (nano::dev::genesis_key.pub, pending_send2.source); ASSERT_EQ (nano::Gxrb_ratio, pending_send2.amount.number ()); ASSERT_EQ (nano::epoch::epoch_1, pending_send2.epoch); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive2).code); @@ -2454,14 +2454,14 @@ TEST (ledger, epoch_blocks_receive_upgrade) ASSERT_EQ (nano::process_result::unreceivable, ledger.process (transaction, open2).code); // Upgrade to epoch 2 and send to destination. Try to create an open block from an epoch 2 source block. nano::keypair destination3; - nano::state_block epoch2 (nano::dev::genesis->account (), send2.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio * 2, ledger.epoch_link (nano::epoch::epoch_2), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send2.hash ())); + nano::state_block epoch2 (nano::dev::genesis->account (), send2.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio * 2, ledger.epoch_link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send2.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch2).code); - nano::state_block send4 (nano::dev::genesis->account (), epoch2.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio * 3, destination3.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (epoch2.hash ())); + nano::state_block send4 (nano::dev::genesis->account (), epoch2.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio * 3, destination3.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch2.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send4).code); nano::open_block open3 (send4.hash (), destination3.pub, destination3.pub, destination3.prv, destination3.pub, *pool.generate (destination3.pub)); ASSERT_EQ (nano::process_result::unreceivable, ledger.process (transaction, open3).code); // Send it to an epoch 1 account - nano::state_block send5 (nano::dev::genesis->account (), send4.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio * 4, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send4.hash ())); + nano::state_block send5 (nano::dev::genesis->account (), send4.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio * 4, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send4.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send5).code); ASSERT_FALSE (ledger.store.account.get (transaction, destination.pub, destination_info)); ASSERT_EQ (destination_info.epoch (), nano::epoch::epoch_1); @@ -2473,9 +2473,9 @@ TEST (ledger, epoch_blocks_receive_upgrade) ASSERT_EQ (destination_info.epoch (), nano::epoch::epoch_2); // Upgrade an unopened account straight to epoch 2 nano::keypair destination4; - nano::state_block send6 (nano::dev::genesis->account (), send5.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio * 5, destination4.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send5.hash ())); + nano::state_block send6 (nano::dev::genesis->account (), send5.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio * 5, destination4.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send5.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send6).code); - nano::state_block epoch4 (destination4.pub, 0, 0, 0, ledger.epoch_link (nano::epoch::epoch_2), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (destination4.pub)); + nano::state_block epoch4 (destination4.pub, 0, 0, 0, ledger.epoch_link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (destination4.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch4).code); ASSERT_EQ (nano::epoch::epoch_2, epoch4.sideband ().details.epoch); ASSERT_EQ (nano::epoch::epoch_0, epoch4.sideband ().source_epoch); // Not used for epoch blocks @@ -2494,17 +2494,17 @@ TEST (ledger, epoch_blocks_fork) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::send_block send1 (genesis.hash (), nano::account (0), nano::genesis_amount, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block send1 (genesis.hash (), nano::account (0), nano::genesis_amount, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - nano::state_block epoch1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block epoch1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::fork, ledger.process (transaction, epoch1).code); - nano::state_block epoch2 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block epoch2 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::fork, ledger.process (transaction, epoch2).code); - nano::state_block epoch3 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block epoch3 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch3).code); ASSERT_EQ (nano::epoch::epoch_1, epoch3.sideband ().details.epoch); ASSERT_EQ (nano::epoch::epoch_0, epoch3.sideband ().source_epoch); // Not used for epoch state blocks - nano::state_block epoch4 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block epoch4 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::fork, ledger.process (transaction, epoch2).code); } @@ -2515,12 +2515,12 @@ TEST (ledger, successor_epoch) nano::keypair key1; nano::genesis genesis; nano::work_pool pool (std::numeric_limits::max ()); - nano::send_block send1 (genesis.hash (), key1.pub, nano::genesis_amount - 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block send1 (genesis.hash (), key1.pub, nano::genesis_amount - 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); nano::state_block open (key1.pub, 0, key1.pub, 1, send1.hash (), key1.prv, key1.pub, *pool.generate (key1.pub)); nano::state_block change (key1.pub, open.hash (), key1.pub, 1, 0, key1.prv, key1.pub, *pool.generate (open.hash ())); auto open_hash = open.hash (); - nano::send_block send2 (send1.hash (), reinterpret_cast (open_hash), nano::genesis_amount - 2, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); - nano::state_block epoch_open (reinterpret_cast (open_hash), 0, 0, 0, node1.ledger.epoch_link (nano::epoch::epoch_1), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (open.hash ())); + nano::send_block send2 (send1.hash (), reinterpret_cast (open_hash), nano::genesis_amount - 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block epoch_open (reinterpret_cast (open_hash), 0, 0, 0, node1.ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (open.hash ())); auto transaction (node1.store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, node1.ledger.process (transaction, send1).code); ASSERT_EQ (nano::process_result::progress, node1.ledger.process (transaction, open).code); @@ -2546,7 +2546,7 @@ TEST (ledger, epoch_open_pending) .representative (0) .balance (0) .link (node1.ledger.epoch_link (nano::epoch::epoch_1)) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*pool.generate (key1.pub)) .build_shared (); auto process_result (node1.ledger.process (node1.store.tx_begin_write (), *epoch_open)); @@ -2567,7 +2567,7 @@ TEST (ledger, epoch_open_pending) .representative (nano::dev::genesis->account ()) .balance (nano::genesis_amount - 100) .link (key1.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*pool.generate (nano::dev::genesis->hash ())) .build_shared (); node1.block_processor.add (send1); @@ -2595,7 +2595,7 @@ TEST (ledger, block_hash_account_conflict) .representative (nano::dev::genesis->account ()) .balance (nano::genesis_amount - 100) .link (key1.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*pool.generate (genesis.hash ())) .build_shared (); @@ -2635,7 +2635,7 @@ TEST (ledger, block_hash_account_conflict) .representative (0) .balance (0) .link (node1.ledger.epoch_link (nano::epoch::epoch_1)) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*pool.generate (receive1->hash ())) .build_shared (); @@ -2679,14 +2679,14 @@ TEST (ledger, could_fit) nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; // Test legacy and state change blocks could_fit - nano::change_block change1 (genesis.hash (), nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); - nano::state_block change2 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::change_block change1 (genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block change2 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_TRUE (ledger.could_fit (transaction, change1)); ASSERT_TRUE (ledger.could_fit (transaction, change2)); // Test legacy and state send nano::keypair key1; - nano::send_block send1 (change1.hash (), key1.pub, nano::genesis_amount - 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (change1.hash ())); - nano::state_block send2 (nano::dev::genesis->account (), change1.hash (), nano::dev::genesis->account (), nano::genesis_amount - 1, key1.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (change1.hash ())); + nano::send_block send1 (change1.hash (), key1.pub, nano::genesis_amount - 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (change1.hash ())); + nano::state_block send2 (nano::dev::genesis->account (), change1.hash (), nano::dev::genesis->account (), nano::genesis_amount - 1, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (change1.hash ())); ASSERT_FALSE (ledger.could_fit (transaction, send1)); ASSERT_FALSE (ledger.could_fit (transaction, send2)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, change1).code); @@ -2708,7 +2708,7 @@ TEST (ledger, could_fit) ASSERT_TRUE (ledger.could_fit (transaction, open1)); ASSERT_TRUE (ledger.could_fit (transaction, open2)); // Create another send to receive - nano::state_block send3 (nano::dev::genesis->account (), send2.hash (), nano::dev::genesis->account (), nano::genesis_amount - 2, key1.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send2.hash ())); + nano::state_block send3 (nano::dev::genesis->account (), send2.hash (), nano::dev::genesis->account (), nano::genesis_amount - 2, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send2.hash ())); // Test legacy and state receive nano::receive_block receive1 (open1.hash (), send3.hash (), key1.prv, key1.pub, *pool.generate (open1.hash ())); nano::state_block receive2 (key1.pub, open1.hash (), nano::dev::genesis->account (), 2, send3.hash (), key1.prv, key1.pub, *pool.generate (open1.hash ())); @@ -2718,7 +2718,7 @@ TEST (ledger, could_fit) ASSERT_TRUE (ledger.could_fit (transaction, receive1)); ASSERT_TRUE (ledger.could_fit (transaction, receive2)); // Test epoch (state) - nano::state_block epoch1 (key1.pub, receive1.hash (), nano::dev::genesis->account (), 2, ledger.epoch_link (nano::epoch::epoch_1), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (receive1.hash ())); + nano::state_block epoch1 (key1.pub, receive1.hash (), nano::dev::genesis->account (), 2, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (receive1.hash ())); ASSERT_FALSE (ledger.could_fit (transaction, epoch1)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); ASSERT_TRUE (ledger.could_fit (transaction, receive1)); @@ -2734,11 +2734,11 @@ TEST (ledger, unchecked_epoch) auto & node1 (*system.nodes[0]); nano::genesis genesis; nano::keypair destination; - auto send1 (std::make_shared (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); + auto send1 (std::make_shared (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send1); auto open1 (std::make_shared (destination.pub, 0, destination.pub, nano::Gxrb_ratio, send1->hash (), destination.prv, destination.pub, 0)); node1.work_generate_blocking (*open1); - auto epoch1 (std::make_shared (destination.pub, open1->hash (), destination.pub, nano::Gxrb_ratio, node1.ledger.epoch_link (nano::epoch::epoch_1), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); + auto epoch1 (std::make_shared (destination.pub, open1->hash (), destination.pub, nano::Gxrb_ratio, node1.ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*epoch1); node1.block_processor.add (epoch1); node1.block_processor.flush (); @@ -2774,7 +2774,7 @@ TEST (ledger, unchecked_epoch_invalid) auto & node1 (*system.add_node (node_config)); nano::genesis genesis; nano::keypair destination; - auto send1 (std::make_shared (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); + auto send1 (std::make_shared (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send1); auto open1 (std::make_shared (destination.pub, 0, destination.pub, nano::Gxrb_ratio, send1->hash (), destination.prv, destination.pub, 0)); node1.work_generate_blocking (*open1); @@ -2826,12 +2826,12 @@ TEST (ledger, unchecked_open) auto & node1 (*system.nodes[0]); nano::genesis genesis; nano::keypair destination; - auto send1 (std::make_shared (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); + auto send1 (std::make_shared (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send1); auto open1 (std::make_shared (send1->hash (), destination.pub, destination.pub, destination.prv, destination.pub, 0)); node1.work_generate_blocking (*open1); // Invalid signature for open block - auto open2 (std::make_shared (send1->hash (), nano::dev_genesis_key.pub, destination.pub, destination.prv, destination.pub, 0)); + auto open2 (std::make_shared (send1->hash (), nano::dev::genesis_key.pub, destination.pub, destination.prv, destination.pub, 0)); node1.work_generate_blocking (*open2); open2->signature.bytes[0] ^= 1; node1.block_processor.add (open1); @@ -2863,9 +2863,9 @@ TEST (ledger, unchecked_receive) auto & node1 (*system.nodes[0]); nano::genesis genesis; nano::keypair destination; - auto send1 (std::make_shared (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); + auto send1 (std::make_shared (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send1); - auto send2 (std::make_shared (nano::dev::genesis->account (), send1->hash (), nano::dev::genesis->account (), nano::genesis_amount - 2 * nano::Gxrb_ratio, destination.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); + auto send2 (std::make_shared (nano::dev::genesis->account (), send1->hash (), nano::dev::genesis->account (), nano::genesis_amount - 2 * nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send2); auto open1 (std::make_shared (send1->hash (), destination.pub, destination.pub, destination.prv, destination.pub, 0)); node1.work_generate_blocking (*open1); @@ -2919,9 +2919,9 @@ TEST (ledger, confirmation_height_not_updated) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::account_info account_info; - ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, account_info)); + ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, account_info)); nano::keypair key; - nano::send_block send1 (account_info.head, key.pub, 50, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (account_info.head)); + nano::send_block send1 (account_info.head, key.pub, 50, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (account_info.head)); nano::confirmation_height_info confirmation_height_info; ASSERT_FALSE (store->confirmation_height.get (transaction, nano::dev::genesis->account (), confirmation_height_info)); ASSERT_EQ (1, confirmation_height_info.height); @@ -2944,29 +2944,29 @@ TEST (ledger, zero_rep) nano::genesis genesis; nano::block_builder builder; auto block1 = builder.state () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (0) .balance (nano::genesis_amount) .link (0) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build (); auto transaction (node1.store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, node1.ledger.process (transaction, *block1).code); - ASSERT_EQ (0, node1.ledger.cache.rep_weights.representation_get (nano::dev_genesis_key.pub)); + ASSERT_EQ (0, node1.ledger.cache.rep_weights.representation_get (nano::dev::genesis_key.pub)); ASSERT_EQ (nano::genesis_amount, node1.ledger.cache.rep_weights.representation_get (0)); auto block2 = builder.state () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (block1->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount) .link (0) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (block1->hash ())) .build (); ASSERT_EQ (nano::process_result::progress, node1.ledger.process (transaction, *block2).code); - ASSERT_EQ (nano::genesis_amount, node1.ledger.cache.rep_weights.representation_get (nano::dev_genesis_key.pub)); + ASSERT_EQ (nano::genesis_amount, node1.ledger.cache.rep_weights.representation_get (nano::dev::genesis_key.pub)); ASSERT_EQ (0, node1.ledger.cache.rep_weights.representation_get (0)); } @@ -2981,7 +2981,7 @@ TEST (ledger, work_validation) store->initialize (store->tx_begin_write (), ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::block_builder builder; - auto gen = nano::dev_genesis_key; + auto gen = nano::dev::genesis_key; nano::keypair key; // With random work the block doesn't pass, then modifies the block with sufficient work and ensures a correct result @@ -3083,7 +3083,7 @@ TEST (ledger, dependents_confirmed) .representative (nano::dev::genesis->account ()) .balance (nano::genesis_amount - 100) .link (key1.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*pool.generate (genesis.hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, *send1).code); @@ -3094,7 +3094,7 @@ TEST (ledger, dependents_confirmed) .representative (nano::dev::genesis->account ()) .balance (nano::genesis_amount - 200) .link (key1.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*pool.generate (send1->hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, *send2).code); @@ -3156,7 +3156,7 @@ TEST (ledger, dependents_confirmed_pruning) .representative (nano::dev::genesis->account ()) .balance (nano::genesis_amount - 100) .link (key1.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*pool.generate (genesis.hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, *send1).code); @@ -3166,7 +3166,7 @@ TEST (ledger, dependents_confirmed_pruning) .representative (nano::dev::genesis->account ()) .balance (nano::genesis_amount - 200) .link (key1.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*pool.generate (send1->hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, *send2).code); @@ -3208,7 +3208,7 @@ TEST (ledger, block_confirmed) .representative (nano::dev::genesis->account ()) .balance (nano::genesis_amount - 100) .link (key1.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*pool.generate (genesis.hash ())) .build (); // Must be safe against non-existing blocks @@ -3261,7 +3261,7 @@ TEST (ledger, cache) .representative (nano::dev::genesis->account ()) .balance (nano::genesis_amount - (i + 1)) .link (key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*pool.generate (latest)) .build (); auto open = builder.state () @@ -3346,14 +3346,14 @@ TEST (ledger, pruning_action) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send1_stored (store->block.get (transaction, send1.hash ())); ASSERT_NE (nullptr, send1_stored); ASSERT_EQ (send1, *send1_stored); ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()))); - nano::state_block send2 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block send2 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); ASSERT_TRUE (store->block.exists (transaction, send2.hash ())); // Pruning action @@ -3370,7 +3370,7 @@ TEST (ledger, pruning_action) ASSERT_TRUE (store->block.exists (transaction, genesis.hash ())); ASSERT_TRUE (store->block.exists (transaction, send2.hash ())); // Receiving pruned block - nano::state_block receive1 (nano::dev::genesis->account (), send2.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, send1.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send2.hash ())); + nano::state_block receive1 (nano::dev::genesis->account (), send2.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send2.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); ASSERT_TRUE (store->block.exists (transaction, receive1.hash ())); auto receive1_stored (store->block.get (transaction, receive1.hash ())); @@ -3407,10 +3407,10 @@ TEST (ledger, pruning_large_chain) auto last_hash (genesis.hash ()); for (auto i (0); i < send_receive_pairs; i++) { - nano::state_block send (nano::dev::genesis->account (), last_hash, nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (last_hash)); + nano::state_block send (nano::dev::genesis->account (), last_hash, nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (last_hash)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); ASSERT_TRUE (store->block.exists (transaction, send.hash ())); - nano::state_block receive (nano::dev::genesis->account (), send.hash (), nano::dev::genesis->account (), nano::genesis_amount, send.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send.hash ())); + nano::state_block receive (nano::dev::genesis->account (), send.hash (), nano::dev::genesis->account (), nano::genesis_amount, send.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive).code); ASSERT_TRUE (store->block.exists (transaction, receive.hash ())); last_hash = receive.hash (); @@ -3440,12 +3440,12 @@ TEST (ledger, pruning_source_rollback) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block epoch1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block epoch1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch1).code); - nano::state_block send1 (nano::dev::genesis->account (), epoch1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (epoch1.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), epoch1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()))); - nano::state_block send2 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block send2 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); ASSERT_TRUE (store->block.exists (transaction, send2.hash ())); // Pruning action @@ -3461,7 +3461,7 @@ TEST (ledger, pruning_source_rollback) ASSERT_EQ (nano::Gxrb_ratio, info.amount.number ()); ASSERT_EQ (nano::epoch::epoch_1, info.epoch); // Receiving pruned block - nano::state_block receive1 (nano::dev::genesis->account (), send2.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, send1.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send2.hash ())); + nano::state_block receive1 (nano::dev::genesis->account (), send2.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send2.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()))); ASSERT_EQ (2, ledger.cache.pruned_count); @@ -3492,15 +3492,15 @@ TEST (ledger, pruning_source_rollback_legacy) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::send_block send1 (genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block send1 (genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()))); nano::keypair key1; - nano::send_block send2 (send1.hash (), key1.pub, nano::genesis_amount - 2 * nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); + nano::send_block send2 (send1.hash (), key1.pub, nano::genesis_amount - 2 * nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); ASSERT_TRUE (store->block.exists (transaction, send2.hash ())); ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (key1.pub, send2.hash ()))); - nano::send_block send3 (send2.hash (), nano::dev::genesis->account (), nano::genesis_amount - 3 * nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send2.hash ())); + nano::send_block send3 (send2.hash (), nano::dev::genesis->account (), nano::genesis_amount - 3 * nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send2.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send3).code); ASSERT_TRUE (store->block.exists (transaction, send3.hash ())); ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send3.hash ()))); @@ -3522,7 +3522,7 @@ TEST (ledger, pruning_source_rollback_legacy) ASSERT_EQ (nano::Gxrb_ratio, info2.amount.number ()); ASSERT_EQ (nano::epoch::epoch_0, info2.epoch); // Receiving pruned block - nano::receive_block receive1 (send3.hash (), send1.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send3.hash ())); + nano::receive_block receive1 (send3.hash (), send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send3.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()))); ASSERT_EQ (2, ledger.cache.pruned_count); @@ -3571,7 +3571,7 @@ TEST (ledger, pruning_process_error) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_EQ (0, ledger.cache.pruned_count); ASSERT_EQ (2, ledger.cache.block_count); @@ -3582,7 +3582,7 @@ TEST (ledger, pruning_process_error) // Attempt to process pruned block again ASSERT_EQ (nano::process_result::old, ledger.process (transaction, send1).code); // Attept to process new block after pruned - nano::state_block send2 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block send2 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::gap_previous, ledger.process (transaction, send2).code); ASSERT_EQ (1, ledger.cache.pruned_count); ASSERT_EQ (2, ledger.cache.block_count); @@ -3601,14 +3601,14 @@ TEST (ledger, pruning_legacy_blocks) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::send_block send1 (genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block send1 (genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()))); - nano::receive_block receive1 (send1.hash (), send1.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); + nano::receive_block receive1 (send1.hash (), send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); - nano::change_block change1 (receive1.hash (), key1.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (receive1.hash ())); + nano::change_block change1 (receive1.hash (), key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (receive1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, change1).code); - nano::send_block send2 (change1.hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (change1.hash ())); + nano::send_block send2 (change1.hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (change1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); nano::open_block open1 (send2.hash (), nano::dev::genesis->account (), key1.pub, key1.prv, key1.pub, *pool.generate (key1.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open1).code); @@ -3646,10 +3646,10 @@ TEST (ledger, pruning_safe_functions) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); - nano::state_block send2 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block send2 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); ASSERT_TRUE (store->block.exists (transaction, send2.hash ())); // Pruning action @@ -3689,10 +3689,10 @@ TEST (ledger, hash_root_random) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); - nano::state_block send2 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block send2 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); ASSERT_TRUE (store->block.exists (transaction, send2.hash ())); // Pruning action @@ -3734,12 +3734,12 @@ TEST (ledger, migrate_lmdb_to_rocksdb) nano::work_pool pool (std::numeric_limits::max ()); auto send = nano::state_block_builder () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (0) .link (nano::account (10)) .balance (nano::genesis_amount - 100) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*pool.generate (nano::dev::genesis->hash ())) .build_shared (); @@ -3826,7 +3826,7 @@ TEST (ledger, unconfirmed_frontiers) .representative (nano::dev::genesis->account ()) .balance (nano::genesis_amount - 100) .link (key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*pool.generate (latest)) .build (); diff --git a/nano/core_test/ledger_walker.cpp b/nano/core_test/ledger_walker.cpp index d76e8b6774..6c8aef22bc 100644 --- a/nano/core_test/ledger_walker.cpp +++ b/nano/core_test/ledger_walker.cpp @@ -69,10 +69,10 @@ TEST (ledger_walker, genesis_account_longer) EXPECT_EQ (get_number_of_walked_blocks (genesis_account_info.open_block), 1); EXPECT_EQ (get_number_of_walked_blocks (genesis_account_info.head), 1); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); for (auto itr = 1; itr <= 5; ++itr) { - const auto send = system.wallet (0)->send_action (nano::dev_genesis_key.pub, nano::dev_genesis_key.pub, 1); + const auto send = system.wallet (0)->send_action (nano::dev::genesis_key.pub, nano::dev::genesis_key.pub, 1); ASSERT_TRUE (send); EXPECT_EQ (get_number_of_walked_blocks (send->hash ()), 1 + itr * 2 - 1); ASSERT_TIMELY (3s, 1 + itr * 2 == node->ledger.cache.cemented_count); @@ -97,13 +97,13 @@ TEST (ledger_walker, cross_account) const auto node = system.add_node (node_config); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - ASSERT_TRUE (system.wallet (0)->send_action (nano::dev_genesis_key.pub, nano::dev_genesis_key.pub, 1)); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); + ASSERT_TRUE (system.wallet (0)->send_action (nano::dev::genesis_key.pub, nano::dev::genesis_key.pub, 1)); ASSERT_TIMELY (3s, 3 == node->ledger.cache.cemented_count); nano::keypair key{}; system.wallet (0)->insert_adhoc (key.prv); - ASSERT_TRUE (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, 1)); + ASSERT_TRUE (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key.pub, 1)); ASSERT_TIMELY (3s, 5 == node->ledger.cache.cemented_count); const auto transaction = node->ledger.store.tx_begin_read (); @@ -146,11 +146,11 @@ TEST (ledger_walker, ladder_geometry) const auto node = system.add_node (node_config); std::array keys{}; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); for (auto itr = 0; itr != keys.size (); ++itr) { system.wallet (0)->insert_adhoc (keys[itr].prv); - const auto block = system.wallet (0)->send_action (nano::dev_genesis_key.pub, keys[itr].pub, 1000); + const auto block = system.wallet (0)->send_action (nano::dev::genesis_key.pub, keys[itr].pub, 1000); ASSERT_TIMELY (3s, 1 + (itr + 1) * 2 == node->ledger.cache.cemented_count); } diff --git a/nano/core_test/network.cpp b/nano/core_test/network.cpp index a4797dfbd1..fd840137cb 100644 --- a/nano/core_test/network.cpp +++ b/nano/core_test/network.cpp @@ -209,13 +209,13 @@ TEST (network, send_discarded_publish) { auto transaction (node1.store.tx_begin_read ()); node1.network.flood_block (block); - ASSERT_EQ (genesis.hash (), node1.ledger.latest (transaction, nano::dev_genesis_key.pub)); - ASSERT_EQ (genesis.hash (), node2.latest (nano::dev_genesis_key.pub)); + ASSERT_EQ (genesis.hash (), node1.ledger.latest (transaction, nano::dev::genesis_key.pub)); + ASSERT_EQ (genesis.hash (), node2.latest (nano::dev::genesis_key.pub)); } ASSERT_TIMELY (10s, node2.stats.count (nano::stat::type::message, nano::stat::detail::publish, nano::stat::dir::in) != 0); auto transaction (node1.store.tx_begin_read ()); - ASSERT_EQ (genesis.hash (), node1.ledger.latest (transaction, nano::dev_genesis_key.pub)); - ASSERT_EQ (genesis.hash (), node2.latest (nano::dev_genesis_key.pub)); + ASSERT_EQ (genesis.hash (), node1.ledger.latest (transaction, nano::dev::genesis_key.pub)); + ASSERT_EQ (genesis.hash (), node2.latest (nano::dev::genesis_key.pub)); } TEST (network, send_invalid_publish) @@ -224,17 +224,17 @@ TEST (network, send_invalid_publish) auto & node1 (*system.nodes[0]); auto & node2 (*system.nodes[1]); nano::genesis genesis; - auto block (std::make_shared (1, 1, 20, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (nano::root (1)))); + auto block (std::make_shared (1, 1, 20, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::root (1)))); { auto transaction (node1.store.tx_begin_read ()); node1.network.flood_block (block); - ASSERT_EQ (genesis.hash (), node1.ledger.latest (transaction, nano::dev_genesis_key.pub)); - ASSERT_EQ (genesis.hash (), node2.latest (nano::dev_genesis_key.pub)); + ASSERT_EQ (genesis.hash (), node1.ledger.latest (transaction, nano::dev::genesis_key.pub)); + ASSERT_EQ (genesis.hash (), node2.latest (nano::dev::genesis_key.pub)); } ASSERT_TIMELY (10s, node2.stats.count (nano::stat::type::message, nano::stat::detail::publish, nano::stat::dir::in) != 0); auto transaction (node1.store.tx_begin_read ()); - ASSERT_EQ (genesis.hash (), node1.ledger.latest (transaction, nano::dev_genesis_key.pub)); - ASSERT_EQ (genesis.hash (), node2.latest (nano::dev_genesis_key.pub)); + ASSERT_EQ (genesis.hash (), node1.ledger.latest (transaction, nano::dev::genesis_key.pub)); + ASSERT_EQ (genesis.hash (), node2.latest (nano::dev::genesis_key.pub)); } TEST (network, send_valid_confirm_ack) @@ -253,16 +253,16 @@ TEST (network, send_valid_confirm_ack) auto & node1 (*system.nodes[0]); auto & node2 (*system.nodes[1]); nano::keypair key2; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); system.wallet (1)->insert_adhoc (key2.prv); - nano::block_hash latest1 (node1.latest (nano::dev_genesis_key.pub)); - nano::send_block block2 (latest1, key2.pub, 50, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (latest1)); - nano::block_hash latest2 (node2.latest (nano::dev_genesis_key.pub)); + nano::block_hash latest1 (node1.latest (nano::dev::genesis_key.pub)); + nano::send_block block2 (latest1, key2.pub, 50, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest1)); + nano::block_hash latest2 (node2.latest (nano::dev::genesis_key.pub)); node1.process_active (std::make_shared (block2)); // Keep polling until latest block changes - ASSERT_TIMELY (10s, node2.latest (nano::dev_genesis_key.pub) != latest2); + ASSERT_TIMELY (10s, node2.latest (nano::dev::genesis_key.pub) != latest2); // Make sure the balance has decreased after processing the block. - ASSERT_EQ (50, node2.balance (nano::dev_genesis_key.pub)); + ASSERT_EQ (50, node2.balance (nano::dev::genesis_key.pub)); } } @@ -283,18 +283,18 @@ TEST (network, send_valid_publish) auto & node2 (*system.nodes[1]); node1.bootstrap_initiator.stop (); node2.bootstrap_initiator.stop (); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::keypair key2; system.wallet (1)->insert_adhoc (key2.prv); - nano::block_hash latest1 (node1.latest (nano::dev_genesis_key.pub)); - nano::send_block block2 (latest1, key2.pub, 50, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (latest1)); + nano::block_hash latest1 (node1.latest (nano::dev::genesis_key.pub)); + nano::send_block block2 (latest1, key2.pub, 50, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest1)); auto hash2 (block2.hash ()); - nano::block_hash latest2 (node2.latest (nano::dev_genesis_key.pub)); + nano::block_hash latest2 (node2.latest (nano::dev::genesis_key.pub)); node2.process_active (std::make_shared (block2)); ASSERT_TIMELY (10s, node1.stats.count (nano::stat::type::message, nano::stat::detail::publish, nano::stat::dir::in) != 0); ASSERT_NE (hash2, latest2); - ASSERT_TIMELY (10s, node2.latest (nano::dev_genesis_key.pub) != latest2); - ASSERT_EQ (50, node2.balance (nano::dev_genesis_key.pub)); + ASSERT_TIMELY (10s, node2.latest (nano::dev::genesis_key.pub) != latest2); + ASSERT_EQ (50, node2.balance (nano::dev::genesis_key.pub)); } } @@ -305,7 +305,7 @@ TEST (network, send_insufficient_work_udp) node_flags.disable_udp = false; auto & node1 = *system.add_node (node_flags); auto & node2 = *system.add_node (node_flags); - auto block (std::make_shared (0, 1, 20, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); + auto block (std::make_shared (0, 1, 20, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); nano::publish publish (block); nano::transport::channel_udp channel (node1.network.udp_channels, node2.network.endpoint (), node1.network_params.protocol.protocol_version); channel.send (publish, [] (boost::system::error_code const & ec, size_t size) {}); @@ -320,7 +320,7 @@ TEST (network, send_insufficient_work) auto & node1 = *system.nodes[0]; auto & node2 = *system.nodes[1]; // Block zero work - auto block1 (std::make_shared (0, 1, 20, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); + auto block1 (std::make_shared (0, 1, 20, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); nano::publish publish1 (block1); auto tcp_channel (node1.network.tcp_channels.find_channel (nano::transport::map_endpoint_to_tcp (node2.network.endpoint ()))); tcp_channel->send (publish1, [] (boost::system::error_code const & ec, size_t size) {}); @@ -328,20 +328,20 @@ TEST (network, send_insufficient_work) ASSERT_TIMELY (10s, node2.stats.count (nano::stat::type::error, nano::stat::detail::insufficient_work) != 0); ASSERT_EQ (1, node2.stats.count (nano::stat::type::error, nano::stat::detail::insufficient_work)); // Legacy block work between epoch_2_recieve & epoch_1 - auto block2 (std::make_shared (block1->hash (), 1, 20, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, system.work_generate_limited (block1->hash (), node1.network_params.network.publish_thresholds.epoch_2_receive, node1.network_params.network.publish_thresholds.epoch_1 - 1))); + auto block2 (std::make_shared (block1->hash (), 1, 20, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, system.work_generate_limited (block1->hash (), node1.network_params.network.publish_thresholds.epoch_2_receive, node1.network_params.network.publish_thresholds.epoch_1 - 1))); nano::publish publish2 (block2); tcp_channel->send (publish2, [] (boost::system::error_code const & ec, size_t size) {}); ASSERT_TIMELY (10s, node2.stats.count (nano::stat::type::error, nano::stat::detail::insufficient_work) != 1); ASSERT_EQ (2, node2.stats.count (nano::stat::type::error, nano::stat::detail::insufficient_work)); // Legacy block work epoch_1 - auto block3 (std::make_shared (block2->hash (), 1, 20, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (block2->hash (), node1.network_params.network.publish_thresholds.epoch_2))); + auto block3 (std::make_shared (block2->hash (), 1, 20, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (block2->hash (), node1.network_params.network.publish_thresholds.epoch_2))); nano::publish publish3 (block3); tcp_channel->send (publish3, [] (boost::system::error_code const & ec, size_t size) {}); ASSERT_EQ (0, node2.stats.count (nano::stat::type::message, nano::stat::detail::publish, nano::stat::dir::in)); ASSERT_TIMELY (10s, node2.stats.count (nano::stat::type::message, nano::stat::detail::publish, nano::stat::dir::in) != 0); ASSERT_EQ (1, node2.stats.count (nano::stat::type::message, nano::stat::detail::publish, nano::stat::dir::in)); // State block work epoch_2_recieve - auto block4 (std::make_shared (nano::dev_genesis_key.pub, block1->hash (), nano::dev_genesis_key.pub, 20, 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, system.work_generate_limited (block1->hash (), node1.network_params.network.publish_thresholds.epoch_2_receive, node1.network_params.network.publish_thresholds.epoch_1 - 1))); + auto block4 (std::make_shared (nano::dev::genesis_key.pub, block1->hash (), nano::dev::genesis_key.pub, 20, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, system.work_generate_limited (block1->hash (), node1.network_params.network.publish_thresholds.epoch_2_receive, node1.network_params.network.publish_thresholds.epoch_1 - 1))); nano::publish publish4 (block4); tcp_channel->send (publish4, [] (boost::system::error_code const & ec, size_t size) {}); ASSERT_TIMELY (10s, node2.stats.count (nano::stat::type::message, nano::stat::detail::publish, nano::stat::dir::in) != 0); @@ -354,10 +354,10 @@ TEST (receivable_processor, confirm_insufficient_pos) nano::system system (1); auto & node1 (*system.nodes[0]); nano::genesis genesis; - auto block1 (std::make_shared (genesis.hash (), 0, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); + auto block1 (std::make_shared (genesis.hash (), 0, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*block1); ASSERT_EQ (nano::process_result::progress, node1.process (*block1).code); - node1.scheduler.activate (nano::dev_genesis_key.pub, node1.store.tx_begin_read ()); + node1.scheduler.activate (nano::dev::genesis_key.pub, node1.store.tx_begin_read ()); nano::keypair key1; auto vote (std::make_shared (key1.pub, key1.prv, 0, block1)); nano::confirm_ack con1 (vote); @@ -369,11 +369,11 @@ TEST (receivable_processor, confirm_sufficient_pos) nano::system system (1); auto & node1 (*system.nodes[0]); nano::genesis genesis; - auto block1 (std::make_shared (genesis.hash (), 0, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); + auto block1 (std::make_shared (genesis.hash (), 0, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*block1); ASSERT_EQ (nano::process_result::progress, node1.process (*block1).code); - node1.scheduler.activate (nano::dev_genesis_key.pub, node1.store.tx_begin_read ()); - auto vote (std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, 0, block1)); + node1.scheduler.activate (nano::dev::genesis_key.pub, node1.store.tx_begin_read ()); + auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, block1)); nano::confirm_ack con1 (vote); node1.network.inbound (con1, node1.network.udp_channels.create (node1.network.endpoint ())); } @@ -395,26 +395,26 @@ TEST (receivable_processor, send_with_receive) auto & node2 (*system.nodes[1]); auto amount (std::numeric_limits::max ()); nano::keypair key2; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - nano::block_hash latest1 (node1.latest (nano::dev_genesis_key.pub)); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); + nano::block_hash latest1 (node1.latest (nano::dev::genesis_key.pub)); system.wallet (1)->insert_adhoc (key2.prv); - auto block1 (std::make_shared (latest1, key2.pub, amount - node1.config.receive_minimum.number (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (latest1))); - ASSERT_EQ (amount, node1.balance (nano::dev_genesis_key.pub)); + auto block1 (std::make_shared (latest1, key2.pub, amount - node1.config.receive_minimum.number (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest1))); + ASSERT_EQ (amount, node1.balance (nano::dev::genesis_key.pub)); ASSERT_EQ (0, node1.balance (key2.pub)); - ASSERT_EQ (amount, node2.balance (nano::dev_genesis_key.pub)); + ASSERT_EQ (amount, node2.balance (nano::dev::genesis_key.pub)); ASSERT_EQ (0, node2.balance (key2.pub)); node1.process_active (block1); node1.block_processor.flush (); node2.process_active (block1); node2.block_processor.flush (); - ASSERT_EQ (amount - node1.config.receive_minimum.number (), node1.balance (nano::dev_genesis_key.pub)); + ASSERT_EQ (amount - node1.config.receive_minimum.number (), node1.balance (nano::dev::genesis_key.pub)); ASSERT_EQ (0, node1.balance (key2.pub)); - ASSERT_EQ (amount - node1.config.receive_minimum.number (), node2.balance (nano::dev_genesis_key.pub)); + ASSERT_EQ (amount - node1.config.receive_minimum.number (), node2.balance (nano::dev::genesis_key.pub)); ASSERT_EQ (0, node2.balance (key2.pub)); ASSERT_TIMELY (10s, node1.balance (key2.pub) == node1.config.receive_minimum.number () && node2.balance (key2.pub) == node1.config.receive_minimum.number ()); - ASSERT_EQ (amount - node1.config.receive_minimum.number (), node1.balance (nano::dev_genesis_key.pub)); + ASSERT_EQ (amount - node1.config.receive_minimum.number (), node1.balance (nano::dev::genesis_key.pub)); ASSERT_EQ (node1.config.receive_minimum.number (), node1.balance (key2.pub)); - ASSERT_EQ (amount - node1.config.receive_minimum.number (), node2.balance (nano::dev_genesis_key.pub)); + ASSERT_EQ (amount - node1.config.receive_minimum.number (), node2.balance (nano::dev::genesis_key.pub)); ASSERT_EQ (node1.config.receive_minimum.number (), node2.balance (key2.pub)); } } @@ -422,14 +422,14 @@ TEST (receivable_processor, send_with_receive) TEST (network, receive_weight_change) { nano::system system (2); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::keypair key2; system.wallet (1)->insert_adhoc (key2.prv); { auto transaction (system.nodes[1]->wallets.tx_begin_write ()); system.wallet (1)->store.representative_set (transaction, key2.pub); } - ASSERT_NE (nullptr, system.wallet (0)->send_action (nano::dev_genesis_key.pub, key2.pub, system.nodes[0]->config.receive_minimum.number ())); + ASSERT_NE (nullptr, system.wallet (0)->send_action (nano::dev::genesis_key.pub, key2.pub, system.nodes[0]->config.receive_minimum.number ())); ASSERT_TIMELY (10s, std::all_of (system.nodes.begin (), system.nodes.end (), [&] (std::shared_ptr const & node_a) { return node_a->weight (key2.pub) == system.nodes[0]->config.receive_minimum.number (); })); } diff --git a/nano/core_test/network_filter.cpp b/nano/core_test/network_filter.cpp index 6eb35274d3..2e2c58bde5 100644 --- a/nano/core_test/network_filter.cpp +++ b/nano/core_test/network_filter.cpp @@ -39,12 +39,12 @@ TEST (network_filter, unit) } nano::state_block_builder builder; auto new_block = builder - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.open->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - 10 * nano::xrb_ratio) .link (nano::public_key ()) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (0) .build_shared (); @@ -69,12 +69,12 @@ TEST (network_filter, many) { nano::state_block_builder builder; auto block = builder - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.open->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - i * 10 * nano::xrb_ratio) .link (key1.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (0) .build_shared (); diff --git a/nano/core_test/node.cpp b/nano/core_test/node.cpp index 88be824a28..7d0647cdbb 100644 --- a/nano/core_test/node.cpp +++ b/nano/core_test/node.cpp @@ -102,15 +102,15 @@ TEST (node, password_fanout) TEST (node, balance) { nano::system system (1); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto transaction (system.nodes[0]->store.tx_begin_write ()); - ASSERT_EQ (std::numeric_limits::max (), system.nodes[0]->ledger.account_balance (transaction, nano::dev_genesis_key.pub)); + ASSERT_EQ (std::numeric_limits::max (), system.nodes[0]->ledger.account_balance (transaction, nano::dev::genesis_key.pub)); } TEST (node, representative) { nano::system system (1); - auto block1 (system.nodes[0]->rep_block (nano::dev_genesis_key.pub)); + auto block1 (system.nodes[0]->rep_block (nano::dev::genesis_key.pub)); { auto transaction (system.nodes[0]->store.tx_begin_read ()); ASSERT_TRUE (system.nodes[0]->ledger.store.block.exists (transaction, block1)); @@ -123,30 +123,30 @@ TEST (node, send_unkeyed) { nano::system system (1); nano::keypair key2; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); system.wallet (0)->store.password.value_set (nano::keypair ().prv); - ASSERT_EQ (nullptr, system.wallet (0)->send_action (nano::dev_genesis_key.pub, key2.pub, system.nodes[0]->config.receive_minimum.number ())); + ASSERT_EQ (nullptr, system.wallet (0)->send_action (nano::dev::genesis_key.pub, key2.pub, system.nodes[0]->config.receive_minimum.number ())); } TEST (node, send_self) { nano::system system (1); nano::keypair key2; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); system.wallet (0)->insert_adhoc (key2.prv); - ASSERT_NE (nullptr, system.wallet (0)->send_action (nano::dev_genesis_key.pub, key2.pub, system.nodes[0]->config.receive_minimum.number ())); + ASSERT_NE (nullptr, system.wallet (0)->send_action (nano::dev::genesis_key.pub, key2.pub, system.nodes[0]->config.receive_minimum.number ())); ASSERT_TIMELY (10s, !system.nodes[0]->balance (key2.pub).is_zero ()); - ASSERT_EQ (std::numeric_limits::max () - system.nodes[0]->config.receive_minimum.number (), system.nodes[0]->balance (nano::dev_genesis_key.pub)); + ASSERT_EQ (std::numeric_limits::max () - system.nodes[0]->config.receive_minimum.number (), system.nodes[0]->balance (nano::dev::genesis_key.pub)); } TEST (node, send_single) { nano::system system (2); nano::keypair key2; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); system.wallet (1)->insert_adhoc (key2.prv); - ASSERT_NE (nullptr, system.wallet (0)->send_action (nano::dev_genesis_key.pub, key2.pub, system.nodes[0]->config.receive_minimum.number ())); - ASSERT_EQ (std::numeric_limits::max () - system.nodes[0]->config.receive_minimum.number (), system.nodes[0]->balance (nano::dev_genesis_key.pub)); + ASSERT_NE (nullptr, system.wallet (0)->send_action (nano::dev::genesis_key.pub, key2.pub, system.nodes[0]->config.receive_minimum.number ())); + ASSERT_EQ (std::numeric_limits::max () - system.nodes[0]->config.receive_minimum.number (), system.nodes[0]->balance (nano::dev::genesis_key.pub)); ASSERT_TRUE (system.nodes[0]->balance (key2.pub).is_zero ()); ASSERT_TIMELY (10s, !system.nodes[0]->balance (key2.pub).is_zero ()); } @@ -155,10 +155,10 @@ TEST (node, send_single_observing_peer) { nano::system system (3); nano::keypair key2; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); system.wallet (1)->insert_adhoc (key2.prv); - ASSERT_NE (nullptr, system.wallet (0)->send_action (nano::dev_genesis_key.pub, key2.pub, system.nodes[0]->config.receive_minimum.number ())); - ASSERT_EQ (std::numeric_limits::max () - system.nodes[0]->config.receive_minimum.number (), system.nodes[0]->balance (nano::dev_genesis_key.pub)); + ASSERT_NE (nullptr, system.wallet (0)->send_action (nano::dev::genesis_key.pub, key2.pub, system.nodes[0]->config.receive_minimum.number ())); + ASSERT_EQ (std::numeric_limits::max () - system.nodes[0]->config.receive_minimum.number (), system.nodes[0]->balance (nano::dev::genesis_key.pub)); ASSERT_TRUE (system.nodes[0]->balance (key2.pub).is_zero ()); ASSERT_TIMELY (10s, std::all_of (system.nodes.begin (), system.nodes.end (), [&] (std::shared_ptr const & node_a) { return !node_a->balance (key2.pub).is_zero (); })); } @@ -167,10 +167,10 @@ TEST (node, send_single_many_peers) { nano::system system (10); nano::keypair key2; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); system.wallet (1)->insert_adhoc (key2.prv); - ASSERT_NE (nullptr, system.wallet (0)->send_action (nano::dev_genesis_key.pub, key2.pub, system.nodes[0]->config.receive_minimum.number ())); - ASSERT_EQ (std::numeric_limits::max () - system.nodes[0]->config.receive_minimum.number (), system.nodes[0]->balance (nano::dev_genesis_key.pub)); + ASSERT_NE (nullptr, system.wallet (0)->send_action (nano::dev::genesis_key.pub, key2.pub, system.nodes[0]->config.receive_minimum.number ())); + ASSERT_EQ (std::numeric_limits::max () - system.nodes[0]->config.receive_minimum.number (), system.nodes[0]->balance (nano::dev::genesis_key.pub)); ASSERT_TRUE (system.nodes[0]->balance (key2.pub).is_zero ()); ASSERT_TIMELY (3.5min, std::all_of (system.nodes.begin (), system.nodes.end (), [&] (std::shared_ptr const & node_a) { return !node_a->balance (key2.pub).is_zero (); })); system.stop (); @@ -192,27 +192,27 @@ TEST (node, send_out_of_order) .previous (genesis.hash ()) .destination (key2.pub) .balance (std::numeric_limits::max () - node1.config.receive_minimum.number ()) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); auto send2 = builder.make_block () .previous (send1->hash ()) .destination (key2.pub) .balance (std::numeric_limits::max () - 2 * node1.config.receive_minimum.number ()) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send1->hash ())) .build_shared (); auto send3 = builder.make_block () .previous (send2->hash ()) .destination (key2.pub) .balance (std::numeric_limits::max () - 3 * node1.config.receive_minimum.number ()) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send2->hash ())) .build_shared (); node1.process_active (send3); node1.process_active (send2); node1.process_active (send1); - ASSERT_TIMELY (10s, std::all_of (system.nodes.begin (), system.nodes.end (), [&] (std::shared_ptr const & node_a) { return node_a->balance (nano::dev_genesis_key.pub) == nano::genesis_amount - node1.config.receive_minimum.number () * 3; })); + ASSERT_TIMELY (10s, std::all_of (system.nodes.begin (), system.nodes.end (), [&] (std::shared_ptr const & node_a) { return node_a->balance (nano::dev::genesis_key.pub) == nano::genesis_amount - node1.config.receive_minimum.number () * 3; })); } TEST (node, quick_confirm) @@ -220,20 +220,20 @@ TEST (node, quick_confirm) nano::system system (1); auto & node1 (*system.nodes[0]); nano::keypair key; - nano::block_hash previous (node1.latest (nano::dev_genesis_key.pub)); - auto genesis_start_balance (node1.balance (nano::dev_genesis_key.pub)); + nano::block_hash previous (node1.latest (nano::dev::genesis_key.pub)); + auto genesis_start_balance (node1.balance (nano::dev::genesis_key.pub)); system.wallet (0)->insert_adhoc (key.prv); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto send = nano::send_block_builder () .previous (previous) .destination (key.pub) .balance (node1.online_reps.delta () + 1) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (previous)) .build_shared (); node1.process_active (send); ASSERT_TIMELY (10s, !node1.balance (key.pub).is_zero ()); - ASSERT_EQ (node1.balance (nano::dev_genesis_key.pub), node1.online_reps.delta () + 1); + ASSERT_EQ (node1.balance (nano::dev::genesis_key.pub), node1.online_reps.delta () + 1); ASSERT_EQ (node1.balance (key.pub), genesis_start_balance - (node1.online_reps.delta () + 1)); } @@ -242,13 +242,13 @@ TEST (node, node_receive_quorum) nano::system system (1); auto & node1 = *system.nodes[0]; nano::keypair key; - nano::block_hash previous (node1.latest (nano::dev_genesis_key.pub)); + nano::block_hash previous (node1.latest (nano::dev::genesis_key.pub)); system.wallet (0)->insert_adhoc (key.prv); auto send = nano::send_block_builder () .previous (previous) .destination (key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (previous)) .build_shared (); node1.process_active (send); @@ -262,7 +262,7 @@ TEST (node, node_receive_quorum) nano::system system2; system2.add_node (); - system2.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system2.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); ASSERT_TRUE (node1.balance (key.pub).is_zero ()); node1.network.tcp_channels.start_tcp (system2.nodes[0]->network.endpoint (), nano::keepalive_tcp_callback (node1)); while (node1.balance (key.pub).is_zero ()) @@ -282,9 +282,9 @@ TEST (node, auto_bootstrap) node_flags.disable_lazy_bootstrap = true; auto node0 = system.add_node (config, node_flags); nano::keypair key2; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); system.wallet (0)->insert_adhoc (key2.prv); - auto send1 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key2.pub, node0->config.receive_minimum.number ())); + auto send1 (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key2.pub, node0->config.receive_minimum.number ())); ASSERT_NE (nullptr, send1); ASSERT_TIMELY (10s, node0->balance (key2.pub) == node0->config.receive_minimum.number ()); auto node1 (std::make_shared (system.io_ctx, nano::get_available_port (), nano::unique_path (), system.logging, system.work, node_flags)); @@ -314,11 +314,11 @@ TEST (node, auto_bootstrap_reverse) node_flags.disable_lazy_bootstrap = true; auto node0 = system.add_node (config, node_flags); nano::keypair key2; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); system.wallet (0)->insert_adhoc (key2.prv); auto node1 (std::make_shared (system.io_ctx, nano::get_available_port (), nano::unique_path (), system.logging, system.work, node_flags)); ASSERT_FALSE (node1->init_error ()); - ASSERT_NE (nullptr, system.wallet (0)->send_action (nano::dev_genesis_key.pub, key2.pub, node0->config.receive_minimum.number ())); + ASSERT_NE (nullptr, system.wallet (0)->send_action (nano::dev::genesis_key.pub, key2.pub, node0->config.receive_minimum.number ())); node1->start (); system.nodes.push_back (node1); ASSERT_NE (nullptr, nano::establish_tcp (system, *node0, node1->network.endpoint ())); @@ -383,8 +383,8 @@ TEST (node, search_pending) nano::system system (1); auto node (system.nodes[0]); nano::keypair key2; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - ASSERT_NE (nullptr, system.wallet (0)->send_action (nano::dev_genesis_key.pub, key2.pub, node->config.receive_minimum.number ())); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); + ASSERT_NE (nullptr, system.wallet (0)->send_action (nano::dev::genesis_key.pub, key2.pub, node->config.receive_minimum.number ())); system.wallet (0)->insert_adhoc (key2.prv); ASSERT_FALSE (system.wallet (0)->search_pending (system.wallet (0)->wallets.tx_begin_read ())); ASSERT_TIMELY (10s, !node->balance (key2.pub).is_zero ()); @@ -395,9 +395,9 @@ TEST (node, search_pending_same) nano::system system (1); auto node (system.nodes[0]); nano::keypair key2; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - ASSERT_NE (nullptr, system.wallet (0)->send_action (nano::dev_genesis_key.pub, key2.pub, node->config.receive_minimum.number ())); - ASSERT_NE (nullptr, system.wallet (0)->send_action (nano::dev_genesis_key.pub, key2.pub, node->config.receive_minimum.number ())); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); + ASSERT_NE (nullptr, system.wallet (0)->send_action (nano::dev::genesis_key.pub, key2.pub, node->config.receive_minimum.number ())); + ASSERT_NE (nullptr, system.wallet (0)->send_action (nano::dev::genesis_key.pub, key2.pub, node->config.receive_minimum.number ())); system.wallet (0)->insert_adhoc (key2.prv); ASSERT_FALSE (system.wallet (0)->search_pending (system.wallet (0)->wallets.tx_begin_read ())); ASSERT_TIMELY (10s, node->balance (key2.pub) == 2 * node->config.receive_minimum.number ()); @@ -409,11 +409,11 @@ TEST (node, search_pending_multiple) auto node (system.nodes[0]); nano::keypair key2; nano::keypair key3; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); system.wallet (0)->insert_adhoc (key3.prv); - ASSERT_NE (nullptr, system.wallet (0)->send_action (nano::dev_genesis_key.pub, key3.pub, node->config.receive_minimum.number ())); + ASSERT_NE (nullptr, system.wallet (0)->send_action (nano::dev::genesis_key.pub, key3.pub, node->config.receive_minimum.number ())); ASSERT_TIMELY (10s, !node->balance (key3.pub).is_zero ()); - ASSERT_NE (nullptr, system.wallet (0)->send_action (nano::dev_genesis_key.pub, key2.pub, node->config.receive_minimum.number ())); + ASSERT_NE (nullptr, system.wallet (0)->send_action (nano::dev::genesis_key.pub, key2.pub, node->config.receive_minimum.number ())); ASSERT_NE (nullptr, system.wallet (0)->send_action (key3.pub, key2.pub, node->config.receive_minimum.number ())); system.wallet (0)->insert_adhoc (key2.prv); ASSERT_FALSE (system.wallet (0)->search_pending (system.wallet (0)->wallets.tx_begin_read ())); @@ -427,10 +427,10 @@ TEST (node, search_pending_confirmed) node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto node = system.add_node (node_config); nano::keypair key2; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - auto send1 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key2.pub, node->config.receive_minimum.number ())); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); + auto send1 (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key2.pub, node->config.receive_minimum.number ())); ASSERT_NE (nullptr, send1); - auto send2 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key2.pub, node->config.receive_minimum.number ())); + auto send2 (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key2.pub, node->config.receive_minimum.number ())); ASSERT_NE (nullptr, send2); ASSERT_TIMELY (10s, node->active.empty ()); bool confirmed (false); @@ -443,7 +443,7 @@ TEST (node, search_pending_confirmed) } { auto transaction (node->wallets.tx_begin_write ()); - system.wallet (0)->store.erase (transaction, nano::dev_genesis_key.pub); + system.wallet (0)->store.erase (transaction, nano::dev::genesis_key.pub); } system.wallet (0)->insert_adhoc (key2.prv); ASSERT_FALSE (system.wallet (0)->search_pending (system.wallet (0)->wallets.tx_begin_read ())); @@ -469,17 +469,17 @@ TEST (node, search_pending_pruned) config.enable_voting = false; // Remove after allowing pruned voting auto node2 = system.add_node (config, node_flags); nano::keypair key2; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - auto send1 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key2.pub, node2->config.receive_minimum.number ())); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); + auto send1 (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key2.pub, node2->config.receive_minimum.number ())); ASSERT_NE (nullptr, send1); - auto send2 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key2.pub, node2->config.receive_minimum.number ())); + auto send2 (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key2.pub, node2->config.receive_minimum.number ())); ASSERT_NE (nullptr, send2); // Confirmation ASSERT_TIMELY (10s, node1->active.empty () && node2->active.empty ()); ASSERT_TIMELY (5s, node1->ledger.block_confirmed (node1->store.tx_begin_read (), send2->hash ())); ASSERT_TIMELY (5s, node2->ledger.cache.cemented_count == 3); - system.wallet (0)->store.erase (node1->wallets.tx_begin_write (), nano::dev_genesis_key.pub); + system.wallet (0)->store.erase (node1->wallets.tx_begin_write (), nano::dev::genesis_key.pub); // Pruning { @@ -507,14 +507,14 @@ TEST (node, unlock_search) nano::system system (1); auto node (system.nodes[0]); nano::keypair key2; - nano::uint128_t balance (node->balance (nano::dev_genesis_key.pub)); + nano::uint128_t balance (node->balance (nano::dev::genesis_key.pub)); { auto transaction (system.wallet (0)->wallets.tx_begin_write ()); system.wallet (0)->store.rekey (transaction, ""); } - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - ASSERT_NE (nullptr, system.wallet (0)->send_action (nano::dev_genesis_key.pub, key2.pub, node->config.receive_minimum.number ())); - ASSERT_TIMELY (10s, node->balance (nano::dev_genesis_key.pub) != balance); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); + ASSERT_NE (nullptr, system.wallet (0)->send_action (nano::dev::genesis_key.pub, key2.pub, node->config.receive_minimum.number ())); + ASSERT_TIMELY (10s, node->balance (nano::dev::genesis_key.pub) != balance); ASSERT_TIMELY (10s, node->active.empty ()); system.wallet (0)->insert_adhoc (key2.prv); { @@ -570,7 +570,7 @@ TEST (node, price) TEST (node, confirm_locked) { nano::system system (1); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto transaction (system.wallet (0)->wallets.tx_begin_read ()); system.wallet (0)->enter_password (transaction, "1"); auto block = nano::send_block_builder () @@ -1048,7 +1048,7 @@ TEST (node, fork_publish) nano::system system (1); node0 = system.nodes[0]; auto & node1 (*system.nodes[0]); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::keypair key1; nano::genesis genesis; nano::send_block_builder builder; @@ -1056,7 +1056,7 @@ TEST (node, fork_publish) .previous (genesis.hash ()) .destination (key1.pub) .balance (nano::genesis_amount - 100) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (0) .build_shared (); node1.work_generate_blocking (*send1); @@ -1065,7 +1065,7 @@ TEST (node, fork_publish) .previous (genesis.hash ()) .destination (key2.pub) .balance (nano::genesis_amount - 100) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (0) .build_shared (); node1.work_generate_blocking (*send2); @@ -1080,7 +1080,7 @@ TEST (node, fork_publish) node1.process_active (send2); node1.block_processor.flush (); auto votes1 (election->votes ()); - auto existing1 (votes1.find (nano::dev_genesis_key.pub)); + auto existing1 (votes1.find (nano::dev::genesis_key.pub)); ASSERT_NE (votes1.end (), existing1); ASSERT_EQ (send1->hash (), existing1->second.hash); auto winner (*election->tally ().begin ()); @@ -1102,14 +1102,14 @@ TEST (node, fork_publish_inactive) .previous (genesis.hash ()) .destination (key1.pub) .balance (nano::genesis_amount - 100) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); auto send2 = builder.make_block () .previous (genesis.hash ()) .destination (key2.pub) .balance (nano::genesis_amount - 100) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (send1->block_work ()) .build_shared (); auto & node = *system.nodes[0]; @@ -1140,14 +1140,14 @@ TEST (node, fork_keep) .previous (genesis.hash ()) .destination (key1.pub) .balance (nano::genesis_amount - 100) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); auto send2 = builder.make_block () .previous (genesis.hash ()) .destination (key2.pub) .balance (nano::genesis_amount - 100) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); node1.process_active (send1); @@ -1158,7 +1158,7 @@ TEST (node, fork_keep) node2.scheduler.flush (); ASSERT_EQ (1, node1.active.size ()); ASSERT_EQ (1, node2.active.size ()); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); node1.process_active (send2); node1.block_processor.flush (); node2.process_active (send2); @@ -1193,7 +1193,7 @@ TEST (node, fork_flip) .previous (genesis.hash ()) .destination (key1.pub) .balance (nano::genesis_amount - 100) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); nano::publish publish1 (send1); @@ -1202,7 +1202,7 @@ TEST (node, fork_flip) .previous (genesis.hash ()) .destination (key2.pub) .balance (nano::genesis_amount - 100) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); nano::publish publish2 (send2); @@ -1216,7 +1216,7 @@ TEST (node, fork_flip) node2.scheduler.flush (); ASSERT_EQ (1, node1.active.size ()); ASSERT_EQ (1, node2.active.size ()); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); node1.network.inbound (publish2, channel1); node1.block_processor.flush (); node2.network.inbound (publish1, channel2); @@ -1261,7 +1261,7 @@ TEST (node, fork_multi_flip) .previous (genesis.hash ()) .destination (key1.pub) .balance (nano::genesis_amount - 100) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); nano::publish publish1 (send1); @@ -1270,7 +1270,7 @@ TEST (node, fork_multi_flip) .previous (genesis.hash ()) .destination (key2.pub) .balance (nano::genesis_amount - 100) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); nano::publish publish2 (send2); @@ -1278,7 +1278,7 @@ TEST (node, fork_multi_flip) .previous (publish2.block->hash ()) .destination (key2.pub) .balance (nano::genesis_amount - 100) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (publish2.block->hash ())) .build_shared (); nano::publish publish3 (send3); @@ -1291,7 +1291,7 @@ TEST (node, fork_multi_flip) node2.scheduler.flush (); ASSERT_EQ (1, node1.active.size ()); ASSERT_EQ (1, node2.active.size ()); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); node1.network.inbound (publish2, node1.network.udp_channels.create (node1.network.endpoint ())); node1.network.inbound (publish3, node1.network.udp_channels.create (node1.network.endpoint ())); node1.block_processor.flush (); @@ -1328,15 +1328,15 @@ TEST (node, fork_bootstrap_flip) auto & node1 = *system0.add_node (config0, node_flags); nano::node_config config1 (nano::get_available_port (), system1.logging); auto & node2 = *system1.add_node (config1, node_flags); - system0.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - nano::block_hash latest = node1.latest (nano::dev_genesis_key.pub); + system0.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); + nano::block_hash latest = node1.latest (nano::dev::genesis_key.pub); nano::keypair key1; nano::send_block_builder builder; auto send1 = builder.make_block () .previous (latest) .destination (key1.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system0.work.generate (latest)) .build_shared (); nano::keypair key2; @@ -1344,7 +1344,7 @@ TEST (node, fork_bootstrap_flip) .previous (latest) .destination (key2.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system0.work.generate (latest)) .build_shared (); // Insert but don't rebroadcast, simulating settled blocks @@ -1372,7 +1372,7 @@ TEST (node, fork_open) .previous (genesis.hash ()) .destination (key1.pub) .balance (0) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); nano::publish publish1 (send1); @@ -1405,7 +1405,7 @@ TEST (node, fork_open) .work (*system.work.generate (key1.pub)) .build_shared (); nano::publish publish3 (open2); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); node1.network.inbound (publish3, channel1); node1.block_processor.flush (); node1.scheduler.flush (); @@ -1431,7 +1431,7 @@ TEST (node, fork_open_flip) .previous (genesis.hash ()) .destination (key1.pub) .balance (nano::genesis_amount - 1) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); // A copy is necessary to avoid data races during ledger processing, which sets the sideband @@ -1466,7 +1466,7 @@ TEST (node, fork_open_flip) node2.block_confirm (open2); ASSERT_EQ (2, node1.active.size ()); ASSERT_EQ (2, node2.active.size ()); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); // Notify both nodes that a fork exists node1.process_active (open2); node1.block_processor.flush (); @@ -1498,9 +1498,9 @@ TEST (node, coherent_observer) auto transaction (node1.store.tx_begin_read ()); ASSERT_TRUE (node1.store.block.exists (transaction, status_a.winner->hash ())); }); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::keypair key; - system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, 1); + system.wallet (0)->send_action (nano::dev::genesis_key.pub, key.pub, 1); } TEST (node, fork_no_vote_quorum) @@ -1509,21 +1509,21 @@ TEST (node, fork_no_vote_quorum) auto & node1 (*system.nodes[0]); auto & node2 (*system.nodes[1]); auto & node3 (*system.nodes[2]); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto key4 (system.wallet (0)->deterministic_insert ()); - system.wallet (0)->send_action (nano::dev_genesis_key.pub, key4, nano::genesis_amount / 4); + system.wallet (0)->send_action (nano::dev::genesis_key.pub, key4, nano::genesis_amount / 4); auto key1 (system.wallet (1)->deterministic_insert ()); { auto transaction (system.wallet (1)->wallets.tx_begin_write ()); system.wallet (1)->store.representative_set (transaction, key1); } - auto block (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key1, node1.config.receive_minimum.number ())); + auto block (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key1, node1.config.receive_minimum.number ())); ASSERT_NE (nullptr, block); ASSERT_TIMELY (30s, node3.balance (key1) == node1.config.receive_minimum.number () && node2.balance (key1) == node1.config.receive_minimum.number () && node1.balance (key1) == node1.config.receive_minimum.number ()); ASSERT_EQ (node1.config.receive_minimum.number (), node1.weight (key1)); ASSERT_EQ (node1.config.receive_minimum.number (), node2.weight (key1)); ASSERT_EQ (node1.config.receive_minimum.number (), node3.weight (key1)); - nano::state_block send1 (nano::dev_genesis_key.pub, block->hash (), nano::dev_genesis_key.pub, (nano::genesis_amount / 4) - (node1.config.receive_minimum.number () * 2), key1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (block->hash ())); + nano::state_block send1 (nano::dev::genesis_key.pub, block->hash (), nano::dev::genesis_key.pub, (nano::genesis_amount / 4) - (node1.config.receive_minimum.number () * 2), key1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (block->hash ())); ASSERT_EQ (nano::process_result::progress, node1.process (send1).code); ASSERT_EQ (nano::process_result::progress, node2.process (send1).code); ASSERT_EQ (nano::process_result::progress, node3.process (send1).code); @@ -1532,7 +1532,7 @@ TEST (node, fork_no_vote_quorum) .previous (block->hash ()) .destination (key2) .balance ((nano::genesis_amount / 4) - (node1.config.receive_minimum.number () * 2)) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (block->hash ())) .build_shared (); nano::raw_key key3; @@ -1549,9 +1549,9 @@ TEST (node, fork_no_vote_quorum) ASSERT_NE (nullptr, channel); channel->send_buffer (nano::shared_const_buffer (std::move (buffer))); ASSERT_TIMELY (10s, node3.stats.count (nano::stat::type::message, nano::stat::detail::confirm_ack, nano::stat::dir::in) >= 3); - ASSERT_TRUE (node1.latest (nano::dev_genesis_key.pub) == send1.hash ()); - ASSERT_TRUE (node2.latest (nano::dev_genesis_key.pub) == send1.hash ()); - ASSERT_TRUE (node3.latest (nano::dev_genesis_key.pub) == send1.hash ()); + ASSERT_TRUE (node1.latest (nano::dev::genesis_key.pub) == send1.hash ()); + ASSERT_TRUE (node2.latest (nano::dev::genesis_key.pub) == send1.hash ()); + ASSERT_TRUE (node3.latest (nano::dev::genesis_key.pub) == send1.hash ()); } // Disabled because it sometimes takes way too long (but still eventually finishes) @@ -1562,7 +1562,7 @@ TEST (node, DISABLED_fork_pre_confirm) auto & node1 (*system.nodes[1]); auto & node2 (*system.nodes[2]); nano::genesis genesis; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::keypair key1; system.wallet (1)->insert_adhoc (key1.prv); { @@ -1575,31 +1575,31 @@ TEST (node, DISABLED_fork_pre_confirm) auto transaction (system.wallet (2)->wallets.tx_begin_write ()); system.wallet (2)->store.representative_set (transaction, key2.pub); } - auto block0 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key1.pub, nano::genesis_amount / 3)); + auto block0 (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key1.pub, nano::genesis_amount / 3)); ASSERT_NE (nullptr, block0); ASSERT_TIMELY (30s, node0.balance (key1.pub) != 0); - auto block1 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key2.pub, nano::genesis_amount / 3)); + auto block1 (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key2.pub, nano::genesis_amount / 3)); ASSERT_NE (nullptr, block1); ASSERT_TIMELY (30s, node0.balance (key2.pub) != 0); nano::keypair key3; nano::keypair key4; nano::state_block_builder builder; auto block2 = builder.make_block () - .account (nano::dev_genesis_key.pub) - .previous (node0.latest (nano::dev_genesis_key.pub)) + .account (nano::dev::genesis_key.pub) + .previous (node0.latest (nano::dev::genesis_key.pub)) .representative (key3.pub) - .balance (node0.balance (nano::dev_genesis_key.pub)) + .balance (node0.balance (nano::dev::genesis_key.pub)) .link (0) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (0) .build_shared (); auto block3 = builder.make_block () - .account (nano::dev_genesis_key.pub) - .previous (node0.latest (nano::dev_genesis_key.pub)) + .account (nano::dev::genesis_key.pub) + .previous (node0.latest (nano::dev::genesis_key.pub)) .representative (key4.pub) - .balance (node0.balance (nano::dev_genesis_key.pub)) + .balance (node0.balance (nano::dev::genesis_key.pub)) .link (0) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (0) .build_shared (); node0.work_generate_blocking (*block2); @@ -1612,8 +1612,8 @@ TEST (node, DISABLED_fork_pre_confirm) system.deadline_set (70s); while (!done) { - done |= node0.latest (nano::dev_genesis_key.pub) == block2->hash () && node1.latest (nano::dev_genesis_key.pub) == block2->hash () && node2.latest (nano::dev_genesis_key.pub) == block2->hash (); - done |= node0.latest (nano::dev_genesis_key.pub) == block3->hash () && node1.latest (nano::dev_genesis_key.pub) == block3->hash () && node2.latest (nano::dev_genesis_key.pub) == block3->hash (); + done |= node0.latest (nano::dev::genesis_key.pub) == block2->hash () && node1.latest (nano::dev::genesis_key.pub) == block2->hash () && node2.latest (nano::dev::genesis_key.pub) == block2->hash (); + done |= node0.latest (nano::dev::genesis_key.pub) == block3->hash () && node1.latest (nano::dev::genesis_key.pub) == block3->hash () && node2.latest (nano::dev::genesis_key.pub) == block3->hash (); ASSERT_NO_ERROR (system.poll ()); } } @@ -1622,25 +1622,25 @@ TEST (node, DISABLED_fork_pre_confirm) TEST (node, DISABLED_fork_stale) { nano::system system1 (1); - system1.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system1.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::system system2 (1); auto & node1 (*system1.nodes[0]); auto & node2 (*system2.nodes[0]); node2.bootstrap_initiator.bootstrap (node1.network.endpoint (), false); std::shared_ptr channel (std::make_shared (node2.network.udp_channels, node1.network.endpoint (), node2.network_params.protocol.protocol_version)); - auto vote = std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, 0, std::vector ()); + auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, std::vector ()); node2.rep_crawler.response (channel, vote); nano::genesis genesis; nano::keypair key1; nano::keypair key2; nano::state_block_builder builder; auto send3 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - nano::Mxrb_ratio) .link (key1.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (0) .build_shared (); node1.work_generate_blocking (*send3); @@ -1652,22 +1652,22 @@ TEST (node, DISABLED_fork_stale) ASSERT_NO_ERROR (system2.poll ()); } auto send1 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (send3->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - 2 * nano::Mxrb_ratio) .link (key1.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (0) .build_shared (); node1.work_generate_blocking (*send1); auto send2 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (send3->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - 2 * nano::Mxrb_ratio) .link (key2.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (0) .build_shared (); node1.work_generate_blocking (*send2); @@ -1721,7 +1721,7 @@ TEST (node, broadcast_elected) .previous (nano::dev::genesis->hash ()) .destination (rep_big.pub) .balance (nano::Gxrb_ratio * 5) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build (); auto open_big = *builder.open () @@ -1735,7 +1735,7 @@ TEST (node, broadcast_elected) .previous (fund_big.hash ()) .destination (rep_small.pub) .balance (nano::Gxrb_ratio * 2) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (fund_big.hash ())) .build (); auto open_small = *builder.open () @@ -1749,7 +1749,7 @@ TEST (node, broadcast_elected) .previous (fund_small.hash ()) .destination (rep_other.pub) .balance (nano::Gxrb_ratio) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (fund_small.hash ())) .build (); auto open_other = *builder.open () @@ -1781,7 +1781,7 @@ TEST (node, broadcast_elected) // Confirm blocks to allow voting for (auto & node : system.nodes) { - auto block (node->block (node->latest (nano::dev_genesis_key.pub))); + auto block (node->block (node->latest (nano::dev::genesis_key.pub))); ASSERT_NE (nullptr, block); node->block_confirm (block); auto election (node->active.election (block->qualified_root ())); @@ -1794,22 +1794,22 @@ TEST (node, broadcast_elected) system.wallet (1)->insert_adhoc (rep_small.prv); system.wallet (2)->insert_adhoc (rep_other.prv); auto fork0 = builder.send () - .previous (node2->latest (nano::dev_genesis_key.pub)) + .previous (node2->latest (nano::dev::genesis_key.pub)) .destination (rep_small.pub) .balance (0) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) - .work (*node0->work_generate_blocking (node2->latest (nano::dev_genesis_key.pub))) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) + .work (*node0->work_generate_blocking (node2->latest (nano::dev::genesis_key.pub))) .build_shared (); // A copy is necessary to avoid data races during ledger processing, which sets the sideband auto fork0_copy (std::make_shared (*fork0)); node0->process_active (fork0); node1->process_active (fork0_copy); auto fork1 = builder.send () - .previous (node2->latest (nano::dev_genesis_key.pub)) + .previous (node2->latest (nano::dev::genesis_key.pub)) .destination (rep_big.pub) .balance (0) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) - .work (*node0->work_generate_blocking (node2->latest (nano::dev_genesis_key.pub))) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) + .work (*node0->work_generate_blocking (node2->latest (nano::dev::genesis_key.pub))) .build_shared (); system.wallet (2)->insert_adhoc (rep_small.prv); node2->process_active (fork1); @@ -1839,7 +1839,7 @@ TEST (node, rep_self_vote) .previous (nano::dev::genesis->hash ()) .destination (rep_big.pub) .balance (nano::uint128_t{ "0xb0000000000000000000000000000000" }) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build (); auto open_big = *builder.open () @@ -1858,26 +1858,26 @@ TEST (node, rep_self_vote) election->force_confirm (); system.wallet (0)->insert_adhoc (rep_big.prv); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); ASSERT_EQ (system.wallet (0)->wallets.reps ().voting, 2); auto block0 = builder.send () .previous (fund_big.hash ()) .destination (rep_big.pub) .balance (nano::uint128_t ("0x60000000000000000000000000000000")) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (fund_big.hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, node0->process (*block0).code); auto & active = node0->active; auto & scheduler = node0->scheduler; - scheduler.activate (nano::dev_genesis_key.pub, node0->store.tx_begin_read ()); + scheduler.activate (nano::dev::genesis_key.pub, node0->store.tx_begin_read ()); scheduler.flush (); auto election1 = active.election (block0->qualified_root ()); ASSERT_NE (nullptr, election1); // Wait until representatives are activated & make vote ASSERT_TIMELY (1s, election1->votes ().size () == 3); auto rep_votes (election1->votes ()); - ASSERT_NE (rep_votes.end (), rep_votes.find (nano::dev_genesis_key.pub)); + ASSERT_NE (rep_votes.end (), rep_votes.find (nano::dev::genesis_key.pub)); ASSERT_NE (rep_votes.end (), rep_votes.find (rep_big.pub)); } @@ -1890,7 +1890,7 @@ TEST (node, DISABLED_bootstrap_no_publish) auto node1 (system1.nodes[0]); nano::keypair key0; // node0 knows about send0 but node1 doesn't. - nano::send_block send0 (node0->latest (nano::dev_genesis_key.pub), key0.pub, 500, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0); + nano::send_block send0 (node0->latest (nano::dev::genesis_key.pub), key0.pub, 500, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0); { auto transaction (node0->store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, node0->ledger.process (transaction, send0).code); @@ -1927,7 +1927,7 @@ TEST (node, bootstrap_bulk_push) .previous (nano::dev::genesis->hash ()) .destination (key0.pub) .balance (500) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node0->work_generate_blocking (nano::dev::genesis->hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, node0->process (*send0).code); @@ -1965,7 +1965,7 @@ TEST (node, bootstrap_fork_open) .previous (nano::dev::genesis->hash ()) .destination (key0.pub) .balance (nano::genesis_amount - 500) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build (); auto open0 = *builder.open () @@ -1988,7 +1988,7 @@ TEST (node, bootstrap_fork_open) // Confirm send0 to allow starting and voting on the following blocks for (auto node : system.nodes) { - node->block_confirm (node->block (node->latest (nano::dev_genesis_key.pub))); + node->block_confirm (node->block (node->latest (nano::dev::genesis_key.pub))); ASSERT_TIMELY (1s, node->active.election (send0.qualified_root ())); auto election = node->active.election (send0.qualified_root ()); ASSERT_NE (nullptr, election); @@ -1999,7 +1999,7 @@ TEST (node, bootstrap_fork_open) // They disagree about open0/open1 ASSERT_EQ (nano::process_result::progress, node0->process (open0).code); ASSERT_EQ (nano::process_result::progress, node1->process (open1).code); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); ASSERT_FALSE (node1->ledger.block_or_pruned_exists (open0.hash ())); ASSERT_FALSE (node1->bootstrap_initiator.in_progress ()); node1->bootstrap_initiator.bootstrap (node0->network.endpoint (), false); @@ -2014,14 +2014,14 @@ TEST (node, bootstrap_confirm_frontiers) nano::system system1 (1); auto node0 (system0.nodes[0]); auto node1 (system1.nodes[0]); - system0.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system0.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::keypair key0; // node0 knows about send0 but node1 doesn't. auto send0 = nano::send_block_builder () .previous (nano::dev::genesis->hash ()) .destination (key0.pub) .balance (nano::genesis_amount - 500) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node0->work_generate_blocking (nano::dev::genesis->hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, node0->process (*send0).code); @@ -2072,7 +2072,7 @@ TEST (node, DISABLED_unconfirmed_send) auto wallet1 (system.wallet (1)); nano::keypair key0; wallet1->insert_adhoc (key0.prv); - wallet0->insert_adhoc (nano::dev_genesis_key.prv); + wallet0->insert_adhoc (nano::dev::genesis_key.prv); auto send1 (wallet0->send_action (nano::dev::genesis->account (), key0.pub, 2 * nano::Mxrb_ratio)); ASSERT_TIMELY (10s, node1.balance (key0.pub) == 2 * nano::Mxrb_ratio && !node1.bootstrap_initiator.in_progress ()); auto latest (node1.latest (key0.pub)); @@ -2093,10 +2093,10 @@ TEST (node, rep_list) auto wallet0 (system.wallet (0)); auto wallet1 (system.wallet (1)); // Node0 has a rep - wallet0->insert_adhoc (nano::dev_genesis_key.prv); + wallet0->insert_adhoc (nano::dev::genesis_key.prv); nano::keypair key1; // Broadcast a confirm so others should know this is a rep node - wallet0->send_action (nano::dev_genesis_key.pub, key1.pub, nano::Mxrb_ratio); + wallet0->send_action (nano::dev::genesis_key.pub, key1.pub, nano::Mxrb_ratio); ASSERT_EQ (0, node1.rep_crawler.representatives (1).size ()); system.deadline_set (10s); auto done (false); @@ -2135,12 +2135,12 @@ TEST (node, rep_weight) auto amount_not_pr (node.minimum_principal_weight () - 100); std::shared_ptr block1 = builder .state () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - amount_not_pr) .link (keypair1.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build (); std::shared_ptr block2 = builder @@ -2155,12 +2155,12 @@ TEST (node, rep_weight) .build (); std::shared_ptr block3 = builder .state () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (block1->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - amount_not_pr - amount_pr) .link (keypair2.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (block1->hash ())) .build (); std::shared_ptr block4 = builder @@ -2187,7 +2187,7 @@ TEST (node, rep_weight) ASSERT_NE (nullptr, channel2); std::shared_ptr channel3 = nano::establish_tcp (system, node, node3.network.endpoint ()); ASSERT_NE (nullptr, channel3); - auto vote0 = std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, 0, genesis.open); + auto vote0 = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, genesis.open); auto vote1 = std::make_shared (keypair1.pub, keypair1.prv, 0, genesis.open); auto vote2 = std::make_shared (keypair2.pub, keypair2.prv, 0, genesis.open); node.rep_crawler.response (channel1, vote0); @@ -2197,8 +2197,8 @@ TEST (node, rep_weight) // Make sure we get the rep with the most weight first auto reps (node.rep_crawler.representatives (1)); ASSERT_EQ (1, reps.size ()); - ASSERT_EQ (node.balance (nano::dev_genesis_key.pub), reps[0].weight.number ()); - ASSERT_EQ (nano::dev_genesis_key.pub, reps[0].account); + ASSERT_EQ (node.balance (nano::dev::genesis_key.pub), reps[0].weight.number ()); + ASSERT_EQ (nano::dev::genesis_key.pub, reps[0].account); ASSERT_EQ (*channel1, reps[0].channel_ref ()); ASSERT_TRUE (node.rep_crawler.is_pr (*channel1)); ASSERT_FALSE (node.rep_crawler.is_pr (*channel2)); @@ -2217,12 +2217,12 @@ TEST (node, rep_remove) nano::block_builder builder; std::shared_ptr block1 = builder .state () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - node.minimum_principal_weight () * 2) .link (keypair1.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build (); std::shared_ptr block2 = builder @@ -2237,12 +2237,12 @@ TEST (node, rep_remove) .build (); std::shared_ptr block3 = builder .state () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (block1->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - node.minimum_principal_weight () * 4) .link (keypair2.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (block1->hash ())) .build (); std::shared_ptr block4 = builder @@ -2284,10 +2284,10 @@ TEST (node, rep_remove) ASSERT_TIMELY (10s, node.rep_crawler.representative_count () == 0); // Add working representative auto node1 = system.add_node (nano::node_config (nano::get_available_port (), system.logging)); - system.wallet (1)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (1)->insert_adhoc (nano::dev::genesis_key.prv); auto channel1 (node.network.find_channel (node1->network.endpoint ())); ASSERT_NE (nullptr, channel1); - auto vote2 = std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, 0, genesis.open); + auto vote2 = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, genesis.open); node.rep_crawler.response (channel1, vote2); ASSERT_TIMELY (10s, node.rep_crawler.representative_count () == 1); // Add inactive TCP representative channel @@ -2304,7 +2304,7 @@ TEST (node, rep_remove) node2->stop (); ASSERT_TIMELY (10s, node.rep_crawler.representative_count () == 1); reps = node.rep_crawler.representatives (1); - ASSERT_EQ (nano::dev_genesis_key.pub, reps[0].account); + ASSERT_EQ (nano::dev::genesis_key.pub, reps[0].account); ASSERT_EQ (1, node.network.size ()); auto list (node.network.list (1)); ASSERT_EQ (node1->network.endpoint (), list[0]->get_endpoint ()); @@ -2316,7 +2316,7 @@ TEST (node, rep_connection_close) auto & node1 (*system.nodes[0]); auto & node2 (*system.nodes[1]); // Add working representative (node 2) - system.wallet (1)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (1)->insert_adhoc (nano::dev::genesis_key.prv); ASSERT_TIMELY (10s, node1.rep_crawler.representative_count () == 1); node2.stop (); // Remove representative with closed channel @@ -2335,11 +2335,11 @@ TEST (node, no_voting) auto wallet0 (system.wallet (0)); auto wallet1 (system.wallet (1)); // Node1 has a rep - wallet1->insert_adhoc (nano::dev_genesis_key.prv); + wallet1->insert_adhoc (nano::dev::genesis_key.prv); nano::keypair key1; wallet1->insert_adhoc (key1.prv); // Broadcast a confirm so others should know this is a rep node - wallet1->send_action (nano::dev_genesis_key.pub, key1.pub, nano::Mxrb_ratio); + wallet1->send_action (nano::dev::genesis_key.pub, key1.pub, nano::Mxrb_ratio); ASSERT_TIMELY (10s, node0.active.empty ()); ASSERT_EQ (0, node0.stats.count (nano::stat::type::message, nano::stat::detail::confirm_ack, nano::stat::dir::in)); } @@ -2349,14 +2349,14 @@ TEST (node, send_callback) nano::system system (1); auto & node0 (*system.nodes[0]); nano::keypair key2; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); system.wallet (0)->insert_adhoc (key2.prv); node0.config.callback_address = "localhost"; node0.config.callback_port = 8010; node0.config.callback_target = "/"; - ASSERT_NE (nullptr, system.wallet (0)->send_action (nano::dev_genesis_key.pub, key2.pub, node0.config.receive_minimum.number ())); + ASSERT_NE (nullptr, system.wallet (0)->send_action (nano::dev::genesis_key.pub, key2.pub, node0.config.receive_minimum.number ())); ASSERT_TIMELY (10s, node0.balance (key2.pub).is_zero ()); - ASSERT_EQ (std::numeric_limits::max () - node0.config.receive_minimum.number (), node0.balance (nano::dev_genesis_key.pub)); + ASSERT_EQ (std::numeric_limits::max () - node0.config.receive_minimum.number (), node0.balance (nano::dev::genesis_key.pub)); } TEST (node, balance_observer) @@ -2370,13 +2370,13 @@ TEST (node, balance_observer) { balances++; } - else if (nano::dev_genesis_key.pub == account_a && !is_pending) + else if (nano::dev::genesis_key.pub == account_a && !is_pending) { balances++; } }); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, 1); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); + system.wallet (0)->send_action (nano::dev::genesis_key.pub, key.pub, 1); system.deadline_set (10s); auto done (false); while (!done) @@ -2476,7 +2476,7 @@ TEST (node, online_reps) ASSERT_EQ (node1.config.online_weight_minimum, node1.online_reps.trended ()); auto vote (std::make_shared ()); ASSERT_EQ (0, node1.online_reps.online ()); - node1.online_reps.observe (nano::dev_genesis_key.pub); + node1.online_reps.observe (nano::dev::genesis_key.pub); ASSERT_EQ (nano::genesis_amount, node1.online_reps.online ()); // 1 minimum, 1 maximum ASSERT_EQ (node1.config.online_weight_minimum, node1.online_reps.trended ()); @@ -2496,7 +2496,7 @@ TEST (node, online_reps_rep_crawler) nano::node_flags flags; flags.disable_rep_crawler = true; auto & node1 = *system.add_node (flags); - auto vote = std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, nano::milliseconds_since_epoch (), std::vector{ nano::dev::genesis->hash () }); + auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::milliseconds_since_epoch (), std::vector{ nano::dev::genesis->hash () }); ASSERT_EQ (0, node1.online_reps.online ()); // Without rep crawler node1.vote_processor.vote_blocking (vote, std::make_shared (node1)); @@ -2522,12 +2522,12 @@ TEST (node, online_reps_election) nano::keypair key; nano::state_block_builder builder; auto send1 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) .link (key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node1.work_generate_blocking (genesis.hash ())) .build_shared (); node1.process_active (send1); @@ -2535,7 +2535,7 @@ TEST (node, online_reps_election) node1.scheduler.flush (); ASSERT_EQ (1, node1.active.size ()); // Process vote for ongoing election - auto vote = std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, nano::milliseconds_since_epoch (), std::vector{ send1->hash () }); + auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::milliseconds_since_epoch (), std::vector{ send1->hash () }); ASSERT_EQ (0, node1.online_reps.online ()); node1.vote_processor.vote_blocking (vote, std::make_shared (node1)); ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, node1.online_reps.online ()); @@ -2559,14 +2559,14 @@ TEST (node, block_confirm) nano::genesis genesis; nano::keypair key; nano::state_block_builder builder; - system.wallet (1)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (1)->insert_adhoc (nano::dev::genesis_key.prv); auto send1 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) .link (key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node1.work_generate_blocking (genesis.hash ())) .build_shared (); // A copy is necessary to avoid data races during ledger processing, which sets the sideband @@ -2638,26 +2638,26 @@ TEST (node, confirm_quorum) nano::system system (1); auto & node1 = *system.nodes[0]; nano::genesis genesis; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); // Put greater than node.delta () in pending so quorum can't be reached nano::amount new_balance = node1.online_reps.delta () - nano::Gxrb_ratio; auto send1 = nano::state_block_builder () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (new_balance) - .link (nano::dev_genesis_key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .link (nano::dev::genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node1.work_generate_blocking (genesis.hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, node1.process (*send1).code); - system.wallet (0)->send_action (nano::dev_genesis_key.pub, nano::dev_genesis_key.pub, new_balance.number ()); + system.wallet (0)->send_action (nano::dev::genesis_key.pub, nano::dev::genesis_key.pub, new_balance.number ()); ASSERT_TIMELY (2s, node1.active.election (send1->qualified_root ())); auto election = node1.active.election (send1->qualified_root ()); ASSERT_NE (nullptr, election); ASSERT_FALSE (election->confirmed ()); ASSERT_EQ (1, election->votes ().size ()); - ASSERT_EQ (0, node1.balance (nano::dev_genesis_key.pub)); + ASSERT_EQ (0, node1.balance (nano::dev::genesis_key.pub)); } TEST (node, local_votes_cache) @@ -2670,30 +2670,30 @@ TEST (node, local_votes_cache) nano::genesis genesis; nano::state_block_builder builder; auto send1 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) - .link (nano::dev_genesis_key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .link (nano::dev::genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (genesis.hash ())) .build_shared (); auto send2 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (send1->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - 2 * nano::Gxrb_ratio) - .link (nano::dev_genesis_key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .link (nano::dev::genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (send1->hash ())) .build_shared (); auto send3 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (send2->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - 3 * nano::Gxrb_ratio) - .link (nano::dev_genesis_key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .link (nano::dev::genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (send2->hash ())) .build_shared (); { @@ -2707,7 +2707,7 @@ TEST (node, local_votes_cache) ASSERT_NE (nullptr, election); election->force_confirm (); ASSERT_TIMELY (3s, node.ledger.cache.cemented_count == 3); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::confirm_req message1 (send1); nano::confirm_req message2 (send2); auto channel (node.network.udp_channels.create (node.network.endpoint ())); @@ -2754,34 +2754,34 @@ TEST (node, local_votes_cache_batch) auto & node (*system.add_node (node_config)); ASSERT_GE (node.network_params.voting.max_cache, 2); nano::genesis genesis; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::keypair key1; auto send1 = nano::state_block_builder () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) .link (key1.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (genesis.hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, node.ledger.process (node.store.tx_begin_write (), *send1).code); node.confirmation_height_processor.add (send1); ASSERT_TIMELY (5s, node.ledger.block_confirmed (node.store.tx_begin_read (), send1->hash ())); auto send2 = nano::state_block_builder () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (send1->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - 2 * nano::Gxrb_ratio) - .link (nano::dev_genesis_key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .link (nano::dev::genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (send1->hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, node.ledger.process (node.store.tx_begin_write (), *send2).code); auto receive1 = nano::state_block_builder () .account (key1.pub) .previous (0) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::Gxrb_ratio) .link (send1->hash ()) .sign (key1.prv, key1.pub) @@ -2823,7 +2823,7 @@ TEST (node, local_votes_cache_generate_new_vote) node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto & node (*system.add_node (node_config)); nano::genesis genesis; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); // Repsond with cached vote nano::confirm_req message1 (genesis.open); auto channel (node.network.udp_channels.create (node.network.endpoint ())); @@ -2835,12 +2835,12 @@ TEST (node, local_votes_cache_generate_new_vote) ASSERT_EQ (genesis.open->hash (), boost::get (votes1[0]->blocks[0])); ASSERT_TIMELY (3s, node.stats.count (nano::stat::type::requests, nano::stat::detail::requests_generated_votes) == 1); auto send1 = nano::state_block_builder () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) - .link (nano::dev_genesis_key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .link (nano::dev::genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (genesis.hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, node.process (*send1).code); @@ -2873,28 +2873,28 @@ TEST (node, local_votes_cache_fork) node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto & node1 (*system.add_node (node_config, node_flags)); nano::genesis genesis; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto send1 = nano::state_block_builder () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) - .link (nano::dev_genesis_key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .link (nano::dev::genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node1.work_generate_blocking (genesis.hash ())) .build_shared (); auto send1_fork = nano::state_block_builder () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - 2 * nano::Gxrb_ratio) - .link (nano::dev_genesis_key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .link (nano::dev::genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node1.work_generate_blocking (genesis.hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, node1.process (*send1).code); // Cache vote - auto vote (std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, 0, std::vector (1, send1->hash ()))); + auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, std::vector (1, send1->hash ()))); node1.vote_processor.vote (vote, std::make_shared (node1)); node1.history.add (send1->root (), send1->hash (), vote); auto votes2 (node1.history.votes (send1->root (), send1->hash ())); @@ -2922,20 +2922,20 @@ TEST (node, vote_republish) .previous (genesis.hash ()) .destination (key2.pub) .balance (std::numeric_limits::max () - node1.config.receive_minimum.number ()) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); auto send2 = builder.make_block () .previous (genesis.hash ()) .destination (key2.pub) .balance (std::numeric_limits::max () - node1.config.receive_minimum.number () * 2) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); node1.process_active (send1); ASSERT_TIMELY (5s, node2.block (send1->hash ())); node1.process_active (send2); - auto vote (std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, std::numeric_limits::max (), send2)); + auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), send2)); ASSERT_TRUE (node1.active.active (*send1)); ASSERT_TIMELY (10s, node2.active.active (*send1)); node1.vote_processor.vote (vote, std::make_shared (node1)); @@ -2956,12 +2956,12 @@ TEST (node, vote_by_hash_bundle) nano::state_block_builder builder; std::vector> blocks; auto block = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - 1) - .link (nano::dev_genesis_key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .link (nano::dev::genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); blocks.push_back (block); @@ -2972,7 +2972,7 @@ TEST (node, vote_by_hash_bundle) .from (*blocks.back ()) .previous (blocks.back ()->hash ()) .balance (nano::genesis_amount - i) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (blocks.back ()->hash ())) .build_shared (); blocks.push_back (block); @@ -2982,7 +2982,7 @@ TEST (node, vote_by_hash_bundle) auto election = node.active.election (blocks.back ()->qualified_root ()); ASSERT_NE (nullptr, election); election->force_confirm (); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::keypair key1; system.wallet (0)->insert_adhoc (key1.prv); @@ -3016,14 +3016,14 @@ TEST (node, vote_by_hash_republish) .previous (genesis.hash ()) .destination (key2.pub) .balance (std::numeric_limits::max () - node1.config.receive_minimum.number ()) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); auto send2 = builder.make_block () .previous (genesis.hash ()) .destination (key2.pub) .balance (std::numeric_limits::max () - node1.config.receive_minimum.number () * 2) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); node1.process_active (send1); @@ -3031,7 +3031,7 @@ TEST (node, vote_by_hash_republish) node1.process_active (send2); std::vector vote_blocks; vote_blocks.push_back (send2->hash ()); - auto vote = std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, std::numeric_limits::max (), vote_blocks); // Final vote for confirmation + auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), vote_blocks); // Final vote for confirmation ASSERT_TRUE (node1.active.active (*send1)); ASSERT_TRUE (node2.active.active (*send1)); node1.vote_processor.vote (vote, std::make_shared (node1)); @@ -3055,7 +3055,7 @@ TEST (node, vote_by_hash_epoch_block_republish) .previous (genesis.hash ()) .destination (key2.pub) .balance (std::numeric_limits::max () - node1.config.receive_minimum.number ()) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); auto epoch1 = nano::state_block_builder () @@ -3064,7 +3064,7 @@ TEST (node, vote_by_hash_epoch_block_republish) .representative (nano::dev::genesis->account ()) .balance (nano::genesis_amount) .link (node1.ledger.epoch_link (nano::epoch::epoch_1)) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); node1.process_active (send1); @@ -3072,7 +3072,7 @@ TEST (node, vote_by_hash_epoch_block_republish) node1.active.publish (epoch1); std::vector vote_blocks; vote_blocks.push_back (epoch1->hash ()); - auto vote (std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, 0, vote_blocks)); + auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, vote_blocks)); ASSERT_TRUE (node1.active.active (*send1)); ASSERT_TRUE (node2.active.active (*send1)); node1.vote_processor.vote (vote, std::make_shared (node1)); @@ -3092,15 +3092,15 @@ TEST (node, epoch_conflict_confirm) auto node1 = system.add_node (node_config); nano::keypair key; nano::genesis genesis; - nano::keypair epoch_signer (nano::dev_genesis_key); + nano::keypair epoch_signer (nano::dev::genesis_key); nano::state_block_builder builder; auto send = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - 1) .link (key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); auto open = builder.make_block () @@ -3122,12 +3122,12 @@ TEST (node, epoch_conflict_confirm) .work (*system.work.generate (open->hash ())) .build_shared (); auto send2 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (send->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - 2) .link (open->hash ()) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send->hash ())) .build_shared (); auto epoch_open = builder.make_block () @@ -3165,7 +3165,7 @@ TEST (node, epoch_conflict_confirm) ASSERT_TRUE (node0->active.blocks.find (change->hash ()) != node0->active.blocks.end ()); ASSERT_TRUE (node0->active.blocks.find (epoch_open->hash ()) != node0->active.blocks.end ()); } - system.wallet (1)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (1)->insert_adhoc (nano::dev::genesis_key.prv); ASSERT_TIMELY (5s, node0->active.election (change->qualified_root ()) == nullptr); ASSERT_TIMELY (5s, node0->active.empty ()); { @@ -3194,20 +3194,20 @@ TEST (node, fork_invalid_block_signature) .previous (genesis.hash ()) .destination (key2.pub) .balance (std::numeric_limits::max () - node1.config.receive_minimum.number ()) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); auto send2 = builder.make_block () .previous (genesis.hash ()) .destination (key2.pub) .balance (std::numeric_limits::max () - node1.config.receive_minimum.number () * 2) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); auto send2_corrupt (std::make_shared (*send2)); send2_corrupt->signature = nano::signature (123); - auto vote (std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, 0, send2)); - auto vote_corrupt (std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, 0, send2_corrupt)); + auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, send2)); + auto vote_corrupt (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, send2_corrupt)); node1.process_active (send1); ASSERT_TIMELY (5s, node1.block (send1->hash ())); @@ -3229,31 +3229,31 @@ TEST (node, fork_election_invalid_block_signature) nano::genesis genesis; nano::block_builder builder; auto send1 = builder.state () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) - .link (nano::dev_genesis_key.pub) + .link (nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .build_shared (); auto send2 = builder.state () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - 2 * nano::Gxrb_ratio) - .link (nano::dev_genesis_key.pub) + .link (nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .build_shared (); auto send3 = builder.state () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - 2 * nano::Gxrb_ratio) - .link (nano::dev_genesis_key.pub) + .link (nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) - .sign (nano::dev_genesis_key.prv, 0) // Invalid signature + .sign (nano::dev::genesis_key.prv, 0) // Invalid signature .build_shared (); auto channel1 (node1.network.udp_channels.create (node1.network.endpoint ())); node1.network.inbound (nano::publish (send1), channel1); @@ -3271,58 +3271,58 @@ TEST (node, block_processor_signatures) { nano::system system0 (1); auto & node1 (*system0.nodes[0]); - system0.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - nano::block_hash latest (system0.nodes[0]->latest (nano::dev_genesis_key.pub)); + system0.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); + nano::block_hash latest (system0.nodes[0]->latest (nano::dev::genesis_key.pub)); nano::state_block_builder builder; nano::keypair key1; nano::keypair key2; nano::keypair key3; auto send1 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (latest) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) .link (key1.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node1.work_generate_blocking (latest)) .build_shared (); auto send2 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (send1->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - 2 * nano::Gxrb_ratio) .link (key2.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node1.work_generate_blocking (send1->hash ())) .build_shared (); auto send3 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (send2->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - 3 * nano::Gxrb_ratio) .link (key3.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node1.work_generate_blocking (send2->hash ())) .build_shared (); // Invalid signature bit auto send4 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (send3->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - 4 * nano::Gxrb_ratio) .link (key3.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node1.work_generate_blocking (send3->hash ())) .build_shared (); send4->signature.bytes[32] ^= 0x1; // Invalid signature bit (force) auto send5 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (send3->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - 5 * nano::Gxrb_ratio) .link (key3.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node1.work_generate_blocking (send3->hash ())) .build_shared (); send5->signature.bytes[31] ^= 0x1; @@ -3334,7 +3334,7 @@ TEST (node, block_processor_signatures) auto receive1 = builder.make_block () .account (key1.pub) .previous (0) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::Gxrb_ratio) .link (send1->hash ()) .sign (key1.prv, key1.pub) @@ -3343,7 +3343,7 @@ TEST (node, block_processor_signatures) auto receive2 = builder.make_block () .account (key2.pub) .previous (0) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::Gxrb_ratio) .link (send2->hash ()) .sign (key2.prv, key2.pub) @@ -3353,7 +3353,7 @@ TEST (node, block_processor_signatures) auto receive3 = builder.make_block () .account (key3.pub) .previous (0) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::Gxrb_ratio) .link (send3->hash ()) .sign (key2.prv, key3.pub) @@ -3391,12 +3391,12 @@ TEST (node, block_processor_reject_state) nano::genesis genesis; nano::state_block_builder builder; auto send1 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) - .link (nano::dev_genesis_key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .link (nano::dev::genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (genesis.hash ())) .build_shared (); send1->signature.bytes[0] ^= 1; @@ -3406,12 +3406,12 @@ TEST (node, block_processor_reject_state) ASSERT_NE (std::future_status::timeout, flushed.wait_for (5s)); ASSERT_FALSE (node.ledger.block_or_pruned_exists (send1->hash ())); auto send2 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - 2 * nano::Gxrb_ratio) - .link (nano::dev_genesis_key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .link (nano::dev::genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (genesis.hash ())) .build_shared (); node.process_active (send2); @@ -3430,30 +3430,30 @@ TEST (node, block_processor_full) nano::genesis genesis; nano::state_block_builder builder; auto send1 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) - .link (nano::dev_genesis_key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .link (nano::dev::genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (genesis.hash ())) .build_shared (); auto send2 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (send1->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - 2 * nano::Gxrb_ratio) - .link (nano::dev_genesis_key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .link (nano::dev::genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (send1->hash ())) .build_shared (); auto send3 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (send2->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - 3 * nano::Gxrb_ratio) - .link (nano::dev_genesis_key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .link (nano::dev::genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (send2->hash ())) .build_shared (); // The write guard prevents block processor doing any writes @@ -3477,30 +3477,30 @@ TEST (node, block_processor_half_full) nano::genesis genesis; nano::state_block_builder builder; auto send1 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) - .link (nano::dev_genesis_key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .link (nano::dev::genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (genesis.hash ())) .build_shared (); auto send2 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (send1->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - 2 * nano::Gxrb_ratio) - .link (nano::dev_genesis_key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .link (nano::dev::genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (send1->hash ())) .build_shared (); auto send3 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (send2->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - 3 * nano::Gxrb_ratio) - .link (nano::dev_genesis_key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .link (nano::dev::genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (send2->hash ())) .build_shared (); // The write guard prevents block processor doing any writes @@ -3521,12 +3521,12 @@ TEST (node, confirm_back) nano::keypair key; auto & node (*system.nodes[0]); nano::genesis genesis; - auto genesis_start_balance (node.balance (nano::dev_genesis_key.pub)); + auto genesis_start_balance (node.balance (nano::dev::genesis_key.pub)); auto send1 = nano::send_block_builder () .previous (genesis.hash ()) .destination (key.pub) .balance (genesis_start_balance - 1) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); nano::state_block_builder builder; @@ -3544,7 +3544,7 @@ TEST (node, confirm_back) .previous (open->hash ()) .representative (key.pub) .balance (0) - .link (nano::dev_genesis_key.pub) + .link (nano::dev::genesis_key.pub) .sign (key.prv, key.pub) .work (*system.work.generate (open->hash ())) .build_shared (); @@ -3555,7 +3555,7 @@ TEST (node, confirm_back) ASSERT_EQ (3, node.active.size ()); std::vector vote_blocks; vote_blocks.push_back (send2->hash ()); - auto vote (std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, std::numeric_limits::max (), vote_blocks)); + auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), vote_blocks)); node.vote_processor.vote_blocking (vote, std::make_shared (node)); ASSERT_TIMELY (10s, node.active.empty ()); } @@ -3780,19 +3780,19 @@ TEST (node, bidirectional_tcp) nano::keypair key; nano::state_block_builder builder; auto send1 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) .link (key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node1->work_generate_blocking (genesis.hash ())) .build_shared (); node1->process_active (send1); node1->block_processor.flush (); ASSERT_TIMELY (10s, node1->ledger.block_or_pruned_exists (send1->hash ()) && node2->ledger.block_or_pruned_exists (send1->hash ())); // Test block confirmation from node 1 (add representative to node 1) - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); // Wait to find new reresentative ASSERT_TIMELY (10s, node2->rep_crawler.representative_count () != 0); /* Wait for confirmation @@ -3809,24 +3809,24 @@ TEST (node, bidirectional_tcp) // Test block propagation & confirmation from node 2 (remove representative from node 1) { auto transaction (system.wallet (0)->wallets.tx_begin_write ()); - system.wallet (0)->store.erase (transaction, nano::dev_genesis_key.pub); + system.wallet (0)->store.erase (transaction, nano::dev::genesis_key.pub); } /* Test block propagation from node 2 Node 2 has only ephemeral TCP port open. Node 1 cannot establish connection to node 2 listening port */ auto send2 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (send1->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - 2 * nano::Gxrb_ratio) .link (key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node1->work_generate_blocking (send1->hash ())) .build_shared (); node2->process_active (send2); node2->block_processor.flush (); ASSERT_TIMELY (10s, node1->ledger.block_or_pruned_exists (send2->hash ()) && node2->ledger.block_or_pruned_exists (send2->hash ())); // Test block confirmation from node 2 (add representative to node 2) - system.wallet (1)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (1)->insert_adhoc (nano::dev::genesis_key.prv); // Wait to find changed reresentative ASSERT_TIMELY (10s, node1->rep_crawler.representative_count () != 0); /* Wait for confirmation @@ -3858,7 +3858,7 @@ TEST (node, aggressive_flooding) node_flags.disable_wallet_bootstrap = true; auto & node1 (*system.add_node (node_flags)); auto & wallet1 (*system.wallet (0)); - wallet1.insert_adhoc (nano::dev_genesis_key.prv); + wallet1.insert_adhoc (nano::dev::genesis_key.prv); std::vector, std::shared_ptr>> nodes_wallets; bool const sanitizer_or_valgrind (is_sanitizer_build || nano::running_within_valgrind ()); nodes_wallets.resize (!sanitizer_or_valgrind ? 5 : 3); @@ -3884,7 +3884,7 @@ TEST (node, aggressive_flooding) nano::keypair keypair; node_wallet.second->store.representative_set (node_wallet.first->wallets.tx_begin_write (), keypair.pub); node_wallet.second->insert_adhoc (keypair.prv); - auto block (wallet1.send_action (nano::dev_genesis_key.pub, keypair.pub, large_amount)); + auto block (wallet1.send_action (nano::dev::genesis_key.pub, keypair.pub, large_amount)); ASSERT_NE (nullptr, block); genesis_blocks.push_back (block); } @@ -3897,8 +3897,8 @@ TEST (node, aggressive_flooding) auto process_result (node_wallet.first->process (*block)); ASSERT_TRUE (nano::process_result::progress == process_result.code || nano::process_result::old == process_result.code); } - ASSERT_EQ (node1.latest (nano::dev_genesis_key.pub), node_wallet.first->latest (nano::dev_genesis_key.pub)); - ASSERT_EQ (genesis_blocks.back ()->hash (), node_wallet.first->latest (nano::dev_genesis_key.pub)); + ASSERT_EQ (node1.latest (nano::dev::genesis_key.pub), node_wallet.first->latest (nano::dev::genesis_key.pub)); + ASSERT_EQ (genesis_blocks.back ()->hash (), node_wallet.first->latest (nano::dev::genesis_key.pub)); // Confirm blocks for rep crawler & receiving nano::blocks_confirm (*node_wallet.first, { genesis_blocks.back () }, true); } @@ -3925,13 +3925,13 @@ TEST (node, aggressive_flooding) { auto transaction (node1.store.tx_begin_read ()); block = builder.make_block () - .account (nano::dev_genesis_key.pub) - .representative (nano::dev_genesis_key.pub) - .previous (node1.ledger.latest (transaction, nano::dev_genesis_key.pub)) - .balance (node1.ledger.account_balance (transaction, nano::dev_genesis_key.pub) - 1) - .link (nano::dev_genesis_key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) - .work (*node1.work_generate_blocking (node1.ledger.latest (transaction, nano::dev_genesis_key.pub))) + .account (nano::dev::genesis_key.pub) + .representative (nano::dev::genesis_key.pub) + .previous (node1.ledger.latest (transaction, nano::dev::genesis_key.pub)) + .balance (node1.ledger.account_balance (transaction, nano::dev::genesis_key.pub) - 1) + .link (nano::dev::genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) + .work (*node1.work_generate_blocking (node1.ledger.latest (transaction, nano::dev::genesis_key.pub))) .build (); } // Processing locally goes through the aggressive block flooding path @@ -3946,7 +3946,7 @@ TEST (node, aggressive_flooding) ASSERT_TIMELY (!sanitizer_or_valgrind ? 5s : 25s, all_have_block (block->hash ())); // Do the same for a wallet block - auto wallet_block = wallet1.send_sync (nano::dev_genesis_key.pub, nano::dev_genesis_key.pub, 10); + auto wallet_block = wallet1.send_sync (nano::dev::genesis_key.pub, nano::dev::genesis_key.pub, 10); ASSERT_TIMELY (!sanitizer_or_valgrind ? 5s : 25s, all_have_block (wallet_block)); // All blocks: genesis + (send+open) for each representative + 2 local blocks @@ -3973,12 +3973,12 @@ TEST (node, rollback_vote_self) nano::keypair key; auto weight = node.online_reps.delta (); auto send1 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .link (key.pub) .balance (nano::genesis_amount - weight) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); auto open = builder.make_block () @@ -3994,14 +3994,14 @@ TEST (node, rollback_vote_self) .from (*send1) .previous (send1->hash ()) .balance (send1->balance ().number () - 1) - .link (nano::dev_genesis_key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .link (nano::dev::genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send1->hash ())) .build_shared (); auto fork = builder.make_block () .from (*send2) .balance (send2->balance ().number () - 2) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .build_shared (); ASSERT_EQ (nano::process_result::progress, node.process (*send1).code); ASSERT_EQ (nano::process_result::progress, node.process (*open).code); @@ -4022,7 +4022,7 @@ TEST (node, rollback_vote_self) ASSERT_NE (nullptr, election); ASSERT_EQ (2, election->blocks ().size ()); // Insert genesis key in the wallet - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); { // The write guard prevents the block processor from performing the rollback auto write_guard = node.write_database_queue.wait (nano::writer::testing); @@ -4048,7 +4048,7 @@ TEST (node, rollback_vote_self) // A vote is eventually generated from the local representative ASSERT_TIMELY (5s, 3 == election->votes ().size ()); auto votes (election->votes ()); - auto vote (votes.find (nano::dev_genesis_key.pub)); + auto vote (votes.find (nano::dev::genesis_key.pub)); ASSERT_NE (votes.end (), vote); ASSERT_EQ (fork->hash (), vote->second.hash); } @@ -4062,12 +4062,12 @@ TEST (node, rollback_gap_source) nano::state_block_builder builder; nano::keypair key; auto send1 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .link (key.pub) .balance (nano::genesis_amount - 1) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); auto fork = builder.make_block () @@ -4084,7 +4084,7 @@ TEST (node, rollback_gap_source) .previous (send1->hash ()) .balance (send1->balance ().number () - 1) .link (key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send1->hash ())) .build_shared (); auto open = builder.make_block () @@ -4107,7 +4107,7 @@ TEST (node, rollback_gap_source) ASSERT_EQ (2, election->blocks ().size ()); ASSERT_EQ (1, election->votes ().size ()); // Confirm open - auto vote1 (std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, std::numeric_limits::max (), std::vector (1, open->hash ()))); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), std::vector (1, open->hash ()))); node.vote_processor.vote (vote1, std::make_shared (node)); ASSERT_TIMELY (5s, election->votes ().size () == 2); ASSERT_TIMELY (3s, election->confirmed ()); @@ -4134,7 +4134,7 @@ TEST (node, rollback_gap_source) node.block_processor.flush (); ASSERT_EQ (2, election->blocks ().size ()); // Confirm open (again) - auto vote1 (std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, std::numeric_limits::max (), std::vector (1, open->hash ()))); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), std::vector (1, open->hash ()))); node.vote_processor.vote (vote1, std::make_shared (node)); ASSERT_TIMELY (5s, election->votes ().size () == 2); } @@ -4159,12 +4159,12 @@ TEST (node, dependency_graph) // Send to key1 auto gen_send1 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .link (key1.pub) .balance (nano::genesis_amount - 1) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); // Receive from genesis @@ -4182,7 +4182,7 @@ TEST (node, dependency_graph) .account (key1.pub) .previous (key1_open->hash ()) .representative (key1.pub) - .link (nano::dev_genesis_key.pub) + .link (nano::dev::genesis_key.pub) .balance (0) .sign (key1.prv, key1.pub) .work (*system.work.generate (key1_open->hash ())) @@ -4193,7 +4193,7 @@ TEST (node, dependency_graph) .previous (gen_send1->hash ()) .link (key1_send1->hash ()) .balance (nano::genesis_amount) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (gen_send1->hash ())) .build (); // Send to key2 @@ -4202,7 +4202,7 @@ TEST (node, dependency_graph) .previous (gen_receive->hash ()) .link (key2.pub) .balance (gen_receive->balance ().number () - 2) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (gen_receive->hash ())) .build (); // Receive from genesis @@ -4277,7 +4277,7 @@ TEST (node, dependency_graph) .previous (key3_receive->hash ()) .link (node.ledger.epoch_link (nano::epoch::epoch_1)) .balance (key3_receive->balance ()) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (key3_receive->hash ())) .build (); @@ -4314,7 +4314,7 @@ TEST (node, dependency_graph) ASSERT_EQ (node.ledger.cache.block_count - 2, dependency_graph.size ()); // Start an election for the first block of the dependency graph, and ensure all blocks are eventually confirmed - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); node.block_confirm (gen_send1); ASSERT_NO_ERROR (system.poll_until_true (15s, [&] { @@ -4361,12 +4361,12 @@ TEST (node, dependency_graph_frontier) // Send to key1 auto gen_send1 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .link (key1.pub) .balance (nano::genesis_amount - 1) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); // Receive from genesis @@ -4384,7 +4384,7 @@ TEST (node, dependency_graph_frontier) .account (key1.pub) .previous (key1_open->hash ()) .representative (key1.pub) - .link (nano::dev_genesis_key.pub) + .link (nano::dev::genesis_key.pub) .balance (0) .sign (key1.prv, key1.pub) .work (*system.work.generate (key1_open->hash ())) @@ -4395,7 +4395,7 @@ TEST (node, dependency_graph_frontier) .previous (gen_send1->hash ()) .link (key1_send1->hash ()) .balance (nano::genesis_amount) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (gen_send1->hash ())) .build (); // Send to key2 @@ -4404,7 +4404,7 @@ TEST (node, dependency_graph_frontier) .previous (gen_receive->hash ()) .link (key2.pub) .balance (gen_receive->balance ().number () - 2) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (gen_receive->hash ())) .build (); // Receive from genesis @@ -4479,7 +4479,7 @@ TEST (node, dependency_graph_frontier) .previous (key3_receive->hash ()) .link (node1.ledger.epoch_link (nano::epoch::epoch_1)) .balance (key3_receive->balance ()) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (key3_receive->hash ())) .build (); @@ -4502,7 +4502,7 @@ TEST (node, dependency_graph_frontier) } // node1 can vote, but only on the first block - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); ASSERT_TIMELY (10s, node2.active.active (gen_send1->qualified_root ())); node1.block_confirm (gen_send1); @@ -4524,12 +4524,12 @@ TEST (node, deferred_dependent_elections) nano::state_block_builder builder; nano::keypair key; auto send1 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .link (key.pub) .balance (nano::genesis_amount - 1) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); auto open = builder.make_block () @@ -4546,7 +4546,7 @@ TEST (node, deferred_dependent_elections) .previous (send1->hash ()) .balance (send1->balance ().number () - 1) .link (key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send1->hash ())) .build_shared (); auto receive = builder.make_block () @@ -4559,7 +4559,7 @@ TEST (node, deferred_dependent_elections) .build_shared (); auto fork = builder.make_block () .from (*receive) - .representative (nano::dev_genesis_key.pub) // was key.pub + .representative (nano::dev::genesis_key.pub) // was key.pub .sign (key.prv, key.pub) .build_shared (); node.process_local (send1); @@ -4662,7 +4662,7 @@ TEST (rep_crawler, recently_confirmed) auto const block = nano::genesis ().open; node1.active.add_recently_confirmed (block->qualified_root (), block->hash ()); auto & node2 (*system.add_node ()); - system.wallet (1)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (1)->insert_adhoc (nano::dev::genesis_key.prv); auto channel = node1.network.find_channel (node2.network.endpoint ()); ASSERT_NE (nullptr, channel); node1.rep_crawler.query (channel); @@ -4678,7 +4678,7 @@ TEST (rep_crawler, local) flags.disable_rep_crawler = true; auto & node = *system.add_node (flags); auto loopback = std::make_shared (node); - auto vote = std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, 0, std::vector{ nano::dev::genesis->hash () }); + auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, std::vector{ nano::dev::genesis->hash () }); { nano::lock_guard guard (node.rep_crawler.probable_reps_mutex); node.rep_crawler.active.insert (nano::dev::genesis->hash ()); @@ -4704,14 +4704,14 @@ TEST (node, pruning_automatic) .previous (genesis.hash ()) .destination (key1.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); auto send2 = nano::send_block_builder () .previous (send1->hash ()) .destination (key1.pub) .balance (0) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send1->hash ())) .build_shared (); // Process as local blocks @@ -4757,14 +4757,14 @@ TEST (node, pruning_age) .previous (genesis.hash ()) .destination (key1.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); auto send2 = nano::send_block_builder () .previous (send1->hash ()) .destination (key1.pub) .balance (0) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send1->hash ())) .build_shared (); // Process as local blocks @@ -4814,14 +4814,14 @@ TEST (node, pruning_depth) .previous (genesis.hash ()) .destination (key1.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); auto send2 = nano::send_block_builder () .previous (send1->hash ()) .destination (key1.pub) .balance (0) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send1->hash ())) .build_shared (); // Process as local blocks diff --git a/nano/core_test/processor_service.cpp b/nano/core_test/processor_service.cpp index 4c26fdecb7..9d93cddd19 100644 --- a/nano/core_test/processor_service.cpp +++ b/nano/core_test/processor_service.cpp @@ -19,9 +19,9 @@ TEST (processor_service, bad_send_signature) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::account_info info1; - ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info1)); + ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info1)); nano::keypair key2; - nano::send_block send (info1.head, nano::dev_genesis_key.pub, 50, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (info1.head)); + nano::send_block send (info1.head, nano::dev::genesis_key.pub, 50, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (info1.head)); send.signature.bytes[32] ^= 0x1; ASSERT_EQ (nano::process_result::bad_signature, ledger.process (transaction, send).code); } @@ -38,13 +38,13 @@ TEST (processor_service, bad_receive_signature) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::account_info info1; - ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info1)); - nano::send_block send (info1.head, nano::dev_genesis_key.pub, 50, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (info1.head)); + ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info1)); + nano::send_block send (info1.head, nano::dev::genesis_key.pub, 50, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (info1.head)); nano::block_hash hash1 (send.hash ()); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); nano::account_info info2; - ASSERT_FALSE (store->account.get (transaction, nano::dev_genesis_key.pub, info2)); - nano::receive_block receive (hash1, hash1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (hash1)); + ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info2)); + nano::receive_block receive (hash1, hash1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (hash1)); receive.signature.bytes[32] ^= 0x1; ASSERT_EQ (nano::process_result::bad_signature, ledger.process (transaction, receive).code); } diff --git a/nano/core_test/request_aggregator.cpp b/nano/core_test/request_aggregator.cpp index 375003f404..421e8a11f8 100644 --- a/nano/core_test/request_aggregator.cpp +++ b/nano/core_test/request_aggregator.cpp @@ -14,8 +14,8 @@ TEST (request_aggregator, one) node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto & node (*system.add_node (node_config)); nano::genesis genesis; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - auto send1 (std::make_shared (nano::dev_genesis_key.pub, genesis.hash (), nano::dev_genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node.work_generate_blocking (genesis.hash ()))); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); + auto send1 (std::make_shared (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node.work_generate_blocking (genesis.hash ()))); std::vector> request; request.emplace_back (send1->hash (), send1->root ()); auto channel (node.network.udp_channels.create (node.network.endpoint ())); @@ -50,35 +50,35 @@ TEST (request_aggregator, one_update) node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto & node (*system.add_node (node_config)); nano::genesis genesis; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::keypair key1; auto send1 = nano::state_block_builder () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) - .link (nano::dev_genesis_key.pub) + .link (nano::dev::genesis_key.pub) .link (key1.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (genesis.hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, node.ledger.process (node.store.tx_begin_write (), *send1).code); node.confirmation_height_processor.add (send1); ASSERT_TIMELY (5s, node.ledger.block_confirmed (node.store.tx_begin_read (), send1->hash ())); auto send2 = nano::state_block_builder () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (send1->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - 2 * nano::Gxrb_ratio) - .link (nano::dev_genesis_key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .link (nano::dev::genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (send1->hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, node.ledger.process (node.store.tx_begin_write (), *send2).code); auto receive1 = nano::state_block_builder () .account (key1.pub) .previous (0) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::Gxrb_ratio) .link (send1->hash ()) .sign (key1.prv, key1.pub) @@ -116,34 +116,34 @@ TEST (request_aggregator, two) node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto & node (*system.add_node (node_config)); nano::genesis genesis; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::keypair key1; nano::state_block_builder builder; auto send1 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - 1) .link (key1.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (genesis.hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, node.ledger.process (node.store.tx_begin_write (), *send1).code); node.confirmation_height_processor.add (send1); ASSERT_TIMELY (5s, node.ledger.block_confirmed (node.store.tx_begin_read (), send1->hash ())); auto send2 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (send1->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - 2) - .link (nano::dev_genesis_key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .link (nano::dev::genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (send1->hash ())) .build_shared (); auto receive1 = builder.make_block () .account (key1.pub) .previous (0) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (1) .link (send1->hash ()) .sign (key1.prv, key1.pub) @@ -193,8 +193,8 @@ TEST (request_aggregator, two_endpoints) node_config.peering_port = nano::get_available_port (); auto & node2 (*system.add_node (node_config, node_flags)); nano::genesis genesis; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - auto send1 (std::make_shared (nano::dev_genesis_key.pub, genesis.hash (), nano::dev_genesis_key.pub, nano::genesis_amount - 1, nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1.work_generate_blocking (genesis.hash ()))); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); + auto send1 (std::make_shared (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::genesis_amount - 1, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1.work_generate_blocking (genesis.hash ()))); std::vector> request; request.emplace_back (send1->hash (), send1->root ()); ASSERT_EQ (nano::process_result::progress, node1.ledger.process (node1.store.tx_begin_write (), *send1).code); @@ -225,7 +225,7 @@ TEST (request_aggregator, split) node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto & node (*system.add_node (node_config)); nano::genesis genesis; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); std::vector> request; std::vector> blocks; auto previous = genesis.hash (); @@ -235,12 +235,12 @@ TEST (request_aggregator, split) nano::block_builder builder; blocks.push_back (builder .state () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (previous) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - (i + 1)) - .link (nano::dev_genesis_key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .link (nano::dev::genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (previous)) .build ()); auto const & block = blocks.back (); @@ -279,8 +279,8 @@ TEST (request_aggregator, channel_lifetime) node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto & node (*system.add_node (node_config)); nano::genesis genesis; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - auto send1 (std::make_shared (nano::dev_genesis_key.pub, genesis.hash (), nano::dev_genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node.work_generate_blocking (genesis.hash ()))); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); + auto send1 (std::make_shared (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node.work_generate_blocking (genesis.hash ()))); ASSERT_EQ (nano::process_result::progress, node.ledger.process (node.store.tx_begin_write (), *send1).code); std::vector> request; request.emplace_back (send1->hash (), send1->root ()); @@ -300,8 +300,8 @@ TEST (request_aggregator, channel_update) node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto & node (*system.add_node (node_config)); nano::genesis genesis; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - auto send1 (std::make_shared (nano::dev_genesis_key.pub, genesis.hash (), nano::dev_genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node.work_generate_blocking (genesis.hash ()))); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); + auto send1 (std::make_shared (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node.work_generate_blocking (genesis.hash ()))); ASSERT_EQ (nano::process_result::progress, node.ledger.process (node.store.tx_begin_write (), *send1).code); std::vector> request; request.emplace_back (send1->hash (), send1->root ()); @@ -329,8 +329,8 @@ TEST (request_aggregator, channel_max_queue) node_config.max_queued_requests = 1; auto & node (*system.add_node (node_config)); nano::genesis genesis; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - auto send1 (std::make_shared (nano::dev_genesis_key.pub, genesis.hash (), nano::dev_genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node.work_generate_blocking (genesis.hash ()))); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); + auto send1 (std::make_shared (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node.work_generate_blocking (genesis.hash ()))); ASSERT_EQ (nano::process_result::progress, node.ledger.process (node.store.tx_begin_write (), *send1).code); std::vector> request; request.emplace_back (send1->hash (), send1->root ()); @@ -347,8 +347,8 @@ TEST (request_aggregator, unique) node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto & node (*system.add_node (node_config)); nano::genesis genesis; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - auto send1 (std::make_shared (nano::dev_genesis_key.pub, genesis.hash (), nano::dev_genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node.work_generate_blocking (genesis.hash ()))); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); + auto send1 (std::make_shared (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node.work_generate_blocking (genesis.hash ()))); ASSERT_EQ (nano::process_result::progress, node.ledger.process (node.store.tx_begin_write (), *send1).code); std::vector> request; request.emplace_back (send1->hash (), send1->root ()); @@ -374,24 +374,24 @@ TEST (request_aggregator, cannot_vote) nano::genesis genesis; nano::state_block_builder builder; auto send1 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - 1) - .link (nano::dev_genesis_key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .link (nano::dev::genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); auto send2 = builder.make_block () .from (*send1) .previous (send1->hash ()) .balance (send1->balance ().number () - 1) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send1->hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, node.process (*send1).code); ASSERT_EQ (nano::process_result::progress, node.process (*send2).code); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); ASSERT_FALSE (node.ledger.dependents_confirmed (node.store.tx_begin_read (), *send2)); std::vector> request; diff --git a/nano/core_test/system.cpp b/nano/core_test/system.cpp index 370efa8382..032e0030c2 100644 --- a/nano/core_test/system.cpp +++ b/nano/core_test/system.cpp @@ -38,16 +38,16 @@ TEST (system, DISABLED_generate_send_existing) nano::system system (1); auto & node1 (*system.nodes[0]); nano::thread_runner runner (system.io_ctx, node1.config.io_threads); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::keypair stake_preserver; auto send_block (system.wallet (0)->send_action (nano::dev::genesis->account (), stake_preserver.pub, nano::genesis_amount / 3 * 2, true)); nano::account_info info1; { auto transaction (node1.store.tx_begin_read ()); - ASSERT_FALSE (node1.store.account.get (transaction, nano::dev_genesis_key.pub, info1)); + ASSERT_FALSE (node1.store.account.get (transaction, nano::dev::genesis_key.pub, info1)); } std::vector accounts; - accounts.push_back (nano::dev_genesis_key.pub); + accounts.push_back (nano::dev::genesis_key.pub); system.generate_send_existing (node1, accounts); // Have stake_preserver receive funds after generate_send_existing so it isn't chosen as the destination { @@ -60,7 +60,7 @@ TEST (system, DISABLED_generate_send_existing) nano::account_info info2; { auto transaction (node1.store.tx_begin_read ()); - ASSERT_FALSE (node1.store.account.get (transaction, nano::dev_genesis_key.pub, info2)); + ASSERT_FALSE (node1.store.account.get (transaction, nano::dev::genesis_key.pub, info2)); } ASSERT_NE (info1.head, info2.head); system.deadline_set (15s); @@ -68,7 +68,7 @@ TEST (system, DISABLED_generate_send_existing) { ASSERT_NO_ERROR (system.poll ()); auto transaction (node1.store.tx_begin_read ()); - ASSERT_FALSE (node1.store.account.get (transaction, nano::dev_genesis_key.pub, info2)); + ASSERT_FALSE (node1.store.account.get (transaction, nano::dev::genesis_key.pub, info2)); } ASSERT_EQ (info1.block_count + 2, info2.block_count); ASSERT_EQ (info2.balance, nano::genesis_amount / 3); @@ -85,7 +85,7 @@ TEST (system, DISABLED_generate_send_new) nano::system system (1); auto & node1 (*system.nodes[0]); nano::thread_runner runner (system.io_ctx, node1.config.io_threads); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); { auto transaction (node1.store.tx_begin_read ()); auto iterator1 (node1.store.account.begin (transaction)); @@ -103,7 +103,7 @@ TEST (system, DISABLED_generate_send_new) } ASSERT_GT (node1.balance (stake_preserver.pub), node1.balance (nano::dev::genesis->account ())); std::vector accounts; - accounts.push_back (nano::dev_genesis_key.pub); + accounts.push_back (nano::dev::genesis_key.pub); // This indirectly waits for online weight to stabilize, required to prevent intermittent failures ASSERT_TIMELY (5s, node1.wallets.reps ().voting > 0); system.generate_send_new (node1, accounts); @@ -111,13 +111,13 @@ TEST (system, DISABLED_generate_send_new) { auto transaction (node1.wallets.tx_begin_read ()); auto iterator2 (system.wallet (0)->store.begin (transaction)); - if (iterator2->first != nano::dev_genesis_key.pub) + if (iterator2->first != nano::dev::genesis_key.pub) { new_account = iterator2->first; } ++iterator2; ASSERT_NE (system.wallet (0)->store.end (), iterator2); - if (iterator2->first != nano::dev_genesis_key.pub) + if (iterator2->first != nano::dev::genesis_key.pub) { new_account = iterator2->first; } @@ -157,7 +157,7 @@ TEST (system, rep_initialize_one_reserve) system.ledger_initialization_set ({ key }, nano::Gxrb_ratio); auto node = system.add_node (); ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, node->balance (key.pub)); - ASSERT_EQ (nano::Gxrb_ratio, node->balance (nano::dev_genesis_key.pub)); + ASSERT_EQ (nano::Gxrb_ratio, node->balance (nano::dev::genesis_key.pub)); } TEST (system, rep_initialize_two_reserve) diff --git a/nano/core_test/telemetry.cpp b/nano/core_test/telemetry.cpp index c20e0887ed..3f1d7a2264 100644 --- a/nano/core_test/telemetry.cpp +++ b/nano/core_test/telemetry.cpp @@ -555,12 +555,12 @@ TEST (telemetry, remove_peer_different_genesis) // Possible TSAN issue in the future if something else uses this, but will only appear in tests. nano::state_block_builder builder; auto junk = builder - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (0) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (0) .link (0) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (0) .build_shared (); node1->network_params.ledger.genesis = junk; @@ -593,12 +593,12 @@ TEST (telemetry, remove_peer_different_genesis_udp) auto node1 (std::make_shared (system.io_ctx, nano::get_available_port (), nano::unique_path (), system.logging, system.work, node_flags)); nano::state_block_builder builder; auto junk = builder - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (0) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (0) .link (0) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (0) .build_shared (); node1->network_params.ledger.genesis = junk; diff --git a/nano/core_test/uint256_union.cpp b/nano/core_test/uint256_union.cpp index 8d11b6a255..bde76e3da5 100644 --- a/nano/core_test/uint256_union.cpp +++ b/nano/core_test/uint256_union.cpp @@ -375,9 +375,9 @@ TEST (uint256_union, decode_nano_variant) TEST (uint256_union, account_transcode) { nano::account value; - auto text (nano::dev_genesis_key.pub.to_account ()); + auto text (nano::dev::genesis_key.pub.to_account ()); ASSERT_FALSE (value.decode_account (text)); - ASSERT_EQ (nano::dev_genesis_key.pub, value); + ASSERT_EQ (nano::dev::genesis_key.pub, value); /* * Handle different offsets for the underscore separator diff --git a/nano/core_test/vote_processor.cpp b/nano/core_test/vote_processor.cpp index c8ca56b665..801029c571 100644 --- a/nano/core_test/vote_processor.cpp +++ b/nano/core_test/vote_processor.cpp @@ -55,7 +55,7 @@ TEST (vote_processor, flush) nano::system system (1); auto & node (*system.nodes[0]); nano::genesis genesis; - auto vote (std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, 1, std::vector{ genesis.open->hash () })); + auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 1, std::vector{ genesis.open->hash () })); auto channel (std::make_shared (node)); for (unsigned i = 0; i < 2000; ++i) { @@ -148,16 +148,16 @@ TEST (vote_processor, weights) nano::keypair key1; nano::keypair key2; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); system.wallet (1)->insert_adhoc (key0.prv); system.wallet (2)->insert_adhoc (key1.prv); system.wallet (3)->insert_adhoc (key2.prv); system.wallet (1)->store.representative_set (system.nodes[1]->wallets.tx_begin_write (), key0.pub); system.wallet (2)->store.representative_set (system.nodes[2]->wallets.tx_begin_write (), key1.pub); system.wallet (3)->store.representative_set (system.nodes[3]->wallets.tx_begin_write (), key2.pub); - system.wallet (0)->send_sync (nano::dev_genesis_key.pub, key0.pub, level0); - system.wallet (0)->send_sync (nano::dev_genesis_key.pub, key1.pub, level1); - system.wallet (0)->send_sync (nano::dev_genesis_key.pub, key2.pub, level2); + system.wallet (0)->send_sync (nano::dev::genesis_key.pub, key0.pub, level0); + system.wallet (0)->send_sync (nano::dev::genesis_key.pub, key1.pub, level1); + system.wallet (0)->send_sync (nano::dev::genesis_key.pub, key2.pub, level2); // Wait for representatives ASSERT_TIMELY (10s, node.ledger.cache.rep_weights.get_rep_amounts ().size () == 4); @@ -175,9 +175,9 @@ TEST (vote_processor, weights) ASSERT_NE (node.vote_processor.representatives_2.end (), node.vote_processor.representatives_2.find (key2.pub)); ASSERT_EQ (node.vote_processor.representatives_3.end (), node.vote_processor.representatives_3.find (key2.pub)); - ASSERT_NE (node.vote_processor.representatives_1.end (), node.vote_processor.representatives_1.find (nano::dev_genesis_key.pub)); - ASSERT_NE (node.vote_processor.representatives_2.end (), node.vote_processor.representatives_2.find (nano::dev_genesis_key.pub)); - ASSERT_NE (node.vote_processor.representatives_3.end (), node.vote_processor.representatives_3.find (nano::dev_genesis_key.pub)); + ASSERT_NE (node.vote_processor.representatives_1.end (), node.vote_processor.representatives_1.find (nano::dev::genesis_key.pub)); + ASSERT_NE (node.vote_processor.representatives_2.end (), node.vote_processor.representatives_2.find (nano::dev::genesis_key.pub)); + ASSERT_NE (node.vote_processor.representatives_3.end (), node.vote_processor.representatives_3.find (nano::dev::genesis_key.pub)); } } @@ -193,30 +193,30 @@ TEST (vote_processor, no_broadcast_local) // Reduce the weight of genesis to 2x default min voting weight nano::keypair key; std::shared_ptr send = builder.state () - .account (nano::dev_genesis_key.pub) - .representative (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .balance (2 * node.config.vote_minimum.number ()) .link (key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build (ec); ASSERT_FALSE (ec); ASSERT_EQ (nano::process_result::progress, node.process_local (send).code); - ASSERT_EQ (2 * node.config.vote_minimum.number (), node.weight (nano::dev_genesis_key.pub)); + ASSERT_EQ (2 * node.config.vote_minimum.number (), node.weight (nano::dev::genesis_key.pub)); // Insert account in wallet - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); node.wallets.compute_reps (); - ASSERT_TRUE (node.wallets.reps ().exists (nano::dev_genesis_key.pub)); + ASSERT_TRUE (node.wallets.reps ().exists (nano::dev::genesis_key.pub)); ASSERT_FALSE (node.wallets.reps ().have_half_rep ()); // Process a vote - auto vote = std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, nano::milliseconds_since_epoch (), std::vector{ send->hash () }); + auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::milliseconds_since_epoch (), std::vector{ send->hash () }); ASSERT_EQ (nano::vote_code::vote, node.active.vote (vote)); // Make sure the vote was processed auto election (node.active.election (send->qualified_root ())); ASSERT_NE (nullptr, election); auto votes (election->votes ()); - auto existing (votes.find (nano::dev_genesis_key.pub)); + auto existing (votes.find (nano::dev::genesis_key.pub)); ASSERT_NE (votes.end (), existing); ASSERT_EQ (vote->timestamp, existing->second.timestamp); // Ensure the vote, from a local representative, was not broadcast on processing - it should be flooded on generation instead @@ -225,31 +225,31 @@ TEST (vote_processor, no_broadcast_local) // Repeat test with no representative // Erase account from the wallet - system.wallet (0)->store.erase (node.wallets.tx_begin_write (), nano::dev_genesis_key.pub); + system.wallet (0)->store.erase (node.wallets.tx_begin_write (), nano::dev::genesis_key.pub); node.wallets.compute_reps (); - ASSERT_FALSE (node.wallets.reps ().exists (nano::dev_genesis_key.pub)); + ASSERT_FALSE (node.wallets.reps ().exists (nano::dev::genesis_key.pub)); std::shared_ptr send2 = builder.state () - .account (nano::dev_genesis_key.pub) - .representative (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .previous (send->hash ()) .balance (node.config.vote_minimum) .link (key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send->hash ())) .build (ec); ASSERT_FALSE (ec); ASSERT_EQ (nano::process_result::progress, node.process_local (send2).code); - ASSERT_EQ (node.config.vote_minimum, node.weight (nano::dev_genesis_key.pub)); + ASSERT_EQ (node.config.vote_minimum, node.weight (nano::dev::genesis_key.pub)); node.block_confirm (send2); // Process a vote - auto vote2 = std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, nano::milliseconds_since_epoch (), std::vector{ send2->hash () }); + auto vote2 = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::milliseconds_since_epoch (), std::vector{ send2->hash () }); ASSERT_EQ (nano::vote_code::vote, node.active.vote (vote2)); // Make sure the vote was processed auto election2 (node.active.election (send2->qualified_root ())); ASSERT_NE (nullptr, election2); auto votes2 (election2->votes ()); - auto existing2 (votes2.find (nano::dev_genesis_key.pub)); + auto existing2 (votes2.find (nano::dev::genesis_key.pub)); ASSERT_NE (votes2.end (), existing2); ASSERT_EQ (vote2->timestamp, existing2->second.timestamp); // Ensure the vote was broadcast @@ -260,7 +260,7 @@ TEST (vote_processor, no_broadcast_local) // Increase the genesis weight again std::shared_ptr open = builder.state () .account (key.pub) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .previous (0) .balance (nano::genesis_amount - 2 * node.config.vote_minimum.number ()) .link (send->hash ()) @@ -269,21 +269,21 @@ TEST (vote_processor, no_broadcast_local) .build (ec); ASSERT_FALSE (ec); ASSERT_EQ (nano::process_result::progress, node.process_local (open).code); - ASSERT_EQ (nano::genesis_amount - node.config.vote_minimum.number (), node.weight (nano::dev_genesis_key.pub)); + ASSERT_EQ (nano::genesis_amount - node.config.vote_minimum.number (), node.weight (nano::dev::genesis_key.pub)); node.block_confirm (open); // Insert account in wallet - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); node.wallets.compute_reps (); - ASSERT_TRUE (node.wallets.reps ().exists (nano::dev_genesis_key.pub)); + ASSERT_TRUE (node.wallets.reps ().exists (nano::dev::genesis_key.pub)); ASSERT_TRUE (node.wallets.reps ().have_half_rep ()); // Process a vote - auto vote3 = std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, nano::milliseconds_since_epoch (), std::vector{ open->hash () }); + auto vote3 = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::milliseconds_since_epoch (), std::vector{ open->hash () }); ASSERT_EQ (nano::vote_code::vote, node.active.vote (vote3)); // Make sure the vote was processed auto election3 (node.active.election (open->qualified_root ())); ASSERT_NE (nullptr, election3); auto votes3 (election3->votes ()); - auto existing3 (votes3.find (nano::dev_genesis_key.pub)); + auto existing3 (votes3.find (nano::dev::genesis_key.pub)); ASSERT_NE (votes3.end (), existing3); ASSERT_EQ (vote3->timestamp, existing3->second.timestamp); // Ensure the vote wass not broadcasst diff --git a/nano/core_test/voting.cpp b/nano/core_test/voting.cpp index 08bd52677f..6cb610ba96 100644 --- a/nano/core_test/voting.cpp +++ b/nano/core_test/voting.cpp @@ -61,7 +61,7 @@ TEST (vote_generator, cache) nano::system system (1); auto & node (*system.nodes[0]); auto epoch1 = system.upgrade_genesis_epoch (node, nano::epoch::epoch_1); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); node.active.generator.add (epoch1->root (), epoch1->hash ()); ASSERT_TIMELY (1s, !node.history.votes (epoch1->root (), epoch1->hash ()).empty ()); auto votes (node.history.votes (epoch1->root (), epoch1->hash ())); @@ -75,14 +75,14 @@ TEST (vote_generator, multiple_representatives) auto & node (*system.nodes[0]); nano::keypair key1, key2, key3; auto & wallet (*system.wallet (0)); - wallet.insert_adhoc (nano::dev_genesis_key.prv); + wallet.insert_adhoc (nano::dev::genesis_key.prv); wallet.insert_adhoc (key1.prv); wallet.insert_adhoc (key2.prv); wallet.insert_adhoc (key3.prv); auto const amount = 100 * nano::Gxrb_ratio; - wallet.send_sync (nano::dev_genesis_key.pub, key1.pub, amount); - wallet.send_sync (nano::dev_genesis_key.pub, key2.pub, amount); - wallet.send_sync (nano::dev_genesis_key.pub, key3.pub, amount); + wallet.send_sync (nano::dev::genesis_key.pub, key1.pub, amount); + wallet.send_sync (nano::dev::genesis_key.pub, key2.pub, amount); + wallet.send_sync (nano::dev::genesis_key.pub, key3.pub, amount); ASSERT_TIMELY (3s, node.balance (key1.pub) == amount && node.balance (key2.pub) == amount && node.balance (key3.pub) == amount); wallet.change_sync (key1.pub, key1.pub); wallet.change_sync (key2.pub, key2.pub); @@ -90,12 +90,12 @@ TEST (vote_generator, multiple_representatives) ASSERT_TRUE (node.weight (key1.pub) == amount && node.weight (key2.pub) == amount && node.weight (key3.pub) == amount); node.wallets.compute_reps (); ASSERT_EQ (4, node.wallets.reps ().voting); - auto hash = wallet.send_sync (nano::dev_genesis_key.pub, nano::dev_genesis_key.pub, 1); + auto hash = wallet.send_sync (nano::dev::genesis_key.pub, nano::dev::genesis_key.pub, 1); auto send = node.block (hash); ASSERT_NE (nullptr, send); ASSERT_TIMELY (5s, node.history.votes (send->root (), send->hash ()).size () == 4); auto votes (node.history.votes (send->root (), send->hash ())); - for (auto const & account : { key1.pub, key2.pub, key3.pub, nano::dev_genesis_key.pub }) + for (auto const & account : { key1.pub, key2.pub, key3.pub, nano::dev::genesis_key.pub }) { auto existing (std::find_if (votes.begin (), votes.end (), [&account] (std::shared_ptr const & vote_a) -> bool { return vote_a->account == account; @@ -108,7 +108,7 @@ TEST (vote_generator, session) { nano::system system (1); auto node (system.nodes[0]); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::vote_generator_session generator_session (node->active.generator); boost::thread thread ([node, &generator_session] () { nano::thread_role::set (nano::thread_role::name::request_loop); @@ -162,24 +162,24 @@ TEST (vote_spacing, vote_generator) node_flags.disable_search_pending = true; auto & node = *system.add_node (config, node_flags); auto & wallet = *system.wallet (0); - wallet.insert_adhoc (nano::dev_genesis_key.prv); + wallet.insert_adhoc (nano::dev::genesis_key.prv); nano::state_block_builder builder; auto send1 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) - .link (nano::dev_genesis_key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .link (nano::dev::genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); auto send2 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio - 1) - .link (nano::dev_genesis_key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .link (nano::dev::genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, node.ledger.process (node.store.tx_begin_write (), *send1).code); @@ -205,24 +205,24 @@ TEST (vote_spacing, rapid) node_flags.disable_search_pending = true; auto & node = *system.add_node (config, node_flags); auto & wallet = *system.wallet (0); - wallet.insert_adhoc (nano::dev_genesis_key.prv); + wallet.insert_adhoc (nano::dev::genesis_key.prv); nano::state_block_builder builder; auto send1 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) - .link (nano::dev_genesis_key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .link (nano::dev::genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); auto send2 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio - 1) - .link (nano::dev_genesis_key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .link (nano::dev::genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, node.ledger.process (node.store.tx_begin_write (), *send1).code); diff --git a/nano/core_test/wallet.cpp b/nano/core_test/wallet.cpp index e6d86cad55..5188d76621 100644 --- a/nano/core_test/wallet.cpp +++ b/nano/core_test/wallet.cpp @@ -166,43 +166,43 @@ TEST (wallet, insufficient_spend_one) { nano::system system (1); nano::keypair key1; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - auto block (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key1.pub, 500)); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); + auto block (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key1.pub, 500)); ASSERT_NE (nullptr, block); - ASSERT_EQ (nullptr, system.wallet (0)->send_action (nano::dev_genesis_key.pub, key1.pub, nano::genesis_amount)); + ASSERT_EQ (nullptr, system.wallet (0)->send_action (nano::dev::genesis_key.pub, key1.pub, nano::genesis_amount)); } TEST (wallet, spend_all_one) { nano::system system (1); auto & node1 (*system.nodes[0]); - nano::block_hash latest1 (node1.latest (nano::dev_genesis_key.pub)); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + nano::block_hash latest1 (node1.latest (nano::dev::genesis_key.pub)); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::keypair key2; - ASSERT_NE (nullptr, system.wallet (0)->send_action (nano::dev_genesis_key.pub, key2.pub, std::numeric_limits::max ())); + ASSERT_NE (nullptr, system.wallet (0)->send_action (nano::dev::genesis_key.pub, key2.pub, std::numeric_limits::max ())); nano::account_info info2; { auto transaction (node1.store.tx_begin_read ()); - node1.store.account.get (transaction, nano::dev_genesis_key.pub, info2); + node1.store.account.get (transaction, nano::dev::genesis_key.pub, info2); ASSERT_NE (latest1, info2.head); auto block (node1.store.block.get (transaction, info2.head)); ASSERT_NE (nullptr, block); ASSERT_EQ (latest1, block->previous ()); } ASSERT_TRUE (info2.balance.is_zero ()); - ASSERT_EQ (0, node1.balance (nano::dev_genesis_key.pub)); + ASSERT_EQ (0, node1.balance (nano::dev::genesis_key.pub)); } TEST (wallet, send_async) { nano::system system (1); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::keypair key2; std::thread thread ([&system] () { - ASSERT_TIMELY (10s, system.nodes[0]->balance (nano::dev_genesis_key.pub).is_zero ()); + ASSERT_TIMELY (10s, system.nodes[0]->balance (nano::dev::genesis_key.pub).is_zero ()); }); std::atomic success (false); - system.wallet (0)->send_async (nano::dev_genesis_key.pub, key2.pub, std::numeric_limits::max (), [&success] (std::shared_ptr const & block_a) { ASSERT_NE (nullptr, block_a); success = true; }); + system.wallet (0)->send_async (nano::dev::genesis_key.pub, key2.pub, std::numeric_limits::max (), [&success] (std::shared_ptr const & block_a) { ASSERT_NE (nullptr, block_a); success = true; }); thread.join (); ASSERT_TIMELY (2s, success); } @@ -211,34 +211,34 @@ TEST (wallet, spend) { nano::system system (1); auto & node1 (*system.nodes[0]); - nano::block_hash latest1 (node1.latest (nano::dev_genesis_key.pub)); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + nano::block_hash latest1 (node1.latest (nano::dev::genesis_key.pub)); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::keypair key2; // Sending from empty accounts should always be an error. Accounts need to be opened with an open block, not a send block. ASSERT_EQ (nullptr, system.wallet (0)->send_action (0, key2.pub, 0)); - ASSERT_NE (nullptr, system.wallet (0)->send_action (nano::dev_genesis_key.pub, key2.pub, std::numeric_limits::max ())); + ASSERT_NE (nullptr, system.wallet (0)->send_action (nano::dev::genesis_key.pub, key2.pub, std::numeric_limits::max ())); nano::account_info info2; { auto transaction (node1.store.tx_begin_read ()); - node1.store.account.get (transaction, nano::dev_genesis_key.pub, info2); + node1.store.account.get (transaction, nano::dev::genesis_key.pub, info2); ASSERT_NE (latest1, info2.head); auto block (node1.store.block.get (transaction, info2.head)); ASSERT_NE (nullptr, block); ASSERT_EQ (latest1, block->previous ()); } ASSERT_TRUE (info2.balance.is_zero ()); - ASSERT_EQ (0, node1.balance (nano::dev_genesis_key.pub)); + ASSERT_EQ (0, node1.balance (nano::dev::genesis_key.pub)); } TEST (wallet, change) { nano::system system (1); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::keypair key2; - auto block1 (system.nodes[0]->rep_block (nano::dev_genesis_key.pub)); + auto block1 (system.nodes[0]->rep_block (nano::dev::genesis_key.pub)); ASSERT_FALSE (block1.is_zero ()); - ASSERT_NE (nullptr, system.wallet (0)->change_action (nano::dev_genesis_key.pub, key2.pub)); - auto block2 (system.nodes[0]->rep_block (nano::dev_genesis_key.pub)); + ASSERT_NE (nullptr, system.wallet (0)->change_action (nano::dev::genesis_key.pub, key2.pub)); + auto block2 (system.nodes[0]->rep_block (nano::dev::genesis_key.pub)); ASSERT_FALSE (block2.is_zero ()); ASSERT_NE (block1, block2); } @@ -246,20 +246,20 @@ TEST (wallet, change) TEST (wallet, partial_spend) { nano::system system (1); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::keypair key2; - ASSERT_NE (nullptr, system.wallet (0)->send_action (nano::dev_genesis_key.pub, key2.pub, 500)); - ASSERT_EQ (std::numeric_limits::max () - 500, system.nodes[0]->balance (nano::dev_genesis_key.pub)); + ASSERT_NE (nullptr, system.wallet (0)->send_action (nano::dev::genesis_key.pub, key2.pub, 500)); + ASSERT_EQ (std::numeric_limits::max () - 500, system.nodes[0]->balance (nano::dev::genesis_key.pub)); } TEST (wallet, spend_no_previous) { nano::system system (1); { - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto transaction (system.nodes[0]->store.tx_begin_read ()); nano::account_info info1; - ASSERT_FALSE (system.nodes[0]->store.account.get (transaction, nano::dev_genesis_key.pub, info1)); + ASSERT_FALSE (system.nodes[0]->store.account.get (transaction, nano::dev::genesis_key.pub, info1)); for (auto i (0); i < 50; ++i) { nano::keypair key; @@ -267,8 +267,8 @@ TEST (wallet, spend_no_previous) } } nano::keypair key2; - ASSERT_NE (nullptr, system.wallet (0)->send_action (nano::dev_genesis_key.pub, key2.pub, 500)); - ASSERT_EQ (std::numeric_limits::max () - 500, system.nodes[0]->balance (nano::dev_genesis_key.pub)); + ASSERT_NE (nullptr, system.wallet (0)->send_action (nano::dev::genesis_key.pub, key2.pub, 500)); + ASSERT_EQ (std::numeric_limits::max () - 500, system.nodes[0]->balance (nano::dev::genesis_key.pub)); } TEST (wallet, find_none) @@ -635,7 +635,7 @@ TEST (wallet, work) { nano::system system (1); auto wallet (system.wallet (0)); - wallet->insert_adhoc (nano::dev_genesis_key.prv); + wallet->insert_adhoc (nano::dev::genesis_key.prv); nano::genesis genesis; auto done (false); system.deadline_set (20s); @@ -643,7 +643,7 @@ TEST (wallet, work) { auto transaction (system.wallet (0)->wallets.tx_begin_read ()); uint64_t work (0); - if (!wallet->store.work_get (transaction, nano::dev_genesis_key.pub, work)) + if (!wallet->store.work_get (transaction, nano::dev::genesis_key.pub, work)) { done = nano::work_difficulty (genesis.open->work_version (), genesis.hash (), work) >= system.nodes[0]->default_difficulty (genesis.open->work_version ()); } @@ -656,18 +656,18 @@ TEST (wallet, work_generate) nano::system system (1); auto & node1 (*system.nodes[0]); auto wallet (system.wallet (0)); - nano::uint128_t amount1 (node1.balance (nano::dev_genesis_key.pub)); + nano::uint128_t amount1 (node1.balance (nano::dev::genesis_key.pub)); uint64_t work1; - wallet->insert_adhoc (nano::dev_genesis_key.prv); + wallet->insert_adhoc (nano::dev::genesis_key.prv); nano::account account1; { auto transaction (node1.wallets.tx_begin_read ()); account1 = system.account (transaction, 0); } nano::keypair key; - auto block (wallet->send_action (nano::dev_genesis_key.pub, key.pub, 100)); + auto block (wallet->send_action (nano::dev::genesis_key.pub, key.pub, 100)); auto transaction (node1.store.tx_begin_read ()); - ASSERT_TIMELY (10s, node1.ledger.account_balance (transaction, nano::dev_genesis_key.pub) != amount1); + ASSERT_TIMELY (10s, node1.ledger.account_balance (transaction, nano::dev::genesis_key.pub) != amount1); system.deadline_set (10s); auto again (true); while (again) @@ -685,18 +685,18 @@ TEST (wallet, work_cache_delayed) auto & node1 (*system.nodes[0]); auto wallet (system.wallet (0)); uint64_t work1; - wallet->insert_adhoc (nano::dev_genesis_key.prv); + wallet->insert_adhoc (nano::dev::genesis_key.prv); nano::account account1; { auto transaction (node1.wallets.tx_begin_read ()); account1 = system.account (transaction, 0); } nano::keypair key; - auto block1 (wallet->send_action (nano::dev_genesis_key.pub, key.pub, 100)); - ASSERT_EQ (block1->hash (), node1.latest (nano::dev_genesis_key.pub)); - auto block2 (wallet->send_action (nano::dev_genesis_key.pub, key.pub, 100)); - ASSERT_EQ (block2->hash (), node1.latest (nano::dev_genesis_key.pub)); - ASSERT_EQ (block2->hash (), node1.wallets.delayed_work->operator[] (nano::dev_genesis_key.pub)); + auto block1 (wallet->send_action (nano::dev::genesis_key.pub, key.pub, 100)); + ASSERT_EQ (block1->hash (), node1.latest (nano::dev::genesis_key.pub)); + auto block2 (wallet->send_action (nano::dev::genesis_key.pub, key.pub, 100)); + ASSERT_EQ (block2->hash (), node1.latest (nano::dev::genesis_key.pub)); + ASSERT_EQ (block2->hash (), node1.wallets.delayed_work->operator[] (nano::dev::genesis_key.pub)); auto threshold (node1.default_difficulty (nano::work_version::work_1)); auto again (true); system.deadline_set (10s); @@ -817,27 +817,27 @@ TEST (wallet, insert_deterministic_locked) TEST (wallet, no_work) { nano::system system (1); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv, false); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv, false); nano::keypair key2; - auto block (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key2.pub, std::numeric_limits::max (), false)); + auto block (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key2.pub, std::numeric_limits::max (), false)); ASSERT_NE (nullptr, block); ASSERT_NE (0, block->block_work ()); ASSERT_GE (block->difficulty (), nano::work_threshold (block->work_version (), block->sideband ().details)); auto transaction (system.wallet (0)->wallets.tx_begin_read ()); uint64_t cached_work (0); - system.wallet (0)->store.work_get (transaction, nano::dev_genesis_key.pub, cached_work); + system.wallet (0)->store.work_get (transaction, nano::dev::genesis_key.pub, cached_work); ASSERT_EQ (0, cached_work); } TEST (wallet, send_race) { nano::system system (1); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::keypair key2; for (auto i (1); i < 60; ++i) { - ASSERT_NE (nullptr, system.wallet (0)->send_action (nano::dev_genesis_key.pub, key2.pub, nano::Gxrb_ratio)); - ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio * i, system.nodes[0]->balance (nano::dev_genesis_key.pub)); + ASSERT_NE (nullptr, system.wallet (0)->send_action (nano::dev::genesis_key.pub, key2.pub, nano::Gxrb_ratio)); + ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio * i, system.nodes[0]->balance (nano::dev::genesis_key.pub)); } } @@ -950,8 +950,8 @@ TEST (wallet, change_seed) uint32_t index (4); auto prv = nano::deterministic_key (seed1, index); pub = nano::pub_key (prv); - wallet->insert_adhoc (nano::dev_genesis_key.prv, false); - auto block (wallet->send_action (nano::dev_genesis_key.pub, pub, 100)); + wallet->insert_adhoc (nano::dev::genesis_key.prv, false); + auto block (wallet->send_action (nano::dev::genesis_key.pub, pub, 100)); ASSERT_NE (nullptr, block); system.nodes[0]->block_processor.flush (); { @@ -984,8 +984,8 @@ TEST (wallet, deterministic_restore) auto prv = nano::deterministic_key (seed1, index); pub = nano::pub_key (prv); } - wallet->insert_adhoc (nano::dev_genesis_key.prv, false); - auto block (wallet->send_action (nano::dev_genesis_key.pub, pub, 100)); + wallet->insert_adhoc (nano::dev::genesis_key.prv, false); + auto block (wallet->send_action (nano::dev::genesis_key.pub, pub, 100)); ASSERT_NE (nullptr, block); system.nodes[0]->block_processor.flush (); { @@ -1006,7 +1006,7 @@ TEST (wallet, epoch_2_validation) ASSERT_NE (nullptr, system.upgrade_genesis_epoch (node, nano::epoch::epoch_1)); ASSERT_NE (nullptr, system.upgrade_genesis_epoch (node, nano::epoch::epoch_2)); - wallet.insert_adhoc (nano::dev_genesis_key.prv, false); + wallet.insert_adhoc (nano::dev::genesis_key.prv, false); // Test send and receive blocks // An epoch 2 receive block should be generated with lower difficulty with high probability @@ -1015,12 +1015,12 @@ TEST (wallet, epoch_2_validation) auto amount = node.config.receive_minimum.number (); while (++tries < max_tries) { - auto send = wallet.send_action (nano::dev_genesis_key.pub, nano::dev_genesis_key.pub, amount, 1); + auto send = wallet.send_action (nano::dev::genesis_key.pub, nano::dev::genesis_key.pub, amount, 1); ASSERT_NE (nullptr, send); ASSERT_EQ (nano::epoch::epoch_2, send->sideband ().details.epoch); ASSERT_EQ (nano::epoch::epoch_0, send->sideband ().source_epoch); // Not used for send state blocks - auto receive = wallet.receive_action (send->hash (), nano::dev_genesis_key.pub, amount, send->link ().as_account (), 1); + auto receive = wallet.receive_action (send->hash (), nano::dev::genesis_key.pub, amount, send->link ().as_account (), 1); ASSERT_NE (nullptr, receive); if (receive->difficulty () < node.network_params.network.publish_thresholds.base) { @@ -1033,7 +1033,7 @@ TEST (wallet, epoch_2_validation) ASSERT_LT (tries, max_tries); // Test a change block - ASSERT_NE (nullptr, wallet.change_action (nano::dev_genesis_key.pub, nano::keypair ().pub, 1)); + ASSERT_NE (nullptr, wallet.change_action (nano::dev::genesis_key.pub, nano::keypair ().pub, 1)); } // Receiving from an upgraded account uses the lower threshold and upgrades the receiving account @@ -1057,19 +1057,19 @@ TEST (wallet, epoch_2_receive_propagation) nano::state_block_builder builder; // Send and open the account - wallet.insert_adhoc (nano::dev_genesis_key.prv, false); + wallet.insert_adhoc (nano::dev::genesis_key.prv, false); wallet.insert_adhoc (key.prv, false); auto amount = node.config.receive_minimum.number (); - auto send1 = wallet.send_action (nano::dev_genesis_key.pub, key.pub, amount, 1); + auto send1 = wallet.send_action (nano::dev::genesis_key.pub, key.pub, amount, 1); ASSERT_NE (nullptr, send1); - ASSERT_NE (nullptr, wallet.receive_action (send1->hash (), nano::dev_genesis_key.pub, amount, send1->link ().as_account (), 1)); + ASSERT_NE (nullptr, wallet.receive_action (send1->hash (), nano::dev::genesis_key.pub, amount, send1->link ().as_account (), 1)); // Upgrade the genesis account to epoch 2 auto epoch2 = system.upgrade_genesis_epoch (node, nano::epoch::epoch_2); ASSERT_NE (nullptr, epoch2); // Send a block - auto send2 = wallet.send_action (nano::dev_genesis_key.pub, key.pub, amount, 1); + auto send2 = wallet.send_action (nano::dev::genesis_key.pub, key.pub, amount, 1); ASSERT_NE (nullptr, send2); auto receive2 = wallet.receive_action (send2->hash (), key.pub, amount, send2->link ().as_account (), 1); @@ -1107,12 +1107,12 @@ TEST (wallet, epoch_2_receive_unopened) nano::state_block_builder builder; // Send - wallet.insert_adhoc (nano::dev_genesis_key.prv, false); + wallet.insert_adhoc (nano::dev::genesis_key.prv, false); auto amount = node.config.receive_minimum.number (); - auto send1 = wallet.send_action (nano::dev_genesis_key.pub, key.pub, amount, 1); + auto send1 = wallet.send_action (nano::dev::genesis_key.pub, key.pub, amount, 1); // Upgrade unopened account to epoch_2 - auto epoch2_unopened = nano::state_block (key.pub, 0, 0, 0, node.network_params.ledger.epochs.link (nano::epoch::epoch_2), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (key.pub, node.network_params.network.publish_thresholds.epoch_2)); + auto epoch2_unopened = nano::state_block (key.pub, 0, 0, 0, node.network_params.ledger.epochs.link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (key.pub, node.network_params.network.publish_thresholds.epoch_2)); ASSERT_EQ (nano::process_result::progress, node.process (epoch2_unopened).code); wallet.insert_adhoc (key.prv, false); @@ -1134,7 +1134,7 @@ TEST (wallet, foreach_representative_deadlock) { nano::system system (1); auto & node (*system.nodes[0]); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); node.wallets.compute_reps (); ASSERT_EQ (1, node.wallets.reps ().voting); node.wallets.foreach_representative ([&node] (nano::public_key const & pub, nano::raw_key const & prv) { @@ -1160,7 +1160,7 @@ TEST (wallet, search_pending) auto & node (*system.add_node (config, flags)); auto & wallet (*system.wallet (0)); - wallet.insert_adhoc (nano::dev_genesis_key.prv); + wallet.insert_adhoc (nano::dev::genesis_key.prv); nano::block_builder builder; auto send = builder.state () .account (nano::dev::genesis->account ()) @@ -1168,7 +1168,7 @@ TEST (wallet, search_pending) .representative (nano::dev::genesis->account ()) .balance (nano::genesis_amount - node.config.receive_minimum.number ()) .link (nano::dev::genesis->account ()) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build (); ASSERT_EQ (nano::process_result::progress, node.process (*send).code); @@ -1188,7 +1188,7 @@ TEST (wallet, search_pending) ASSERT_TIMELY (5s, node.block_confirmed (send->hash ()) && node.active.empty ()); // Re-insert the key - wallet.insert_adhoc (nano::dev_genesis_key.prv); + wallet.insert_adhoc (nano::dev::genesis_key.prv); // Pending search should create the receive block ASSERT_EQ (2, node.ledger.cache.block_count); @@ -1219,10 +1219,10 @@ TEST (wallet, receive_pruned) nano::state_block_builder builder; // Send - wallet1.insert_adhoc (nano::dev_genesis_key.prv, false); + wallet1.insert_adhoc (nano::dev::genesis_key.prv, false); auto amount = node2.config.receive_minimum.number (); - auto send1 = wallet1.send_action (nano::dev_genesis_key.pub, key.pub, amount, 1); - auto send2 = wallet1.send_action (nano::dev_genesis_key.pub, key.pub, 1, 1); + auto send1 = wallet1.send_action (nano::dev::genesis_key.pub, key.pub, amount, 1); + auto send2 = wallet1.send_action (nano::dev::genesis_key.pub, key.pub, 1, 1); // Pruning ASSERT_TIMELY (5s, node2.ledger.cache.cemented_count == 3); diff --git a/nano/core_test/wallets.cpp b/nano/core_test/wallets.cpp index e0a9e47762..47f205e40a 100644 --- a/nano/core_test/wallets.cpp +++ b/nano/core_test/wallets.cpp @@ -98,12 +98,12 @@ TEST (wallets, vote_minimum) nano::keypair key1; nano::keypair key2; nano::genesis genesis; - nano::state_block send1 (nano::dev_genesis_key.pub, genesis.hash (), nano::dev_genesis_key.pub, std::numeric_limits::max () - node1.config.vote_minimum.number (), key1.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, std::numeric_limits::max () - node1.config.vote_minimum.number (), key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, node1.process (send1).code); nano::state_block open1 (key1.pub, 0, key1.pub, node1.config.vote_minimum.number (), send1.hash (), key1.prv, key1.pub, *system.work.generate (key1.pub)); ASSERT_EQ (nano::process_result::progress, node1.process (open1).code); // send2 with amount vote_minimum - 1 (not voting representative) - nano::state_block send2 (nano::dev_genesis_key.pub, send1.hash (), nano::dev_genesis_key.pub, std::numeric_limits::max () - 2 * node1.config.vote_minimum.number () + 1, key2.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send1.hash ())); + nano::state_block send2 (nano::dev::genesis_key.pub, send1.hash (), nano::dev::genesis_key.pub, std::numeric_limits::max () - 2 * node1.config.vote_minimum.number () + 1, key2.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, node1.process (send2).code); nano::state_block open2 (key2.pub, 0, key2.pub, node1.config.vote_minimum.number () - 1, send2.hash (), key2.prv, key2.pub, *system.work.generate (key2.pub)); ASSERT_EQ (nano::process_result::progress, node1.process (open2).code); @@ -111,7 +111,7 @@ TEST (wallets, vote_minimum) nano::unique_lock representatives_lk (wallet->representatives_mutex); ASSERT_EQ (0, wallet->representatives.size ()); representatives_lk.unlock (); - wallet->insert_adhoc (nano::dev_genesis_key.prv); + wallet->insert_adhoc (nano::dev::genesis_key.prv); wallet->insert_adhoc (key1.prv); wallet->insert_adhoc (key2.prv); node1.wallets.compute_reps (); @@ -163,7 +163,7 @@ TEST (wallets, search_pending) auto wallet_id = wallets.begin ()->first; auto wallet = wallets.begin ()->second; - wallet->insert_adhoc (nano::dev_genesis_key.prv); + wallet->insert_adhoc (nano::dev::genesis_key.prv); nano::block_builder builder; auto send = builder.state () .account (nano::dev::genesis->account ()) @@ -171,7 +171,7 @@ TEST (wallets, search_pending) .representative (nano::dev::genesis->account ()) .balance (nano::genesis_amount - node.config.receive_minimum.number ()) .link (nano::dev::genesis->account ()) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build (); ASSERT_EQ (nano::process_result::progress, node.process (*send).code); @@ -198,7 +198,7 @@ TEST (wallets, search_pending) ASSERT_TIMELY (5s, node.block_confirmed (send->hash ()) && node.active.empty ()); // Re-insert the key - wallet->insert_adhoc (nano::dev_genesis_key.prv); + wallet->insert_adhoc (nano::dev::genesis_key.prv); // Pending search should create the receive block ASSERT_EQ (2, node.ledger.cache.block_count); diff --git a/nano/core_test/websocket.cpp b/nano/core_test/websocket.cpp index 889a9bc692..b76e348799 100644 --- a/nano/core_test/websocket.cpp +++ b/nano/core_test/websocket.cpp @@ -82,14 +82,14 @@ TEST (websocket, confirmation) ASSERT_TIMELY (5s, ack_ready); nano::keypair key; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto balance = nano::genesis_amount; auto send_amount = node1->online_reps.delta () + 1; // Quick-confirm a block, legacy blocks should work without filtering { - nano::block_hash previous (node1->latest (nano::dev_genesis_key.pub)); + nano::block_hash previous (node1->latest (nano::dev::genesis_key.pub)); balance -= send_amount; - auto send (std::make_shared (previous, key.pub, balance, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (previous))); + auto send (std::make_shared (previous, key.pub, balance, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (previous))); node1->process_active (send); } @@ -98,15 +98,15 @@ TEST (websocket, confirmation) // Quick confirm a state block { nano::state_block_builder builder; - nano::block_hash previous (node1->latest (nano::dev_genesis_key.pub)); + nano::block_hash previous (node1->latest (nano::dev::genesis_key.pub)); balance -= send_amount; auto send = builder - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (previous) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (balance) .link (key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (previous)) .build_shared (); @@ -141,7 +141,7 @@ TEST (websocket, stopped_election) // Create election, then erase it, causing a websocket message to be emitted nano::keypair key1; nano::genesis genesis; - auto send1 (std::make_shared (genesis.hash (), key1.pub, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (genesis.hash ()))); + auto send1 (std::make_shared (genesis.hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (genesis.hash ()))); nano::publish publish1 (send1); auto channel1 (node1->network.udp_channels.create (node1->network.endpoint ())); node1->network.inbound (publish1, channel1); @@ -184,21 +184,21 @@ TEST (websocket, confirmation_options) ASSERT_TIMELY (5s, ack_ready); // Confirm a state block for an in-wallet account - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::keypair key; auto balance = nano::genesis_amount; auto send_amount = node1->online_reps.delta () + 1; - nano::block_hash previous (node1->latest (nano::dev_genesis_key.pub)); + nano::block_hash previous (node1->latest (nano::dev::genesis_key.pub)); { balance -= send_amount; nano::state_block_builder builder; auto send = builder - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (previous) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (balance) .link (key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (previous)) .build_shared (); @@ -226,12 +226,12 @@ TEST (websocket, confirmation_options) balance -= send_amount; nano::state_block_builder builder; auto send = builder - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (previous) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (balance) .link (key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (previous)) .build_shared (); @@ -288,7 +288,7 @@ TEST (websocket, confirmation_options) // When filtering options are enabled, legacy blocks are always filtered { balance -= send_amount; - auto send (std::make_shared (previous, key.pub, balance, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (previous))); + auto send (std::make_shared (previous, key.pub, balance, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (previous))); node1->process_active (send); previous = send->hash (); } @@ -318,21 +318,21 @@ TEST (websocket, confirmation_options_votes) ASSERT_TIMELY (10s, ack_ready); // Confirm a state block for an in-wallet account - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::keypair key; auto balance = nano::genesis_amount; auto send_amount = node1->config.online_weight_minimum.number () + 1; - nano::block_hash previous (node1->latest (nano::dev_genesis_key.pub)); + nano::block_hash previous (node1->latest (nano::dev::genesis_key.pub)); { nano::state_block_builder builder; balance -= send_amount; auto send = builder - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (previous) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (balance) .link (key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (previous)) .build_shared (); @@ -368,13 +368,13 @@ TEST (websocket, confirmation_options_votes) for (auto & vote : votes_l.get ()) { std::string representative (vote.second.get ("representative")); - ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), representative); + ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), representative); std::string timestamp (vote.second.get ("timestamp")); ASSERT_NE ("0", timestamp); std::string hash (vote.second.get ("hash")); - ASSERT_EQ (node1->latest (nano::dev_genesis_key.pub).to_string (), hash); + ASSERT_EQ (node1->latest (nano::dev::genesis_key.pub).to_string (), hash); std::string weight (vote.second.get ("weight")); - ASSERT_EQ (node1->balance (nano::dev_genesis_key.pub).convert_to (), weight); + ASSERT_EQ (node1->balance (nano::dev::genesis_key.pub).convert_to (), weight); } } catch (std::runtime_error const & ex) @@ -401,14 +401,14 @@ TEST (websocket, confirmation_options_update) client.await_ack (); EXPECT_EQ (1, node1->websocket_server->subscriber_count (nano::websocket::topic::confirmation)); // Now update filter with an account and wait for a response - std::string add_message = boost::str (boost::format (R"json({"action": "update", "topic": "confirmation", "ack": "true", "options": {"accounts_add": ["%1%"]}})json") % nano::dev_genesis_key.pub.to_account ()); + std::string add_message = boost::str (boost::format (R"json({"action": "update", "topic": "confirmation", "ack": "true", "options": {"accounts_add": ["%1%"]}})json") % nano::dev::genesis_key.pub.to_account ()); client.send_message (add_message); client.await_ack (); EXPECT_EQ (1, node1->websocket_server->subscriber_count (nano::websocket::topic::confirmation)); added = true; EXPECT_TRUE (client.get_response ()); // Update the filter again, removing the account - std::string delete_message = boost::str (boost::format (R"json({"action": "update", "topic": "confirmation", "ack": "true", "options": {"accounts_del": ["%1%"]}})json") % nano::dev_genesis_key.pub.to_account ()); + std::string delete_message = boost::str (boost::format (R"json({"action": "update", "topic": "confirmation", "ack": "true", "options": {"accounts_del": ["%1%"]}})json") % nano::dev::genesis_key.pub.to_account ()); client.send_message (delete_message); client.await_ack (); EXPECT_EQ (1, node1->websocket_server->subscriber_count (nano::websocket::topic::confirmation)); @@ -421,18 +421,18 @@ TEST (websocket, confirmation_options_update) ASSERT_TIMELY (5s, added); // Confirm a block - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::genesis genesis; nano::keypair key; nano::state_block_builder builder; - auto previous (node1->latest (nano::dev_genesis_key.pub)); + auto previous (node1->latest (nano::dev::genesis_key.pub)); auto send = builder - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (previous) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - nano::Gxrb_ratio) .link (key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (previous)) .build_shared (); @@ -445,12 +445,12 @@ TEST (websocket, confirmation_options_update) previous = send->hash (); auto send2 = builder .make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (previous) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - 2 * nano::Gxrb_ratio) .link (key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (previous)) .build_shared (); @@ -484,15 +484,15 @@ TEST (websocket, vote) // Quick-confirm a block nano::keypair key; nano::state_block_builder builder; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - nano::block_hash previous (node1->latest (nano::dev_genesis_key.pub)); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); + nano::block_hash previous (node1->latest (nano::dev::genesis_key.pub)); auto send = builder - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (previous) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - (node1->online_reps.delta () + 1)) .link (key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (previous)) .build_shared (); @@ -533,7 +533,7 @@ TEST (websocket, vote_options_type) // Custom made votes for simplicity nano::genesis genesis; - auto vote (std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, 0, genesis.open)); + auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, genesis.open)); nano::websocket::message_builder builder; auto msg (builder.vote_received (vote, nano::vote_code::replay)); node1->websocket_server->broadcast (msg); @@ -563,7 +563,7 @@ TEST (websocket, vote_options_representatives) std::atomic ack_ready{ false }; auto task1 = ([&ack_ready, config, &node1] () { fake_websocket_client client (config.websocket_config.port); - std::string message = boost::str (boost::format (R"json({"action": "subscribe", "topic": "vote", "ack": "true", "options": {"representatives": ["%1%"]}})json") % nano::dev_genesis_key.pub.to_account ()); + std::string message = boost::str (boost::format (R"json({"action": "subscribe", "topic": "vote", "ack": "true", "options": {"representatives": ["%1%"]}})json") % nano::dev::genesis_key.pub.to_account ()); client.send_message (message); client.await_ack (); ack_ready = true; @@ -583,19 +583,19 @@ TEST (websocket, vote_options_representatives) // Quick-confirm a block nano::keypair key; auto balance = nano::genesis_amount; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto send_amount = node1->online_reps.delta () + 1; auto confirm_block = [&] () { - nano::block_hash previous (node1->latest (nano::dev_genesis_key.pub)); + nano::block_hash previous (node1->latest (nano::dev::genesis_key.pub)); balance -= send_amount; nano::state_block_builder builder; auto send = builder - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (previous) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (balance) .link (key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (previous)) .build_shared (); node1->process_active (send); @@ -915,12 +915,12 @@ TEST (websocket, new_unconfirmed_block) // Process a new block nano::genesis genesis; auto send1 = builder - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - 1) - .link (nano::dev_genesis_key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .link (nano::dev::genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); diff --git a/nano/load_test/entry.cpp b/nano/load_test/entry.cpp index 454b2379fe..b706b207f1 100644 --- a/nano/load_test/entry.cpp +++ b/nano/load_test/entry.cpp @@ -406,7 +406,7 @@ int main (int argc, char * const * argv) std::string wallet = wallet_create_rpc (ioc, primary_node_results); // Add genesis account to it - wallet_add_rpc (ioc, primary_node_results, wallet, nano::dev_genesis_key.prv.to_string ()); + wallet_add_rpc (ioc, primary_node_results, wallet, nano::dev::genesis_key.prv.to_string ()); // Add destination accounts for (auto & account : destination_accounts) diff --git a/nano/nano_node/entry.cpp b/nano/nano_node/entry.cpp index dd42ec246d..0addd89aeb 100644 --- a/nano/nano_node/entry.cpp +++ b/nano/nano_node/entry.cpp @@ -899,7 +899,7 @@ int main (int argc, char * const * argv) nano::inactive_node inactive_node (nano::unique_path (), data_path, node_flags); auto node = inactive_node.node; - nano::block_hash genesis_latest (node->latest (dev_params.ledger.dev_genesis_key.pub)); + nano::block_hash genesis_latest (node->latest (nano::dev::genesis_key.pub)); nano::uint128_t genesis_balance (std::numeric_limits::max ()); // Generating keys std::vector keys (num_accounts); @@ -912,12 +912,12 @@ int main (int argc, char * const * argv) genesis_balance = genesis_balance - 1000000000; auto send = builder.state () - .account (dev_params.ledger.dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis_latest) - .representative (dev_params.ledger.dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (genesis_balance) .link (keys[i].pub) - .sign (dev_params.ledger.dev_genesis_key.prv, dev_params.ledger.dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node->work.generate (nano::work_version::work_1, genesis_latest, node->network_params.network.publish_thresholds.epoch_1)) .build (); @@ -1016,7 +1016,7 @@ int main (int argc, char * const * argv) nano::node_wrapper node_wrapper (nano::unique_path (), data_path, node_flags); auto node = node_wrapper.node; - nano::block_hash genesis_latest (node->latest (dev_params.ledger.dev_genesis_key.pub)); + nano::block_hash genesis_latest (node->latest (nano::dev::genesis_key.pub)); nano::uint128_t genesis_balance (std::numeric_limits::max ()); // Generating keys std::vector keys (num_representatives); @@ -1027,12 +1027,12 @@ int main (int argc, char * const * argv) genesis_balance = genesis_balance - balance; auto send = builder.state () - .account (dev_params.ledger.dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis_latest) - .representative (dev_params.ledger.dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (genesis_balance) .link (keys[i].pub) - .sign (dev_params.ledger.dev_genesis_key.prv, dev_params.ledger.dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node->work.generate (nano::work_version::work_1, genesis_latest, node->network_params.network.publish_thresholds.epoch_1)) .build (); @@ -1059,12 +1059,12 @@ int main (int argc, char * const * argv) nano::keypair destination; auto send = builder.state () - .account (dev_params.ledger.dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis_latest) - .representative (dev_params.ledger.dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (genesis_balance) .link (destination.pub) - .sign (dev_params.ledger.dev_genesis_key.prv, dev_params.ledger.dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node->work.generate (nano::work_version::work_1, genesis_latest, node->network_params.network.publish_thresholds.epoch_1)) .build (); @@ -1156,7 +1156,7 @@ int main (int argc, char * const * argv) flags.disable_wallet_bootstrap = true; flags.disable_bootstrap_listener = true; auto node1 (std::make_shared (io_ctx1, path1, config1, work, flags, 0)); - nano::block_hash genesis_latest (node1->latest (dev_params.ledger.dev_genesis_key.pub)); + nano::block_hash genesis_latest (node1->latest (nano::dev::genesis_key.pub)); nano::uint128_t genesis_balance (std::numeric_limits::max ()); // Generating blocks std::deque> blocks; @@ -1166,12 +1166,12 @@ int main (int argc, char * const * argv) genesis_balance = genesis_balance - 1; auto send = builder.state () - .account (dev_params.ledger.dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (genesis_latest) - .representative (dev_params.ledger.dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (genesis_balance) .link (key.pub) - .sign (dev_params.ledger.dev_genesis_key.prv, dev_params.ledger.dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*work.generate (nano::work_version::work_1, genesis_latest, dev_params.network.publish_thresholds.epoch_1)) .build (); @@ -1264,7 +1264,7 @@ int main (int argc, char * const * argv) // Insert representative std::cout << "Initializing representative\n"; auto wallet (node1->wallets.create (nano::random_wallet_id ())); - wallet->insert_adhoc (dev_params.ledger.dev_genesis_key.prv); + wallet->insert_adhoc (nano::dev::genesis_key.prv); node2->network.merge_peer (node1->network.endpoint ()); while (node2->rep_crawler.representative_count () == 0) { diff --git a/nano/qt_test/qt.cpp b/nano/qt_test/qt.cpp index 74dd5d9fcc..3a5a41e04b 100644 --- a/nano/qt_test/qt.cpp +++ b/nano/qt_test/qt.cpp @@ -291,9 +291,9 @@ TEST (wallet, send) { nano_qt::eventloop_processor processor; nano::system system (2); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::public_key key1 (system.wallet (1)->insert_adhoc (nano::keypair ().prv)); - auto account (nano::dev_genesis_key.pub); + auto account (nano::dev::genesis_key.pub); auto wallet (std::make_shared (*test_application, processor, *system.nodes[0], system.wallet (0), account)); wallet->start (); ASSERT_NE (wallet->rendering_ratio, nano::raw_ratio); @@ -324,13 +324,13 @@ TEST (wallet, send_locked) { nano_qt::eventloop_processor processor; nano::system system (1); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::keypair key1; { auto transaction (system.wallet (0)->wallets.tx_begin_write ()); system.wallet (0)->enter_password (transaction, "0"); } - auto account (nano::dev_genesis_key.pub); + auto account (nano::dev::genesis_key.pub); auto wallet (std::make_shared (*test_application, processor, *system.nodes[0], system.wallet (0), account)); wallet->start (); QTest::mouseClick (wallet->send_blocks, Qt::LeftButton); @@ -365,7 +365,7 @@ TEST (wallet, process_block) QTest::mouseClick (wallet->show_advanced, Qt::LeftButton); QTest::mouseClick (wallet->advanced.enter_block, Qt::LeftButton); ASSERT_EQ (wallet->block_entry.window, wallet->main_stack->currentWidget ()); - nano::send_block send (latest, key1.pub, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (latest)); + nano::send_block send (latest, key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); std::string previous; send.hashables.previous.encode_hex (previous); std::string balance; @@ -394,16 +394,16 @@ TEST (wallet, create_send) nano_qt::eventloop_processor processor; nano::keypair key; nano::system system (1); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); system.wallet (0)->insert_adhoc (key.prv); - auto account (nano::dev_genesis_key.pub); + auto account (nano::dev::genesis_key.pub); auto wallet (std::make_shared (*test_application, processor, *system.nodes[0], system.wallet (0), account)); wallet->start (); wallet->client_window->show (); QTest::mouseClick (wallet->show_advanced, Qt::LeftButton); QTest::mouseClick (wallet->advanced.create_block, Qt::LeftButton); QTest::mouseClick (wallet->block_creation.send, Qt::LeftButton); - QTest::keyClicks (wallet->block_creation.account, nano::dev_genesis_key.pub.to_account ().c_str ()); + QTest::keyClicks (wallet->block_creation.account, nano::dev::genesis_key.pub.to_account ().c_str ()); QTest::keyClicks (wallet->block_creation.amount, "100000000000000000000"); QTest::keyClicks (wallet->block_creation.destination, key.pub.to_account ().c_str ()); QTest::mouseClick (wallet->block_creation.create, Qt::LeftButton); @@ -424,14 +424,14 @@ TEST (wallet, create_open_receive) nano_qt::eventloop_processor processor; nano::keypair key; nano::system system (1); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, 100); - nano::block_hash latest1 (system.nodes[0]->latest (nano::dev_genesis_key.pub)); - system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, 100); - nano::block_hash latest2 (system.nodes[0]->latest (nano::dev_genesis_key.pub)); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); + system.wallet (0)->send_action (nano::dev::genesis_key.pub, key.pub, 100); + nano::block_hash latest1 (system.nodes[0]->latest (nano::dev::genesis_key.pub)); + system.wallet (0)->send_action (nano::dev::genesis_key.pub, key.pub, 100); + nano::block_hash latest2 (system.nodes[0]->latest (nano::dev::genesis_key.pub)); ASSERT_NE (latest1, latest2); system.wallet (0)->insert_adhoc (key.prv); - auto account (nano::dev_genesis_key.pub); + auto account (nano::dev::genesis_key.pub); auto wallet (std::make_shared (*test_application, processor, *system.nodes[0], system.wallet (0), account)); wallet->start (); wallet->client_window->show (); @@ -439,7 +439,7 @@ TEST (wallet, create_open_receive) QTest::mouseClick (wallet->advanced.create_block, Qt::LeftButton); wallet->block_creation.open->click (); QTest::keyClicks (wallet->block_creation.source, latest1.to_string ().c_str ()); - QTest::keyClicks (wallet->block_creation.representative, nano::dev_genesis_key.pub.to_account ().c_str ()); + QTest::keyClicks (wallet->block_creation.representative, nano::dev::genesis_key.pub.to_account ().c_str ()); QTest::mouseClick (wallet->block_creation.create, Qt::LeftButton); std::string json1 (wallet->block_creation.block->toPlainText ().toStdString ()); ASSERT_FALSE (json1.empty ()); @@ -473,15 +473,15 @@ TEST (wallet, create_change) nano_qt::eventloop_processor processor; nano::keypair key; nano::system system (1); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - auto account (nano::dev_genesis_key.pub); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); + auto account (nano::dev::genesis_key.pub); auto wallet (std::make_shared (*test_application, processor, *system.nodes[0], system.wallet (0), account)); wallet->start (); wallet->client_window->show (); QTest::mouseClick (wallet->show_advanced, Qt::LeftButton); QTest::mouseClick (wallet->advanced.create_block, Qt::LeftButton); wallet->block_creation.change->click (); - QTest::keyClicks (wallet->block_creation.account, nano::dev_genesis_key.pub.to_account ().c_str ()); + QTest::keyClicks (wallet->block_creation.account, nano::dev::genesis_key.pub.to_account ().c_str ()); QTest::keyClicks (wallet->block_creation.representative, key.pub.to_account ().c_str ()); wallet->block_creation.create->click (); std::string json (wallet->block_creation.block->toPlainText ().toStdString ()); @@ -521,15 +521,15 @@ TEST (history, short_text) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::keypair key; - auto latest (ledger.latest (transaction, nano::dev_genesis_key.pub)); - nano::send_block send (latest, nano::dev_genesis_key.pub, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (latest)); + auto latest (ledger.latest (transaction, nano::dev::genesis_key.pub)); + nano::send_block send (latest, nano::dev::genesis_key.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); - nano::receive_block receive (send.hash (), send.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send.hash ())); + nano::receive_block receive (send.hash (), send.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive).code); - nano::change_block change (receive.hash (), key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (receive.hash ())); + nano::change_block change (receive.hash (), key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (receive.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, change).code); } - nano_qt::history history (ledger, nano::dev_genesis_key.pub, *wallet); + nano_qt::history history (ledger, nano::dev::genesis_key.pub, *wallet); history.refresh (); ASSERT_EQ (4, history.model->rowCount ()); } @@ -561,19 +561,19 @@ TEST (history, pruned_source) { auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - auto latest (ledger.latest (transaction, nano::dev_genesis_key.pub)); - nano::send_block send1 (latest, nano::dev_genesis_key.pub, nano::genesis_amount - 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (latest)); + auto latest (ledger.latest (transaction, nano::dev::genesis_key.pub)); + nano::send_block send1 (latest, nano::dev::genesis_key.pub, nano::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - nano::send_block send2 (send1.hash (), key.pub, nano::genesis_amount - 200, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send1.hash ())); + nano::send_block send2 (send1.hash (), key.pub, nano::genesis_amount - 200, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); - nano::receive_block receive (send2.hash (), send1.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send2.hash ())); + nano::receive_block receive (send2.hash (), send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send2.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive).code); nano::open_block open (send2.hash (), key.pub, key.pub, key.prv, key.pub, *system.work.generate (key.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open).code); ASSERT_EQ (1, ledger.pruning_action (transaction, send1.hash (), 2)); next_pruning = send2.hash (); } - nano_qt::history history1 (ledger, nano::dev_genesis_key.pub, *wallet); + nano_qt::history history1 (ledger, nano::dev::genesis_key.pub, *wallet); history1.refresh (); ASSERT_EQ (2, history1.model->rowCount ()); nano_qt::history history2 (ledger, key.pub, *wallet); @@ -591,8 +591,8 @@ TEST (history, pruned_source) // Pruning for state blocks. Previous block is pruned, source is pruned { auto transaction (store->tx_begin_write ()); - auto latest (ledger.latest (transaction, nano::dev_genesis_key.pub)); - nano::state_block send (nano::dev_genesis_key.pub, latest, nano::dev_genesis_key.pub, nano::genesis_amount - 200, key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (latest)); + auto latest (ledger.latest (transaction, nano::dev::genesis_key.pub)); + nano::state_block send (nano::dev::genesis_key.pub, latest, nano::dev::genesis_key.pub, nano::genesis_amount - 200, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); auto latest_key (ledger.latest (transaction, key.pub)); nano::state_block receive (key.pub, latest_key, key.pub, 200, send.hash (), key.prv, key.pub, *system.work.generate (latest_key)); @@ -623,7 +623,7 @@ TEST (wallet, startup_work) uint64_t work1; { auto transaction (system.nodes[0]->wallets.tx_begin_read ()); - ASSERT_TRUE (wallet->wallet_m->store.work_get (transaction, nano::dev_genesis_key.pub, work1)); + ASSERT_TRUE (wallet->wallet_m->store.work_get (transaction, nano::dev::genesis_key.pub, work1)); } QTest::mouseClick (wallet->accounts_button, Qt::LeftButton); QTest::keyClicks (wallet->accounts.account_key_line, "34F0A37AAD20F4A260F0A5B3CB3D7FB50673212263E58A380BC10474BB039CE4"); @@ -634,7 +634,7 @@ TEST (wallet, startup_work) { ASSERT_NO_ERROR (system.poll ()); auto transaction (system.nodes[0]->wallets.tx_begin_read ()); - again = wallet->wallet_m->store.work_get (transaction, nano::dev_genesis_key.pub, work1); + again = wallet->wallet_m->store.work_get (transaction, nano::dev::genesis_key.pub, work1); } } @@ -701,17 +701,17 @@ TEST (wallet, republish) { nano_qt::eventloop_processor processor; nano::system system (2); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::keypair key; nano::block_hash hash; { auto transaction (system.nodes[0]->store.tx_begin_write ()); - auto latest (system.nodes[0]->ledger.latest (transaction, nano::dev_genesis_key.pub)); - nano::send_block block (latest, key.pub, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (latest)); + auto latest (system.nodes[0]->ledger.latest (transaction, nano::dev::genesis_key.pub)); + nano::send_block block (latest, key.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); hash = block.hash (); ASSERT_EQ (nano::process_result::progress, system.nodes[0]->ledger.process (transaction, block).code); } - auto account (nano::dev_genesis_key.pub); + auto account (nano::dev::genesis_key.pub); auto wallet (std::make_shared (*test_application, processor, *system.nodes[0], system.wallet (0), account)); wallet->start (); QTest::mouseClick (wallet->show_advanced, Qt::LeftButton); @@ -720,9 +720,9 @@ TEST (wallet, republish) ASSERT_EQ (wallet->block_viewer.window, wallet->main_stack->currentWidget ()); QTest::keyClicks (wallet->block_viewer.hash, hash.to_string ().c_str ()); QTest::mouseClick (wallet->block_viewer.rebroadcast, Qt::LeftButton); - ASSERT_FALSE (system.nodes[1]->balance (nano::dev_genesis_key.pub).is_zero ()); + ASSERT_FALSE (system.nodes[1]->balance (nano::dev::genesis_key.pub).is_zero ()); system.deadline_set (10s); - while (system.nodes[1]->balance (nano::dev_genesis_key.pub).is_zero ()) + while (system.nodes[1]->balance (nano::dev::genesis_key.pub).is_zero ()) { ASSERT_NO_ERROR (system.poll ()); } @@ -740,7 +740,7 @@ TEST (wallet, ignore_empty_adhoc) ASSERT_EQ (wallet->advanced.window, wallet->main_stack->currentWidget ()); QTest::mouseClick (wallet->accounts_button, Qt::LeftButton); ASSERT_EQ (wallet->accounts.window, wallet->main_stack->currentWidget ()); - QTest::keyClicks (wallet->accounts.account_key_line, nano::dev_genesis_key.prv.to_string ().c_str ()); + QTest::keyClicks (wallet->accounts.account_key_line, nano::dev::genesis_key.prv.to_string ().c_str ()); QTest::mouseClick (wallet->accounts.account_key_button, Qt::LeftButton); ASSERT_EQ (1, wallet->accounts.model->rowCount ()); ASSERT_EQ (0, wallet->accounts.account_key_line->text ().length ()); @@ -907,7 +907,7 @@ TEST (wallet, DISABLED_synchronizing) { auto transaction (system1.nodes[0]->store.tx_begin_write ()); auto latest (system1.nodes[0]->ledger.latest (transaction, nano::dev::genesis->account ())); - nano::send_block send (latest, key1, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system1.work.generate (latest)); + nano::send_block send (latest, key1, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system1.work.generate (latest)); system1.nodes[0]->ledger.process (transaction, send); } ASSERT_EQ (0, wallet->active_status.active.count (nano_qt::status_types::synchronizing)); @@ -938,9 +938,9 @@ TEST (wallet, epoch_2_validation) ASSERT_NE (nullptr, system.upgrade_genesis_epoch (*node, nano::epoch::epoch_1)); ASSERT_NE (nullptr, system.upgrade_genesis_epoch (*node, nano::epoch::epoch_2)); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); - auto account (nano::dev_genesis_key.pub); + auto account (nano::dev::genesis_key.pub); auto wallet (std::make_shared (*test_application, processor, *node, system.wallet (0), account)); wallet->start (); wallet->client_window->show (); @@ -964,7 +964,7 @@ TEST (wallet, epoch_2_validation) auto do_send = [&] (nano::public_key const & destination) -> nano::block_hash { wallet->block_creation.send->click (); - wallet->block_creation.account->setText (nano::dev_genesis_key.pub.to_account ().c_str ()); + wallet->block_creation.account->setText (nano::dev::genesis_key.pub.to_account ().c_str ()); wallet->block_creation.amount->setText ("1"); wallet->block_creation.destination->setText (destination.to_account ().c_str ()); return create_and_process (); @@ -1002,6 +1002,6 @@ TEST (wallet, epoch_2_validation) do_open (send1, key.pub); auto send2 = do_send (key.pub); do_receive (send2); - do_change (key.pub, nano::dev_genesis_key.pub); + do_change (key.pub, nano::dev::genesis_key.pub); } } diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index 15ec73580c..1ea83c1f47 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -233,12 +233,12 @@ TEST (rpc, account_balance) nano::state_block_builder builder; auto send1 = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .balance (nano::genesis_amount - 1) - .link (nano::dev_genesis_key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .link (nano::dev::genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build (); @@ -248,7 +248,7 @@ TEST (rpc, account_balance) boost::property_tree::ptree request; request.put ("action", "account_balance"); - request.put ("account", nano::dev_genesis_key.pub.to_account ()); + request.put ("account", nano::dev::genesis_key.pub.to_account ()); // The send and pending should be unconfirmed { @@ -276,7 +276,7 @@ TEST (rpc, account_block_count) auto [rpc, context] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "account_block_count"); - request.put ("account", nano::dev_genesis_key.pub.to_account ()); + request.put ("account", nano::dev::genesis_key.pub.to_account ()); auto response (wait_response (system, rpc, request)); std::string block_count_text (response.get ("block_count")); ASSERT_EQ ("1", block_count_text); @@ -312,8 +312,8 @@ TEST (rpc, account_weight) nano::keypair key; nano::system system; auto node1 = add_ipc_enabled_node (system); - nano::block_hash latest (node1->latest (nano::dev_genesis_key.pub)); - nano::change_block block (latest, key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); + nano::block_hash latest (node1->latest (nano::dev::genesis_key.pub)); + nano::change_block block (latest, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest)); ASSERT_EQ (nano::process_result::progress, node1->process (block).code); auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request; @@ -328,14 +328,14 @@ TEST (rpc, wallet_contains) { nano::system system; auto node = add_ipc_enabled_node (system); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; std::string wallet; node->wallets.items.begin ()->first.encode_hex (wallet); request.put ("wallet", wallet); request.put ("action", "wallet_contains"); - request.put ("account", nano::dev_genesis_key.pub.to_account ()); + request.put ("account", nano::dev::genesis_key.pub.to_account ()); auto response (wait_response (system, rpc, request)); std::string exists_text (response.get ("exists")); ASSERT_EQ ("1", exists_text); @@ -351,7 +351,7 @@ TEST (rpc, wallet_doesnt_contain) node->wallets.items.begin ()->first.encode_hex (wallet); request.put ("wallet", wallet); request.put ("action", "wallet_contains"); - request.put ("account", nano::dev_genesis_key.pub.to_account ()); + request.put ("account", nano::dev::genesis_key.pub.to_account ()); auto response (wait_response (system, rpc, request)); std::string exists_text (response.get ("exists")); ASSERT_EQ ("0", exists_text); @@ -364,7 +364,7 @@ TEST (rpc, validate_account_number) auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "validate_account_number"); - request.put ("account", nano::dev_genesis_key.pub.to_account ()); + request.put ("account", nano::dev::genesis_key.pub.to_account ()); auto response (wait_response (system, rpc, request)); std::string exists_text (response.get ("valid")); ASSERT_EQ ("1", exists_text); @@ -376,7 +376,7 @@ TEST (rpc, validate_account_invalid) auto node = add_ipc_enabled_node (system); auto [rpc, rpc_ctx] = add_rpc (system, node); std::string account; - nano::dev_genesis_key.pub.encode_account (account); + nano::dev::genesis_key.pub.encode_account (account); account[0] ^= 0x1; boost::property_tree::ptree request; request.put ("action", "validate_account_number"); @@ -390,24 +390,24 @@ TEST (rpc, send) { nano::system system; auto node = add_ipc_enabled_node (system); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; std::string wallet; node->wallets.items.begin ()->first.encode_hex (wallet); request.put ("wallet", wallet); request.put ("action", "send"); - request.put ("source", nano::dev_genesis_key.pub.to_account ()); - request.put ("destination", nano::dev_genesis_key.pub.to_account ()); + request.put ("source", nano::dev::genesis_key.pub.to_account ()); + request.put ("destination", nano::dev::genesis_key.pub.to_account ()); request.put ("amount", "100"); - ASSERT_EQ (node->balance (nano::dev_genesis_key.pub), nano::genesis_amount); + ASSERT_EQ (node->balance (nano::dev::genesis_key.pub), nano::genesis_amount); auto response (wait_response (system, rpc, request, 10s)); std::string block_text (response.get ("block")); nano::block_hash block; ASSERT_FALSE (block.decode_hex (block_text)); ASSERT_TRUE (node->ledger.block_or_pruned_exists (block)); - ASSERT_EQ (node->latest (nano::dev_genesis_key.pub), block); - ASSERT_NE (node->balance (nano::dev_genesis_key.pub), nano::genesis_amount); + ASSERT_EQ (node->latest (nano::dev::genesis_key.pub), block); + ASSERT_NE (node->balance (nano::dev::genesis_key.pub), nano::genesis_amount); } TEST (rpc, send_fail) @@ -420,8 +420,8 @@ TEST (rpc, send_fail) node->wallets.items.begin ()->first.encode_hex (wallet); request.put ("wallet", wallet); request.put ("action", "send"); - request.put ("source", nano::dev_genesis_key.pub.to_account ()); - request.put ("destination", nano::dev_genesis_key.pub.to_account ()); + request.put ("source", nano::dev::genesis_key.pub.to_account ()); + request.put ("destination", nano::dev::genesis_key.pub.to_account ()); request.put ("amount", "100"); auto response (wait_response (system, rpc, request, 10s)); ASSERT_EQ (std::error_code (nano::error_common::account_not_found_wallet).message (), response.get ("error")); @@ -431,27 +431,27 @@ TEST (rpc, send_work) { nano::system system; auto node = add_ipc_enabled_node (system); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; std::string wallet; node->wallets.items.begin ()->first.encode_hex (wallet); request.put ("wallet", wallet); request.put ("action", "send"); - request.put ("source", nano::dev_genesis_key.pub.to_account ()); - request.put ("destination", nano::dev_genesis_key.pub.to_account ()); + request.put ("source", nano::dev::genesis_key.pub.to_account ()); + request.put ("destination", nano::dev::genesis_key.pub.to_account ()); request.put ("amount", "100"); request.put ("work", "1"); auto response (wait_response (system, rpc, request, 10s)); ASSERT_EQ (std::error_code (nano::error_common::invalid_work).message (), response.get ("error")); request.erase ("work"); - request.put ("work", nano::to_string_hex (*node->work_generate_blocking (node->latest (nano::dev_genesis_key.pub)))); + request.put ("work", nano::to_string_hex (*node->work_generate_blocking (node->latest (nano::dev::genesis_key.pub)))); auto response2 (wait_response (system, rpc, request, 10s)); std::string block_text (response2.get ("block")); nano::block_hash block; ASSERT_FALSE (block.decode_hex (block_text)); ASSERT_TRUE (node->ledger.block_or_pruned_exists (block)); - ASSERT_EQ (node->latest (nano::dev_genesis_key.pub), block); + ASSERT_EQ (node->latest (nano::dev::genesis_key.pub), block); } TEST (rpc, send_work_disabled) @@ -460,15 +460,15 @@ TEST (rpc, send_work_disabled) nano::node_config node_config (nano::get_available_port (), system.logging); node_config.work_threads = 0; auto node = add_ipc_enabled_node (system, node_config); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; std::string wallet; node->wallets.items.begin ()->first.encode_hex (wallet); request.put ("wallet", wallet); request.put ("action", "send"); - request.put ("source", nano::dev_genesis_key.pub.to_account ()); - request.put ("destination", nano::dev_genesis_key.pub.to_account ()); + request.put ("source", nano::dev::genesis_key.pub.to_account ()); + request.put ("destination", nano::dev::genesis_key.pub.to_account ()); request.put ("amount", "100"); auto response (wait_response (system, rpc, request, 10s)); ASSERT_EQ (std::error_code (nano::error_common::disabled_work_generation).message (), response.get ("error")); @@ -478,14 +478,14 @@ TEST (rpc, send_idempotent) { nano::system system; auto node = add_ipc_enabled_node (system); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; std::string wallet; node->wallets.items.begin ()->first.encode_hex (wallet); request.put ("wallet", wallet); request.put ("action", "send"); - request.put ("source", nano::dev_genesis_key.pub.to_account ()); + request.put ("source", nano::dev::genesis_key.pub.to_account ()); request.put ("destination", nano::account (0).to_account ()); request.put ("amount", (nano::genesis_amount - (nano::genesis_amount / 4)).convert_to ()); request.put ("id", "123abc"); @@ -494,11 +494,11 @@ TEST (rpc, send_idempotent) nano::block_hash block; ASSERT_FALSE (block.decode_hex (block_text)); ASSERT_TRUE (node->ledger.block_or_pruned_exists (block)); - ASSERT_EQ (node->balance (nano::dev_genesis_key.pub), nano::genesis_amount / 4); + ASSERT_EQ (node->balance (nano::dev::genesis_key.pub), nano::genesis_amount / 4); auto response2 (wait_response (system, rpc, request)); ASSERT_EQ ("", response2.get ("error", "")); ASSERT_EQ (block_text, response2.get ("block")); - ASSERT_EQ (node->balance (nano::dev_genesis_key.pub), nano::genesis_amount / 4); + ASSERT_EQ (node->balance (nano::dev::genesis_key.pub), nano::genesis_amount / 4); request.erase ("id"); request.put ("id", "456def"); auto response3 (wait_response (system, rpc, request)); @@ -514,7 +514,7 @@ TEST (rpc, send_epoch_2) ASSERT_NE (nullptr, system.upgrade_genesis_epoch (*node, nano::epoch::epoch_1)); ASSERT_NE (nullptr, system.upgrade_genesis_epoch (*node, nano::epoch::epoch_2)); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv, false); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv, false); auto target_difficulty = nano::work_threshold (nano::work_version::work_1, nano::block_details (nano::epoch::epoch_2, true, false, false)); ASSERT_LT (node->network_params.network.publish_thresholds.entry, target_difficulty); @@ -526,7 +526,7 @@ TEST (rpc, send_epoch_2) node->wallets.items.begin ()->first.encode_hex (wallet); request.put ("wallet", wallet); request.put ("action", "send"); - request.put ("source", nano::dev_genesis_key.pub.to_account ()); + request.put ("source", nano::dev::genesis_key.pub.to_account ()); request.put ("destination", nano::keypair ().pub.to_account ()); request.put ("amount", "1"); @@ -687,7 +687,7 @@ TEST (rpc, wallet_representative_set_force) { nano::system system; auto node = add_ipc_enabled_node (system); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; std::string wallet; @@ -707,7 +707,7 @@ TEST (rpc, wallet_representative_set_force) { auto transaction (node->store.tx_begin_read ()); nano::account_info info; - if (!node->store.account.get (transaction, nano::dev_genesis_key.pub, info)) + if (!node->store.account.get (transaction, nano::dev::genesis_key.pub, info)) { representative = info.representative; } @@ -720,7 +720,7 @@ TEST (rpc, account_list) nano::system system; auto node = add_ipc_enabled_node (system); nano::keypair key2; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); system.wallet (0)->insert_adhoc (key2.prv); auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; @@ -749,7 +749,7 @@ TEST (rpc, wallet_key_valid) { nano::system system; auto node = add_ipc_enabled_node (system); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; std::string wallet; @@ -811,7 +811,7 @@ TEST (rpc, wallet_export) { nano::system system; auto node = add_ipc_enabled_node (system); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "wallet_export"); @@ -824,14 +824,14 @@ TEST (rpc, wallet_export) nano::kdf kdf; nano::wallet_store store (error, kdf, transaction, nano::dev::genesis->account (), 1, "0", wallet_json); ASSERT_FALSE (error); - ASSERT_TRUE (store.exists (transaction, nano::dev_genesis_key.pub)); + ASSERT_TRUE (store.exists (transaction, nano::dev::genesis_key.pub)); } TEST (rpc, wallet_destroy) { nano::system system; auto node = add_ipc_enabled_node (system); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto [rpc, rpc_ctx] = add_rpc (system, node); auto wallet_id (node->wallets.items.begin ()->first); boost::property_tree::ptree request; @@ -847,7 +847,7 @@ TEST (rpc, account_move) auto node = add_ipc_enabled_node (system); auto wallet_id (node->wallets.items.begin ()->first); auto destination (system.wallet (0)); - destination->insert_adhoc (nano::dev_genesis_key.prv); + destination->insert_adhoc (nano::dev::genesis_key.prv); nano::keypair key; auto source_id = nano::random_wallet_id (); auto source (node->wallets.create (source_id)); @@ -865,7 +865,7 @@ TEST (rpc, account_move) auto response (wait_response (system, rpc, request)); ASSERT_EQ ("1", response.get ("moved")); ASSERT_TRUE (destination->exists (key.pub)); - ASSERT_TRUE (destination->exists (nano::dev_genesis_key.pub)); + ASSERT_TRUE (destination->exists (nano::dev::genesis_key.pub)); auto transaction (node->wallets.tx_begin_read ()); ASSERT_EQ (source->store.end (), source->store.begin (transaction)); } @@ -903,11 +903,11 @@ TEST (rpc, chain) { nano::system system; auto node = add_ipc_enabled_node (system); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::keypair key; - auto genesis (node->latest (nano::dev_genesis_key.pub)); + auto genesis (node->latest (nano::dev::genesis_key.pub)); ASSERT_FALSE (genesis.is_zero ()); - auto block (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, 1)); + auto block (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key.pub, 1)); ASSERT_NE (nullptr, block); auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; @@ -930,11 +930,11 @@ TEST (rpc, chain_limit) { nano::system system; auto node = add_ipc_enabled_node (system); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::keypair key; - auto genesis (node->latest (nano::dev_genesis_key.pub)); + auto genesis (node->latest (nano::dev::genesis_key.pub)); ASSERT_FALSE (genesis.is_zero ()); - auto block (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, 1)); + auto block (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key.pub, 1)); ASSERT_NE (nullptr, block); auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; @@ -956,11 +956,11 @@ TEST (rpc, chain_offset) { nano::system system; auto node = add_ipc_enabled_node (system); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::keypair key; - auto genesis (node->latest (nano::dev_genesis_key.pub)); + auto genesis (node->latest (nano::dev::genesis_key.pub)); ASSERT_FALSE (genesis.is_zero ()); - auto block (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, 1)); + auto block (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key.pub, 1)); ASSERT_NE (nullptr, block); auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; @@ -1013,7 +1013,7 @@ TEST (rpc, frontier) frontier.decode_hex (i->second.get ("")); frontiers[account] = frontier; } - ASSERT_EQ (1, frontiers.erase (nano::dev_genesis_key.pub)); + ASSERT_EQ (1, frontiers.erase (nano::dev::genesis_key.pub)); ASSERT_EQ (source, frontiers); } @@ -1078,17 +1078,17 @@ TEST (rpc, history) { nano::system system; auto node0 = add_ipc_enabled_node (system); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - auto change (system.wallet (0)->change_action (nano::dev_genesis_key.pub, nano::dev_genesis_key.pub)); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); + auto change (system.wallet (0)->change_action (nano::dev::genesis_key.pub, nano::dev::genesis_key.pub)); ASSERT_NE (nullptr, change); - auto send (system.wallet (0)->send_action (nano::dev_genesis_key.pub, nano::dev_genesis_key.pub, node0->config.receive_minimum.number ())); + auto send (system.wallet (0)->send_action (nano::dev::genesis_key.pub, nano::dev::genesis_key.pub, node0->config.receive_minimum.number ())); ASSERT_NE (nullptr, send); - auto receive (system.wallet (0)->receive_action (send->hash (), nano::dev_genesis_key.pub, node0->config.receive_minimum.number (), send->link ().as_account ())); + auto receive (system.wallet (0)->receive_action (send->hash (), nano::dev::genesis_key.pub, node0->config.receive_minimum.number (), send->link ().as_account ())); ASSERT_NE (nullptr, receive); nano::genesis genesis; - nano::state_block usend (nano::dev::genesis->account (), node0->latest (nano::dev::genesis->account ()), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node0->work_generate_blocking (node0->latest (nano::dev::genesis->account ()))); - nano::state_block ureceive (nano::dev::genesis->account (), usend.hash (), nano::dev::genesis->account (), nano::genesis_amount, usend.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node0->work_generate_blocking (usend.hash ())); - nano::state_block uchange (nano::dev::genesis->account (), ureceive.hash (), nano::keypair ().pub, nano::genesis_amount, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node0->work_generate_blocking (ureceive.hash ())); + nano::state_block usend (nano::dev::genesis->account (), node0->latest (nano::dev::genesis->account ()), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (node0->latest (nano::dev::genesis->account ()))); + nano::state_block ureceive (nano::dev::genesis->account (), usend.hash (), nano::dev::genesis->account (), nano::genesis_amount, usend.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (usend.hash ())); + nano::state_block uchange (nano::dev::genesis->account (), ureceive.hash (), nano::keypair ().pub, nano::genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (ureceive.hash ())); { auto transaction (node0->store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, node0->ledger.process (transaction, usend).code); @@ -1110,23 +1110,23 @@ TEST (rpc, history) ASSERT_EQ (5, history_l.size ()); ASSERT_EQ ("receive", std::get<0> (history_l[0])); ASSERT_EQ (ureceive.hash ().to_string (), std::get<3> (history_l[0])); - ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), std::get<1> (history_l[0])); + ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), std::get<1> (history_l[0])); ASSERT_EQ (nano::Gxrb_ratio.convert_to (), std::get<2> (history_l[0])); ASSERT_EQ (5, history_l.size ()); ASSERT_EQ ("send", std::get<0> (history_l[1])); ASSERT_EQ (usend.hash ().to_string (), std::get<3> (history_l[1])); - ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), std::get<1> (history_l[1])); + ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), std::get<1> (history_l[1])); ASSERT_EQ (nano::Gxrb_ratio.convert_to (), std::get<2> (history_l[1])); ASSERT_EQ ("receive", std::get<0> (history_l[2])); - ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), std::get<1> (history_l[2])); + ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), std::get<1> (history_l[2])); ASSERT_EQ (node0->config.receive_minimum.to_string_dec (), std::get<2> (history_l[2])); ASSERT_EQ (receive->hash ().to_string (), std::get<3> (history_l[2])); ASSERT_EQ ("send", std::get<0> (history_l[3])); - ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), std::get<1> (history_l[3])); + ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), std::get<1> (history_l[3])); ASSERT_EQ (node0->config.receive_minimum.to_string_dec (), std::get<2> (history_l[3])); ASSERT_EQ (send->hash ().to_string (), std::get<3> (history_l[3])); ASSERT_EQ ("receive", std::get<0> (history_l[4])); - ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), std::get<1> (history_l[4])); + ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), std::get<1> (history_l[4])); ASSERT_EQ (nano::genesis_amount.convert_to (), std::get<2> (history_l[4])); ASSERT_EQ (genesis.hash ().to_string (), std::get<3> (history_l[4])); } @@ -1135,17 +1135,17 @@ TEST (rpc, account_history) { nano::system system; auto node0 = add_ipc_enabled_node (system); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - auto change (system.wallet (0)->change_action (nano::dev_genesis_key.pub, nano::dev_genesis_key.pub)); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); + auto change (system.wallet (0)->change_action (nano::dev::genesis_key.pub, nano::dev::genesis_key.pub)); ASSERT_NE (nullptr, change); - auto send (system.wallet (0)->send_action (nano::dev_genesis_key.pub, nano::dev_genesis_key.pub, node0->config.receive_minimum.number ())); + auto send (system.wallet (0)->send_action (nano::dev::genesis_key.pub, nano::dev::genesis_key.pub, node0->config.receive_minimum.number ())); ASSERT_NE (nullptr, send); - auto receive (system.wallet (0)->receive_action (send->hash (), nano::dev_genesis_key.pub, node0->config.receive_minimum.number (), send->link ().as_account ())); + auto receive (system.wallet (0)->receive_action (send->hash (), nano::dev::genesis_key.pub, node0->config.receive_minimum.number (), send->link ().as_account ())); ASSERT_NE (nullptr, receive); nano::genesis genesis; - nano::state_block usend (nano::dev::genesis->account (), node0->latest (nano::dev::genesis->account ()), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node0->work_generate_blocking (node0->latest (nano::dev::genesis->account ()))); - nano::state_block ureceive (nano::dev::genesis->account (), usend.hash (), nano::dev::genesis->account (), nano::genesis_amount, usend.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node0->work_generate_blocking (usend.hash ())); - nano::state_block uchange (nano::dev::genesis->account (), ureceive.hash (), nano::keypair ().pub, nano::genesis_amount, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node0->work_generate_blocking (ureceive.hash ())); + nano::state_block usend (nano::dev::genesis->account (), node0->latest (nano::dev::genesis->account ()), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (node0->latest (nano::dev::genesis->account ()))); + nano::state_block ureceive (nano::dev::genesis->account (), usend.hash (), nano::dev::genesis->account (), nano::genesis_amount, usend.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (usend.hash ())); + nano::state_block uchange (nano::dev::genesis->account (), ureceive.hash (), nano::keypair ().pub, nano::genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (ureceive.hash ())); { auto transaction (node0->store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, node0->ledger.process (transaction, usend).code); @@ -1169,26 +1169,26 @@ TEST (rpc, account_history) ASSERT_EQ (5, history_l.size ()); ASSERT_EQ ("receive", std::get<0> (history_l[0])); ASSERT_EQ (ureceive.hash ().to_string (), std::get<3> (history_l[0])); - ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), std::get<1> (history_l[0])); + ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), std::get<1> (history_l[0])); ASSERT_EQ (nano::Gxrb_ratio.convert_to (), std::get<2> (history_l[0])); ASSERT_EQ ("6", std::get<4> (history_l[0])); // change block (height 7) is skipped by account_history since "raw" is not set ASSERT_EQ ("send", std::get<0> (history_l[1])); ASSERT_EQ (usend.hash ().to_string (), std::get<3> (history_l[1])); - ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), std::get<1> (history_l[1])); + ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), std::get<1> (history_l[1])); ASSERT_EQ (nano::Gxrb_ratio.convert_to (), std::get<2> (history_l[1])); ASSERT_EQ ("5", std::get<4> (history_l[1])); ASSERT_EQ ("receive", std::get<0> (history_l[2])); - ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), std::get<1> (history_l[2])); + ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), std::get<1> (history_l[2])); ASSERT_EQ (node0->config.receive_minimum.to_string_dec (), std::get<2> (history_l[2])); ASSERT_EQ (receive->hash ().to_string (), std::get<3> (history_l[2])); ASSERT_EQ ("4", std::get<4> (history_l[2])); ASSERT_EQ ("send", std::get<0> (history_l[3])); - ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), std::get<1> (history_l[3])); + ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), std::get<1> (history_l[3])); ASSERT_EQ (node0->config.receive_minimum.to_string_dec (), std::get<2> (history_l[3])); ASSERT_EQ (send->hash ().to_string (), std::get<3> (history_l[3])); ASSERT_EQ ("3", std::get<4> (history_l[3])); ASSERT_EQ ("receive", std::get<0> (history_l[4])); - ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), std::get<1> (history_l[4])); + ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), std::get<1> (history_l[4])); ASSERT_EQ (nano::genesis_amount.convert_to (), std::get<2> (history_l[4])); ASSERT_EQ (genesis.hash ().to_string (), std::get<3> (history_l[4])); ASSERT_EQ ("1", std::get<4> (history_l[4])); // change block (height 2) is skipped @@ -1210,7 +1210,7 @@ TEST (rpc, account_history) // Test filtering rpc_ctx->io_scope->reset (); auto account2 (system.wallet (0)->deterministic_insert ()); - auto send2 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, account2, node0->config.receive_minimum.number ())); + auto send2 (system.wallet (0)->send_action (nano::dev::genesis_key.pub, account2, node0->config.receive_minimum.number ())); ASSERT_NE (nullptr, send2); auto receive2 (system.wallet (0)->receive_action (send2->hash (), account2, node0->config.receive_minimum.number (), send2->link ().as_account ())); rpc_ctx->io_scope->renew (); @@ -1219,7 +1219,7 @@ TEST (rpc, account_history) { boost::property_tree::ptree request; request.put ("action", "account_history"); - request.put ("account", nano::dev_genesis_key.pub.to_account ()); + request.put ("account", nano::dev::genesis_key.pub.to_account ()); boost::property_tree::ptree other_account; other_account.put ("", account2.to_account ()); boost::property_tree::ptree filtered_accounts; @@ -1236,7 +1236,7 @@ TEST (rpc, account_history) request.put ("action", "account_history"); request.put ("account", account2.to_account ()); boost::property_tree::ptree other_account; - other_account.put ("", nano::dev_genesis_key.pub.to_account ()); + other_account.put ("", nano::dev::genesis_key.pub.to_account ()); boost::property_tree::ptree filtered_accounts; filtered_accounts.push_back (std::make_pair ("", other_account)); request.add_child ("account_filter", filtered_accounts); @@ -1251,12 +1251,12 @@ TEST (rpc, history_count) { nano::system system; auto node = add_ipc_enabled_node (system); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - auto change (system.wallet (0)->change_action (nano::dev_genesis_key.pub, nano::dev_genesis_key.pub)); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); + auto change (system.wallet (0)->change_action (nano::dev::genesis_key.pub, nano::dev::genesis_key.pub)); ASSERT_NE (nullptr, change); - auto send (system.wallet (0)->send_action (nano::dev_genesis_key.pub, nano::dev_genesis_key.pub, node->config.receive_minimum.number ())); + auto send (system.wallet (0)->send_action (nano::dev::genesis_key.pub, nano::dev::genesis_key.pub, node->config.receive_minimum.number ())); ASSERT_NE (nullptr, send); - auto receive (system.wallet (0)->receive_action (send->hash (), nano::dev_genesis_key.pub, node->config.receive_minimum.number (), send->link ().as_account ())); + auto receive (system.wallet (0)->receive_action (send->hash (), nano::dev::genesis_key.pub, node->config.receive_minimum.number (), send->link ().as_account ())); ASSERT_NE (nullptr, receive); auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; @@ -1277,20 +1277,20 @@ TEST (rpc, history_pruning) node_flags.enable_pruning = true; auto node0 = add_ipc_enabled_node (system, node_config, node_flags); nano::genesis genesis; - auto change (std::make_shared (genesis.hash (), nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node0->work.generate (genesis.hash ()))); + auto change (std::make_shared (genesis.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work.generate (genesis.hash ()))); node0->process_active (change); - auto send (std::make_shared (change->hash (), nano::dev_genesis_key.pub, nano::genesis_amount - node0->config.receive_minimum.number (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node0->work.generate (change->hash ()))); + auto send (std::make_shared (change->hash (), nano::dev::genesis_key.pub, nano::genesis_amount - node0->config.receive_minimum.number (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work.generate (change->hash ()))); node0->process_active (send); - auto receive (std::make_shared (send->hash (), send->hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node0->work.generate (send->hash ()))); + auto receive (std::make_shared (send->hash (), send->hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work.generate (send->hash ()))); node0->process_active (receive); - auto usend (std::make_shared (nano::dev::genesis->account (), receive->hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node0->work_generate_blocking (receive->hash ()))); - auto ureceive (std::make_shared (nano::dev::genesis->account (), usend->hash (), nano::dev::genesis->account (), nano::genesis_amount, usend->hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node0->work_generate_blocking (usend->hash ()))); - auto uchange (std::make_shared (nano::dev::genesis->account (), ureceive->hash (), nano::keypair ().pub, nano::genesis_amount, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node0->work_generate_blocking (ureceive->hash ()))); + auto usend (std::make_shared (nano::dev::genesis->account (), receive->hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (receive->hash ()))); + auto ureceive (std::make_shared (nano::dev::genesis->account (), usend->hash (), nano::dev::genesis->account (), nano::genesis_amount, usend->hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (usend->hash ()))); + auto uchange (std::make_shared (nano::dev::genesis->account (), ureceive->hash (), nano::keypair ().pub, nano::genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (ureceive->hash ()))); node0->process_active (usend); node0->process_active (ureceive); node0->process_active (uchange); node0->block_processor.flush (); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); // Confirm last block to prune previous { auto election = node0->active.election (change->qualified_root ()); @@ -1350,7 +1350,7 @@ TEST (rpc, history_pruning) } ASSERT_EQ (1, history_l.size ()); ASSERT_EQ ("send", std::get<0> (history_l[0])); - ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), std::get<1> (history_l[0])); + ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), std::get<1> (history_l[0])); ASSERT_EQ ("-1", std::get<2> (history_l[0])); ASSERT_EQ (send->hash ().to_string (), std::get<3> (history_l[0])); // Pruning action @@ -1401,7 +1401,7 @@ TEST (rpc, history_pruning) ASSERT_EQ (2, history_l.size ()); ASSERT_EQ ("receive", std::get<0> (history_l[0])); ASSERT_EQ (ureceive->hash ().to_string (), std::get<3> (history_l[0])); - ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), std::get<1> (history_l[0])); + ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), std::get<1> (history_l[0])); ASSERT_EQ (nano::Gxrb_ratio.convert_to (), std::get<2> (history_l[0])); ASSERT_EQ ("unknown", std::get<0> (history_l[1])); ASSERT_EQ ("-1", std::get<1> (history_l[1])); @@ -1415,8 +1415,8 @@ TEST (rpc, process_block) auto node1 = add_ipc_enabled_node (system); auto [rpc, rpc_ctx] = add_rpc (system, node1); nano::keypair key; - auto latest (node1->latest (nano::dev_genesis_key.pub)); - nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); + auto latest (node1->latest (nano::dev::genesis_key.pub)); + nano::send_block send (latest, key.pub, 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest)); boost::property_tree::ptree request; request.put ("action", "process"); std::string json; @@ -1424,7 +1424,7 @@ TEST (rpc, process_block) request.put ("block", json); { auto response (wait_response (system, rpc, request)); - ASSERT_TIMELY (10s, node1->latest (nano::dev_genesis_key.pub) == send.hash ()); + ASSERT_TIMELY (10s, node1->latest (nano::dev::genesis_key.pub) == send.hash ()); std::string send_hash (response.get ("hash")); ASSERT_EQ (send.hash ().to_string (), send_hash); } @@ -1442,8 +1442,8 @@ TEST (rpc, process_json_block) auto node1 = add_ipc_enabled_node (system); auto [rpc, rpc_ctx] = add_rpc (system, node1); nano::keypair key; - auto latest (node1->latest (nano::dev_genesis_key.pub)); - nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); + auto latest (node1->latest (nano::dev::genesis_key.pub)); + nano::send_block send (latest, key.pub, 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest)); boost::property_tree::ptree request; request.put ("action", "process"); boost::property_tree::ptree block_node; @@ -1457,7 +1457,7 @@ TEST (rpc, process_json_block) request.put ("json_block", true); { auto response (wait_response (system, rpc, request)); - ASSERT_TIMELY (10s, node1->latest (nano::dev_genesis_key.pub) == send.hash ()); + ASSERT_TIMELY (10s, node1->latest (nano::dev::genesis_key.pub) == send.hash ()); std::string send_hash (response.get ("hash")); ASSERT_EQ (send.hash ().to_string (), send_hash); } @@ -1469,8 +1469,8 @@ TEST (rpc, process_block_async) auto node1 = add_ipc_enabled_node (system); auto [rpc, rpc_ctx] = add_rpc (system, node1); nano::keypair key; - auto latest (node1->latest (nano::dev_genesis_key.pub)); - nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); + auto latest (node1->latest (nano::dev::genesis_key.pub)); + nano::send_block send (latest, key.pub, 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest)); boost::property_tree::ptree request; request.put ("action", "process"); request.put ("async", "true"); @@ -1490,14 +1490,14 @@ TEST (rpc, process_block_async) ASSERT_EQ (ec.message (), response.get ("error")); } - auto state_send (std::make_shared (nano::dev_genesis_key.pub, latest, nano::dev_genesis_key.pub, nano::genesis_amount - 100, nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (latest))); + auto state_send (std::make_shared (nano::dev::genesis_key.pub, latest, nano::dev::genesis_key.pub, nano::genesis_amount - 100, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest))); std::string json1; state_send->serialize_json (json1); request.put ("block", json1); { auto response (wait_response (system, rpc, request)); ASSERT_EQ ("1", response.get ("started")); - ASSERT_TIMELY (10s, node1->latest (nano::dev_genesis_key.pub) == state_send->hash ()); + ASSERT_TIMELY (10s, node1->latest (nano::dev::genesis_key.pub) == state_send->hash ()); } } @@ -1507,8 +1507,8 @@ TEST (rpc, process_block_no_work) auto node1 = add_ipc_enabled_node (system); auto [rpc, rpc_ctx] = add_rpc (system, node1); nano::keypair key; - auto latest (node1->latest (nano::dev_genesis_key.pub)); - nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); + auto latest (node1->latest (nano::dev::genesis_key.pub)); + nano::send_block send (latest, key.pub, 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest)); send.block_work_set (0); boost::property_tree::ptree request; request.put ("action", "process"); @@ -1527,15 +1527,15 @@ TEST (rpc, process_republish) auto node3 = add_ipc_enabled_node (system); auto [rpc, rpc_ctx] = add_rpc (system, node3); nano::keypair key; - auto latest (node1.latest (nano::dev_genesis_key.pub)); - nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node3->work_generate_blocking (latest)); + auto latest (node1.latest (nano::dev::genesis_key.pub)); + nano::send_block send (latest, key.pub, 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node3->work_generate_blocking (latest)); boost::property_tree::ptree request; request.put ("action", "process"); std::string json; send.serialize_json (json); request.put ("block", json); auto response (wait_response (system, rpc, request)); - ASSERT_TIMELY (10s, node2.latest (nano::dev_genesis_key.pub) == send.hash ()); + ASSERT_TIMELY (10s, node2.latest (nano::dev::genesis_key.pub) == send.hash ()); } TEST (rpc, process_subtype_send) @@ -1545,8 +1545,8 @@ TEST (rpc, process_subtype_send) system.add_node (); auto [rpc, rpc_ctx] = add_rpc (system, node1); nano::keypair key; - auto latest (node1->latest (nano::dev_genesis_key.pub)); - nano::state_block send (nano::dev::genesis->account (), latest, nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); + auto latest (node1->latest (nano::dev::genesis_key.pub)); + nano::state_block send (nano::dev::genesis->account (), latest, nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest)); boost::property_tree::ptree request; request.put ("action", "process"); std::string json; @@ -1562,7 +1562,7 @@ TEST (rpc, process_subtype_send) request.put ("subtype", "send"); auto response3 (wait_response (system, rpc, request)); ASSERT_EQ (send.hash ().to_string (), response3.get ("hash")); - ASSERT_TIMELY (10s, system.nodes[1]->latest (nano::dev_genesis_key.pub) == send.hash ()); + ASSERT_TIMELY (10s, system.nodes[1]->latest (nano::dev::genesis_key.pub) == send.hash ()); } TEST (rpc, process_subtype_open) @@ -1571,8 +1571,8 @@ TEST (rpc, process_subtype_open) auto node1 = add_ipc_enabled_node (system); auto & node2 = *system.add_node (); nano::keypair key; - auto latest (node1->latest (nano::dev_genesis_key.pub)); - auto send = std::make_shared (nano::dev::genesis->account (), latest, nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); + auto latest (node1->latest (nano::dev::genesis_key.pub)); + auto send = std::make_shared (nano::dev::genesis->account (), latest, nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest)); ASSERT_EQ (nano::process_result::progress, node1->process (*send).code); ASSERT_EQ (nano::process_result::progress, node2.process (*send).code); auto [rpc, rpc_ctx] = add_rpc (system, node1); @@ -1601,13 +1601,13 @@ TEST (rpc, process_subtype_receive) nano::system system; auto node1 = add_ipc_enabled_node (system); auto & node2 = *system.add_node (); - auto latest (node1->latest (nano::dev_genesis_key.pub)); - auto send = std::make_shared (nano::dev::genesis->account (), latest, nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); + auto latest (node1->latest (nano::dev::genesis_key.pub)); + auto send = std::make_shared (nano::dev::genesis->account (), latest, nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest)); ASSERT_EQ (nano::process_result::progress, node1->process (*send).code); ASSERT_EQ (nano::process_result::progress, node2.process (*send).code); auto [rpc, rpc_ctx] = add_rpc (system, node1); node1->scheduler.manual (send); - nano::state_block receive (nano::dev_genesis_key.pub, send->hash (), nano::dev_genesis_key.pub, nano::genesis_amount, send->hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (send->hash ())); + nano::state_block receive (nano::dev::genesis_key.pub, send->hash (), nano::dev::genesis_key.pub, nano::genesis_amount, send->hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (send->hash ())); boost::property_tree::ptree request; request.put ("action", "process"); std::string json; @@ -1624,7 +1624,7 @@ TEST (rpc, process_subtype_receive) request.put ("subtype", "receive"); auto response3 (wait_response (system, rpc, request)); ASSERT_EQ (receive.hash ().to_string (), response3.get ("hash")); - ASSERT_TIMELY (10s, node2.latest (nano::dev_genesis_key.pub) == receive.hash ()); + ASSERT_TIMELY (10s, node2.latest (nano::dev::genesis_key.pub) == receive.hash ()); } TEST (rpc, process_ledger_insufficient_work) @@ -1633,10 +1633,10 @@ TEST (rpc, process_ledger_insufficient_work) auto node = add_ipc_enabled_node (system); auto [rpc, rpc_ctx] = add_rpc (system, node); ASSERT_LT (node->network_params.network.publish_thresholds.entry, node->network_params.network.publish_thresholds.epoch_1); - auto latest (node->latest (nano::dev_genesis_key.pub)); + auto latest (node->latest (nano::dev::genesis_key.pub)); auto min_difficulty = node->network_params.network.publish_thresholds.entry; auto max_difficulty = node->network_params.network.publish_thresholds.epoch_1; - nano::state_block send (nano::dev::genesis->account (), latest, nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, system.work_generate_limited (latest, min_difficulty, max_difficulty)); + nano::state_block send (nano::dev::genesis->account (), latest, nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, system.work_generate_limited (latest, min_difficulty, max_difficulty)); ASSERT_LT (send.difficulty (), max_difficulty); ASSERT_GE (send.difficulty (), min_difficulty); boost::property_tree::ptree request; @@ -1728,8 +1728,8 @@ TEST (rpc, pending) nano::system system; auto node = add_ipc_enabled_node (system); nano::keypair key1; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - auto block1 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key1.pub, 100)); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); + auto block1 (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key1.pub, 100)); node->scheduler.flush (); ASSERT_TIMELY (5s, !node->active.active (*block1)); ASSERT_TIMELY (5s, node->ledger.cache.cemented_count == 2 && node->confirmation_height_processor.current ().is_zero () && node->confirmation_height_processor.awaiting_processing_size () == 0); @@ -1799,7 +1799,7 @@ TEST (rpc, pending) ASSERT_EQ (i->second.get ("min_version"), 0); } ASSERT_EQ (amounts[block1->hash ()], 100); - ASSERT_EQ (sources[block1->hash ()], nano::dev_genesis_key.pub); + ASSERT_EQ (sources[block1->hash ()], nano::dev::genesis_key.pub); } request.put ("account", key1.pub.to_account ()); @@ -1823,10 +1823,10 @@ TEST (rpc, pending) // Sorting with a smaller count than total should give absolute sorted amounts rpc_ctx->io_scope->reset (); - node->store.confirmation_height.put (node->store.tx_begin_write (), nano::dev_genesis_key.pub, { 2, block1->hash () }); - auto block2 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key1.pub, 200)); - auto block3 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key1.pub, 300)); - auto block4 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key1.pub, 400)); + node->store.confirmation_height.put (node->store.tx_begin_write (), nano::dev::genesis_key.pub, { 2, block1->hash () }); + auto block2 (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key1.pub, 200)); + auto block3 (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key1.pub, 300)); + auto block4 (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key1.pub, 400)); rpc_ctx->io_scope->renew (); ASSERT_TIMELY (10s, node->ledger.account_pending (node->store.tx_begin_read (), key1.pub) == 1000); @@ -1851,8 +1851,8 @@ TEST (rpc, pending_burn) nano::system system; auto node = add_ipc_enabled_node (system); nano::account burn (0); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - auto block1 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, burn, 100)); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); + auto block1 (system.wallet (0)->send_action (nano::dev::genesis_key.pub, burn, 100)); auto [rpc, rpc_ctx] = add_rpc (system, node); node->scheduler.flush (); ASSERT_TIMELY (5s, !node->active.active (*block1)); @@ -1874,10 +1874,10 @@ TEST (rpc, search_pending) { nano::system system; auto node = add_ipc_enabled_node (system); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto wallet (node->wallets.items.begin ()->first.to_string ()); - auto latest (node->latest (nano::dev_genesis_key.pub)); - nano::send_block block (latest, nano::dev_genesis_key.pub, nano::genesis_amount - node->config.receive_minimum.number (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node->work_generate_blocking (latest)); + auto latest (node->latest (nano::dev::genesis_key.pub)); + nano::send_block block (latest, nano::dev::genesis_key.pub, nano::genesis_amount - node->config.receive_minimum.number (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node->work_generate_blocking (latest)); { auto transaction (node->store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, block).code); @@ -1887,7 +1887,7 @@ TEST (rpc, search_pending) request.put ("action", "search_pending"); request.put ("wallet", wallet); auto response (wait_response (system, rpc, request)); - ASSERT_TIMELY (10s, node->balance (nano::dev_genesis_key.pub) == nano::genesis_amount); + ASSERT_TIMELY (10s, node->balance (nano::dev::genesis_key.pub) == nano::genesis_amount); } TEST (rpc, version) @@ -1910,7 +1910,7 @@ TEST (rpc, version) ASSERT_EQ (node1->store.vendor_get (), response1.json.get ("store_vendor")); auto network_label (node1->network_params.network.get_current_network_as_string ()); ASSERT_EQ (network_label, response1.json.get ("network")); - auto genesis_open (node1->latest (nano::dev_genesis_key.pub)); + auto genesis_open (node1->latest (nano::dev::genesis_key.pub)); ASSERT_EQ (genesis_open.to_string (), response1.json.get ("network_identifier")); ASSERT_EQ (BUILD_INFO, response1.json.get ("build_info")); auto headers (response1.resp.base ()); @@ -2056,7 +2056,7 @@ TEST (rpc, work_generate_block_high) auto node = add_ipc_enabled_node (system); auto [rpc, rpc_ctx] = add_rpc (system, node); nano::keypair key; - nano::state_block block (key.pub, 0, nano::dev_genesis_key.pub, nano::Gxrb_ratio, 123, key.prv, key.pub, *node->work_generate_blocking (key.pub)); + nano::state_block block (key.pub, 0, nano::dev::genesis_key.pub, nano::Gxrb_ratio, 123, key.prv, key.pub, *node->work_generate_blocking (key.pub)); nano::block_hash hash (block.root ().as_block_hash ()); auto block_difficulty (nano::work_difficulty (nano::work_version::work_1, hash, block.block_work ())); boost::property_tree::ptree request; @@ -2079,7 +2079,7 @@ TEST (rpc, work_generate_block_low) auto node = add_ipc_enabled_node (system); auto [rpc, rpc_ctx] = add_rpc (system, node); nano::keypair key; - nano::state_block block (key.pub, 0, nano::dev_genesis_key.pub, nano::Gxrb_ratio, 123, key.prv, key.pub, 0); + nano::state_block block (key.pub, 0, nano::dev::genesis_key.pub, nano::Gxrb_ratio, 123, key.prv, key.pub, 0); auto threshold (node->default_difficulty (block.work_version ())); block.block_work_set (system.work_generate_limited (block.root ().as_block_hash (), threshold, nano::difficulty::from_multiplier (node->config.max_work_generate_multiplier / 10, threshold))); nano::block_hash hash (block.root ().as_block_hash ()); @@ -2114,7 +2114,7 @@ TEST (rpc, work_generate_block_root_mismatch) auto node = add_ipc_enabled_node (system); auto [rpc, rpc_ctx] = add_rpc (system, node); nano::keypair key; - nano::state_block block (key.pub, 0, nano::dev_genesis_key.pub, nano::Gxrb_ratio, 123, key.prv, key.pub, *node->work_generate_blocking (key.pub)); + nano::state_block block (key.pub, 0, nano::dev::genesis_key.pub, nano::Gxrb_ratio, 123, key.prv, key.pub, *node->work_generate_blocking (key.pub)); nano::block_hash hash (1); boost::property_tree::ptree request; request.put ("action", "work_generate"); @@ -2139,10 +2139,10 @@ TEST (rpc, work_generate_block_ledger_epoch_2) auto epoch2 = system.upgrade_genesis_epoch (*node, nano::epoch::epoch_2); ASSERT_NE (nullptr, epoch2); nano::keypair key; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - auto send_block (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, nano::Gxrb_ratio)); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); + auto send_block (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key.pub, nano::Gxrb_ratio)); ASSERT_NE (nullptr, send_block); - nano::state_block block (key.pub, 0, nano::dev_genesis_key.pub, nano::Gxrb_ratio, send_block->hash (), key.prv, key.pub, 0); + nano::state_block block (key.pub, 0, nano::dev::genesis_key.pub, nano::Gxrb_ratio, send_block->hash (), key.prv, key.pub, 0); auto threshold (nano::work_threshold (block.work_version (), nano::block_details (nano::epoch::epoch_2, false, true, false))); block.block_work_set (system.work_generate_limited (block.root ().as_block_hash (), 1, threshold - 1)); nano::block_hash hash (block.root ().as_block_hash ()); @@ -2329,13 +2329,13 @@ TEST (rpc, block_count_pruning) nano::node_flags node_flags; node_flags.enable_pruning = true; auto node1 = add_ipc_enabled_node (system, node_config, node_flags); - auto latest (node1->latest (nano::dev_genesis_key.pub)); - auto send1 (std::make_shared (latest, nano::dev_genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest))); + auto latest (node1->latest (nano::dev::genesis_key.pub)); + auto send1 (std::make_shared (latest, nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest))); node1->process_active (send1); - auto receive1 (std::make_shared (send1->hash (), send1->hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (send1->hash ()))); + auto receive1 (std::make_shared (send1->hash (), send1->hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (send1->hash ()))); node1->process_active (receive1); node1->block_processor.flush (); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); ASSERT_TIMELY (5s, node1->ledger.cache.cemented_count == 3 && node1->confirmation_height_processor.current ().is_zero () && node1->confirmation_height_processor.awaiting_processing_size () == 0); // Pruning action { @@ -2387,14 +2387,14 @@ TEST (rpc, available_supply) auto response1 (wait_response (system, rpc, request1)); ASSERT_EQ ("0", response1.get ("available")); rpc_ctx->io_scope->reset (); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::keypair key; - auto block (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, 1)); + auto block (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key.pub, 1)); rpc_ctx->io_scope->renew (); auto response2 (wait_response (system, rpc, request1)); ASSERT_EQ ("1", response2.get ("available")); rpc_ctx->io_scope->reset (); - auto block2 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, 0, 100)); // Sending to burning 0 account + auto block2 (system.wallet (0)->send_action (nano::dev::genesis_key.pub, 0, 100)); // Sending to burning 0 account rpc_ctx->io_scope->renew (); auto response3 (wait_response (system, rpc, request1, 10s)); ASSERT_EQ ("1", response3.get ("available")); @@ -2489,7 +2489,7 @@ TEST (rpc, account_representative_set) { nano::system system; auto node = add_ipc_enabled_node (system); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; nano::keypair rep; @@ -2513,7 +2513,7 @@ TEST (rpc, account_representative_set_work_disabled) nano::node_config node_config (nano::get_available_port (), system.logging); node_config.work_threads = 0; auto node = add_ipc_enabled_node (system, node_config); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; nano::keypair rep; @@ -2536,7 +2536,7 @@ TEST (rpc, account_representative_set_epoch_2) ASSERT_NE (nullptr, system.upgrade_genesis_epoch (*node, nano::epoch::epoch_1)); ASSERT_NE (nullptr, system.upgrade_genesis_epoch (*node, nano::epoch::epoch_2)); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv, false); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv, false); auto target_difficulty = nano::work_threshold (nano::work_version::work_1, nano::block_details (nano::epoch::epoch_2, false, false, false)); ASSERT_LT (node->network_params.network.publish_thresholds.entry, target_difficulty); @@ -2548,7 +2548,7 @@ TEST (rpc, account_representative_set_epoch_2) node->wallets.items.begin ()->first.encode_hex (wallet); request.put ("wallet", wallet); request.put ("action", "account_representative_set"); - request.put ("account", nano::dev_genesis_key.pub.to_account ()); + request.put ("account", nano::dev::genesis_key.pub.to_account ()); request.put ("representative", nano::keypair ().pub.to_account ()); // Test that the correct error is given if there is insufficient work @@ -2568,8 +2568,8 @@ TEST (rpc, bootstrap) auto node = add_ipc_enabled_node (system0); nano::system system1 (1); auto node1 = system1.nodes[0]; - auto latest (node1->latest (nano::dev_genesis_key.pub)); - nano::send_block send (latest, nano::dev::genesis->account (), 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); + auto latest (node1->latest (nano::dev::genesis_key.pub)); + nano::send_block send (latest, nano::dev::genesis->account (), 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest)); { auto transaction (node1->store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, node1->ledger.process (transaction, send).code); @@ -2687,7 +2687,7 @@ TEST (rpc, wallet_frontiers) { nano::system system0; auto node = add_ipc_enabled_node (system0); - system0.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system0.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto [rpc, rpc_ctx] = add_rpc (system0, node); boost::property_tree::ptree request; request.put ("action", "wallet_frontiers"); @@ -2814,11 +2814,11 @@ TEST (rpc, successors) { nano::system system; auto node = add_ipc_enabled_node (system); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::keypair key; - auto genesis (node->latest (nano::dev_genesis_key.pub)); + auto genesis (node->latest (nano::dev::genesis_key.pub)); ASSERT_FALSE (genesis.is_zero ()); - auto block (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, 1)); + auto block (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key.pub, 1)); ASSERT_NE (nullptr, block); auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; @@ -2847,8 +2847,8 @@ TEST (rpc, bootstrap_any) nano::system system0; auto node = add_ipc_enabled_node (system0); nano::system system1 (1); - auto latest (system1.nodes[0]->latest (nano::dev_genesis_key.pub)); - nano::send_block send (latest, nano::dev::genesis->account (), 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system1.nodes[0]->work_generate_blocking (latest)); + auto latest (system1.nodes[0]->latest (nano::dev::genesis_key.pub)); + nano::send_block send (latest, nano::dev::genesis->account (), 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system1.nodes[0]->work_generate_blocking (latest)); { auto transaction (system1.nodes[0]->store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, system1.nodes[0]->ledger.process (transaction, send).code); @@ -2868,8 +2868,8 @@ TEST (rpc, republish) nano::genesis genesis; auto node1 = add_ipc_enabled_node (system); system.add_node (); - auto latest (node1->latest (nano::dev_genesis_key.pub)); - nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); + auto latest (node1->latest (nano::dev::genesis_key.pub)); + nano::send_block send (latest, key.pub, 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest)); node1->process (send); nano::open_block open (send.hash (), key.pub, key.pub, key.prv, key.pub, *node1->work_generate_blocking (key.pub)); ASSERT_EQ (nano::process_result::progress, node1->process (open).code); @@ -2878,7 +2878,7 @@ TEST (rpc, republish) request.put ("action", "republish"); request.put ("hash", send.hash ().to_string ()); auto response (wait_response (system, rpc, request)); - ASSERT_TIMELY (10s, system.nodes[1]->balance (nano::dev_genesis_key.pub) != nano::genesis_amount); + ASSERT_TIMELY (10s, system.nodes[1]->balance (nano::dev::genesis_key.pub) != nano::genesis_amount); auto & blocks_node (response.get_child ("blocks")); std::vector blocks; for (auto i (blocks_node.begin ()), n (blocks_node.end ()); i != n; ++i) @@ -2951,14 +2951,14 @@ TEST (rpc, accounts_balances) request.put ("action", "accounts_balances"); boost::property_tree::ptree entry; boost::property_tree::ptree peers_l; - entry.put ("", nano::dev_genesis_key.pub.to_account ()); + entry.put ("", nano::dev::genesis_key.pub.to_account ()); peers_l.push_back (std::make_pair ("", entry)); request.add_child ("accounts", peers_l); auto response (wait_response (system, rpc, request)); for (auto & balances : response.get_child ("balances")) { std::string account_text (balances.first); - ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), account_text); + ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), account_text); std::string balance_text (balances.second.get ("balance")); ASSERT_EQ ("340282366920938463463374607431768211455", balance_text); std::string pending_text (balances.second.get ("pending")); @@ -2970,20 +2970,20 @@ TEST (rpc, accounts_frontiers) { nano::system system; auto node = add_ipc_enabled_node (system); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "accounts_frontiers"); boost::property_tree::ptree entry; boost::property_tree::ptree peers_l; - entry.put ("", nano::dev_genesis_key.pub.to_account ()); + entry.put ("", nano::dev::genesis_key.pub.to_account ()); peers_l.push_back (std::make_pair ("", entry)); request.add_child ("accounts", peers_l); auto response (wait_response (system, rpc, request)); for (auto & frontiers : response.get_child ("frontiers")) { std::string account_text (frontiers.first); - ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), account_text); + ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), account_text); std::string frontier_text (frontiers.second.get ("")); ASSERT_EQ (node->latest (nano::dev::genesis->account ()), nano::block_hash{ frontier_text }); } @@ -2994,8 +2994,8 @@ TEST (rpc, accounts_pending) nano::system system; auto node = add_ipc_enabled_node (system); nano::keypair key1; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - auto block1 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key1.pub, 100)); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); + auto block1 (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key1.pub, 100)); node->scheduler.flush (); ASSERT_TIMELY (5s, !node->active.active (*block1)); ASSERT_TIMELY (5s, node->ledger.cache.cemented_count == 2 && node->confirmation_height_processor.current ().is_zero () && node->confirmation_height_processor.awaiting_processing_size () == 0); @@ -3071,7 +3071,7 @@ TEST (rpc, accounts_pending) } } ASSERT_EQ (amounts[block1->hash ()], 100); - ASSERT_EQ (sources[block1->hash ()], nano::dev_genesis_key.pub); + ASSERT_EQ (sources[block1->hash ()], nano::dev::genesis_key.pub); } check_block_response_count (system, rpc, request, 1); @@ -3112,7 +3112,7 @@ TEST (rpc, wallet_info) nano::node_config node_config (nano::get_available_port (), system.logging); node_config.enable_voting = true; auto node = add_ipc_enabled_node (system, node_config); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::keypair key; system.wallet (0)->insert_adhoc (key.prv); @@ -3120,7 +3120,7 @@ TEST (rpc, wallet_info) ASSERT_EQ (1, node->ledger.cache.block_count); ASSERT_EQ (1, node->ledger.cache.cemented_count); - auto send (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, nano::Gxrb_ratio)); + auto send (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key.pub, nano::Gxrb_ratio)); // after the send, expect 2 blocks immediately, then 2 confirmed in a timely manner, // and finally 3 blocks and 3 confirmed after the wallet generates the receive block for this send ASSERT_EQ (2, node->ledger.cache.block_count); @@ -3128,7 +3128,7 @@ TEST (rpc, wallet_info) ASSERT_TIMELY (5s, 3 == node->ledger.cache.block_count && 3 == node->ledger.cache.cemented_count); // do another send to be able to expect some "pending" down below - auto send2 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, 1)); + auto send2 (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key.pub, 1)); ASSERT_EQ (4, node->ledger.cache.block_count); nano::account account (system.wallet (0)->deterministic_insert ()); @@ -3164,7 +3164,7 @@ TEST (rpc, wallet_balances) { nano::system system0; auto node = add_ipc_enabled_node (system0); - system0.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system0.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto [rpc, rpc_ctx] = add_rpc (system0, node); boost::property_tree::ptree request; request.put ("action", "wallet_balances"); @@ -3173,7 +3173,7 @@ TEST (rpc, wallet_balances) for (auto & balances : response.get_child ("balances")) { std::string account_text (balances.first); - ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), account_text); + ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), account_text); std::string balance_text (balances.second.get ("balance")); ASSERT_EQ ("340282366920938463463374607431768211455", balance_text); std::string pending_text (balances.second.get ("pending")); @@ -3182,14 +3182,14 @@ TEST (rpc, wallet_balances) nano::keypair key; rpc_ctx->io_scope->reset (); system0.wallet (0)->insert_adhoc (key.prv); - auto send (system0.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, 1)); + auto send (system0.wallet (0)->send_action (nano::dev::genesis_key.pub, key.pub, 1)); rpc_ctx->io_scope->renew (); request.put ("threshold", "2"); auto response1 (wait_response (system0, rpc, request)); for (auto & balances : response1.get_child ("balances")) { std::string account_text (balances.first); - ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), account_text); + ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), account_text); std::string balance_text (balances.second.get ("balance")); ASSERT_EQ ("340282366920938463463374607431768211454", balance_text); std::string pending_text (balances.second.get ("pending")); @@ -3202,9 +3202,9 @@ TEST (rpc, pending_exists) nano::system system; auto node = add_ipc_enabled_node (system); nano::keypair key1; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto hash0 (node->latest (nano::dev::genesis->account ())); - auto block1 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key1.pub, 100)); + auto block1 (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key1.pub, 100)); node->scheduler.flush (); ASSERT_TIMELY (5s, !node->active.active (*block1)); ASSERT_TIMELY (5s, node->ledger.cache.cemented_count == 2 && node->confirmation_height_processor.current ().is_zero () && node->confirmation_height_processor.awaiting_processing_size () == 0); @@ -3222,7 +3222,7 @@ TEST (rpc, pending_exists) request.put ("hash", hash0.to_string ()); pending_exists ("0"); - node->store.pending.exists (node->store.tx_begin_read (), nano::pending_key (nano::dev_genesis_key.pub, block1->hash ())); + node->store.pending.exists (node->store.tx_begin_read (), nano::pending_key (nano::dev::genesis_key.pub, block1->hash ())); request.put ("hash", block1->hash ().to_string ()); pending_exists ("1"); @@ -3241,10 +3241,10 @@ TEST (rpc, wallet_pending) nano::system system0; auto node = add_ipc_enabled_node (system0); nano::keypair key1; - system0.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system0.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); system0.wallet (0)->insert_adhoc (key1.prv); auto iterations (0); - auto block1 (system0.wallet (0)->send_action (nano::dev_genesis_key.pub, key1.pub, 100)); + auto block1 (system0.wallet (0)->send_action (nano::dev::genesis_key.pub, key1.pub, 100)); node->scheduler.flush (); while (node->active.active (*block1) || node->ledger.cache.cemented_count < 2 || !node->confirmation_height_processor.current ().is_zero () || node->confirmation_height_processor.awaiting_processing_size () != 0) { @@ -3314,7 +3314,7 @@ TEST (rpc, wallet_pending) } } ASSERT_EQ (amounts[block1->hash ()], 100); - ASSERT_EQ (sources[block1->hash ()], nano::dev_genesis_key.pub); + ASSERT_EQ (sources[block1->hash ()], nano::dev::genesis_key.pub); check_block_response_count (system0, rpc, request, 1); rpc_ctx->io_scope->reset (); @@ -3357,13 +3357,13 @@ TEST (rpc, work_get) { nano::system system; auto node = add_ipc_enabled_node (system); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - system.wallet (0)->work_cache_blocking (nano::dev_genesis_key.pub, node->latest (nano::dev_genesis_key.pub)); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); + system.wallet (0)->work_cache_blocking (nano::dev::genesis_key.pub, node->latest (nano::dev::genesis_key.pub)); auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "work_get"); request.put ("wallet", node->wallets.items.begin ()->first.to_string ()); - request.put ("account", nano::dev_genesis_key.pub.to_account ()); + request.put ("account", nano::dev::genesis_key.pub.to_account ()); auto response (wait_response (system, rpc, request)); std::string work_text (response.get ("work")); uint64_t work (1); @@ -3376,8 +3376,8 @@ TEST (rpc, wallet_work_get) { nano::system system; auto node = add_ipc_enabled_node (system); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - system.wallet (0)->work_cache_blocking (nano::dev_genesis_key.pub, node->latest (nano::dev_genesis_key.pub)); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); + system.wallet (0)->work_cache_blocking (nano::dev::genesis_key.pub, node->latest (nano::dev::genesis_key.pub)); auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "wallet_work_get"); @@ -3387,7 +3387,7 @@ TEST (rpc, wallet_work_get) for (auto & works : response.get_child ("works")) { std::string account_text (works.first); - ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), account_text); + ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), account_text); std::string work_text (works.second.get ("")); uint64_t work (1); node->wallets.items.begin ()->second->store.work_get (transaction, nano::dev::genesis->account (), work); @@ -3399,13 +3399,13 @@ TEST (rpc, work_set) { nano::system system; auto node = add_ipc_enabled_node (system); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto [rpc, rpc_ctx] = add_rpc (system, node); uint64_t work0 (100); boost::property_tree::ptree request; request.put ("action", "work_set"); request.put ("wallet", node->wallets.items.begin ()->first.to_string ()); - request.put ("account", nano::dev_genesis_key.pub.to_account ()); + request.put ("account", nano::dev::genesis_key.pub.to_account ()); request.put ("work", nano::to_string_hex (work0)); auto response (wait_response (system, rpc, request)); std::string success (response.get ("success")); @@ -3420,9 +3420,9 @@ TEST (rpc, search_pending_all) { nano::system system; auto node = add_ipc_enabled_node (system); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - auto latest (node->latest (nano::dev_genesis_key.pub)); - nano::send_block block (latest, nano::dev_genesis_key.pub, nano::genesis_amount - node->config.receive_minimum.number (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node->work_generate_blocking (latest)); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); + auto latest (node->latest (nano::dev::genesis_key.pub)); + nano::send_block block (latest, nano::dev::genesis_key.pub, nano::genesis_amount - node->config.receive_minimum.number (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node->work_generate_blocking (latest)); { auto transaction (node->store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, block).code); @@ -3431,7 +3431,7 @@ TEST (rpc, search_pending_all) boost::property_tree::ptree request; request.put ("action", "search_pending_all"); auto response (wait_response (system, rpc, request)); - ASSERT_TIMELY (10s, node->balance (nano::dev_genesis_key.pub) == nano::genesis_amount); + ASSERT_TIMELY (10s, node->balance (nano::dev::genesis_key.pub) == nano::genesis_amount); } TEST (rpc, wallet_republish) @@ -3440,16 +3440,16 @@ TEST (rpc, wallet_republish) auto node1 = add_ipc_enabled_node (system); nano::genesis genesis; nano::keypair key; - while (key.pub < nano::dev_genesis_key.pub) + while (key.pub < nano::dev::genesis_key.pub) { nano::keypair key1; key.pub = key1.pub; key.prv = key1.prv; } - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); system.wallet (0)->insert_adhoc (key.prv); - auto latest (node1->latest (nano::dev_genesis_key.pub)); - nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); + auto latest (node1->latest (nano::dev::genesis_key.pub)); + nano::send_block send (latest, key.pub, 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest)); node1->process (send); nano::open_block open (send.hash (), key.pub, key.pub, key.prv, key.pub, *node1->work_generate_blocking (key.pub)); ASSERT_EQ (nano::process_result::progress, node1->process (open).code); @@ -3475,17 +3475,17 @@ TEST (rpc, delegators) nano::system system; auto node1 = add_ipc_enabled_node (system); nano::keypair key; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); system.wallet (0)->insert_adhoc (key.prv); - auto latest (node1->latest (nano::dev_genesis_key.pub)); - nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); + auto latest (node1->latest (nano::dev::genesis_key.pub)); + nano::send_block send (latest, key.pub, 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest)); node1->process (send); - nano::open_block open (send.hash (), nano::dev_genesis_key.pub, key.pub, key.prv, key.pub, *node1->work_generate_blocking (key.pub)); + nano::open_block open (send.hash (), nano::dev::genesis_key.pub, key.pub, key.prv, key.pub, *node1->work_generate_blocking (key.pub)); ASSERT_EQ (nano::process_result::progress, node1->process (open).code); auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request; request.put ("action", "delegators"); - request.put ("account", nano::dev_genesis_key.pub.to_account ()); + request.put ("account", nano::dev::genesis_key.pub.to_account ()); auto response (wait_response (system, rpc, request)); auto & delegators_node (response.get_child ("delegators")); boost::property_tree::ptree delegators; @@ -3494,7 +3494,7 @@ TEST (rpc, delegators) delegators.put ((i->first), (i->second.get (""))); } ASSERT_EQ (2, delegators.size ()); - ASSERT_EQ ("100", delegators.get (nano::dev_genesis_key.pub.to_account ())); + ASSERT_EQ ("100", delegators.get (nano::dev::genesis_key.pub.to_account ())); ASSERT_EQ ("340282366920938463463374607431768211355", delegators.get (key.pub.to_account ())); } @@ -3503,17 +3503,17 @@ TEST (rpc, delegators_parameters) nano::system system; auto node1 = add_ipc_enabled_node (system); nano::keypair key; - auto latest (node1->latest (nano::dev_genesis_key.pub)); - nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); + auto latest (node1->latest (nano::dev::genesis_key.pub)); + nano::send_block send (latest, key.pub, 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest)); node1->process (send); - nano::open_block open (send.hash (), nano::dev_genesis_key.pub, key.pub, key.prv, key.pub, *node1->work_generate_blocking (key.pub)); + nano::open_block open (send.hash (), nano::dev::genesis_key.pub, key.pub, key.prv, key.pub, *node1->work_generate_blocking (key.pub)); ASSERT_EQ (nano::process_result::progress, node1->process (open).code); auto [rpc, rpc_ctx] = add_rpc (system, node1); // Test with "count" = 2 boost::property_tree::ptree request; request.put ("action", "delegators"); - request.put ("account", nano::dev_genesis_key.pub.to_account ()); + request.put ("account", nano::dev::genesis_key.pub.to_account ()); request.put ("count", 2); auto response (wait_response (system, rpc, request)); auto & delegators_node (response.get_child ("delegators")); @@ -3523,7 +3523,7 @@ TEST (rpc, delegators_parameters) delegators.put ((i->first), (i->second.get (""))); } ASSERT_EQ (2, delegators.size ()); - ASSERT_EQ ("100", delegators.get (nano::dev_genesis_key.pub.to_account ())); + ASSERT_EQ ("100", delegators.get (nano::dev::genesis_key.pub.to_account ())); ASSERT_EQ ("340282366920938463463374607431768211355", delegators.get (key.pub.to_account ())); // Test with "count" = 1 @@ -3537,9 +3537,9 @@ TEST (rpc, delegators_parameters) } ASSERT_EQ (1, delegators2.size ()); // What is first in ledger by public key? - if (nano::dev_genesis_key.pub.number () < key.pub.number ()) + if (nano::dev::genesis_key.pub.number () < key.pub.number ()) { - ASSERT_EQ ("100", delegators2.get (nano::dev_genesis_key.pub.to_account ())); + ASSERT_EQ ("100", delegators2.get (nano::dev::genesis_key.pub.to_account ())); } else { @@ -3562,9 +3562,9 @@ TEST (rpc, delegators_parameters) // Test with "start" before last account request.put ("threshold", 0); auto last_account (key.pub); - if (nano::dev_genesis_key.pub.number () > key.pub.number ()) + if (nano::dev::genesis_key.pub.number () > key.pub.number ()) { - last_account = nano::dev_genesis_key.pub; + last_account = nano::dev::genesis_key.pub; } request.put ("start", nano::account (last_account.number () - 1).to_account ()); @@ -3596,17 +3596,17 @@ TEST (rpc, delegators_count) nano::system system; auto node1 = add_ipc_enabled_node (system); nano::keypair key; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); system.wallet (0)->insert_adhoc (key.prv); - auto latest (node1->latest (nano::dev_genesis_key.pub)); - nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); + auto latest (node1->latest (nano::dev::genesis_key.pub)); + nano::send_block send (latest, key.pub, 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest)); node1->process (send); - nano::open_block open (send.hash (), nano::dev_genesis_key.pub, key.pub, key.prv, key.pub, *node1->work_generate_blocking (key.pub)); + nano::open_block open (send.hash (), nano::dev::genesis_key.pub, key.pub, key.prv, key.pub, *node1->work_generate_blocking (key.pub)); ASSERT_EQ (nano::process_result::progress, node1->process (open).code); auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request; request.put ("action", "delegators_count"); - request.put ("account", nano::dev_genesis_key.pub.to_account ()); + request.put ("account", nano::dev::genesis_key.pub.to_account ()); auto response (wait_response (system, rpc, request)); std::string count (response.get ("count")); ASSERT_EQ ("2", count); @@ -3635,19 +3635,19 @@ TEST (rpc, account_info) } rpc_ctx->io_scope->reset (); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); system.wallet (0)->insert_adhoc (key.prv); - auto latest (node1->latest (nano::dev_genesis_key.pub)); - nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); + auto latest (node1->latest (nano::dev::genesis_key.pub)); + nano::send_block send (latest, key.pub, 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest)); node1->process (send); auto time (nano::seconds_since_epoch ()); { auto transaction = node1->store.tx_begin_write (); - node1->store.confirmation_height.put (transaction, nano::dev_genesis_key.pub, { 1, genesis.hash () }); + node1->store.confirmation_height.put (transaction, nano::dev::genesis_key.pub, { 1, genesis.hash () }); } rpc_ctx->io_scope->renew (); - request.put ("account", nano::dev_genesis_key.pub.to_account ()); + request.put ("account", nano::dev::genesis_key.pub.to_account ()); { auto response (wait_response (system, rpc, request)); std::string frontier (response.get ("frontier")); @@ -3686,23 +3686,23 @@ TEST (rpc, account_info) std::string pending2 (response.get ("pending")); ASSERT_EQ ("0", pending2); std::string representative2 (response.get ("representative")); - ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), representative2); + ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), representative2); } // Test for confirmed only blocks rpc_ctx->io_scope->reset (); nano::keypair key1; { - latest = node1->latest (nano::dev_genesis_key.pub); - nano::send_block send1 (latest, key1.pub, 50, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); + latest = node1->latest (nano::dev::genesis_key.pub); + nano::send_block send1 (latest, key1.pub, 50, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest)); node1->process (send1); - nano::send_block send2 (send1.hash (), key1.pub, 25, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (send1.hash ())); + nano::send_block send2 (send1.hash (), key1.pub, 25, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (send1.hash ())); node1->process (send2); - nano::state_block state_change (nano::dev_genesis_key.pub, send2.hash (), key1.pub, 25, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (send2.hash ())); + nano::state_block state_change (nano::dev::genesis_key.pub, send2.hash (), key1.pub, 25, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (send2.hash ())); node1->process (state_change); - nano::open_block open (send1.hash (), nano::dev_genesis_key.pub, key1.pub, key1.prv, key1.pub, *node1->work_generate_blocking (key1.pub)); + nano::open_block open (send1.hash (), nano::dev::genesis_key.pub, key1.pub, key1.prv, key1.pub, *node1->work_generate_blocking (key1.pub)); node1->process (open); } @@ -3726,7 +3726,7 @@ TEST (rpc, account_info) ASSERT_EQ (representative, key1.pub.to_account ()); auto confirmed_representative (response.get ("confirmed_representative")); - ASSERT_EQ (confirmed_representative, nano::dev_genesis_key.pub.to_account ()); + ASSERT_EQ (confirmed_representative, nano::dev::genesis_key.pub.to_account ()); auto confirmed_frontier (response.get ("confirmed_frontier")); ASSERT_EQ (nano::dev::genesis->hash ().to_string (), confirmed_frontier); @@ -3775,7 +3775,7 @@ TEST (rpc, json_block_input) auto node1 = add_ipc_enabled_node (system); nano::keypair key; system.wallet (0)->insert_adhoc (key.prv); - nano::state_block send (nano::dev::genesis->account (), node1->latest (nano::dev_genesis_key.pub), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0); + nano::state_block send (nano::dev::genesis->account (), node1->latest (nano::dev::genesis_key.pub), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0); auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request; request.put ("action", "sign"); @@ -3804,8 +3804,8 @@ TEST (rpc, json_block_output) nano::system system; auto node1 = add_ipc_enabled_node (system); nano::keypair key; - auto latest (node1->latest (nano::dev_genesis_key.pub)); - nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); + auto latest (node1->latest (nano::dev::genesis_key.pub)); + nano::send_block send (latest, key.pub, 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest)); node1->process (send); auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request; @@ -3831,7 +3831,7 @@ TEST (rpc, blocks_info) std::string hash_text (blocks.first); ASSERT_EQ (node->latest (nano::dev::genesis->account ()).to_string (), hash_text); std::string account_text (blocks.second.get ("block_account")); - ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), account_text); + ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), account_text); std::string amount_text (blocks.second.get ("amount")); ASSERT_EQ (nano::genesis_amount.convert_to (), amount_text); std::string blocks_text (blocks.second.get ("contents")); @@ -3894,13 +3894,13 @@ TEST (rpc, blocks_info_subtype) nano::system system; auto node1 = add_ipc_enabled_node (system); nano::keypair key; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); system.wallet (0)->insert_adhoc (key.prv); - auto send (system.wallet (0)->send_action (nano::dev_genesis_key.pub, nano::dev_genesis_key.pub, nano::Gxrb_ratio)); + auto send (system.wallet (0)->send_action (nano::dev::genesis_key.pub, nano::dev::genesis_key.pub, nano::Gxrb_ratio)); ASSERT_NE (nullptr, send); auto receive (system.wallet (0)->receive_action (send->hash (), key.pub, nano::Gxrb_ratio, send->link ().as_account ())); ASSERT_NE (nullptr, receive); - auto change (system.wallet (0)->change_action (nano::dev_genesis_key.pub, key.pub)); + auto change (system.wallet (0)->change_action (nano::dev::genesis_key.pub, key.pub)); ASSERT_NE (nullptr, change); auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request; @@ -3937,8 +3937,8 @@ TEST (rpc, block_info_successor) nano::system system; auto node1 = add_ipc_enabled_node (system); nano::keypair key; - auto latest (node1->latest (nano::dev_genesis_key.pub)); - nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); + auto latest (node1->latest (nano::dev::genesis_key.pub)); + nano::send_block send (latest, key.pub, 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest)); node1->process (send); auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request; @@ -3950,7 +3950,7 @@ TEST (rpc, block_info_successor) std::string successor_text (response.get ("successor")); ASSERT_EQ (successor_text, send.hash ().to_string ()); std::string account_text (response.get ("block_account")); - ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), account_text); + ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), account_text); std::string amount_text (response.get ("amount")); ASSERT_EQ (nano::genesis_amount.convert_to (), amount_text); } @@ -3966,13 +3966,13 @@ TEST (rpc, block_info_pruning) nano::node_flags node_flags; node_flags.enable_pruning = true; auto node1 = add_ipc_enabled_node (system, node_config1, node_flags); - auto latest (node1->latest (nano::dev_genesis_key.pub)); - auto send1 (std::make_shared (latest, nano::dev_genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest))); + auto latest (node1->latest (nano::dev::genesis_key.pub)); + auto send1 (std::make_shared (latest, nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest))); node1->process_active (send1); - auto receive1 (std::make_shared (send1->hash (), send1->hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (send1->hash ()))); + auto receive1 (std::make_shared (send1->hash (), send1->hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (send1->hash ()))); node1->process_active (receive1); node1->block_processor.flush (); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); ASSERT_TIMELY (5s, node1->ledger.cache.cemented_count == 3 && node1->confirmation_height_processor.current ().is_zero () && node1->confirmation_height_processor.awaiting_processing_size () == 0); // Pruning action { @@ -3994,7 +3994,7 @@ TEST (rpc, block_info_pruning) request2.put ("hash", receive1->hash ().to_string ()); auto response2 (wait_response (system, rpc, request2)); std::string account_text (response2.get ("block_account")); - ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), account_text); + ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), account_text); boost::optional amount (response2.get_optional ("amount")); ASSERT_FALSE (amount.is_initialized ()); // Cannot calculate amount bool json_error{ false }; @@ -4019,13 +4019,13 @@ TEST (rpc, pruned_exists) nano::node_flags node_flags; node_flags.enable_pruning = true; auto node1 = add_ipc_enabled_node (system, node_config1, node_flags); - auto latest (node1->latest (nano::dev_genesis_key.pub)); - auto send1 (std::make_shared (latest, nano::dev_genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest))); + auto latest (node1->latest (nano::dev::genesis_key.pub)); + auto send1 (std::make_shared (latest, nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest))); node1->process_active (send1); - auto receive1 (std::make_shared (send1->hash (), send1->hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (send1->hash ()))); + auto receive1 (std::make_shared (send1->hash (), send1->hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (send1->hash ()))); node1->process_active (receive1); node1->block_processor.flush (); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); ASSERT_TIMELY (5s, node1->ledger.cache.cemented_count == 3 && node1->confirmation_height_processor.current ().is_zero () && node1->confirmation_height_processor.awaiting_processing_size () == 0); // Pruning action { @@ -4086,13 +4086,13 @@ TEST (rpc, ledger) nano::system system; auto node = add_ipc_enabled_node (system); nano::keypair key; - auto latest (node->latest (nano::dev_genesis_key.pub)); + auto latest (node->latest (nano::dev::genesis_key.pub)); auto genesis_balance (nano::genesis_amount); auto send_amount (genesis_balance - 100); genesis_balance -= send_amount; - nano::send_block send (latest, key.pub, genesis_balance, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node->work_generate_blocking (latest)); + nano::send_block send (latest, key.pub, genesis_balance, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node->work_generate_blocking (latest)); node->process (send); - nano::open_block open (send.hash (), nano::dev_genesis_key.pub, key.pub, key.prv, key.pub, *node->work_generate_blocking (key.pub)); + nano::open_block open (send.hash (), nano::dev::genesis_key.pub, key.pub, key.prv, key.pub, *node->work_generate_blocking (key.pub)); ASSERT_EQ (nano::process_result::progress, node->process (open).code); auto time (nano::seconds_since_epoch ()); auto [rpc, rpc_ctx] = add_rpc (system, node); @@ -4142,7 +4142,7 @@ TEST (rpc, ledger) ASSERT_EQ ("0", pending.get ()); boost::optional representative (account.second.get_optional ("representative")); ASSERT_TRUE (representative.is_initialized ()); - ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), representative.get ()); + ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), representative.get ()); } } // Test threshold @@ -4159,7 +4159,7 @@ TEST (rpc, ledger) } auto send2_amount (50); genesis_balance -= send2_amount; - nano::send_block send2 (send.hash (), key.pub, genesis_balance, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node->work_generate_blocking (send.hash ())); + nano::send_block send2 (send.hash (), key.pub, genesis_balance, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node->work_generate_blocking (send.hash ())); rpc_ctx->io_scope->reset (); node->process (send2); rpc_ctx->io_scope->renew (); @@ -4206,19 +4206,19 @@ TEST (rpc, block_create) nano::system system; auto node1 = add_ipc_enabled_node (system); nano::keypair key; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); system.wallet (0)->insert_adhoc (key.prv); - auto latest (node1->latest (nano::dev_genesis_key.pub)); + auto latest (node1->latest (nano::dev::genesis_key.pub)); auto send_work = *node1->work_generate_blocking (latest); - nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, send_work); + nano::send_block send (latest, key.pub, 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, send_work); auto open_work = *node1->work_generate_blocking (key.pub); - nano::open_block open (send.hash (), nano::dev_genesis_key.pub, key.pub, key.prv, key.pub, open_work); + nano::open_block open (send.hash (), nano::dev::genesis_key.pub, key.pub, key.prv, key.pub, open_work); auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request; request.put ("action", "block_create"); request.put ("type", "send"); request.put ("wallet", node1->wallets.items.begin ()->first.to_string ()); - request.put ("account", nano::dev_genesis_key.pub.to_account ()); + request.put ("account", nano::dev::genesis_key.pub.to_account ()); request.put ("previous", latest.to_string ()); request.put ("amount", "340282366920938463463374607431768211355"); request.put ("destination", key.pub.to_account ()); @@ -4243,7 +4243,7 @@ TEST (rpc, block_create) std::string key_text; key.prv.encode_hex (key_text); request1.put ("key", key_text); - request1.put ("representative", nano::dev_genesis_key.pub.to_account ()); + request1.put ("representative", nano::dev::genesis_key.pub.to_account ()); request1.put ("source", send.hash ().to_string ()); request1.put ("work", nano::to_string_hex (open_work)); auto response1 (wait_response (system, rpc, request1)); @@ -4275,7 +4275,7 @@ TEST (rpc, block_create) ASSERT_EQ (change.hash (), change_block->hash ()); rpc_ctx->io_scope->reset (); ASSERT_EQ (nano::process_result::progress, node1->process (change).code); - nano::send_block send2 (send.hash (), key.pub, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (send.hash ())); + nano::send_block send2 (send.hash (), key.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (send.hash ())); ASSERT_EQ (nano::process_result::progress, node1->process (send2).code); rpc_ctx->io_scope->renew (); boost::property_tree::ptree request2; @@ -4304,15 +4304,15 @@ TEST (rpc, block_create_state) auto node = add_ipc_enabled_node (system); nano::keypair key; nano::genesis genesis; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "block_create"); request.put ("type", "state"); request.put ("wallet", node->wallets.items.begin ()->first.to_string ()); - request.put ("account", nano::dev_genesis_key.pub.to_account ()); + request.put ("account", nano::dev::genesis_key.pub.to_account ()); request.put ("previous", genesis.hash ().to_string ()); - request.put ("representative", nano::dev_genesis_key.pub.to_account ()); + request.put ("representative", nano::dev::genesis_key.pub.to_account ()); request.put ("balance", (nano::genesis_amount - nano::Gxrb_ratio).convert_to ()); request.put ("link", key.pub.to_account ()); request.put ("work", nano::to_string_hex (*node->work_generate_blocking (genesis.hash ()))); @@ -4337,8 +4337,8 @@ TEST (rpc, block_create_state_open) auto node = add_ipc_enabled_node (system); nano::keypair key; nano::genesis genesis; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - auto send_block (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, nano::Gxrb_ratio)); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); + auto send_block (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key.pub, nano::Gxrb_ratio)); ASSERT_NE (nullptr, send_block); auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; @@ -4347,7 +4347,7 @@ TEST (rpc, block_create_state_open) request.put ("key", key.prv.to_string ()); request.put ("account", key.pub.to_account ()); request.put ("previous", 0); - request.put ("representative", nano::dev_genesis_key.pub.to_account ()); + request.put ("representative", nano::dev::genesis_key.pub.to_account ()); request.put ("balance", nano::Gxrb_ratio.convert_to ()); request.put ("link", send_block->hash ().to_string ()); request.put ("work", nano::to_string_hex (*node->work_generate_blocking (key.pub))); @@ -4390,14 +4390,14 @@ TEST (rpc, block_create_state_request_work) nano::system system; auto node = add_ipc_enabled_node (system); nano::keypair key; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "block_create"); request.put ("type", "state"); request.put ("wallet", node->wallets.items.begin ()->first.to_string ()); - request.put ("account", nano::dev_genesis_key.pub.to_account ()); - request.put ("representative", nano::dev_genesis_key.pub.to_account ()); + request.put ("account", nano::dev::genesis_key.pub.to_account ()); + request.put ("representative", nano::dev::genesis_key.pub.to_account ()); request.put ("balance", (nano::genesis_amount - nano::Gxrb_ratio).convert_to ()); request.put ("link", key.pub.to_account ()); request.put ("previous", previous); @@ -4416,10 +4416,10 @@ TEST (rpc, block_create_open_epoch_v2) nano::system system; auto node = add_ipc_enabled_node (system); nano::keypair key; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); ASSERT_NE (nullptr, system.upgrade_genesis_epoch (*node, nano::epoch::epoch_1)); ASSERT_NE (nullptr, system.upgrade_genesis_epoch (*node, nano::epoch::epoch_2)); - auto send_block (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, nano::Gxrb_ratio)); + auto send_block (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key.pub, nano::Gxrb_ratio)); ASSERT_NE (nullptr, send_block); auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; @@ -4428,7 +4428,7 @@ TEST (rpc, block_create_open_epoch_v2) request.put ("key", key.prv.to_string ()); request.put ("account", key.pub.to_account ()); request.put ("previous", 0); - request.put ("representative", nano::dev_genesis_key.pub.to_account ()); + request.put ("representative", nano::dev::genesis_key.pub.to_account ()); request.put ("balance", nano::Gxrb_ratio.convert_to ()); request.put ("link", send_block->hash ().to_string ()); auto response (wait_response (system, rpc, request)); @@ -4457,14 +4457,14 @@ TEST (rpc, block_create_receive_epoch_v2) nano::system system; auto node = add_ipc_enabled_node (system); nano::keypair key; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); ASSERT_NE (nullptr, system.upgrade_genesis_epoch (*node, nano::epoch::epoch_1)); - auto send_block (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, nano::Gxrb_ratio)); + auto send_block (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key.pub, nano::Gxrb_ratio)); ASSERT_NE (nullptr, send_block); - nano::state_block open (key.pub, 0, nano::dev_genesis_key.pub, nano::Gxrb_ratio, send_block->hash (), key.prv, key.pub, *node->work_generate_blocking (key.pub)); + nano::state_block open (key.pub, 0, nano::dev::genesis_key.pub, nano::Gxrb_ratio, send_block->hash (), key.prv, key.pub, *node->work_generate_blocking (key.pub)); ASSERT_EQ (nano::process_result::progress, node->process (open).code); ASSERT_NE (nullptr, system.upgrade_genesis_epoch (*node, nano::epoch::epoch_2)); - auto send_block_2 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, nano::Gxrb_ratio)); + auto send_block_2 (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key.pub, nano::Gxrb_ratio)); auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "block_create"); @@ -4472,7 +4472,7 @@ TEST (rpc, block_create_receive_epoch_v2) request.put ("key", key.prv.to_string ()); request.put ("account", key.pub.to_account ()); request.put ("previous", open.hash ().to_string ()); - request.put ("representative", nano::dev_genesis_key.pub.to_account ()); + request.put ("representative", nano::dev::genesis_key.pub.to_account ()); request.put ("balance", (2 * nano::Gxrb_ratio).convert_to ()); request.put ("link", send_block_2->hash ().to_string ()); auto response (wait_response (system, rpc, request)); @@ -4500,12 +4500,12 @@ TEST (rpc, block_create_send_epoch_v2) nano::system system; auto node = add_ipc_enabled_node (system); nano::keypair key; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); ASSERT_NE (nullptr, system.upgrade_genesis_epoch (*node, nano::epoch::epoch_1)); ASSERT_NE (nullptr, system.upgrade_genesis_epoch (*node, nano::epoch::epoch_2)); - auto send_block (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, nano::Gxrb_ratio)); + auto send_block (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key.pub, nano::Gxrb_ratio)); ASSERT_NE (nullptr, send_block); - nano::state_block open (key.pub, 0, nano::dev_genesis_key.pub, nano::Gxrb_ratio, send_block->hash (), key.prv, key.pub, *node->work_generate_blocking (key.pub)); + nano::state_block open (key.pub, 0, nano::dev::genesis_key.pub, nano::Gxrb_ratio, send_block->hash (), key.prv, key.pub, *node->work_generate_blocking (key.pub)); ASSERT_EQ (nano::process_result::progress, node->process (open).code); auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; @@ -4514,9 +4514,9 @@ TEST (rpc, block_create_send_epoch_v2) request.put ("key", key.prv.to_string ()); request.put ("account", key.pub.to_account ()); request.put ("previous", open.hash ().to_string ()); - request.put ("representative", nano::dev_genesis_key.pub.to_account ()); + request.put ("representative", nano::dev::genesis_key.pub.to_account ()); request.put ("balance", 0); - request.put ("link", nano::dev_genesis_key.pub.to_string ()); + request.put ("link", nano::dev::genesis_key.pub.to_string ()); auto response (wait_response (system, rpc, request)); std::string state_hash (response.get ("hash")); auto state_text (response.get ("block")); @@ -4543,8 +4543,8 @@ TEST (rpc, block_hash) auto node1 = add_ipc_enabled_node (system); auto [rpc, rpc_ctx] = add_rpc (system, node1); nano::keypair key; - auto latest (node1->latest (nano::dev_genesis_key.pub)); - nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); + auto latest (node1->latest (nano::dev::genesis_key.pub)); + nano::send_block send (latest, key.pub, 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest)); boost::property_tree::ptree request; request.put ("action", "block_hash"); std::string json; @@ -4613,10 +4613,10 @@ TEST (rpc, wallet_ledger) auto node1 = add_ipc_enabled_node (system); nano::keypair key; system.wallet (0)->insert_adhoc (key.prv); - auto latest (node1->latest (nano::dev_genesis_key.pub)); - nano::send_block send (latest, key.pub, 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node1->work_generate_blocking (latest)); + auto latest (node1->latest (nano::dev::genesis_key.pub)); + nano::send_block send (latest, key.pub, 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest)); node1->process (send); - nano::open_block open (send.hash (), nano::dev_genesis_key.pub, key.pub, key.prv, key.pub, *node1->work_generate_blocking (key.pub)); + nano::open_block open (send.hash (), nano::dev::genesis_key.pub, key.pub, key.prv, key.pub, *node1->work_generate_blocking (key.pub)); ASSERT_EQ (nano::process_result::progress, node1->process (open).code); auto time (nano::seconds_since_epoch ()); auto [rpc, rpc_ctx] = add_rpc (system, node1); @@ -4679,13 +4679,13 @@ TEST (rpc, wallet_add_watch) request.put ("action", "wallet_add_watch"); boost::property_tree::ptree entry; boost::property_tree::ptree peers_l; - entry.put ("", nano::dev_genesis_key.pub.to_account ()); + entry.put ("", nano::dev::genesis_key.pub.to_account ()); peers_l.push_back (std::make_pair ("", entry)); request.add_child ("accounts", peers_l); auto response (wait_response (system, rpc, request)); std::string success (response.get ("success")); ASSERT_TRUE (success.empty ()); - ASSERT_TRUE (system.wallet (0)->exists (nano::dev_genesis_key.pub)); + ASSERT_TRUE (system.wallet (0)->exists (nano::dev::genesis_key.pub)); // Make sure using special wallet key as pubkey fails nano::public_key bad_key (1); @@ -4705,9 +4705,9 @@ TEST (rpc, online_reps) auto node1 (system.nodes[0]); auto node2 = add_ipc_enabled_node (system); nano::keypair key; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); ASSERT_EQ (node2->online_reps.online (), 0); - auto send_block (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, nano::Gxrb_ratio)); + auto send_block (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key.pub, nano::Gxrb_ratio)); ASSERT_NE (nullptr, send_block); ASSERT_TIMELY (10s, !node2->online_reps.list ().empty ()); ASSERT_EQ (node2->online_reps.online (), nano::genesis_amount - nano::Gxrb_ratio); @@ -4718,7 +4718,7 @@ TEST (rpc, online_reps) auto representatives (response.get_child ("representatives")); auto item (representatives.begin ()); ASSERT_NE (representatives.end (), item); - ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), item->second.get ("")); + ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), item->second.get ("")); boost::optional weight (item->second.get_optional ("weight")); ASSERT_FALSE (weight.is_initialized ()); ASSERT_TIMELY (5s, node2->block (send_block->hash ())); @@ -4728,13 +4728,13 @@ TEST (rpc, online_reps) auto representatives2 (response2.get_child ("representatives")); auto item2 (representatives2.begin ()); ASSERT_NE (representatives2.end (), item2); - ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), item2->first); + ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), item2->first); auto weight2 (item2->second.get ("weight")); - ASSERT_EQ (node2->weight (nano::dev_genesis_key.pub).convert_to (), weight2); + ASSERT_EQ (node2->weight (nano::dev::genesis_key.pub).convert_to (), weight2); //Test accounts filter rpc_ctx->io_scope->reset (); auto new_rep (system.wallet (1)->deterministic_insert ()); - auto send (system.wallet (0)->send_action (nano::dev_genesis_key.pub, new_rep, node1->config.receive_minimum.number ())); + auto send (system.wallet (0)->send_action (nano::dev::genesis_key.pub, new_rep, node1->config.receive_minimum.number ())); rpc_ctx->io_scope->renew (); ASSERT_NE (nullptr, send); ASSERT_TIMELY (10s, node2->block (send->hash ())); @@ -4744,7 +4744,7 @@ TEST (rpc, online_reps) ASSERT_NE (nullptr, receive); ASSERT_TIMELY (5s, node2->block (receive->hash ())); rpc_ctx->io_scope->reset (); - auto change (system.wallet (0)->change_action (nano::dev_genesis_key.pub, new_rep)); + auto change (system.wallet (0)->change_action (nano::dev::genesis_key.pub, new_rep)); rpc_ctx->io_scope->renew (); ASSERT_NE (nullptr, change); ASSERT_TIMELY (5s, node2->block (change->hash ())); @@ -4772,13 +4772,13 @@ TEST (rpc, confirmation_height_currently_processing) node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto node = add_ipc_enabled_node (system, node_config, node_flags); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); - auto previous_genesis_chain_hash = node->latest (nano::dev_genesis_key.pub); + auto previous_genesis_chain_hash = node->latest (nano::dev::genesis_key.pub); { auto transaction = node->store.tx_begin_write (); nano::keypair key1; - nano::send_block send (previous_genesis_chain_hash, key1.pub, nano::genesis_amount - nano::Gxrb_ratio - 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (previous_genesis_chain_hash)); + nano::send_block send (previous_genesis_chain_hash, key1.pub, nano::genesis_amount - nano::Gxrb_ratio - 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (previous_genesis_chain_hash)); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, send).code); previous_genesis_chain_hash = send.hash (); } @@ -4826,9 +4826,9 @@ TEST (rpc, confirmation_history) nano::system system; auto node = add_ipc_enabled_node (system); nano::keypair key; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); ASSERT_TRUE (node->active.list_recently_cemented ().empty ()); - auto block (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, nano::Gxrb_ratio)); + auto block (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key.pub, nano::Gxrb_ratio)); ASSERT_TIMELY (10s, !node->active.list_recently_cemented ().empty ()); auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; @@ -4857,11 +4857,11 @@ TEST (rpc, confirmation_history_hash) nano::system system; auto node = add_ipc_enabled_node (system); nano::keypair key; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); ASSERT_TRUE (node->active.list_recently_cemented ().empty ()); - auto send1 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, nano::Gxrb_ratio)); - auto send2 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, nano::Gxrb_ratio)); - auto send3 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, nano::Gxrb_ratio)); + auto send1 (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key.pub, nano::Gxrb_ratio)); + auto send2 (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key.pub, nano::Gxrb_ratio)); + auto send3 (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key.pub, nano::Gxrb_ratio)); ASSERT_TIMELY (10s, node->active.list_recently_cemented ().size () == 3); auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; @@ -4887,9 +4887,9 @@ TEST (rpc, block_confirm) { nano::system system; auto node = add_ipc_enabled_node (system); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::genesis genesis; - auto send1 (std::make_shared (nano::dev_genesis_key.pub, genesis.hash (), nano::dev_genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *node->work_generate_blocking (genesis.hash ()))); + auto send1 (std::make_shared (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node->work_generate_blocking (genesis.hash ()))); { auto transaction (node->store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, *send1).code); @@ -4906,7 +4906,7 @@ TEST (rpc, block_confirm_absent) { nano::system system; auto node = add_ipc_enabled_node (system); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "block_confirm"); @@ -5061,13 +5061,13 @@ TEST (rpc, unopened) { nano::system system; auto node = add_ipc_enabled_node (system); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::account account1 (1), account2 (account1.number () + 1); - auto genesis (node->latest (nano::dev_genesis_key.pub)); + auto genesis (node->latest (nano::dev::genesis_key.pub)); ASSERT_FALSE (genesis.is_zero ()); - auto send (system.wallet (0)->send_action (nano::dev_genesis_key.pub, account1, 1)); + auto send (system.wallet (0)->send_action (nano::dev::genesis_key.pub, account1, 1)); ASSERT_NE (nullptr, send); - auto send2 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, account2, 10)); + auto send2 (system.wallet (0)->send_action (nano::dev::genesis_key.pub, account2, 10)); ASSERT_NE (nullptr, send2); auto [rpc, rpc_ctx] = add_rpc (system, node); { @@ -5124,10 +5124,10 @@ TEST (rpc, unopened_burn) { nano::system system; auto node = add_ipc_enabled_node (system); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - auto genesis (node->latest (nano::dev_genesis_key.pub)); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); + auto genesis (node->latest (nano::dev::genesis_key.pub)); ASSERT_FALSE (genesis.is_zero ()); - auto send (system.wallet (0)->send_action (nano::dev_genesis_key.pub, nano::dev::constants.burn_account, 1)); + auto send (system.wallet (0)->send_action (nano::dev::genesis_key.pub, nano::dev::constants.burn_account, 1)); ASSERT_NE (nullptr, send); auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; @@ -5167,16 +5167,16 @@ TEST (rpc, wallet_history) nano::node_config node_config (nano::get_available_port (), system.logging); node_config.enable_voting = false; auto node = add_ipc_enabled_node (system, node_config); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto timestamp1 (nano::seconds_since_epoch ()); - auto send (system.wallet (0)->send_action (nano::dev_genesis_key.pub, nano::dev_genesis_key.pub, node->config.receive_minimum.number ())); + auto send (system.wallet (0)->send_action (nano::dev::genesis_key.pub, nano::dev::genesis_key.pub, node->config.receive_minimum.number ())); ASSERT_NE (nullptr, send); auto timestamp2 (nano::seconds_since_epoch ()); - auto receive (system.wallet (0)->receive_action (send->hash (), nano::dev_genesis_key.pub, node->config.receive_minimum.number (), send->link ().as_account ())); + auto receive (system.wallet (0)->receive_action (send->hash (), nano::dev::genesis_key.pub, node->config.receive_minimum.number (), send->link ().as_account ())); ASSERT_NE (nullptr, receive); nano::keypair key; auto timestamp3 (nano::seconds_since_epoch ()); - auto send2 (system.wallet (0)->send_action (nano::dev_genesis_key.pub, key.pub, node->config.receive_minimum.number ())); + auto send2 (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key.pub, node->config.receive_minimum.number ())); ASSERT_NE (nullptr, send2); system.deadline_set (10s); auto [rpc, rpc_ctx] = add_rpc (system, node); @@ -5195,26 +5195,26 @@ TEST (rpc, wallet_history) ASSERT_EQ (key.pub.to_account (), std::get<1> (history_l[0])); ASSERT_EQ (node->config.receive_minimum.to_string_dec (), std::get<2> (history_l[0])); ASSERT_EQ (send2->hash ().to_string (), std::get<3> (history_l[0])); - ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), std::get<4> (history_l[0])); + ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), std::get<4> (history_l[0])); ASSERT_EQ (std::to_string (timestamp3), std::get<5> (history_l[0])); ASSERT_EQ ("receive", std::get<0> (history_l[1])); - ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), std::get<1> (history_l[1])); + ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), std::get<1> (history_l[1])); ASSERT_EQ (node->config.receive_minimum.to_string_dec (), std::get<2> (history_l[1])); ASSERT_EQ (receive->hash ().to_string (), std::get<3> (history_l[1])); - ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), std::get<4> (history_l[1])); + ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), std::get<4> (history_l[1])); ASSERT_EQ (std::to_string (timestamp2), std::get<5> (history_l[1])); ASSERT_EQ ("send", std::get<0> (history_l[2])); - ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), std::get<1> (history_l[2])); + ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), std::get<1> (history_l[2])); ASSERT_EQ (node->config.receive_minimum.to_string_dec (), std::get<2> (history_l[2])); ASSERT_EQ (send->hash ().to_string (), std::get<3> (history_l[2])); - ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), std::get<4> (history_l[2])); + ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), std::get<4> (history_l[2])); ASSERT_EQ (std::to_string (timestamp1), std::get<5> (history_l[2])); // Genesis block ASSERT_EQ ("receive", std::get<0> (history_l[3])); - ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), std::get<1> (history_l[3])); + ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), std::get<1> (history_l[3])); ASSERT_EQ (nano::genesis_amount.convert_to (), std::get<2> (history_l[3])); ASSERT_EQ (nano::dev::genesis->hash ().to_string (), std::get<3> (history_l[3])); - ASSERT_EQ (nano::dev_genesis_key.pub.to_account (), std::get<4> (history_l[3])); + ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), std::get<4> (history_l[3])); } TEST (rpc, sign_hash) @@ -5222,7 +5222,7 @@ TEST (rpc, sign_hash) nano::system system; auto node1 = add_ipc_enabled_node (system); nano::keypair key; - nano::state_block send (nano::dev::genesis->account (), node1->latest (nano::dev_genesis_key.pub), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0); + nano::state_block send (nano::dev::genesis->account (), node1->latest (nano::dev::genesis_key.pub), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0); auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request; request.put ("action", "sign"); @@ -5245,7 +5245,7 @@ TEST (rpc, sign_block) auto node1 = add_ipc_enabled_node (system); nano::keypair key; system.wallet (0)->insert_adhoc (key.prv); - nano::state_block send (nano::dev::genesis->account (), node1->latest (nano::dev_genesis_key.pub), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0); + nano::state_block send (nano::dev::genesis->account (), node1->latest (nano::dev::genesis_key.pub), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0); auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request; request.put ("action", "sign"); @@ -5317,8 +5317,8 @@ TEST (rpc, block_confirmed) // Open an account directly in the ledger { auto transaction = node->store.tx_begin_write (); - nano::block_hash latest (node->latest (nano::dev_genesis_key.pub)); - nano::send_block send1 (latest, key.pub, 300, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (latest)); + nano::block_hash latest (node->latest (nano::dev::genesis_key.pub)); + nano::send_block send1 (latest, key.pub, 300, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, send1).code); nano::open_block open1 (send1.hash (), nano::dev::genesis->account (), key.pub, key.prv, key.pub, *system.work.generate (key.pub)); @@ -5327,13 +5327,13 @@ TEST (rpc, block_confirmed) rpc_ctx->io_scope->renew (); // This should not be confirmed - nano::block_hash latest (node->latest (nano::dev_genesis_key.pub)); + nano::block_hash latest (node->latest (nano::dev::genesis_key.pub)); request.put ("hash", latest.to_string ()); auto response2 (wait_response (system, rpc, request)); ASSERT_FALSE (response2.get ("confirmed")); // Create and process a new send block - auto send = std::make_shared (latest, key.pub, 10, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (latest)); + auto send = std::make_shared (latest, key.pub, 10, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); node->process_active (send); node->block_processor.flush (); node->block_confirm (send); @@ -5510,7 +5510,7 @@ TEST (rpc, simultaneous_calls) rpc.start (); boost::property_tree::ptree request; request.put ("action", "account_block_count"); - request.put ("account", nano::dev_genesis_key.pub.to_account ()); + request.put ("account", nano::dev::genesis_key.pub.to_account ()); constexpr auto num = 100; std::array, num> test_responses; @@ -5565,7 +5565,7 @@ TEST (rpc, in_process) rpc->start (); boost::property_tree::ptree request; request.put ("action", "account_balance"); - request.put ("account", nano::dev_genesis_key.pub.to_account ()); + request.put ("account", nano::dev::genesis_key.pub.to_account ()); auto response (wait_response (system, rpc, request)); std::string balance_text (response.get ("balance")); ASSERT_EQ ("340282366920938463463374607431768211455", balance_text); @@ -5614,11 +5614,11 @@ TEST (rpc, deprecated_account_format) auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "account_info"); - request.put ("account", nano::dev_genesis_key.pub.to_account ()); + request.put ("account", nano::dev::genesis_key.pub.to_account ()); auto response (wait_response (system, rpc, request)); boost::optional deprecated_account_format (response.get_optional ("deprecated_account_format")); ASSERT_FALSE (deprecated_account_format.is_initialized ()); - std::string account_text (nano::dev_genesis_key.pub.to_account ()); + std::string account_text (nano::dev::genesis_key.pub.to_account ()); account_text[4] = '-'; request.put ("account", account_text); auto response2 (wait_response (system, rpc, request)); @@ -5633,15 +5633,15 @@ TEST (rpc, epoch_upgrade) nano::system system; auto node = add_ipc_enabled_node (system); nano::keypair key1, key2, key3; - nano::keypair epoch_signer (nano::dev_genesis_key); - auto send1 (std::make_shared (nano::dev_genesis_key.pub, nano::dev::genesis->hash (), nano::dev_genesis_key.pub, nano::genesis_amount - 1, key1.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); // to opened account + nano::keypair epoch_signer (nano::dev::genesis_key); + auto send1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::genesis_amount - 1, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); // to opened account ASSERT_EQ (nano::process_result::progress, node->process (*send1).code); - auto send2 (std::make_shared (nano::dev_genesis_key.pub, send1->hash (), nano::dev_genesis_key.pub, nano::genesis_amount - 2, key2.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send1->hash ()))); // to unopened account (pending) + auto send2 (std::make_shared (nano::dev::genesis_key.pub, send1->hash (), nano::dev::genesis_key.pub, nano::genesis_amount - 2, key2.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1->hash ()))); // to unopened account (pending) ASSERT_EQ (nano::process_result::progress, node->process (*send2).code); - auto send3 (std::make_shared (nano::dev_genesis_key.pub, send2->hash (), nano::dev_genesis_key.pub, nano::genesis_amount - 3, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send2->hash ()))); // to burn (0) + auto send3 (std::make_shared (nano::dev::genesis_key.pub, send2->hash (), nano::dev::genesis_key.pub, nano::genesis_amount - 3, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send2->hash ()))); // to burn (0) ASSERT_EQ (nano::process_result::progress, node->process (*send3).code); nano::account max_account (std::numeric_limits::max ()); - auto send4 (std::make_shared (nano::dev_genesis_key.pub, send3->hash (), nano::dev_genesis_key.pub, nano::genesis_amount - 4, max_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send3->hash ()))); // to max account + auto send4 (std::make_shared (nano::dev::genesis_key.pub, send3->hash (), nano::dev::genesis_key.pub, nano::genesis_amount - 4, max_account, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send3->hash ()))); // to max account ASSERT_EQ (nano::process_result::progress, node->process (*send4).code); auto open (std::make_shared (key1.pub, 0, key1.pub, 1, send1->hash (), key1.prv, key1.pub, *system.work.generate (key1.pub))); ASSERT_EQ (nano::process_result::progress, node->process (*open).code); @@ -5682,10 +5682,10 @@ TEST (rpc, epoch_upgrade) rpc_ctx->io_scope->reset (); // Epoch 2 upgrade - auto genesis_latest (node->latest (nano::dev_genesis_key.pub)); - auto send5 (std::make_shared (nano::dev_genesis_key.pub, genesis_latest, nano::dev_genesis_key.pub, nano::genesis_amount - 5, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (genesis_latest))); // to burn (0) + auto genesis_latest (node->latest (nano::dev::genesis_key.pub)); + auto send5 (std::make_shared (nano::dev::genesis_key.pub, genesis_latest, nano::dev::genesis_key.pub, nano::genesis_amount - 5, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (genesis_latest))); // to burn (0) ASSERT_EQ (nano::process_result::progress, node->process (*send5).code); - auto send6 (std::make_shared (nano::dev_genesis_key.pub, send5->hash (), nano::dev_genesis_key.pub, nano::genesis_amount - 6, key1.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send5->hash ()))); // to key1 (again) + auto send6 (std::make_shared (nano::dev::genesis_key.pub, send5->hash (), nano::dev::genesis_key.pub, nano::genesis_amount - 6, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send5->hash ()))); // to key1 (again) ASSERT_EQ (nano::process_result::progress, node->process (*send6).code); auto key1_latest (node->latest (key1.pub)); auto send7 (std::make_shared (key1.pub, key1_latest, key1.pub, 0, key3.pub, key1.prv, key1.pub, *system.work.generate (key1_latest))); // to key3 @@ -5727,15 +5727,15 @@ TEST (rpc, epoch_upgrade_multithreaded) node_config.work_threads = 4; auto node = add_ipc_enabled_node (system, node_config); nano::keypair key1, key2, key3; - nano::keypair epoch_signer (nano::dev_genesis_key); - auto send1 (std::make_shared (nano::dev_genesis_key.pub, nano::dev::genesis->hash (), nano::dev_genesis_key.pub, nano::genesis_amount - 1, key1.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); // to opened account + nano::keypair epoch_signer (nano::dev::genesis_key); + auto send1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::genesis_amount - 1, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); // to opened account ASSERT_EQ (nano::process_result::progress, node->process (*send1).code); - auto send2 (std::make_shared (nano::dev_genesis_key.pub, send1->hash (), nano::dev_genesis_key.pub, nano::genesis_amount - 2, key2.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send1->hash ()))); // to unopened account (pending) + auto send2 (std::make_shared (nano::dev::genesis_key.pub, send1->hash (), nano::dev::genesis_key.pub, nano::genesis_amount - 2, key2.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1->hash ()))); // to unopened account (pending) ASSERT_EQ (nano::process_result::progress, node->process (*send2).code); - auto send3 (std::make_shared (nano::dev_genesis_key.pub, send2->hash (), nano::dev_genesis_key.pub, nano::genesis_amount - 3, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send2->hash ()))); // to burn (0) + auto send3 (std::make_shared (nano::dev::genesis_key.pub, send2->hash (), nano::dev::genesis_key.pub, nano::genesis_amount - 3, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send2->hash ()))); // to burn (0) ASSERT_EQ (nano::process_result::progress, node->process (*send3).code); nano::account max_account (std::numeric_limits::max ()); - auto send4 (std::make_shared (nano::dev_genesis_key.pub, send3->hash (), nano::dev_genesis_key.pub, nano::genesis_amount - 4, max_account, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send3->hash ()))); // to max account + auto send4 (std::make_shared (nano::dev::genesis_key.pub, send3->hash (), nano::dev::genesis_key.pub, nano::genesis_amount - 4, max_account, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send3->hash ()))); // to max account ASSERT_EQ (nano::process_result::progress, node->process (*send4).code); auto open (std::make_shared (key1.pub, 0, key1.pub, 1, send1->hash (), key1.prv, key1.pub, *system.work.generate (key1.pub))); ASSERT_EQ (nano::process_result::progress, node->process (*open).code); @@ -5775,10 +5775,10 @@ TEST (rpc, epoch_upgrade_multithreaded) rpc_ctx->io_scope->reset (); // Epoch 2 upgrade - auto genesis_latest (node->latest (nano::dev_genesis_key.pub)); - auto send5 (std::make_shared (nano::dev_genesis_key.pub, genesis_latest, nano::dev_genesis_key.pub, nano::genesis_amount - 5, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (genesis_latest))); // to burn (0) + auto genesis_latest (node->latest (nano::dev::genesis_key.pub)); + auto send5 (std::make_shared (nano::dev::genesis_key.pub, genesis_latest, nano::dev::genesis_key.pub, nano::genesis_amount - 5, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (genesis_latest))); // to burn (0) ASSERT_EQ (nano::process_result::progress, node->process (*send5).code); - auto send6 (std::make_shared (nano::dev_genesis_key.pub, send5->hash (), nano::dev_genesis_key.pub, nano::genesis_amount - 6, key1.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send5->hash ()))); // to key1 (again) + auto send6 (std::make_shared (nano::dev::genesis_key.pub, send5->hash (), nano::dev::genesis_key.pub, nano::genesis_amount - 6, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send5->hash ()))); // to key1 (again) ASSERT_EQ (nano::process_result::progress, node->process (*send6).code); auto key1_latest (node->latest (key1.pub)); auto send7 (std::make_shared (key1.pub, key1_latest, key1.pub, 0, key3.pub, key1.prv, key1.pub, *system.work.generate (key1_latest))); // to key3 @@ -5821,7 +5821,7 @@ TEST (rpc, account_lazy_start) auto node1 = system.add_node (node_flags); nano::keypair key; // Generating test chain - auto send1 (std::make_shared (nano::dev_genesis_key.pub, nano::dev::genesis->hash (), nano::dev_genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); + auto send1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); ASSERT_EQ (nano::process_result::progress, node1->process (*send1).code); auto open (std::make_shared (send1->hash (), key.pub, key.pub, key.prv, key.pub, *system.work.generate (key.pub))); ASSERT_EQ (nano::process_result::progress, node1->process (*open).code); @@ -5854,14 +5854,14 @@ TEST (rpc, receive) auto wallet = system.wallet (0); std::string wallet_text; node->wallets.items.begin ()->first.encode_hex (wallet_text); - wallet->insert_adhoc (nano::dev_genesis_key.prv); + wallet->insert_adhoc (nano::dev::genesis_key.prv); nano::keypair key1; wallet->insert_adhoc (key1.prv); - auto send1 (wallet->send_action (nano::dev_genesis_key.pub, key1.pub, node->config.receive_minimum.number (), *node->work_generate_blocking (nano::dev::genesis->hash ()))); - ASSERT_TIMELY (5s, node->balance (nano::dev_genesis_key.pub) != nano::genesis_amount); + auto send1 (wallet->send_action (nano::dev::genesis_key.pub, key1.pub, node->config.receive_minimum.number (), *node->work_generate_blocking (nano::dev::genesis->hash ()))); + ASSERT_TIMELY (5s, node->balance (nano::dev::genesis_key.pub) != nano::genesis_amount); ASSERT_TIMELY (10s, !node->store.account.exists (node->store.tx_begin_read (), key1.pub)); // Send below minimum receive amount - auto send2 (wallet->send_action (nano::dev_genesis_key.pub, key1.pub, node->config.receive_minimum.number () - 1, *node->work_generate_blocking (send1->hash ()))); + auto send2 (wallet->send_action (nano::dev::genesis_key.pub, key1.pub, node->config.receive_minimum.number () - 1, *node->work_generate_blocking (send1->hash ()))); auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "receive"); @@ -5895,11 +5895,11 @@ TEST (rpc, receive_unopened) auto wallet = system.wallet (0); std::string wallet_text; node->wallets.items.begin ()->first.encode_hex (wallet_text); - wallet->insert_adhoc (nano::dev_genesis_key.prv); + wallet->insert_adhoc (nano::dev::genesis_key.prv); // Test receiving for unopened account nano::keypair key1; - auto send1 (wallet->send_action (nano::dev_genesis_key.pub, key1.pub, node->config.receive_minimum.number () - 1, *node->work_generate_blocking (nano::dev::genesis->hash ()))); - ASSERT_TIMELY (5s, !node->balance (nano::dev_genesis_key.pub) != nano::genesis_amount); + auto send1 (wallet->send_action (nano::dev::genesis_key.pub, key1.pub, node->config.receive_minimum.number () - 1, *node->work_generate_blocking (nano::dev::genesis->hash ()))); + ASSERT_TIMELY (5s, !node->balance (nano::dev::genesis_key.pub) != nano::genesis_amount); ASSERT_FALSE (node->store.account.exists (node->store.tx_begin_read (), key1.pub)); ASSERT_TRUE (node->store.block.exists (node->store.tx_begin_read (), send1->hash ())); wallet->insert_adhoc (key1.prv); // should not auto receive, amount sent was lower than minimum @@ -5916,15 +5916,15 @@ TEST (rpc, receive_unopened) ASSERT_FALSE (node->store.account.get (node->store.tx_begin_read (), key1.pub, info)); ASSERT_EQ (info.head, info.open_block); ASSERT_EQ (info.head.to_string (), receive_text); - ASSERT_EQ (info.representative, nano::dev_genesis_key.pub); + ASSERT_EQ (info.representative, nano::dev::genesis_key.pub); } rpc_ctx->io_scope->reset (); // Test receiving for an unopened with a different wallet representative nano::keypair key2; - auto prev_amount (node->balance (nano::dev_genesis_key.pub)); - auto send2 (wallet->send_action (nano::dev_genesis_key.pub, key2.pub, node->config.receive_minimum.number () - 1, *node->work_generate_blocking (send1->hash ()))); - ASSERT_TIMELY (5s, !node->balance (nano::dev_genesis_key.pub) != prev_amount); + auto prev_amount (node->balance (nano::dev::genesis_key.pub)); + auto send2 (wallet->send_action (nano::dev::genesis_key.pub, key2.pub, node->config.receive_minimum.number () - 1, *node->work_generate_blocking (send1->hash ()))); + ASSERT_TIMELY (5s, !node->balance (nano::dev::genesis_key.pub) != prev_amount); ASSERT_FALSE (node->store.account.exists (node->store.tx_begin_read (), key2.pub)); ASSERT_TRUE (node->store.block.exists (node->store.tx_begin_read (), send2->hash ())); nano::public_key rep; @@ -5955,13 +5955,13 @@ TEST (rpc, receive_work_disabled) auto wallet = system.wallet (1); std::string wallet_text; node->wallets.items.begin ()->first.encode_hex (wallet_text); - wallet->insert_adhoc (nano::dev_genesis_key.prv); + wallet->insert_adhoc (nano::dev::genesis_key.prv); nano::keypair key1; nano::genesis genesis; ASSERT_TRUE (worker_node.work_generation_enabled ()); - auto send1 (wallet->send_action (nano::dev_genesis_key.pub, key1.pub, node->config.receive_minimum.number () - 1, *worker_node.work_generate_blocking (genesis.hash ()), false)); + auto send1 (wallet->send_action (nano::dev::genesis_key.pub, key1.pub, node->config.receive_minimum.number () - 1, *worker_node.work_generate_blocking (genesis.hash ()), false)); ASSERT_TRUE (send1 != nullptr); - ASSERT_TIMELY (5s, node->balance (nano::dev_genesis_key.pub) != nano::genesis_amount); + ASSERT_TIMELY (5s, node->balance (nano::dev::genesis_key.pub) != nano::genesis_amount); ASSERT_FALSE (node->store.account.exists (node->store.tx_begin_read (), key1.pub)); ASSERT_TRUE (node->store.block.exists (node->store.tx_begin_read (), send1->hash ())); wallet->insert_adhoc (key1.prv); @@ -5990,16 +5990,16 @@ TEST (rpc, receive_pruned) auto wallet2 = system.wallet (1); std::string wallet_text; node2->wallets.items.begin ()->first.encode_hex (wallet_text); - wallet1->insert_adhoc (nano::dev_genesis_key.prv); + wallet1->insert_adhoc (nano::dev::genesis_key.prv); nano::keypair key1; wallet2->insert_adhoc (key1.prv); - auto send1 (wallet1->send_action (nano::dev_genesis_key.pub, key1.pub, node2->config.receive_minimum.number (), *node2->work_generate_blocking (nano::dev::genesis->hash ()))); - ASSERT_TIMELY (5s, node2->balance (nano::dev_genesis_key.pub) != nano::genesis_amount); + auto send1 (wallet1->send_action (nano::dev::genesis_key.pub, key1.pub, node2->config.receive_minimum.number (), *node2->work_generate_blocking (nano::dev::genesis->hash ()))); + ASSERT_TIMELY (5s, node2->balance (nano::dev::genesis_key.pub) != nano::genesis_amount); ASSERT_TIMELY (10s, !node2->store.account.exists (node2->store.tx_begin_read (), key1.pub)); // Send below minimum receive amount - auto send2 (wallet1->send_action (nano::dev_genesis_key.pub, key1.pub, node2->config.receive_minimum.number () - 1, *node2->work_generate_blocking (send1->hash ()))); + auto send2 (wallet1->send_action (nano::dev::genesis_key.pub, key1.pub, node2->config.receive_minimum.number () - 1, *node2->work_generate_blocking (send1->hash ()))); // Extra send frontier - auto send3 (wallet1->send_action (nano::dev_genesis_key.pub, key1.pub, node2->config.receive_minimum.number (), *node2->work_generate_blocking (send1->hash ()))); + auto send3 (wallet1->send_action (nano::dev::genesis_key.pub, key1.pub, node2->config.receive_minimum.number (), *node2->work_generate_blocking (send1->hash ()))); // Pruning ASSERT_TIMELY (5s, node2->ledger.cache.cemented_count == 6 && node2->confirmation_height_processor.current ().is_zero () && node2->confirmation_height_processor.awaiting_processing_size () == 0); { @@ -6211,8 +6211,8 @@ TEST (rpc, confirmation_active) auto [rpc, rpc_ctx] = add_rpc (system, node1); nano::genesis genesis; - auto send1 (std::make_shared (genesis.hash (), nano::public_key (), nano::genesis_amount - 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (genesis.hash ()))); - auto send2 (std::make_shared (send1->hash (), nano::public_key (), nano::genesis_amount - 200, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send1->hash ()))); + auto send1 (std::make_shared (genesis.hash (), nano::public_key (), nano::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (genesis.hash ()))); + auto send2 (std::make_shared (send1->hash (), nano::public_key (), nano::genesis_amount - 200, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1->hash ()))); node1->process_active (send1); node1->process_active (send2); nano::blocks_confirm (*node1, { send1, send2 }); @@ -6240,7 +6240,7 @@ TEST (rpc, confirmation_info) auto [rpc, rpc_ctx] = add_rpc (system, node1); nano::genesis genesis; - auto send (std::make_shared (genesis.hash (), nano::public_key (), nano::genesis_amount - 100, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (genesis.hash ()))); + auto send (std::make_shared (genesis.hash (), nano::public_key (), nano::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (genesis.hash ()))); node1->process_active (send); node1->block_processor.flush (); node1->scheduler.flush (); diff --git a/nano/secure/common.cpp b/nano/secure/common.cpp index 4ebd64f4eb..3ef5c04bf2 100644 --- a/nano/secure/common.cpp +++ b/nano/secure/common.cpp @@ -81,6 +81,7 @@ std::string const test_canary_public_key_data = nano::get_env_or_default ("NANO_ nano::ledger_constants nano::dev::constants{ nano::networks::nano_dev_network }; std::shared_ptr & nano::dev::genesis = nano::dev::constants.genesis; +nano::keypair nano::dev::genesis_key{ dev_private_key_data }; nano::network_params::network_params () : network_params (network_constants::active_network) @@ -107,7 +108,6 @@ nano::ledger_constants::ledger_constants (nano::network_constants & network_cons nano::ledger_constants::ledger_constants (nano::networks network_a) : zero_key ("0"), - dev_genesis_key (dev_private_key_data), nano_dev_account (dev_public_key_data), nano_beta_account (beta_public_key_data), nano_live_account (live_public_key_data), diff --git a/nano/secure/common.hpp b/nano/secure/common.hpp index 3648b8987e..bce7c83a20 100644 --- a/nano/secure/common.hpp +++ b/nano/secure/common.hpp @@ -371,7 +371,6 @@ class ledger_constants nano::account genesis_account () const; nano::block_hash genesis_hash () const; nano::keypair zero_key; - nano::keypair dev_genesis_key; nano::account nano_dev_account; nano::account nano_beta_account; nano::account nano_live_account; @@ -400,6 +399,7 @@ namespace dev { extern nano::ledger_constants constants; extern std::shared_ptr & genesis; + extern nano::keypair genesis_key; } /** Constants which depend on random values (this class should never be used globally due to CryptoPP globals potentially not being initialized) */ diff --git a/nano/slow_test/node.cpp b/nano/slow_test/node.cpp index e9492dfbce..008958c506 100644 --- a/nano/slow_test/node.cpp +++ b/nano/slow_test/node.cpp @@ -22,7 +22,7 @@ TEST (system, generate_mass_activity) nano::node_config node_config (nano::get_available_port (), system.logging); node_config.enable_voting = false; // Prevent blocks cementing auto node = system.add_node (node_config); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); uint32_t count (20); system.generate_mass_activity (count, *system.nodes[0]); auto transaction (system.nodes[0]->store.tx_begin_read ()); @@ -38,7 +38,7 @@ TEST (system, generate_mass_activity_long) node_config.enable_voting = false; // Prevent blocks cementing auto node = system.add_node (node_config); nano::thread_runner runner (system.io_ctx, system.nodes[0]->config.io_threads); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); uint32_t count (1000000000); system.generate_mass_activity (count, *system.nodes[0]); auto transaction (system.nodes[0]->store.tx_begin_read ()); @@ -58,20 +58,20 @@ TEST (system, receive_while_synchronizing) node_config.enable_voting = false; // Prevent blocks cementing auto node = system.add_node (node_config); nano::thread_runner runner (system.io_ctx, system.nodes[0]->config.io_threads); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); uint32_t count (1000); system.generate_mass_activity (count, *system.nodes[0]); nano::keypair key; auto node1 (std::make_shared (system.io_ctx, nano::get_available_port (), nano::unique_path (), system.logging, system.work)); ASSERT_FALSE (node1->init_error ()); auto wallet (node1->wallets.create (1)); - wallet->insert_adhoc (nano::dev_genesis_key.prv); // For voting + wallet->insert_adhoc (nano::dev::genesis_key.prv); // For voting ASSERT_EQ (key.pub, wallet->insert_adhoc (key.prv)); node1->start (); system.nodes.push_back (node1); ASSERT_NE (nullptr, nano::establish_tcp (system, *node1, node->network.endpoint ())); node1->workers.add_timed_task (std::chrono::steady_clock::now () + std::chrono::milliseconds (200), ([&system, &key] () { - auto hash (system.wallet (0)->send_sync (nano::dev_genesis_key.pub, key.pub, system.nodes[0]->config.receive_minimum.number ())); + auto hash (system.wallet (0)->send_sync (nano::dev::genesis_key.pub, key.pub, system.nodes[0]->config.receive_minimum.number ())); auto transaction (system.nodes[0]->store.tx_begin_read ()); auto block (system.nodes[0]->store.block.get (transaction, hash)); std::string block_text; @@ -101,16 +101,16 @@ TEST (ledger, deep_account_compute) nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key; auto balance (nano::genesis_amount - 1); - nano::send_block send (genesis.hash (), key.pub, balance, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block send (genesis.hash (), key.pub, balance, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); - nano::open_block open (send.hash (), nano::dev_genesis_key.pub, key.pub, key.prv, key.pub, *pool.generate (key.pub)); + nano::open_block open (send.hash (), nano::dev::genesis_key.pub, key.pub, key.prv, key.pub, *pool.generate (key.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open).code); auto sprevious (send.hash ()); auto rprevious (open.hash ()); for (auto i (0), n (100000); i != n; ++i) { balance -= 1; - nano::send_block send (sprevious, key.pub, balance, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (sprevious)); + nano::send_block send (sprevious, key.pub, balance, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (sprevious)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); sprevious = send.hash (); nano::receive_block receive (rprevious, send.hash (), key.prv, key.pub, *pool.generate (rprevious)); @@ -132,21 +132,21 @@ TEST (wallet, multithreaded_send_async) nano::system system (1); nano::keypair key; auto wallet_l (system.wallet (0)); - wallet_l->insert_adhoc (nano::dev_genesis_key.prv); + wallet_l->insert_adhoc (nano::dev::genesis_key.prv); wallet_l->insert_adhoc (key.prv); for (auto i (0); i < 20; ++i) { threads.push_back (boost::thread ([wallet_l, &key] () { for (auto i (0); i < 1000; ++i) { - wallet_l->send_async (nano::dev_genesis_key.pub, key.pub, 1000, [] (std::shared_ptr const & block_a) { + wallet_l->send_async (nano::dev::genesis_key.pub, key.pub, 1000, [] (std::shared_ptr const & block_a) { ASSERT_FALSE (block_a == nullptr); ASSERT_FALSE (block_a->hash ().is_zero ()); }); } })); } - ASSERT_TIMELY (1000s, system.nodes[0]->balance (nano::dev_genesis_key.pub) == (nano::genesis_amount - 20 * 1000 * 1000)); + ASSERT_TIMELY (1000s, system.nodes[0]->balance (nano::dev::genesis_key.pub) == (nano::genesis_amount - 20 * 1000 * 1000)); } for (auto i (threads.begin ()), n (threads.end ()); i != n; ++i) { @@ -186,15 +186,15 @@ TEST (node, fork_storm) nano::node_flags flags; flags.disable_max_peers_per_ip = true; nano::system system (64, nano::transport::transport_type::tcp, flags); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - auto previous (system.nodes[0]->latest (nano::dev_genesis_key.pub)); - auto balance (system.nodes[0]->balance (nano::dev_genesis_key.pub)); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); + auto previous (system.nodes[0]->latest (nano::dev::genesis_key.pub)); + auto balance (system.nodes[0]->balance (nano::dev::genesis_key.pub)); ASSERT_FALSE (previous.is_zero ()); for (auto j (0); j != system.nodes.size (); ++j) { balance -= 1; nano::keypair key; - nano::send_block send (previous, key.pub, balance, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0); + nano::send_block send (previous, key.pub, balance, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0); system.nodes[j]->work_generate_blocking (send); previous = send.hash (); for (auto i (0); i != system.nodes.size (); ++i) @@ -393,7 +393,7 @@ TEST (store, unchecked_load) { nano::system system (1); auto & node (*system.nodes[0]); - auto block (std::make_shared (0, 0, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); + auto block (std::make_shared (0, 0, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); constexpr auto num_unchecked = 1000000; for (auto i (0); i < 1000000; ++i) { @@ -408,10 +408,10 @@ TEST (store, vote_load) { nano::system system (1); auto & node (*system.nodes[0]); - auto block (std::make_shared (0, 0, 0, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, 0)); + auto block (std::make_shared (0, 0, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); for (auto i (0); i < 1000000; ++i) { - auto vote (std::make_shared (nano::dev_genesis_key.pub, nano::dev_genesis_key.prv, i, block)); + auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, i, block)); node.vote_processor.vote (vote, std::make_shared (node)); } } @@ -482,13 +482,13 @@ TEST (wallets, rep_scan) TEST (node, mass_vote_by_hash) { nano::system system (1); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::block_hash previous (nano::dev::genesis->hash ()); nano::keypair key; std::vector> blocks; for (auto i (0); i < 10000; ++i) { - auto block (std::make_shared (nano::dev_genesis_key.pub, previous, nano::dev_genesis_key.pub, nano::genesis_amount - (i + 1) * nano::Gxrb_ratio, key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (previous))); + auto block (std::make_shared (nano::dev::genesis_key.pub, previous, nano::dev::genesis_key.pub, nano::genesis_amount - (i + 1) * nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (previous))); previous = block->hash (); blocks.push_back (block); } @@ -507,13 +507,13 @@ TEST (confirmation_height, many_accounts_single_confirmation) node_config.online_weight_minimum = 100; node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto node = system.add_node (node_config); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); // The number of frontiers should be more than the nano::confirmation_height::unbounded_cutoff to test the amount of blocks confirmed is correct. node->confirmation_height_processor.batch_write_size = 500; auto const num_accounts = nano::confirmation_height::unbounded_cutoff * 2 + 50; - nano::keypair last_keypair = nano::dev_genesis_key; - auto last_open_hash = node->latest (nano::dev_genesis_key.pub); + nano::keypair last_keypair = nano::dev::genesis_key; + auto last_open_hash = node->latest (nano::dev::genesis_key.pub); { auto transaction = node->store.tx_begin_write (); for (auto i = num_accounts - 1; i > 0; --i) @@ -577,11 +577,11 @@ TEST (confirmation_height, many_accounts_many_confirmations) node_config.online_weight_minimum = 100; node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto node = system.add_node (node_config); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); node->confirmation_height_processor.batch_write_size = 500; auto const num_accounts = nano::confirmation_height::unbounded_cutoff * 2 + 50; - auto latest_genesis = node->latest (nano::dev_genesis_key.pub); + auto latest_genesis = node->latest (nano::dev::genesis_key.pub); std::vector> open_blocks; { auto transaction = node->store.tx_begin_write (); @@ -590,9 +590,9 @@ TEST (confirmation_height, many_accounts_many_confirmations) nano::keypair key; system.wallet (0)->insert_adhoc (key.prv); - nano::send_block send (latest_genesis, key.pub, node->online_reps.delta (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (latest_genesis)); + nano::send_block send (latest_genesis, key.pub, node->online_reps.delta (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest_genesis)); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, send).code); - auto open = std::make_shared (send.hash (), nano::dev_genesis_key.pub, key.pub, key.prv, key.pub, *system.work.generate (key.pub)); + auto open = std::make_shared (send.hash (), nano::dev::genesis_key.pub, key.pub, key.prv, key.pub, *system.work.generate (key.pub)); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, *open).code); open_blocks.push_back (std::move (open)); latest_genesis = send.hash (); @@ -639,15 +639,15 @@ TEST (confirmation_height, long_chains) node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto node = system.add_node (node_config); nano::keypair key1; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); - nano::block_hash latest (node->latest (nano::dev_genesis_key.pub)); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); + nano::block_hash latest (node->latest (nano::dev::genesis_key.pub)); system.wallet (0)->insert_adhoc (key1.prv); node->confirmation_height_processor.batch_write_size = 500; auto const num_blocks = nano::confirmation_height::unbounded_cutoff * 2 + 50; // First open the other account - nano::send_block send (latest, key1.pub, nano::genesis_amount - nano::Gxrb_ratio + num_blocks + 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (latest)); + nano::send_block send (latest, key1.pub, nano::genesis_amount - nano::Gxrb_ratio + num_blocks + 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); nano::open_block open (send.hash (), nano::dev::genesis->account (), key1.pub, key1.prv, key1.pub, *system.work.generate (key1.pub)); { auto transaction = node->store.tx_begin_write (); @@ -662,7 +662,7 @@ TEST (confirmation_height, long_chains) auto transaction = node->store.tx_begin_write (); for (auto i = num_blocks - 1; i > 0; --i) { - nano::send_block send (previous_genesis_chain_hash, key1.pub, nano::genesis_amount - nano::Gxrb_ratio + i + 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (previous_genesis_chain_hash)); + nano::send_block send (previous_genesis_chain_hash, key1.pub, nano::genesis_amount - nano::Gxrb_ratio + i + 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (previous_genesis_chain_hash)); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, send).code); nano::receive_block receive (previous_destination_chain_hash, send.hash (), key1.prv, key1.pub, *system.work.generate (previous_destination_chain_hash)); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, receive).code); @@ -673,12 +673,12 @@ TEST (confirmation_height, long_chains) } // Send one from destination to genesis and pocket it - nano::send_block send1 (previous_destination_chain_hash, nano::dev_genesis_key.pub, nano::Gxrb_ratio - 2, key1.prv, key1.pub, *system.work.generate (previous_destination_chain_hash)); - auto receive1 (std::make_shared (nano::dev_genesis_key.pub, previous_genesis_chain_hash, nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio + 1, send1.hash (), nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (previous_genesis_chain_hash))); + nano::send_block send1 (previous_destination_chain_hash, nano::dev::genesis_key.pub, nano::Gxrb_ratio - 2, key1.prv, key1.pub, *system.work.generate (previous_destination_chain_hash)); + auto receive1 (std::make_shared (nano::dev::genesis_key.pub, previous_genesis_chain_hash, nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio + 1, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (previous_genesis_chain_hash))); // Unpocketed. Send to a non-existing account to prevent auto receives from the wallet adjusting expected confirmation height nano::keypair key2; - nano::state_block send2 (nano::dev::genesis->account (), receive1->hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, key2.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (receive1->hash ())); + nano::state_block send2 (nano::dev::genesis->account (), receive1->hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, key2.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (receive1->hash ())); { auto transaction = node->store.tx_begin_write (); @@ -699,9 +699,9 @@ TEST (confirmation_height, long_chains) auto transaction (node->store.tx_begin_read ()); nano::account_info account_info; - ASSERT_FALSE (node->store.account.get (transaction, nano::dev_genesis_key.pub, account_info)); + ASSERT_FALSE (node->store.account.get (transaction, nano::dev::genesis_key.pub, account_info)); nano::confirmation_height_info confirmation_height_info; - ASSERT_FALSE (node->store.confirmation_height.get (transaction, nano::dev_genesis_key.pub, confirmation_height_info)); + ASSERT_FALSE (node->store.confirmation_height.get (transaction, nano::dev::genesis_key.pub, confirmation_height_info)); ASSERT_EQ (num_blocks + 2, confirmation_height_info.height); ASSERT_EQ (num_blocks + 3, account_info.block_count); // Includes the unpocketed send @@ -732,13 +732,13 @@ TEST (confirmation_height, dynamic_algorithm) node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto node = system.add_node (node_config); nano::keypair key; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto const num_blocks = nano::confirmation_height::unbounded_cutoff; auto latest_genesis = nano::genesis ().open; std::vector> state_blocks; for (auto i = 0; i < num_blocks; ++i) { - auto send (std::make_shared (nano::dev_genesis_key.pub, latest_genesis->hash (), nano::dev_genesis_key.pub, nano::genesis_amount - i - 1, key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (latest_genesis->hash ()))); + auto send (std::make_shared (nano::dev::genesis_key.pub, latest_genesis->hash (), nano::dev::genesis_key.pub, nano::genesis_amount - i - 1, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest_genesis->hash ()))); latest_genesis = send; state_blocks.push_back (send); } @@ -786,15 +786,15 @@ TEST (confirmation_height, dynamic_algorithm_no_transition_while_pending) node_flags.force_use_write_database_queue = true; auto node = system.add_node (node_config, node_flags); nano::keypair key; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); - auto latest_genesis = node->latest (nano::dev_genesis_key.pub); + auto latest_genesis = node->latest (nano::dev::genesis_key.pub); std::vector> state_blocks; auto const num_blocks = nano::confirmation_height::unbounded_cutoff - 2; auto add_block_to_genesis_chain = [&] (nano::write_transaction & transaction) { static int num = 0; - auto send (std::make_shared (nano::dev_genesis_key.pub, latest_genesis, nano::dev_genesis_key.pub, nano::genesis_amount - num - 1, key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (latest_genesis))); + auto send (std::make_shared (nano::dev::genesis_key.pub, latest_genesis, nano::dev::genesis_key.pub, nano::genesis_amount - num - 1, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest_genesis))); latest_genesis = send->hash (); state_blocks.push_back (send); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, *send).code); @@ -855,7 +855,7 @@ TEST (confirmation_height, many_accounts_send_receive_self) nano::node_flags node_flags; node_flags.confirmation_height_processor_mode = nano::confirmation_height_mode::unbounded; auto node = system.add_node (node_config); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); #ifndef NDEBUG auto const num_accounts = 10000; @@ -863,7 +863,7 @@ TEST (confirmation_height, many_accounts_send_receive_self) auto const num_accounts = 100000; #endif - auto latest_genesis = node->latest (nano::dev_genesis_key.pub); + auto latest_genesis = node->latest (nano::dev::genesis_key.pub); std::vector keys; std::vector> open_blocks; { @@ -873,9 +873,9 @@ TEST (confirmation_height, many_accounts_send_receive_self) nano::keypair key; keys.emplace_back (key); - nano::send_block send (latest_genesis, key.pub, nano::genesis_amount - 1 - i, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (latest_genesis)); + nano::send_block send (latest_genesis, key.pub, nano::genesis_amount - 1 - i, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest_genesis)); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, send).code); - auto open = std::make_shared (send.hash (), nano::dev_genesis_key.pub, key.pub, key.prv, key.pub, *system.work.generate (key.pub)); + auto open = std::make_shared (send.hash (), nano::dev::genesis_key.pub, key.pub, key.prv, key.pub, *system.work.generate (key.pub)); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, *open).code); open_blocks.push_back (std::move (open)); latest_genesis = send.hash (); @@ -994,9 +994,9 @@ TEST (confirmation_height, many_accounts_send_receive_self_no_elections) { nano::keypair key; keys.emplace_back (key); - nano::send_block send (latest_genesis, key.pub, nano::genesis_amount - 1 - i, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *pool.generate (latest_genesis)); + nano::send_block send (latest_genesis, key.pub, nano::genesis_amount - 1 - i, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (latest_genesis)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); - auto open = std::make_shared (send.hash (), nano::dev_genesis_key.pub, key.pub, key.prv, key.pub, *pool.generate (key.pub)); + auto open = std::make_shared (send.hash (), nano::dev::genesis_key.pub, key.pub, key.prv, key.pub, *pool.generate (key.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, *open).code); open_blocks.push_back (std::move (open)); latest_genesis = send.hash (); @@ -1077,11 +1077,11 @@ TEST (confirmation_height, prioritize_frontiers_overwrite) nano::node_config node_config (nano::get_available_port (), system.logging); node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto node = system.add_node (node_config); - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto num_accounts = node->active.max_priority_cementable_frontiers * 2; - nano::keypair last_keypair = nano::dev_genesis_key; - auto last_open_hash = node->latest (nano::dev_genesis_key.pub); + nano::keypair last_keypair = nano::dev::genesis_key; + auto last_open_hash = node->latest (nano::dev::genesis_key.pub); // Clear confirmation height so that the genesis account has the same amount of uncemented blocks as the other frontiers { auto transaction = node->store.tx_begin_write (); @@ -1119,9 +1119,9 @@ TEST (confirmation_height, prioritize_frontiers_overwrite) // Add a new frontier with 1 block, it should not be added to the frontier container because it is not higher than any already in the maxed out container nano::keypair key; - auto latest_genesis = node->latest (nano::dev_genesis_key.pub); - nano::send_block send (latest_genesis, key.pub, nano::Gxrb_ratio - 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (latest_genesis)); - nano::open_block open (send.hash (), nano::dev_genesis_key.pub, key.pub, key.prv, key.pub, *system.work.generate (key.pub)); + auto latest_genesis = node->latest (nano::dev::genesis_key.pub); + nano::send_block send (latest_genesis, key.pub, nano::Gxrb_ratio - 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest_genesis)); + nano::open_block open (send.hash (), nano::dev::genesis_key.pub, key.pub, key.prv, key.pub, *system.work.generate (key.pub)); { auto transaction = node->store.tx_begin_write (); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, send).code); @@ -1133,7 +1133,7 @@ TEST (confirmation_height, prioritize_frontiers_overwrite) ASSERT_EQ (node->active.priority_wallet_cementable_frontiers_size (), num_accounts / 2); // The account now has an extra block (2 in total) so has 1 more uncemented block than the next smallest frontier in the collection. - nano::send_block send1 (send.hash (), key.pub, nano::Gxrb_ratio - 2, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (send.hash ())); + nano::send_block send1 (send.hash (), key.pub, nano::Gxrb_ratio - 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send.hash ())); nano::receive_block receive (open.hash (), send1.hash (), key.prv, key.pub, *system.work.generate (open.hash ())); { auto transaction = node->store.tx_begin_write (); @@ -1308,11 +1308,11 @@ TEST (telemetry, under_load) nano::genesis genesis; nano::keypair key; nano::keypair key1; - system.wallet (0)->insert_adhoc (nano::dev_genesis_key.prv); + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); system.wallet (0)->insert_adhoc (key.prv); - auto latest_genesis = node->latest (nano::dev_genesis_key.pub); + auto latest_genesis = node->latest (nano::dev::genesis_key.pub); auto num_blocks = 150000; - auto send (std::make_shared (nano::dev_genesis_key.pub, latest_genesis, nano::dev_genesis_key.pub, nano::genesis_amount - num_blocks, key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (latest_genesis))); + auto send (std::make_shared (nano::dev::genesis_key.pub, latest_genesis, nano::dev::genesis_key.pub, nano::genesis_amount - num_blocks, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest_genesis))); node->process_active (send); latest_genesis = send->hash (); auto open (std::make_shared (key.pub, 0, key.pub, num_blocks, send->hash (), key.prv, key.pub, *system.work.generate (key.pub))); @@ -1329,7 +1329,7 @@ TEST (telemetry, under_load) } }; - std::thread thread1 (thread_func, nano::dev_genesis_key, latest_genesis, nano::genesis_amount - num_blocks); + std::thread thread1 (thread_func, nano::dev::genesis_key, latest_genesis, nano::genesis_amount - num_blocks); std::thread thread2 (thread_func, key, latest_key, num_blocks); ASSERT_TIMELY (200s, node1->ledger.cache.block_count == num_blocks * 2 + 3); @@ -1447,7 +1447,7 @@ TEST (telemetry, many_nodes) // Give all nodes a non-default number of blocks nano::keypair key; nano::genesis genesis; - nano::state_block send (nano::dev_genesis_key.pub, genesis.hash (), nano::dev_genesis_key.pub, nano::genesis_amount - nano::Mxrb_ratio, key.pub, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (genesis.hash ())); + nano::state_block send (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::genesis_amount - nano::Mxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (genesis.hash ())); for (auto node : system.nodes) { auto transaction (node->store.tx_begin_write ()); @@ -1594,8 +1594,8 @@ TEST (node, mass_epoch_upgrader) //node_config.work_peers = { { "192.168.1.101", 7000 } }; auto & node = *system.add_node (node_config); - auto balance = node.balance (nano::dev_genesis_key.pub); - auto latest = node.latest (nano::dev_genesis_key.pub); + auto balance = node.balance (nano::dev::genesis_key.pub); + auto latest = node.latest (nano::dev::genesis_key.pub); nano::uint128_t amount = 1; // Send to all accounts @@ -1608,12 +1608,12 @@ TEST (node, mass_epoch_upgrader) nano::state_block_builder builder; std::error_code ec; auto block = builder - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (latest) .balance (balance) .link (info.key.pub) - .representative (nano::dev_genesis_key.pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (latest, nano::work_threshold (nano::work_version::work_1, nano::block_details (nano::epoch::epoch_0, false, false, false)))) .build (ec); ASSERT_FALSE (ec); @@ -1647,7 +1647,7 @@ TEST (node, mass_epoch_upgrader) ASSERT_EQ (1 + total_accounts + opened.size (), node.ledger.cache.block_count); ASSERT_EQ (1 + opened.size (), node.ledger.cache.account_count); - nano::keypair epoch_signer (nano::dev_genesis_key); + nano::keypair epoch_signer (nano::dev::genesis_key); auto const block_count_before = node.ledger.cache.block_count.load (); auto const total_to_upgrade = 1 + total_accounts; @@ -1730,16 +1730,16 @@ TEST (node, mass_block_new) nano::state_block_builder builder; std::vector> send_blocks; auto send_threshold (nano::work_threshold (nano::work_version::work_1, nano::block_details (nano::epoch::epoch_2, true, false, false))); - auto latest_genesis = node.latest (nano::dev_genesis_key.pub); + auto latest_genesis = node.latest (nano::dev::genesis_key.pub); for (auto i = 0; i < num_blocks; ++i) { auto send = builder.make_block () - .account (nano::dev_genesis_key.pub) + .account (nano::dev::genesis_key.pub) .previous (latest_genesis) .balance (nano::genesis_amount - i - 1) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .link (keys[i].pub) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::work_version::work_1, latest_genesis, send_threshold)) .build (); latest_genesis = send->hash (); @@ -1834,7 +1834,7 @@ TEST (node, wallet_create_block_confirm_conflicts) auto transaction = node->store.tx_begin_write (); for (auto i = num_blocks - 1; i > 0; --i) { - nano::send_block send (latest, key1.pub, nano::genesis_amount - nano::Gxrb_ratio + i + 1, nano::dev_genesis_key.prv, nano::dev_genesis_key.pub, *system.work.generate (latest)); + nano::send_block send (latest, key1.pub, nano::genesis_amount - nano::Gxrb_ratio + i + 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, send).code); latest = send.hash (); } diff --git a/nano/test_common/system.cpp b/nano/test_common/system.cpp index a588829233..2377943227 100644 --- a/nano/test_common/system.cpp +++ b/nano/test_common/system.cpp @@ -158,12 +158,12 @@ void nano::system::ledger_initialization_set (std::vector const & { balance -= amount; nano::state_block_builder builder; - builder.account (nano::dev_genesis_key.pub) + builder.account (nano::dev::genesis_key.pub) .previous (previous) - .representative (nano::dev_genesis_key.pub) + .representative (nano::dev::genesis_key.pub) .link (i.pub) .balance (balance) - .sign (nano::dev_genesis_key.prv, nano::dev_genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*work.generate (previous)); initialization_blocks.emplace_back (builder.build_shared ()); previous = initialization_blocks.back ()->hash (); @@ -212,7 +212,7 @@ uint64_t nano::system::work_generate_limited (nano::block_hash const & root_a, u std::unique_ptr nano::upgrade_epoch (nano::work_pool & pool_a, nano::ledger & ledger_a, nano::epoch epoch_a) { auto transaction (ledger_a.store.tx_begin_write ()); - auto dev_genesis_key = nano::ledger_constants (nano::networks::nano_dev_network).dev_genesis_key; + auto dev_genesis_key = nano::dev::genesis_key; auto account = dev_genesis_key.pub; auto latest = ledger_a.latest (transaction, account); auto balance = ledger_a.account_balance (transaction, account); @@ -523,7 +523,7 @@ void nano::system::generate_send_new (nano::node & node_a, std::vector accounts; - auto dev_genesis_key = nano::ledger_constants (nano::networks::nano_dev_network).dev_genesis_key; + auto dev_genesis_key = nano::dev::genesis_key; wallet (0)->insert_adhoc (dev_genesis_key.prv); accounts.push_back (dev_genesis_key.pub); auto previous (std::chrono::steady_clock::now ()); diff --git a/nano/test_common/testutil.cpp b/nano/test_common/testutil.cpp index 36838a9929..1643f17d41 100644 --- a/nano/test_common/testutil.cpp +++ b/nano/test_common/testutil.cpp @@ -15,7 +15,6 @@ namespace nano::ledger_constants dev_constants (nano::networks::nano_dev_network); } -nano::keypair const & nano::dev_genesis_key (dev_constants.dev_genesis_key); nano::account const & nano::nano_dev_account (dev_constants.nano_dev_account); nano::uint128_t const & nano::genesis_amount (dev_constants.genesis_amount); diff --git a/nano/test_common/testutil.hpp b/nano/test_common/testutil.hpp index 9dc3b07ba8..082344da7e 100644 --- a/nano/test_common/testutil.hpp +++ b/nano/test_common/testutil.hpp @@ -53,7 +53,6 @@ class telemetry_data; class network_params; class system; -extern nano::keypair const & dev_genesis_key; extern nano::public_key const & nano_dev_account; extern nano::uint128_t const & genesis_amount; From ffa184a3cf45fc1f42e008e549600c4e1441c7f1 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Wed, 21 Jul 2021 00:20:44 +0100 Subject: [PATCH 097/346] Remove nano::nano_dev_account and use public key from dev genesis block. --- nano/core_test/ledger_walker.cpp | 4 ++-- nano/secure/common.cpp | 3 +-- nano/secure/common.hpp | 1 - nano/test_common/testutil.cpp | 1 - nano/test_common/testutil.hpp | 1 - 5 files changed, 3 insertions(+), 7 deletions(-) diff --git a/nano/core_test/ledger_walker.cpp b/nano/core_test/ledger_walker.cpp index 6c8aef22bc..59ce82420a 100644 --- a/nano/core_test/ledger_walker.cpp +++ b/nano/core_test/ledger_walker.cpp @@ -65,7 +65,7 @@ TEST (ledger_walker, genesis_account_longer) const auto transaction = node->ledger.store.tx_begin_read (); nano::account_info genesis_account_info{}; - ASSERT_FALSE (node->ledger.store.account.get (transaction, nano::nano_dev_account, genesis_account_info)); + ASSERT_FALSE (node->ledger.store.account.get (transaction, nano::dev::genesis_key.pub, genesis_account_info)); EXPECT_EQ (get_number_of_walked_blocks (genesis_account_info.open_block), 1); EXPECT_EQ (get_number_of_walked_blocks (genesis_account_info.head), 1); @@ -76,7 +76,7 @@ TEST (ledger_walker, genesis_account_longer) ASSERT_TRUE (send); EXPECT_EQ (get_number_of_walked_blocks (send->hash ()), 1 + itr * 2 - 1); ASSERT_TIMELY (3s, 1 + itr * 2 == node->ledger.cache.cemented_count); - ASSERT_FALSE (node->ledger.store.account.get (transaction, nano::nano_dev_account, genesis_account_info)); + ASSERT_FALSE (node->ledger.store.account.get (transaction, nano::dev::genesis_key.pub, genesis_account_info)); // TODO: check issue with account head // EXPECT_EQ(get_number_of_walked_blocks (genesis_account_info.head), 1 + itr * 2); } diff --git a/nano/secure/common.cpp b/nano/secure/common.cpp index 3ef5c04bf2..0f46a198f6 100644 --- a/nano/secure/common.cpp +++ b/nano/secure/common.cpp @@ -108,7 +108,6 @@ nano::ledger_constants::ledger_constants (nano::network_constants & network_cons nano::ledger_constants::ledger_constants (nano::networks network_a) : zero_key ("0"), - nano_dev_account (dev_public_key_data), nano_beta_account (beta_public_key_data), nano_live_account (live_public_key_data), nano_test_account (test_public_key_data), @@ -139,7 +138,7 @@ nano::ledger_constants::ledger_constants (nano::networks network_a) : nano::account nano_live_epoch_v2_signer; auto error (nano_live_epoch_v2_signer.decode_account ("nano_3qb6o6i1tkzr6jwr5s7eehfxwg9x6eemitdinbpi7u8bjjwsgqfj4wzser3x")); debug_assert (!error); - auto epoch_v2_signer (network_a == nano::networks::nano_dev_network ? nano_dev_account : network_a == nano::networks::nano_beta_network ? nano_beta_account : network_a == nano::networks::nano_test_network ? nano_test_account : nano_live_epoch_v2_signer); + auto epoch_v2_signer (network_a == nano::networks::nano_dev_network ? nano::dev::genesis_key.pub : network_a == nano::networks::nano_beta_network ? nano_beta_account : network_a == nano::networks::nano_test_network ? nano_test_account : nano_live_epoch_v2_signer); const char * epoch_message_v2 ("epoch v2 block"); strncpy ((char *)epoch_link_v2.bytes.data (), epoch_message_v2, epoch_link_v2.bytes.size ()); epochs.add (nano::epoch::epoch_2, epoch_v2_signer, epoch_link_v2); diff --git a/nano/secure/common.hpp b/nano/secure/common.hpp index bce7c83a20..06cf476265 100644 --- a/nano/secure/common.hpp +++ b/nano/secure/common.hpp @@ -371,7 +371,6 @@ class ledger_constants nano::account genesis_account () const; nano::block_hash genesis_hash () const; nano::keypair zero_key; - nano::account nano_dev_account; nano::account nano_beta_account; nano::account nano_live_account; nano::account nano_test_account; diff --git a/nano/test_common/testutil.cpp b/nano/test_common/testutil.cpp index 1643f17d41..aea9951a0a 100644 --- a/nano/test_common/testutil.cpp +++ b/nano/test_common/testutil.cpp @@ -15,7 +15,6 @@ namespace nano::ledger_constants dev_constants (nano::networks::nano_dev_network); } -nano::account const & nano::nano_dev_account (dev_constants.nano_dev_account); nano::uint128_t const & nano::genesis_amount (dev_constants.genesis_amount); void nano::wait_peer_connections (nano::system & system_a) diff --git a/nano/test_common/testutil.hpp b/nano/test_common/testutil.hpp index 082344da7e..7210f3b4ae 100644 --- a/nano/test_common/testutil.hpp +++ b/nano/test_common/testutil.hpp @@ -53,7 +53,6 @@ class telemetry_data; class network_params; class system; -extern nano::public_key const & nano_dev_account; extern nano::uint128_t const & genesis_amount; class stringstream_mt_sink : public boost::iostreams::sink From 8f3d9686cead2c25487215895152469b387ceecc Mon Sep 17 00:00:00 2001 From: clemahieu Date: Wed, 21 Jul 2021 00:54:04 +0100 Subject: [PATCH 098/346] Moving nano::genesis_amount in to nano::dev namespace. --- nano/core_test/active_transactions.cpp | 72 ++-- nano/core_test/block_store.cpp | 42 +-- nano/core_test/bootstrap.cpp | 52 +-- nano/core_test/confirmation_height.cpp | 90 ++--- nano/core_test/confirmation_solicitor.cpp | 10 +- nano/core_test/election.cpp | 12 +- nano/core_test/election_scheduler.cpp | 10 +- nano/core_test/frontiers_confirmation.cpp | 6 +- nano/core_test/gap_cache.cpp | 12 +- nano/core_test/ledger.cpp | 432 +++++++++++----------- nano/core_test/network_filter.cpp | 4 +- nano/core_test/node.cpp | 170 ++++----- nano/core_test/request_aggregator.cpp | 24 +- nano/core_test/system.cpp | 28 +- nano/core_test/vote_processor.cpp | 8 +- nano/core_test/voting.cpp | 8 +- nano/core_test/wallet.cpp | 8 +- nano/core_test/wallets.cpp | 4 +- nano/core_test/websocket.cpp | 16 +- nano/node/json_handler.cpp | 6 +- nano/node/node.cpp | 2 +- nano/qt/qt.cpp | 2 +- nano/qt_test/qt.cpp | 6 +- nano/rpc_test/rpc.cpp | 140 +++---- nano/secure/common.cpp | 2 +- nano/secure/common.hpp | 2 +- nano/secure/ledger.cpp | 2 +- nano/secure/store_partial.hpp | 2 +- nano/slow_test/node.cpp | 32 +- nano/test_common/system.cpp | 4 +- nano/test_common/testutil.cpp | 8 - 31 files changed, 604 insertions(+), 612 deletions(-) diff --git a/nano/core_test/active_transactions.cpp b/nano/core_test/active_transactions.cpp index c2d7acf0da..472c82c6bf 100644 --- a/nano/core_test/active_transactions.cpp +++ b/nano/core_test/active_transactions.cpp @@ -21,7 +21,7 @@ TEST (active_transactions, confirm_active) auto send = nano::send_block_builder () .previous (genesis.hash ()) .destination (nano::public_key ()) - .balance (nano::genesis_amount - 100) + .balance (nano::dev::genesis_amount - 100) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); @@ -49,7 +49,7 @@ TEST (active_transactions, confirm_active) ASSERT_FALSE (peers.empty ()); { nano::lock_guard guard (node2.rep_crawler.probable_reps_mutex); - node2.rep_crawler.probable_reps.emplace (nano::dev::genesis_key.pub, nano::genesis_amount, *peers.begin ()); + node2.rep_crawler.probable_reps.emplace (nano::dev::genesis_key.pub, nano::dev::genesis_amount, *peers.begin ()); } ASSERT_TIMELY (5s, election->votes ().size () != 1); // Votes were inserted (except for not_an_account) auto confirm_req_count (election->confirmation_request_count.load ()); @@ -89,7 +89,7 @@ TEST (active_transactions, confirm_frontier) ASSERT_FALSE (peers.empty ()); { nano::lock_guard guard (node2.rep_crawler.probable_reps_mutex); - node2.rep_crawler.probable_reps.emplace (nano::dev::genesis_key.pub, nano::genesis_amount, *peers.begin ()); + node2.rep_crawler.probable_reps.emplace (nano::dev::genesis_key.pub, nano::dev::genesis_amount, *peers.begin ()); } nano::genesis genesis; @@ -98,7 +98,7 @@ TEST (active_transactions, confirm_frontier) .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - 100) + .balance (nano::dev::genesis_amount - 100) .link (nano::public_key ()) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) @@ -193,7 +193,7 @@ TEST (active_transactions, inactive_votes_cache) auto send = nano::send_block_builder () .previous (latest) .destination (key.pub) - .balance (nano::genesis_amount - 100) + .balance (nano::dev::genesis_amount - 100) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (latest)) .build_shared (); @@ -215,7 +215,7 @@ TEST (active_transactions, inactive_votes_cache_non_final) auto send = nano::send_block_builder () .previous (latest) .destination (key.pub) - .balance (nano::genesis_amount - 100) + .balance (nano::dev::genesis_amount - 100) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (latest)) .build_shared (); @@ -228,7 +228,7 @@ TEST (active_transactions, inactive_votes_cache_non_final) auto election = node.active.election (send->qualified_root ()); ASSERT_NE (nullptr, election); ASSERT_FALSE (election->confirmed ()); - ASSERT_EQ (nano::genesis_amount - 100, election->tally ().begin ()->first); + ASSERT_EQ (nano::dev::genesis_amount - 100, election->tally ().begin ()->first); } TEST (active_transactions, inactive_votes_cache_fork) @@ -241,14 +241,14 @@ TEST (active_transactions, inactive_votes_cache_fork) auto send1 = builder.make_block () .previous (latest) .destination (key.pub) - .balance (nano::genesis_amount - 100) + .balance (nano::dev::genesis_amount - 100) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (latest)) .build_shared (); auto send2 = builder.make_block () .previous (latest) .destination (key.pub) - .balance (nano::genesis_amount - 200) + .balance (nano::dev::genesis_amount - 200) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (latest)) .build_shared (); @@ -285,7 +285,7 @@ TEST (active_transactions, inactive_votes_cache_existing_vote) auto send = builder.send () .previous (latest) .destination (key.pub) - .balance (nano::genesis_amount - 100 * nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - 100 * nano::Gxrb_ratio) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (latest)) .build_shared (); @@ -342,7 +342,7 @@ TEST (active_transactions, inactive_votes_cache_multiple_votes) auto send1 = builder.send () .previous (latest) .destination (key1.pub) - .balance (nano::genesis_amount - 100 * nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - 100 * nano::Gxrb_ratio) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (latest)) .build_shared (); @@ -394,14 +394,14 @@ TEST (active_transactions, inactive_votes_cache_election_start) auto send1 = send_block_builder.make_block () .previous (latest) .destination (key1.pub) - .balance (nano::genesis_amount - 5000 * nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - 5000 * nano::Gxrb_ratio) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (latest)) .build_shared (); auto send2 = send_block_builder.make_block () .previous (send1->hash ()) .destination (key2.pub) - .balance (nano::genesis_amount - 10000 * nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - 10000 * nano::Gxrb_ratio) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send1->hash ())) .build_shared (); @@ -499,7 +499,7 @@ TEST (active_transactions, vote_replays) .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) @@ -584,7 +584,7 @@ TEST (active_transactions, dropped_cleanup) nano::genesis genesis; auto block = genesis.open; - block->sideband_set (nano::block_sideband (nano::dev::genesis->account (), 0, nano::genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); + block->sideband_set (nano::block_sideband (nano::dev::genesis->account (), 0, nano::dev::genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); // Add to network filter to ensure proper cleanup after the election is dropped std::vector block_bytes; @@ -653,7 +653,7 @@ TEST (active_transactions, republish_winner) .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) @@ -670,7 +670,7 @@ TEST (active_transactions, republish_winner) .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - 1 - i) + .balance (nano::dev::genesis_amount - 1 - i) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) @@ -686,7 +686,7 @@ TEST (active_transactions, republish_winner) .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - 2 * nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - 2 * nano::Gxrb_ratio) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) @@ -719,7 +719,7 @@ TEST (active_transactions, fork_filter_cleanup) .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) @@ -737,7 +737,7 @@ TEST (active_transactions, fork_filter_cleanup) .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - 1 - i) + .balance (nano::dev::genesis_amount - 1 - i) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) @@ -776,7 +776,7 @@ TEST (active_transactions, fork_replacement_tally) size_t const max_blocks = 10; std::vector keys (reps_count); auto latest (genesis.hash ()); - auto balance (nano::genesis_amount); + auto balance (nano::dev::genesis_amount); auto amount (node1.minimum_principal_weight ()); nano::state_block_builder builder; @@ -946,7 +946,7 @@ TEST (active_transactions, confirm_new) auto send = nano::send_block_builder () .previous (genesis.hash ()) .destination (nano::public_key ()) - .balance (nano::genesis_amount - 100) + .balance (nano::dev::genesis_amount - 100) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); @@ -977,7 +977,7 @@ TEST (active_transactions, conflicting_block_vote_existing_election) .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - 100) + .balance (nano::dev::genesis_amount - 100) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) @@ -986,7 +986,7 @@ TEST (active_transactions, conflicting_block_vote_existing_election) .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - 200) + .balance (nano::dev::genesis_amount - 200) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) @@ -1024,7 +1024,7 @@ TEST (active_transactions, activate_account_chain) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .link (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - 1) + .balance (nano::dev::genesis_amount - 1) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build (); @@ -1033,7 +1033,7 @@ TEST (active_transactions, activate_account_chain) .previous (send->hash ()) .representative (nano::dev::genesis_key.pub) .link (key.pub) - .balance (nano::genesis_amount - 2) + .balance (nano::dev::genesis_amount - 2) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send->hash ())) .build (); @@ -1042,7 +1042,7 @@ TEST (active_transactions, activate_account_chain) .previous (send2->hash ()) .representative (nano::dev::genesis_key.pub) .link (key.pub) - .balance (nano::genesis_amount - 3) + .balance (nano::dev::genesis_amount - 3) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send2->hash ())) .build (); @@ -1124,7 +1124,7 @@ TEST (active_transactions, activate_inactive) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .link (key.pub) - .balance (nano::genesis_amount - 1) + .balance (nano::dev::genesis_amount - 1) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); @@ -1133,7 +1133,7 @@ TEST (active_transactions, activate_inactive) .previous (send->hash ()) .representative (nano::dev::genesis_key.pub) .link (nano::keypair ().pub) - .balance (nano::genesis_amount - 2) + .balance (nano::dev::genesis_amount - 2) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send->hash ())) .build_shared (); @@ -1185,7 +1185,7 @@ TEST (active_transactions, pessimistic_elections) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .link (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - 1) + .balance (nano::dev::genesis_amount - 1) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); @@ -1197,7 +1197,7 @@ TEST (active_transactions, pessimistic_elections) .previous (send->hash ()) .representative (nano::dev::genesis_key.pub) .link (key.pub) - .balance (nano::genesis_amount - 2) + .balance (nano::dev::genesis_amount - 2) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send->hash ())) .build (); @@ -1324,7 +1324,7 @@ TEST (active_transactions, list_active) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .link (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - 1) + .balance (nano::dev::genesis_amount - 1) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); @@ -1336,7 +1336,7 @@ TEST (active_transactions, list_active) .previous (send->hash ()) .representative (nano::dev::genesis_key.pub) .link (key.pub) - .balance (nano::genesis_amount - 2) + .balance (nano::dev::genesis_amount - 2) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send->hash ())) .build_shared (); @@ -1379,7 +1379,7 @@ TEST (active_transactions, vacancy) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .link (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); @@ -1417,7 +1417,7 @@ TEST (active_transactions, fifo) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .link (key0.pub) - .balance (nano::genesis_amount - 1) + .balance (nano::dev::genesis_amount - 1) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); @@ -1430,7 +1430,7 @@ TEST (active_transactions, fifo) .previous (send0->hash ()) .representative (nano::dev::genesis_key.pub) .link (key1.pub) - .balance (nano::genesis_amount - 2) + .balance (nano::dev::genesis_amount - 2) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send0->hash ())) .build_shared (); diff --git a/nano/core_test/block_store.cpp b/nano/core_test/block_store.cpp index bf68e4d18f..2bd7952f65 100644 --- a/nano/core_test/block_store.cpp +++ b/nano/core_test/block_store.cpp @@ -1016,17 +1016,17 @@ TEST (mdb_block_store, sideband_height) auto transaction (store.tx_begin_write ()); store.initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::send_block send (genesis.hash (), nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block send (genesis.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); nano::receive_block receive (send.hash (), send.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive).code); nano::change_block change (receive.hash (), 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (receive.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, change).code); - nano::state_block state_send1 (nano::dev::genesis_key.pub, change.hash (), 0, nano::genesis_amount - nano::Gxrb_ratio, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (change.hash ())); + nano::state_block state_send1 (nano::dev::genesis_key.pub, change.hash (), 0, nano::dev::genesis_amount - nano::Gxrb_ratio, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (change.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, state_send1).code); - nano::state_block state_send2 (nano::dev::genesis_key.pub, state_send1.hash (), 0, nano::genesis_amount - 2 * nano::Gxrb_ratio, key2.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_send1.hash ())); + nano::state_block state_send2 (nano::dev::genesis_key.pub, state_send1.hash (), 0, nano::dev::genesis_amount - 2 * nano::Gxrb_ratio, key2.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, state_send2).code); - nano::state_block state_send3 (nano::dev::genesis_key.pub, state_send2.hash (), 0, nano::genesis_amount - 3 * nano::Gxrb_ratio, key3.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_send2.hash ())); + nano::state_block state_send3 (nano::dev::genesis_key.pub, state_send2.hash (), 0, nano::dev::genesis_amount - 3 * nano::Gxrb_ratio, key3.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_send2.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, state_send3).code); nano::state_block state_open (key1.pub, 0, 0, nano::Gxrb_ratio, state_send1.hash (), key1.prv, key1.pub, *pool.generate (key1.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, state_open).code); @@ -1274,9 +1274,9 @@ TEST (mdb_block_store, upgrade_v14_v15) nano::genesis genesis; nano::network_params network_params; nano::work_pool pool (std::numeric_limits::max ()); - nano::send_block send (genesis.hash (), nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); - nano::state_block epoch (nano::dev::genesis_key.pub, send.hash (), nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, network_params.ledger.epochs.link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send.hash ())); - nano::state_block state_send (nano::dev::genesis_key.pub, epoch.hash (), nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch.hash ())); + nano::send_block send (genesis.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block epoch (nano::dev::genesis_key.pub, send.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, network_params.ledger.epochs.link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send.hash ())); + nano::state_block state_send (nano::dev::genesis_key.pub, epoch.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch.hash ())); { nano::logger_mt logger; nano::mdb_store store (logger, path); @@ -1430,9 +1430,9 @@ TEST (mdb_block_store, upgrade_v16_v17) } nano::genesis genesis; nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block block1 (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); - nano::state_block block2 (nano::dev::genesis_key.pub, block1.hash (), nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio - 1, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (block1.hash ())); - nano::state_block block3 (nano::dev::genesis_key.pub, block2.hash (), nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio - 2, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (block2.hash ())); + nano::state_block block1 (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block block2 (nano::dev::genesis_key.pub, block1.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio - 1, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (block1.hash ())); + nano::state_block block3 (nano::dev::genesis_key.pub, block2.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio - 2, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (block2.hash ())); auto code = [&block1, &block2, &block3] (auto confirmation_height, nano::block_hash const & expected_cemented_frontier) { auto path (nano::unique_path ()); @@ -1499,16 +1499,16 @@ TEST (mdb_block_store, upgrade_v17_v18) nano::keypair key3; nano::network_params network_params; nano::work_pool pool (std::numeric_limits::max ()); - nano::send_block send_zero (genesis.hash (), nano::dev::genesis_key.pub, nano::genesis_amount, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); - nano::state_block state_receive_zero (nano::dev::genesis_key.pub, send_zero.hash (), nano::dev::genesis_key.pub, nano::genesis_amount, send_zero.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send_zero.hash ())); - nano::state_block epoch (nano::dev::genesis_key.pub, state_receive_zero.hash (), nano::dev::genesis_key.pub, nano::genesis_amount, network_params.ledger.epochs.link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_receive_zero.hash ())); - nano::state_block state_send (nano::dev::genesis_key.pub, epoch.hash (), nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch.hash ())); - nano::state_block state_receive (nano::dev::genesis_key.pub, state_send.hash (), nano::dev::genesis_key.pub, nano::genesis_amount, state_send.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_send.hash ())); - nano::state_block state_change (nano::dev::genesis_key.pub, state_receive.hash (), nano::dev::genesis_key.pub, nano::genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_receive.hash ())); - nano::state_block state_send_change (nano::dev::genesis_key.pub, state_change.hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_change.hash ())); + nano::send_block send_zero (genesis.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block state_receive_zero (nano::dev::genesis_key.pub, send_zero.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount, send_zero.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send_zero.hash ())); + nano::state_block epoch (nano::dev::genesis_key.pub, state_receive_zero.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount, network_params.ledger.epochs.link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_receive_zero.hash ())); + nano::state_block state_send (nano::dev::genesis_key.pub, epoch.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch.hash ())); + nano::state_block state_receive (nano::dev::genesis_key.pub, state_send.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount, state_send.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_send.hash ())); + nano::state_block state_change (nano::dev::genesis_key.pub, state_receive.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_receive.hash ())); + nano::state_block state_send_change (nano::dev::genesis_key.pub, state_change.hash (), key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_change.hash ())); nano::state_block epoch_first (key1.pub, 0, 0, 0, network_params.ledger.epochs.link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (key1.pub)); nano::state_block state_receive2 (key1.pub, epoch_first.hash (), key1.pub, nano::Gxrb_ratio, state_send_change.hash (), key1.prv, key1.pub, *pool.generate (epoch_first.hash ())); - nano::state_block state_send2 (nano::dev::genesis_key.pub, state_send_change.hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio * 2, key2.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_send_change.hash ())); + nano::state_block state_send2 (nano::dev::genesis_key.pub, state_send_change.hash (), key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio * 2, key2.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_send_change.hash ())); nano::state_block state_open (key2.pub, 0, key2.pub, nano::Gxrb_ratio, state_send2.hash (), key2.prv, key2.pub, *pool.generate (key2.pub)); nano::state_block state_send_epoch_link (key2.pub, state_open.hash (), key2.pub, 0, network_params.ledger.epochs.link (nano::epoch::epoch_2), key2.prv, key2.pub, *pool.generate (state_open.hash ())); { @@ -1700,11 +1700,11 @@ TEST (mdb_block_store, upgrade_v18_v19) nano::keypair key1; nano::work_pool pool (std::numeric_limits::max ()); nano::network_params network_params; - nano::send_block send (nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::send_block send (nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); nano::receive_block receive (send.hash (), send.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send.hash ())); nano::change_block change (receive.hash (), 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (receive.hash ())); - nano::state_block state_epoch (nano::dev::genesis_key.pub, change.hash (), 0, nano::genesis_amount, network_params.ledger.epochs.link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (change.hash ())); - nano::state_block state_send (nano::dev::genesis_key.pub, state_epoch.hash (), 0, nano::genesis_amount - nano::Gxrb_ratio, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_epoch.hash ())); + nano::state_block state_epoch (nano::dev::genesis_key.pub, change.hash (), 0, nano::dev::genesis_amount, network_params.ledger.epochs.link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (change.hash ())); + nano::state_block state_send (nano::dev::genesis_key.pub, state_epoch.hash (), 0, nano::dev::genesis_amount - nano::Gxrb_ratio, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_epoch.hash ())); nano::state_block state_open (key1.pub, 0, 0, nano::Gxrb_ratio, state_send.hash (), key1.prv, key1.pub, *pool.generate (key1.pub)); { diff --git a/nano/core_test/bootstrap.cpp b/nano/core_test/bootstrap.cpp index 1727864619..22e2563535 100644 --- a/nano/core_test/bootstrap.cpp +++ b/nano/core_test/bootstrap.cpp @@ -256,7 +256,7 @@ TEST (bootstrap_processor, process_state) .account (nano::dev::genesis_key.pub) .previous (node0->latest (nano::dev::genesis_key.pub)) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - 100) + .balance (nano::dev::genesis_amount - 100) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (0) @@ -266,7 +266,7 @@ TEST (bootstrap_processor, process_state) .account (nano::dev::genesis_key.pub) .previous (block1->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount) + .balance (nano::dev::genesis_amount) .link (block1->hash ()) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (0) @@ -362,7 +362,7 @@ TEST (bootstrap_processor, DISABLED_pull_requeue_network_error) .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) @@ -431,7 +431,7 @@ TEST (bootstrap_processor, push_diamond_pruning) ASSERT_EQ (nano::process_result::progress, node1->process (*open).code); // 1st bootstrap node1->bootstrap_initiator.bootstrap (node0->network.endpoint (), false); - ASSERT_TIMELY (10s, node0->balance (key.pub) == nano::genesis_amount); + ASSERT_TIMELY (10s, node0->balance (key.pub) == nano::dev::genesis_amount); // Process more blocks & prune old auto send2 (std::make_shared (open->hash (), nano::dev::genesis_key.pub, std::numeric_limits::max () - 100, key.prv, key.pub, *system.work.generate (open->hash ()))); ASSERT_EQ (nano::process_result::progress, node1->process (*send2).code); @@ -497,7 +497,7 @@ TEST (bootstrap_processor, lazy_hash) .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node0->work_generate_blocking (genesis.hash ())) @@ -572,7 +572,7 @@ TEST (bootstrap_processor, lazy_hash_bootstrap_id) .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node0->work_generate_blocking (genesis.hash ())) @@ -649,7 +649,7 @@ TEST (bootstrap_processor, lazy_hash_pruning) .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node0->work_generate_blocking (genesis.hash ())) @@ -659,7 +659,7 @@ TEST (bootstrap_processor, lazy_hash_pruning) .account (nano::dev::genesis_key.pub) .previous (send1->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount) + .balance (nano::dev::genesis_amount) .link (send1->hash ()) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node0->work_generate_blocking (send1->hash ())) @@ -669,7 +669,7 @@ TEST (bootstrap_processor, lazy_hash_pruning) .account (nano::dev::genesis_key.pub) .previous (receive1->hash ()) .representative (key1.pub) - .balance (nano::genesis_amount) + .balance (nano::dev::genesis_amount) .link (0) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node0->work_generate_blocking (receive1->hash ())) @@ -679,7 +679,7 @@ TEST (bootstrap_processor, lazy_hash_pruning) .account (nano::dev::genesis_key.pub) .previous (change1->hash ()) .representative (key2.pub) - .balance (nano::genesis_amount) + .balance (nano::dev::genesis_amount) .link (0) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node0->work_generate_blocking (change1->hash ())) @@ -689,7 +689,7 @@ TEST (bootstrap_processor, lazy_hash_pruning) .account (nano::dev::genesis_key.pub) .previous (change2->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node0->work_generate_blocking (change2->hash ())) @@ -783,7 +783,7 @@ TEST (bootstrap_processor, lazy_max_pull_count) .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node0->work_generate_blocking (genesis.hash ())) @@ -886,7 +886,7 @@ TEST (bootstrap_processor, lazy_unclear_state_link) .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) @@ -897,7 +897,7 @@ TEST (bootstrap_processor, lazy_unclear_state_link) .account (nano::dev::genesis_key.pub) .previous (send1->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - 2 * nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - 2 * nano::Gxrb_ratio) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send1->hash ())) @@ -949,7 +949,7 @@ TEST (bootstrap_processor, lazy_unclear_state_link_not_existing) .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) @@ -1001,7 +1001,7 @@ TEST (bootstrap_processor, DISABLED_lazy_destinations) .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) @@ -1012,7 +1012,7 @@ TEST (bootstrap_processor, DISABLED_lazy_destinations) .account (nano::dev::genesis_key.pub) .previous (send1->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - 2 * nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - 2 * nano::Gxrb_ratio) .link (key2.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send1->hash ())) @@ -1066,7 +1066,7 @@ TEST (bootstrap_processor, lazy_pruning_missing_block) .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) @@ -1077,7 +1077,7 @@ TEST (bootstrap_processor, lazy_pruning_missing_block) .account (nano::dev::genesis_key.pub) .previous (send1->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - 2 * nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - 2 * nano::Gxrb_ratio) .link (key2.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send1->hash ())) @@ -1161,7 +1161,7 @@ TEST (bootstrap_processor, lazy_cancel) .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node0->work_generate_blocking (genesis.hash ())) @@ -1201,7 +1201,7 @@ TEST (bootstrap_processor, wallet_lazy_frontier) .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node0->work_generate_blocking (genesis.hash ())) @@ -1280,7 +1280,7 @@ TEST (bootstrap_processor, wallet_lazy_pending) .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node0->work_generate_blocking (genesis.hash ())) @@ -1342,7 +1342,7 @@ TEST (bootstrap_processor, multiple_attempts) .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node1->work_generate_blocking (genesis.hash ())) @@ -1464,7 +1464,7 @@ TEST (frontier_req, count) .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (0) @@ -1567,7 +1567,7 @@ TEST (frontier_req, confirmed_frontier) .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (key_before_genesis.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (0) @@ -1579,7 +1579,7 @@ TEST (frontier_req, confirmed_frontier) .account (nano::dev::genesis_key.pub) .previous (send1->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - 2 * nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - 2 * nano::Gxrb_ratio) .link (key_after_genesis.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (0) diff --git a/nano/core_test/confirmation_height.cpp b/nano/core_test/confirmation_height.cpp index edd60acc3c..28dbfabe82 100644 --- a/nano/core_test/confirmation_height.cpp +++ b/nano/core_test/confirmation_height.cpp @@ -225,11 +225,11 @@ TEST (confirmation_height, gap_bootstrap) auto & node1 = *system.add_node (node_flags); nano::genesis genesis; nano::keypair destination; - auto send1 (std::make_shared (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); + auto send1 (std::make_shared (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send1); - auto send2 (std::make_shared (nano::dev::genesis->account (), send1->hash (), nano::dev::genesis->account (), nano::genesis_amount - 2 * nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); + auto send2 (std::make_shared (nano::dev::genesis->account (), send1->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - 2 * nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send2); - auto send3 (std::make_shared (nano::dev::genesis->account (), send2->hash (), nano::dev::genesis->account (), nano::genesis_amount - 3 * nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); + auto send3 (std::make_shared (nano::dev::genesis->account (), send2->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - 3 * nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send3); auto open1 (std::make_shared (send1->hash (), destination.pub, destination.pub, destination.prv, destination.pub, 0)); node1.work_generate_blocking (*open1); @@ -304,18 +304,18 @@ TEST (confirmation_height, gap_live) node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto node = system.add_node (node_config, node_flags); node_config.peering_port = nano::get_available_port (); - node_config.receive_minimum = nano::genesis_amount; // Prevent auto-receive & open1/receive1/receive2 blocks conflicts + node_config.receive_minimum = nano::dev::genesis_amount; // Prevent auto-receive & open1/receive1/receive2 blocks conflicts system.add_node (node_config, node_flags); nano::keypair destination; system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); system.wallet (1)->insert_adhoc (destination.prv); nano::genesis genesis; - auto send1 (std::make_shared (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - 1, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); + auto send1 (std::make_shared (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - 1, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node->work_generate_blocking (*send1); - auto send2 (std::make_shared (nano::dev::genesis->account (), send1->hash (), nano::dev::genesis->account (), nano::genesis_amount - 2, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); + auto send2 (std::make_shared (nano::dev::genesis->account (), send1->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - 2, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node->work_generate_blocking (*send2); - auto send3 (std::make_shared (nano::dev::genesis->account (), send2->hash (), nano::dev::genesis->account (), nano::genesis_amount - 3, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); + auto send3 (std::make_shared (nano::dev::genesis->account (), send2->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - 3, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node->work_generate_blocking (*send3); auto open1 (std::make_shared (send1->hash (), destination.pub, destination.pub, destination.prv, destination.pub, 0)); @@ -478,10 +478,10 @@ TEST (confirmation_height, send_receive_self) auto node = system.add_node (node_config, node_flags); nano::block_hash latest (node->latest (nano::dev::genesis_key.pub)); - nano::send_block send1 (latest, nano::dev::genesis_key.pub, nano::genesis_amount - 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); + nano::send_block send1 (latest, nano::dev::genesis_key.pub, nano::dev::genesis_amount - 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); nano::receive_block receive1 (send1.hash (), send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1.hash ())); - nano::send_block send2 (receive1.hash (), nano::dev::genesis_key.pub, nano::genesis_amount - 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (receive1.hash ())); - nano::send_block send3 (send2.hash (), nano::dev::genesis_key.pub, nano::genesis_amount - 3, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send2.hash ())); + nano::send_block send2 (receive1.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (receive1.hash ())); + nano::send_block send3 (send2.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - 3, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send2.hash ())); nano::receive_block receive2 (send3.hash (), send2.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send3.hash ())); auto receive3 = std::make_shared (receive2.hash (), send3.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (receive2.hash ())); @@ -543,8 +543,8 @@ TEST (confirmation_height, all_block_types) nano::keypair key1; nano::keypair key2; auto & store = node->store; - nano::send_block send (latest, key1.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); - nano::send_block send1 (send.hash (), key2.pub, nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send.hash ())); + nano::send_block send (latest, key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); + nano::send_block send1 (send.hash (), key2.pub, nano::dev::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send.hash ())); nano::open_block open (send.hash (), nano::dev::genesis_key.pub, key1.pub, key1.prv, key1.pub, *system.work.generate (key1.pub)); nano::state_block state_open (key2.pub, 0, 0, nano::Gxrb_ratio, send1.hash (), key2.prv, key2.pub, *system.work.generate (key2.pub)); @@ -569,7 +569,7 @@ TEST (confirmation_height, all_block_types) nano::state_block state_send3 (key2.pub, state_send2->hash (), 0, nano::Gxrb_ratio - 1, key1.pub, key2.prv, key2.pub, *system.work.generate (state_send2->hash ())); nano::state_block state_send4 (key1.pub, state_send1.hash (), 0, nano::Gxrb_ratio - 2, nano::dev::genesis_key.pub, key1.prv, key1.pub, *system.work.generate (state_send1.hash ())); - nano::state_block state_receive3 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio * 2 + 1, state_send4.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1.hash ())); + nano::state_block state_receive3 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio * 2 + 1, state_send4.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1.hash ())); { auto transaction (store.tx_begin_write ()); @@ -656,10 +656,10 @@ TEST (confirmation_height, conflict_rollback_cemented) ASSERT_EQ (1, node1->network.size ()); nano::keypair key1; nano::genesis genesis; - auto send1 (std::make_shared (genesis.hash (), key1.pub, nano::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (genesis.hash ()))); + auto send1 (std::make_shared (genesis.hash (), key1.pub, nano::dev::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (genesis.hash ()))); nano::publish publish1 (send1); nano::keypair key2; - auto send2 (std::make_shared (genesis.hash (), key2.pub, nano::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (genesis.hash ()))); + auto send2 (std::make_shared (genesis.hash (), key2.pub, nano::dev::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (genesis.hash ()))); nano::publish publish2 (send2); auto channel1 (node1->network.udp_channels.create (node1->network.endpoint ())); node1->network.inbound (publish1, channel1); @@ -695,7 +695,7 @@ TEST (confirmation_height, conflict_rollback_cemented) ASSERT_TIMELY (20s, sb.component ()->str ().find (rollback_log_entry) != std::string::npos); auto winner (*election->tally ().begin ()); ASSERT_EQ (*publish1.block, *winner.second); - ASSERT_EQ (nano::genesis_amount - 100, winner.first); + ASSERT_EQ (nano::dev::genesis_amount - 100, winner.first); ASSERT_TRUE (node1->ledger.block_or_pruned_exists (publish1.block->hash ())); ASSERT_TRUE (node2->ledger.block_or_pruned_exists (publish2.block->hash ())); ASSERT_FALSE (node2->ledger.block_or_pruned_exists (publish1.block->hash ())); @@ -729,7 +729,7 @@ TEST (confirmation_heightDeathTest, rollback_added_block) nano::write_database_queue write_database_queue (false); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - auto send = std::make_shared (genesis.hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + auto send = std::make_shared (genesis.hash (), key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); { auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); @@ -806,7 +806,7 @@ TEST (confirmation_heightDeathTest, modified_chain) nano::write_database_queue write_database_queue (false); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - auto send = std::make_shared (nano::dev::genesis->hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + auto send = std::make_shared (nano::dev::genesis->hash (), key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); { auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); @@ -877,7 +877,7 @@ TEST (confirmation_heightDeathTest, modified_chain_account_removed) nano::write_database_queue write_database_queue (false); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - auto send = std::make_shared (nano::dev::genesis->hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + auto send = std::make_shared (nano::dev::genesis->hash (), key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); auto open = std::make_shared (key1.pub, 0, 0, nano::Gxrb_ratio, send->hash (), key1.prv, key1.pub, *pool.generate (key1.pub)); { auto transaction (store->tx_begin_write ()); @@ -940,8 +940,8 @@ TEST (confirmation_height, pending_observer_callbacks) nano::block_hash latest (node->latest (nano::dev::genesis_key.pub)); nano::keypair key1; - nano::send_block send (latest, key1.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); - auto send1 = std::make_shared (send.hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send.hash ())); + nano::send_block send (latest, key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); + auto send1 = std::make_shared (send.hash (), key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send.hash ())); { auto transaction = node->store.tx_begin_write (); @@ -982,13 +982,13 @@ TEST (confirmation_height, callback_confirmed_history) nano::block_hash latest (node->latest (nano::dev::genesis_key.pub)); nano::keypair key1; - auto send = std::make_shared (latest, key1.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); + auto send = std::make_shared (latest, key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); { auto transaction = node->store.tx_begin_write (); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, *send).code); } - auto send1 = std::make_shared (send->hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send->hash ())); + auto send1 = std::make_shared (send->hash (), key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send->hash ())); add_callback_stats (*node); @@ -1063,9 +1063,9 @@ TEST (confirmation_height, dependent_election) nano::block_hash latest (node->latest (nano::dev::genesis_key.pub)); nano::keypair key1; - auto send = std::make_shared (latest, key1.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); - auto send1 = std::make_shared (send->hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send->hash ())); - auto send2 = std::make_shared (send1->hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio * 3, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1->hash ())); + auto send = std::make_shared (latest, key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); + auto send1 = std::make_shared (send->hash (), key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send->hash ())); + auto send2 = std::make_shared (send1->hash (), key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio * 3, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1->hash ())); { auto transaction = node->store.tx_begin_write (); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, *send).code); @@ -1115,22 +1115,22 @@ TEST (confirmation_height, cemented_gap_below_receive) nano::keypair key1; system.wallet (0)->insert_adhoc (key1.prv); - nano::send_block send (latest, key1.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); - nano::send_block send1 (send.hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send.hash ())); + nano::send_block send (latest, key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); + nano::send_block send1 (send.hash (), key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send.hash ())); nano::keypair dummy_key; - nano::send_block dummy_send (send1.hash (), dummy_key.pub, nano::genesis_amount - nano::Gxrb_ratio * 3, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1.hash ())); + nano::send_block dummy_send (send1.hash (), dummy_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio * 3, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1.hash ())); nano::open_block open (send.hash (), nano::dev::genesis->account (), key1.pub, key1.prv, key1.pub, *system.work.generate (key1.pub)); nano::receive_block receive1 (open.hash (), send1.hash (), key1.prv, key1.pub, *system.work.generate (open.hash ())); nano::send_block send2 (receive1.hash (), nano::dev::genesis_key.pub, nano::Gxrb_ratio, key1.prv, key1.pub, *system.work.generate (receive1.hash ())); nano::receive_block receive2 (dummy_send.hash (), send2.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (dummy_send.hash ())); - nano::send_block dummy_send1 (receive2.hash (), dummy_key.pub, nano::genesis_amount - nano::Gxrb_ratio * 3, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (receive2.hash ())); + nano::send_block dummy_send1 (receive2.hash (), dummy_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio * 3, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (receive2.hash ())); nano::keypair key2; system.wallet (0)->insert_adhoc (key2.prv); - nano::send_block send3 (dummy_send1.hash (), key2.pub, nano::genesis_amount - nano::Gxrb_ratio * 4, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (dummy_send1.hash ())); - nano::send_block dummy_send2 (send3.hash (), dummy_key.pub, nano::genesis_amount - nano::Gxrb_ratio * 5, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send3.hash ())); + nano::send_block send3 (dummy_send1.hash (), key2.pub, nano::dev::genesis_amount - nano::Gxrb_ratio * 4, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (dummy_send1.hash ())); + nano::send_block dummy_send2 (send3.hash (), dummy_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio * 5, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send3.hash ())); auto open1 = std::make_shared (send3.hash (), nano::dev::genesis->account (), key2.pub, key2.prv, key2.pub, *system.work.generate (key2.pub)); @@ -1200,22 +1200,22 @@ TEST (confirmation_height, cemented_gap_below_no_cache) nano::keypair key1; system.wallet (0)->insert_adhoc (key1.prv); - nano::send_block send (latest, key1.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); - nano::send_block send1 (send.hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send.hash ())); + nano::send_block send (latest, key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); + nano::send_block send1 (send.hash (), key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send.hash ())); nano::keypair dummy_key; - nano::send_block dummy_send (send1.hash (), dummy_key.pub, nano::genesis_amount - nano::Gxrb_ratio * 3, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1.hash ())); + nano::send_block dummy_send (send1.hash (), dummy_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio * 3, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1.hash ())); nano::open_block open (send.hash (), nano::dev::genesis->account (), key1.pub, key1.prv, key1.pub, *system.work.generate (key1.pub)); nano::receive_block receive1 (open.hash (), send1.hash (), key1.prv, key1.pub, *system.work.generate (open.hash ())); nano::send_block send2 (receive1.hash (), nano::dev::genesis_key.pub, nano::Gxrb_ratio, key1.prv, key1.pub, *system.work.generate (receive1.hash ())); nano::receive_block receive2 (dummy_send.hash (), send2.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (dummy_send.hash ())); - nano::send_block dummy_send1 (receive2.hash (), dummy_key.pub, nano::genesis_amount - nano::Gxrb_ratio * 3, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (receive2.hash ())); + nano::send_block dummy_send1 (receive2.hash (), dummy_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio * 3, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (receive2.hash ())); nano::keypair key2; system.wallet (0)->insert_adhoc (key2.prv); - nano::send_block send3 (dummy_send1.hash (), key2.pub, nano::genesis_amount - nano::Gxrb_ratio * 4, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (dummy_send1.hash ())); - nano::send_block dummy_send2 (send3.hash (), dummy_key.pub, nano::genesis_amount - nano::Gxrb_ratio * 5, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send3.hash ())); + nano::send_block send3 (dummy_send1.hash (), key2.pub, nano::dev::genesis_amount - nano::Gxrb_ratio * 4, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (dummy_send1.hash ())); + nano::send_block dummy_send2 (send3.hash (), dummy_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio * 5, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send3.hash ())); auto open1 = std::make_shared (send3.hash (), nano::dev::genesis->account (), key2.pub, key2.prv, key2.pub, *system.work.generate (key2.pub)); @@ -1281,9 +1281,9 @@ TEST (confirmation_height, election_winner_details_clearing) nano::block_hash latest (node->latest (nano::dev::genesis_key.pub)); nano::keypair key1; - auto send = std::make_shared (latest, key1.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); - auto send1 = std::make_shared (send->hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send->hash ())); - auto send2 = std::make_shared (send1->hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio * 3, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1->hash ())); + auto send = std::make_shared (latest, key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); + auto send1 = std::make_shared (send->hash (), key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send->hash ())); + auto send2 = std::make_shared (send1->hash (), key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio * 3, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1->hash ())); { auto transaction = node->store.tx_begin_write (); @@ -1344,7 +1344,7 @@ TEST (confirmation_height, election_winner_details_clearing_node_process_confirm nano::system system (1); auto node = system.nodes.front (); - auto send = std::make_shared (nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ())); + auto send = std::make_shared (nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ())); // Add to election_winner_details. Use an unrealistic iteration so that it should fall into the else case and do a cleanup node->active.add_election_winner_details (send->hash (), nullptr); nano::election_status election; @@ -1372,8 +1372,8 @@ TEST (confirmation_height, unbounded_block_cache_iteration) nano::work_pool pool (std::numeric_limits::max ()); nano::logging logging; nano::keypair key1; - auto send = std::make_shared (genesis.hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); - auto send1 = std::make_shared (send->hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send->hash ())); + auto send = std::make_shared (genesis.hash (), key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + auto send1 = std::make_shared (send->hash (), key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send->hash ())); { auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); @@ -1422,7 +1422,7 @@ TEST (confirmation_height, pruned_source) nano::write_database_queue write_database_queue (false); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1, key2; - auto send1 = std::make_shared (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::genesis_amount - 100, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + auto send1 = std::make_shared (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - 100, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); auto open1 = std::make_shared (key1.pub, 0, key1.pub, 100, send1->hash (), key1.prv, key1.pub, *pool.generate (key1.pub)); auto send2 = std::make_shared (key1.pub, open1->hash (), key1.pub, 50, key2.pub, key1.prv, key1.pub, *pool.generate (open1->hash ())); auto send3 = std::make_shared (key1.pub, send2->hash (), key1.pub, 25, key2.pub, key1.prv, key1.pub, *pool.generate (send2->hash ())); diff --git a/nano/core_test/confirmation_solicitor.cpp b/nano/core_test/confirmation_solicitor.cpp index 19572e40ee..8fd7a5aa75 100644 --- a/nano/core_test/confirmation_solicitor.cpp +++ b/nano/core_test/confirmation_solicitor.cpp @@ -19,7 +19,7 @@ TEST (confirmation_solicitor, batches) auto & node2 = *system.add_node (node_flags); auto channel1 (node2.network.udp_channels.create (node1.network.endpoint ())); // Solicitor will only solicit from this representative - nano::representative representative (nano::dev::genesis_key.pub, nano::genesis_amount, channel1); + nano::representative representative (nano::dev::genesis_key.pub, nano::dev::genesis_amount, channel1); std::vector representatives{ representative }; nano::confirmation_solicitor solicitor (node2.network, node2.config); solicitor.prepare (representatives); @@ -28,7 +28,7 @@ TEST (confirmation_solicitor, batches) ASSERT_EQ (channel1, representatives.front ().channel); ASSERT_EQ (nano::dev::genesis_key.pub, representatives.front ().account); ASSERT_TIMELY (3s, node2.network.size () == 1); - auto send (std::make_shared (nano::dev::genesis->hash (), nano::keypair ().pub, nano::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); + auto send (std::make_shared (nano::dev::genesis->hash (), nano::keypair ().pub, nano::dev::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); send->sideband_set ({}); { nano::lock_guard guard (node2.active.mutex); @@ -63,7 +63,7 @@ TEST (confirmation_solicitor, different_hash) auto & node2 = *system.add_node (node_flags); auto channel1 (node2.network.udp_channels.create (node1.network.endpoint ())); // Solicitor will only solicit from this representative - nano::representative representative (nano::dev::genesis_key.pub, nano::genesis_amount, channel1); + nano::representative representative (nano::dev::genesis_key.pub, nano::dev::genesis_amount, channel1); std::vector representatives{ representative }; nano::confirmation_solicitor solicitor (node2.network, node2.config); solicitor.prepare (representatives); @@ -72,7 +72,7 @@ TEST (confirmation_solicitor, different_hash) ASSERT_EQ (channel1, representatives.front ().channel); ASSERT_EQ (nano::dev::genesis_key.pub, representatives.front ().account); ASSERT_TIMELY (3s, node2.network.size () == 1); - auto send (std::make_shared (nano::dev::genesis->hash (), nano::keypair ().pub, nano::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); + auto send (std::make_shared (nano::dev::genesis->hash (), nano::keypair ().pub, nano::dev::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); send->sideband_set ({}); auto election (std::make_shared (node2, send, nullptr, nullptr, nano::election_behavior::normal)); // Add a vote for something else, not the winner @@ -108,7 +108,7 @@ TEST (confirmation_solicitor, bypass_max_requests_cap) ASSERT_EQ (max_representatives + 1, representatives.size ()); solicitor.prepare (representatives); ASSERT_TIMELY (3s, node2.network.size () == 1); - auto send (std::make_shared (nano::dev::genesis->hash (), nano::keypair ().pub, nano::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); + auto send (std::make_shared (nano::dev::genesis->hash (), nano::keypair ().pub, nano::dev::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); send->sideband_set ({}); auto election (std::make_shared (node2, send, nullptr, nullptr, nano::election_behavior::normal)); // Add a vote for something else, not the winner diff --git a/nano/core_test/election.cpp b/nano/core_test/election.cpp index c731faa69f..601e4426ae 100644 --- a/nano/core_test/election.cpp +++ b/nano/core_test/election.cpp @@ -11,7 +11,7 @@ TEST (election, construction) nano::system system (1); nano::genesis genesis; auto & node = *system.nodes[0]; - genesis.open->sideband_set (nano::block_sideband (nano::dev::genesis->account (), 0, nano::genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); + genesis.open->sideband_set (nano::block_sideband (nano::dev::genesis->account (), 0, nano::dev::genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); node.block_confirm (genesis.open); node.scheduler.flush (); auto election = node.active.election (genesis.open->qualified_root ()); @@ -22,7 +22,7 @@ TEST (election, quorum_minimum_flip_success) { nano::system system; nano::node_config node_config (nano::get_available_port (), system.logging); - node_config.online_weight_minimum = nano::genesis_amount; + node_config.online_weight_minimum = nano::dev::genesis_amount; node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto & node1 = *system.add_node (node_config); nano::keypair key1; @@ -68,7 +68,7 @@ TEST (election, quorum_minimum_flip_fail) { nano::system system; nano::node_config node_config (nano::get_available_port (), system.logging); - node_config.online_weight_minimum = nano::genesis_amount; + node_config.online_weight_minimum = nano::dev::genesis_amount; node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto & node1 = *system.add_node (node_config); nano::keypair key1; @@ -114,7 +114,7 @@ TEST (election, quorum_minimum_confirm_success) { nano::system system; nano::node_config node_config (nano::get_available_port (), system.logging); - node_config.online_weight_minimum = nano::genesis_amount; + node_config.online_weight_minimum = nano::dev::genesis_amount; node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto & node1 = *system.add_node (node_config); nano::keypair key1; @@ -147,7 +147,7 @@ TEST (election, quorum_minimum_confirm_fail) { nano::system system; nano::node_config node_config (nano::get_available_port (), system.logging); - node_config.online_weight_minimum = nano::genesis_amount; + node_config.online_weight_minimum = nano::dev::genesis_amount; node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto & node1 = *system.add_node (node_config); nano::keypair key1; @@ -202,7 +202,7 @@ TEST (election, quorum_minimum_update_weight_before_quorum_checks) .account (key1.pub) .previous (0) .representative (key1.pub) - .balance (nano::genesis_amount - amount) + .balance (nano::dev::genesis_amount - amount) .link (send1->hash ()) .work (0) .sign (key1.prv, key1.pub) diff --git a/nano/core_test/election_scheduler.cpp b/nano/core_test/election_scheduler.cpp index 565d5d05e3..10e2c94be8 100644 --- a/nano/core_test/election_scheduler.cpp +++ b/nano/core_test/election_scheduler.cpp @@ -21,7 +21,7 @@ TEST (election_scheduler, activate_one_timely) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) @@ -39,7 +39,7 @@ TEST (election_scheduler, activate_one_flush) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) @@ -65,7 +65,7 @@ TEST (election_scheduler, no_vacancy) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .link (key.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); @@ -91,7 +91,7 @@ TEST (election_scheduler, no_vacancy) .previous (send->hash ()) .representative (nano::dev::genesis_key.pub) .link (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - 2 * nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - 2 * nano::Gxrb_ratio) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send->hash ())) .build_shared (); @@ -138,7 +138,7 @@ TEST (election_scheduler, flush_vacancy) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .link (key.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); diff --git a/nano/core_test/frontiers_confirmation.cpp b/nano/core_test/frontiers_confirmation.cpp index 009a2e37a1..8f5a39e9a5 100644 --- a/nano/core_test/frontiers_confirmation.cpp +++ b/nano/core_test/frontiers_confirmation.cpp @@ -219,7 +219,7 @@ TEST (frontiers_confirmation, mode) nano::node_config node_config (nano::get_available_port (), system.logging); node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::always; auto node = system.add_node (node_config, node_flags); - nano::state_block send (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node->work_generate_blocking (genesis.hash ())); + nano::state_block send (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node->work_generate_blocking (genesis.hash ())); { auto transaction = node->store.tx_begin_write (); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, send).code); @@ -232,7 +232,7 @@ TEST (frontiers_confirmation, mode) nano::node_config node_config (nano::get_available_port (), system.logging); node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::automatic; auto node = system.add_node (node_config, node_flags); - nano::state_block send (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node->work_generate_blocking (genesis.hash ())); + nano::state_block send (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node->work_generate_blocking (genesis.hash ())); { auto transaction = node->store.tx_begin_write (); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, send).code); @@ -245,7 +245,7 @@ TEST (frontiers_confirmation, mode) nano::node_config node_config (nano::get_available_port (), system.logging); node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto node = system.add_node (node_config, node_flags); - nano::state_block send (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node->work_generate_blocking (genesis.hash ())); + nano::state_block send (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node->work_generate_blocking (genesis.hash ())); { auto transaction = node->store.tx_begin_write (); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, send).code); diff --git a/nano/core_test/gap_cache.cpp b/nano/core_test/gap_cache.cpp index 972cb08286..270e8203e9 100644 --- a/nano/core_test/gap_cache.cpp +++ b/nano/core_test/gap_cache.cpp @@ -67,10 +67,10 @@ TEST (gap_cache, gap_bootstrap) auto & node2 (*system.nodes[1]); nano::block_hash latest (node1.latest (nano::dev::genesis_key.pub)); nano::keypair key; - auto send (std::make_shared (latest, key.pub, nano::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest))); + auto send (std::make_shared (latest, key.pub, nano::dev::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest))); node1.process (*send); - ASSERT_EQ (nano::genesis_amount - 100, node1.balance (nano::dev::genesis->account ())); - ASSERT_EQ (nano::genesis_amount, node2.balance (nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::genesis_amount - 100, node1.balance (nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::genesis_amount, node2.balance (nano::dev::genesis->account ())); // Confirm send block, allowing voting on the upcoming block node1.block_confirm (send); auto election = node1.active.election (send->qualified_root ()); @@ -81,9 +81,9 @@ TEST (gap_cache, gap_bootstrap) system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto latest_block (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key.pub, 100)); ASSERT_NE (nullptr, latest_block); - ASSERT_EQ (nano::genesis_amount - 200, node1.balance (nano::dev::genesis->account ())); - ASSERT_EQ (nano::genesis_amount, node2.balance (nano::dev::genesis->account ())); - ASSERT_TIMELY (10s, node2.balance (nano::dev::genesis->account ()) == nano::genesis_amount - 200); + ASSERT_EQ (nano::dev::genesis_amount - 200, node1.balance (nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::genesis_amount, node2.balance (nano::dev::genesis->account ())); + ASSERT_TIMELY (10s, node2.balance (nano::dev::genesis->account ()) == nano::dev::genesis_amount - 200); } TEST (gap_cache, two_dependencies) diff --git a/nano/core_test/ledger.cpp b/nano/core_test/ledger.cpp index 67530c1059..f80296aa0d 100644 --- a/nano/core_test/ledger.cpp +++ b/nano/core_test/ledger.cpp @@ -50,9 +50,9 @@ TEST (ledger, genesis_balance) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); auto balance (ledger.account_balance (transaction, nano::dev::genesis->account ())); - ASSERT_EQ (nano::genesis_amount, balance); + ASSERT_EQ (nano::dev::genesis_amount, balance); auto amount (ledger.amount (transaction, nano::dev::genesis->account ())); - ASSERT_EQ (nano::genesis_amount, amount); + ASSERT_EQ (nano::dev::genesis_amount, amount); nano::account_info info; ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis->account (), info)); ASSERT_EQ (1, ledger.cache.account_count); @@ -76,7 +76,7 @@ TEST (ledger, process_modifies_sideband) nano::genesis genesis; store->initialize (store->tx_begin_write (), ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (store->tx_begin_write (), send1).code); ASSERT_EQ (send1.sideband ().timestamp, store->block.get (store->tx_begin_read (), send1.hash ())->sideband ().timestamp); } @@ -104,13 +104,13 @@ TEST (ledger, process_send) auto return1 (ledger.process (transaction, send)); ASSERT_EQ (nano::dev::genesis_key.pub, send.sideband ().account); ASSERT_EQ (2, send.sideband ().height); - ASSERT_EQ (nano::genesis_amount - 50, ledger.amount (transaction, hash1)); + ASSERT_EQ (nano::dev::genesis_amount - 50, ledger.amount (transaction, hash1)); ASSERT_TRUE (store->frontier.get (transaction, info1.head).is_zero ()); ASSERT_EQ (nano::dev::genesis_key.pub, store->frontier.get (transaction, hash1)); ASSERT_EQ (nano::process_result::progress, return1.code); ASSERT_EQ (nano::dev::genesis_key.pub, store->block.account_calculated (send)); ASSERT_EQ (50, ledger.account_balance (transaction, nano::dev::genesis_key.pub)); - ASSERT_EQ (nano::genesis_amount - 50, ledger.account_pending (transaction, key2.pub)); + ASSERT_EQ (nano::dev::genesis_amount - 50, ledger.account_pending (transaction, key2.pub)); nano::account_info info2; ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info2)); ASSERT_EQ (2, info2.block_count); @@ -126,17 +126,17 @@ TEST (ledger, process_send) auto return2 (ledger.process (transaction, open)); ASSERT_EQ (nano::process_result::progress, return2.code); ASSERT_EQ (key2.pub, open.sideband ().account); - ASSERT_EQ (nano::genesis_amount - 50, open.sideband ().balance.number ()); + ASSERT_EQ (nano::dev::genesis_amount - 50, open.sideband ().balance.number ()); ASSERT_EQ (1, open.sideband ().height); - ASSERT_EQ (nano::genesis_amount - 50, ledger.amount (transaction, hash2)); + ASSERT_EQ (nano::dev::genesis_amount - 50, ledger.amount (transaction, hash2)); ASSERT_EQ (nano::process_result::progress, return2.code); ASSERT_EQ (key2.pub, store->block.account_calculated (open)); - ASSERT_EQ (nano::genesis_amount - 50, ledger.amount (transaction, hash2)); + ASSERT_EQ (nano::dev::genesis_amount - 50, ledger.amount (transaction, hash2)); ASSERT_EQ (key2.pub, store->frontier.get (transaction, hash2)); - ASSERT_EQ (nano::genesis_amount - 50, ledger.account_balance (transaction, key2.pub)); + ASSERT_EQ (nano::dev::genesis_amount - 50, ledger.account_balance (transaction, key2.pub)); ASSERT_EQ (0, ledger.account_pending (transaction, key2.pub)); ASSERT_EQ (50, ledger.weight (nano::dev::genesis_key.pub)); - ASSERT_EQ (nano::genesis_amount - 50, ledger.weight (key2.pub)); + ASSERT_EQ (nano::dev::genesis_amount - 50, ledger.weight (key2.pub)); nano::account_info info3; ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info3)); auto latest2 (store->block.get (transaction, info3.head)); @@ -158,9 +158,9 @@ TEST (ledger, process_send) nano::pending_info pending1; ASSERT_FALSE (ledger.store.pending.get (transaction, nano::pending_key (key2.pub, hash1), pending1)); ASSERT_EQ (nano::dev::genesis_key.pub, pending1.source); - ASSERT_EQ (nano::genesis_amount - 50, pending1.amount.number ()); + ASSERT_EQ (nano::dev::genesis_amount - 50, pending1.amount.number ()); ASSERT_EQ (0, ledger.account_balance (transaction, key2.pub)); - ASSERT_EQ (nano::genesis_amount - 50, ledger.account_pending (transaction, key2.pub)); + ASSERT_EQ (nano::dev::genesis_amount - 50, ledger.account_pending (transaction, key2.pub)); ASSERT_EQ (50, ledger.account_balance (transaction, nano::dev::genesis_key.pub)); ASSERT_EQ (50, ledger.weight (nano::dev::genesis_key.pub)); ASSERT_EQ (0, ledger.weight (key2.pub)); @@ -168,7 +168,7 @@ TEST (ledger, process_send) ASSERT_FALSE (ledger.store.account.get (transaction, nano::dev::genesis_key.pub, info6)); ASSERT_EQ (hash1, info6.head); ASSERT_FALSE (ledger.rollback (transaction, info6.head)); - ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::genesis_amount, ledger.weight (nano::dev::genesis_key.pub)); ASSERT_EQ (nano::dev::genesis_key.pub, store->frontier.get (transaction, info1.head)); ASSERT_TRUE (store->frontier.get (transaction, hash1).is_zero ()); nano::account_info info7; @@ -177,7 +177,7 @@ TEST (ledger, process_send) ASSERT_EQ (info1.head, info7.head); nano::pending_info pending2; ASSERT_TRUE (ledger.store.pending.get (transaction, nano::pending_key (key2.pub, hash1), pending2)); - ASSERT_EQ (nano::genesis_amount, ledger.account_balance (transaction, nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::genesis_amount, ledger.account_balance (transaction, nano::dev::genesis_key.pub)); ASSERT_EQ (0, ledger.account_pending (transaction, key2.pub)); ASSERT_EQ (store->account.count (transaction), ledger.cache.account_count); } @@ -206,10 +206,10 @@ TEST (ledger, process_receive) ASSERT_EQ (nano::process_result::progress, return1.code); ASSERT_EQ (key2.pub, store->block.account_calculated (open)); ASSERT_EQ (key2.pub, open.sideband ().account); - ASSERT_EQ (nano::genesis_amount - 50, open.sideband ().balance.number ()); + ASSERT_EQ (nano::dev::genesis_amount - 50, open.sideband ().balance.number ()); ASSERT_EQ (1, open.sideband ().height); - ASSERT_EQ (nano::genesis_amount - 50, ledger.amount (transaction, hash2)); - ASSERT_EQ (nano::genesis_amount - 50, ledger.weight (key3.pub)); + ASSERT_EQ (nano::dev::genesis_amount - 50, ledger.amount (transaction, hash2)); + ASSERT_EQ (nano::dev::genesis_amount - 50, ledger.weight (key3.pub)); nano::send_block send2 (hash1, key2.pub, 25, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (hash1)); nano::block_hash hash3 (send2.hash ()); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); @@ -218,7 +218,7 @@ TEST (ledger, process_receive) ASSERT_EQ (key2.pub, store->frontier.get (transaction, hash2)); auto return2 (ledger.process (transaction, receive)); ASSERT_EQ (key2.pub, receive.sideband ().account); - ASSERT_EQ (nano::genesis_amount - 25, receive.sideband ().balance.number ()); + ASSERT_EQ (nano::dev::genesis_amount - 25, receive.sideband ().balance.number ()); ASSERT_EQ (2, receive.sideband ().height); ASSERT_EQ (25, ledger.amount (transaction, hash4)); ASSERT_TRUE (store->frontier.get (transaction, hash2).is_zero ()); @@ -228,16 +228,16 @@ TEST (ledger, process_receive) ASSERT_EQ (hash4, ledger.latest (transaction, key2.pub)); ASSERT_EQ (25, ledger.account_balance (transaction, nano::dev::genesis_key.pub)); ASSERT_EQ (0, ledger.account_pending (transaction, key2.pub)); - ASSERT_EQ (nano::genesis_amount - 25, ledger.account_balance (transaction, key2.pub)); - ASSERT_EQ (nano::genesis_amount - 25, ledger.weight (key3.pub)); + ASSERT_EQ (nano::dev::genesis_amount - 25, ledger.account_balance (transaction, key2.pub)); + ASSERT_EQ (nano::dev::genesis_amount - 25, ledger.weight (key3.pub)); ASSERT_FALSE (ledger.rollback (transaction, hash4)); ASSERT_TRUE (store->block.successor (transaction, hash2).is_zero ()); ASSERT_EQ (key2.pub, store->frontier.get (transaction, hash2)); ASSERT_TRUE (store->frontier.get (transaction, hash4).is_zero ()); ASSERT_EQ (25, ledger.account_balance (transaction, nano::dev::genesis_key.pub)); ASSERT_EQ (25, ledger.account_pending (transaction, key2.pub)); - ASSERT_EQ (nano::genesis_amount - 50, ledger.account_balance (transaction, key2.pub)); - ASSERT_EQ (nano::genesis_amount - 50, ledger.weight (key3.pub)); + ASSERT_EQ (nano::dev::genesis_amount - 50, ledger.account_balance (transaction, key2.pub)); + ASSERT_EQ (nano::dev::genesis_amount - 50, ledger.weight (key3.pub)); ASSERT_EQ (hash2, ledger.latest (transaction, key2.pub)); nano::pending_info pending1; ASSERT_FALSE (ledger.store.pending.get (transaction, nano::pending_key (key2.pub, hash3), pending1)); @@ -269,14 +269,14 @@ TEST (ledger, rollback_receiver) ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open).code); ASSERT_EQ (hash2, ledger.latest (transaction, key2.pub)); ASSERT_EQ (50, ledger.account_balance (transaction, nano::dev::genesis_key.pub)); - ASSERT_EQ (nano::genesis_amount - 50, ledger.account_balance (transaction, key2.pub)); + ASSERT_EQ (nano::dev::genesis_amount - 50, ledger.account_balance (transaction, key2.pub)); ASSERT_EQ (50, ledger.weight (nano::dev::genesis_key.pub)); ASSERT_EQ (0, ledger.weight (key2.pub)); - ASSERT_EQ (nano::genesis_amount - 50, ledger.weight (key3.pub)); + ASSERT_EQ (nano::dev::genesis_amount - 50, ledger.weight (key3.pub)); ASSERT_FALSE (ledger.rollback (transaction, hash1)); - ASSERT_EQ (nano::genesis_amount, ledger.account_balance (transaction, nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::genesis_amount, ledger.account_balance (transaction, nano::dev::genesis_key.pub)); ASSERT_EQ (0, ledger.account_balance (transaction, key2.pub)); - ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::genesis_amount, ledger.weight (nano::dev::genesis_key.pub)); ASSERT_EQ (0, ledger.weight (key2.pub)); ASSERT_EQ (0, ledger.weight (key3.pub)); nano::account_info info2; @@ -314,7 +314,7 @@ TEST (ledger, rollback_representation) nano::receive_block receive1 (open.hash (), send2.hash (), key2.prv, key2.pub, *pool.generate (open.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); ASSERT_EQ (1, ledger.weight (key3.pub)); - ASSERT_EQ (nano::genesis_amount - 1, ledger.weight (key4.pub)); + ASSERT_EQ (nano::dev::genesis_amount - 1, ledger.weight (key4.pub)); nano::account_info info1; ASSERT_FALSE (store->account.get (transaction, key2.pub, info1)); ASSERT_EQ (key4.pub, info1.representative); @@ -323,12 +323,12 @@ TEST (ledger, rollback_representation) ASSERT_FALSE (store->account.get (transaction, key2.pub, info2)); ASSERT_EQ (key4.pub, info2.representative); ASSERT_EQ (0, ledger.weight (key2.pub)); - ASSERT_EQ (nano::genesis_amount - 50, ledger.weight (key4.pub)); + ASSERT_EQ (nano::dev::genesis_amount - 50, ledger.weight (key4.pub)); ASSERT_FALSE (ledger.rollback (transaction, open.hash ())); ASSERT_EQ (1, ledger.weight (key3.pub)); ASSERT_EQ (0, ledger.weight (key4.pub)); ledger.rollback (transaction, send1.hash ()); - ASSERT_EQ (nano::genesis_amount, ledger.weight (key3.pub)); + ASSERT_EQ (nano::dev::genesis_amount, ledger.weight (key3.pub)); nano::account_info info3; ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info3)); ASSERT_EQ (key3.pub, info3.representative); @@ -336,7 +336,7 @@ TEST (ledger, rollback_representation) nano::account_info info4; ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info4)); ASSERT_EQ (key5.pub, info4.representative); - ASSERT_EQ (nano::genesis_amount, ledger.weight (key5.pub)); + ASSERT_EQ (nano::dev::genesis_amount, ledger.weight (key5.pub)); ASSERT_EQ (0, ledger.weight (key3.pub)); } @@ -351,7 +351,7 @@ TEST (ledger, receive_rollback) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::send_block send (genesis.hash (), nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block send (genesis.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); nano::receive_block receive (send.hash (), send.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive).code); @@ -406,7 +406,7 @@ TEST (ledger, weight) nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::genesis_amount, ledger.weight (nano::dev::genesis->account ())); } TEST (ledger, representative_change) @@ -421,7 +421,7 @@ TEST (ledger, representative_change) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::genesis_amount, ledger.weight (nano::dev::genesis_key.pub)); ASSERT_EQ (0, ledger.weight (key2.pub)); nano::account_info info1; ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info1)); @@ -434,7 +434,7 @@ TEST (ledger, representative_change) ASSERT_EQ (nano::process_result::progress, return1.code); ASSERT_EQ (nano::dev::genesis_key.pub, store->block.account_calculated (block)); ASSERT_EQ (0, ledger.weight (nano::dev::genesis_key.pub)); - ASSERT_EQ (nano::genesis_amount, ledger.weight (key2.pub)); + ASSERT_EQ (nano::dev::genesis_amount, ledger.weight (key2.pub)); nano::account_info info2; ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info2)); ASSERT_EQ (block.hash (), info2.head); @@ -444,7 +444,7 @@ TEST (ledger, representative_change) nano::account_info info3; ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info3)); ASSERT_EQ (info1.head, info3.head); - ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::genesis_amount, ledger.weight (nano::dev::genesis_key.pub)); ASSERT_EQ (0, ledger.weight (key2.pub)); } @@ -542,38 +542,38 @@ TEST (ledger, representation) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - ASSERT_EQ (nano::genesis_amount, rep_weights.representation_get (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::genesis_amount, rep_weights.representation_get (nano::dev::genesis_key.pub)); nano::keypair key2; - nano::send_block block1 (genesis.hash (), key2.pub, nano::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block block1 (genesis.hash (), key2.pub, nano::dev::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block1).code); - ASSERT_EQ (nano::genesis_amount - 100, rep_weights.representation_get (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::genesis_amount - 100, rep_weights.representation_get (nano::dev::genesis_key.pub)); nano::keypair key3; nano::open_block block2 (block1.hash (), key3.pub, key2.pub, key2.prv, key2.pub, *pool.generate (key2.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block2).code); - ASSERT_EQ (nano::genesis_amount - 100, rep_weights.representation_get (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::genesis_amount - 100, rep_weights.representation_get (nano::dev::genesis_key.pub)); ASSERT_EQ (0, rep_weights.representation_get (key2.pub)); ASSERT_EQ (100, rep_weights.representation_get (key3.pub)); - nano::send_block block3 (block1.hash (), key2.pub, nano::genesis_amount - 200, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (block1.hash ())); + nano::send_block block3 (block1.hash (), key2.pub, nano::dev::genesis_amount - 200, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (block1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block3).code); - ASSERT_EQ (nano::genesis_amount - 200, rep_weights.representation_get (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::genesis_amount - 200, rep_weights.representation_get (nano::dev::genesis_key.pub)); ASSERT_EQ (0, rep_weights.representation_get (key2.pub)); ASSERT_EQ (100, rep_weights.representation_get (key3.pub)); nano::receive_block block4 (block2.hash (), block3.hash (), key2.prv, key2.pub, *pool.generate (block2.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block4).code); - ASSERT_EQ (nano::genesis_amount - 200, rep_weights.representation_get (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::genesis_amount - 200, rep_weights.representation_get (nano::dev::genesis_key.pub)); ASSERT_EQ (0, rep_weights.representation_get (key2.pub)); ASSERT_EQ (200, rep_weights.representation_get (key3.pub)); nano::keypair key4; nano::change_block block5 (block4.hash (), key4.pub, key2.prv, key2.pub, *pool.generate (block4.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block5).code); - ASSERT_EQ (nano::genesis_amount - 200, rep_weights.representation_get (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::genesis_amount - 200, rep_weights.representation_get (nano::dev::genesis_key.pub)); ASSERT_EQ (0, rep_weights.representation_get (key2.pub)); ASSERT_EQ (0, rep_weights.representation_get (key3.pub)); ASSERT_EQ (200, rep_weights.representation_get (key4.pub)); nano::keypair key5; nano::send_block block6 (block5.hash (), key5.pub, 100, key2.prv, key2.pub, *pool.generate (block5.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block6).code); - ASSERT_EQ (nano::genesis_amount - 200, rep_weights.representation_get (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::genesis_amount - 200, rep_weights.representation_get (nano::dev::genesis_key.pub)); ASSERT_EQ (0, rep_weights.representation_get (key2.pub)); ASSERT_EQ (0, rep_weights.representation_get (key3.pub)); ASSERT_EQ (100, rep_weights.representation_get (key4.pub)); @@ -581,7 +581,7 @@ TEST (ledger, representation) nano::keypair key6; nano::open_block block7 (block6.hash (), key6.pub, key5.pub, key5.prv, key5.pub, *pool.generate (key5.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block7).code); - ASSERT_EQ (nano::genesis_amount - 200, rep_weights.representation_get (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::genesis_amount - 200, rep_weights.representation_get (nano::dev::genesis_key.pub)); ASSERT_EQ (0, rep_weights.representation_get (key2.pub)); ASSERT_EQ (0, rep_weights.representation_get (key3.pub)); ASSERT_EQ (100, rep_weights.representation_get (key4.pub)); @@ -589,7 +589,7 @@ TEST (ledger, representation) ASSERT_EQ (100, rep_weights.representation_get (key6.pub)); nano::send_block block8 (block6.hash (), key5.pub, 0, key2.prv, key2.pub, *pool.generate (block6.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block8).code); - ASSERT_EQ (nano::genesis_amount - 200, rep_weights.representation_get (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::genesis_amount - 200, rep_weights.representation_get (nano::dev::genesis_key.pub)); ASSERT_EQ (0, rep_weights.representation_get (key2.pub)); ASSERT_EQ (0, rep_weights.representation_get (key3.pub)); ASSERT_EQ (0, rep_weights.representation_get (key4.pub)); @@ -597,7 +597,7 @@ TEST (ledger, representation) ASSERT_EQ (100, rep_weights.representation_get (key6.pub)); nano::receive_block block9 (block7.hash (), block8.hash (), key5.prv, key5.pub, *pool.generate (block7.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block9).code); - ASSERT_EQ (nano::genesis_amount - 200, rep_weights.representation_get (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::genesis_amount - 200, rep_weights.representation_get (nano::dev::genesis_key.pub)); ASSERT_EQ (0, rep_weights.representation_get (key2.pub)); ASSERT_EQ (0, rep_weights.representation_get (key3.pub)); ASSERT_EQ (0, rep_weights.representation_get (key4.pub)); @@ -653,7 +653,7 @@ TEST (votes, check_signature) auto & node1 = *system.add_node (node_config); nano::genesis genesis; nano::keypair key1; - auto send1 (std::make_shared (genesis.hash (), key1.pub, nano::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); + auto send1 (std::make_shared (genesis.hash (), key1.pub, nano::dev::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send1); { auto transaction (node1.store.tx_begin_write ()); @@ -677,7 +677,7 @@ TEST (votes, add_one) auto & node1 (*system.nodes[0]); nano::genesis genesis; nano::keypair key1; - auto send1 (std::make_shared (genesis.hash (), key1.pub, nano::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); + auto send1 (std::make_shared (genesis.hash (), key1.pub, nano::dev::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send1); auto transaction (node1.store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, node1.ledger.process (transaction, *send1).code); @@ -697,7 +697,7 @@ TEST (votes, add_one) nano::lock_guard guard (node1.active.mutex); auto winner (*election1->tally ().begin ()); ASSERT_EQ (*send1, *winner.second); - ASSERT_EQ (nano::genesis_amount - 100, winner.first); + ASSERT_EQ (nano::dev::genesis_amount - 100, winner.first); } TEST (votes, add_two) @@ -706,7 +706,7 @@ TEST (votes, add_two) auto & node1 = *system.nodes[0]; nano::genesis genesis; nano::keypair key1; - auto send1 = std::make_shared (genesis.hash (), key1.pub, nano::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0); + auto send1 = std::make_shared (genesis.hash (), key1.pub, nano::dev::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0); node1.work_generate_blocking (*send1); auto transaction = node1.store.tx_begin_write (); ASSERT_EQ (nano::process_result::progress, node1.ledger.process (transaction, *send1).code); @@ -735,7 +735,7 @@ TEST (votes, add_existing) { nano::system system; nano::node_config node_config (nano::get_available_port (), system.logging); - node_config.online_weight_minimum = nano::genesis_amount; + node_config.online_weight_minimum = nano::dev::genesis_amount; node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto & node1 = *system.add_node (node_config); nano::keypair key1; @@ -744,7 +744,7 @@ TEST (votes, add_existing) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) // No representative, blocks can't confirm - .balance (nano::genesis_amount / 2 - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount / 2 - nano::Gxrb_ratio) .link (key1.pub) .work (0) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) @@ -764,7 +764,7 @@ TEST (votes, add_existing) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) // No representative, blocks can't confirm - .balance (nano::genesis_amount / 2 - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount / 2 - nano::Gxrb_ratio) .link (key2.pub) .work (0) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) @@ -1432,7 +1432,7 @@ TEST (ledger, change_representative_move_representation) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); auto hash1 (genesis.hash ()); - ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::genesis_amount, ledger.weight (nano::dev::genesis_key.pub)); nano::send_block send (hash1, key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (hash1)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); ASSERT_EQ (0, ledger.weight (nano::dev::genesis_key.pub)); @@ -1442,7 +1442,7 @@ TEST (ledger, change_representative_move_representation) nano::keypair key3; nano::open_block open (send.hash (), key3.pub, key1.pub, key1.prv, key1.pub, *pool.generate (key1.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open).code); - ASSERT_EQ (nano::genesis_amount, ledger.weight (key3.pub)); + ASSERT_EQ (nano::dev::genesis_amount, ledger.weight (key3.pub)); } TEST (ledger, send_open_receive_rollback) @@ -1459,10 +1459,10 @@ TEST (ledger, send_open_receive_rollback) nano::account_info info1; ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info1)); nano::keypair key1; - nano::send_block send1 (info1.head, key1.pub, nano::genesis_amount - 50, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (info1.head)); + nano::send_block send1 (info1.head, key1.pub, nano::dev::genesis_amount - 50, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (info1.head)); auto return1 (ledger.process (transaction, send1)); ASSERT_EQ (nano::process_result::progress, return1.code); - nano::send_block send2 (send1.hash (), key1.pub, nano::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); + nano::send_block send2 (send1.hash (), key1.pub, nano::dev::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); auto return2 (ledger.process (transaction, send2)); ASSERT_EQ (nano::process_result::progress, return2.code); nano::keypair key2; @@ -1474,34 +1474,34 @@ TEST (ledger, send_open_receive_rollback) ASSERT_EQ (nano::process_result::progress, return5.code); nano::keypair key3; ASSERT_EQ (100, ledger.weight (key2.pub)); - ASSERT_EQ (nano::genesis_amount - 100, ledger.weight (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::genesis_amount - 100, ledger.weight (nano::dev::genesis_key.pub)); ASSERT_EQ (0, ledger.weight (key3.pub)); nano::change_block change1 (send2.hash (), key3.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send2.hash ())); auto return6 (ledger.process (transaction, change1)); ASSERT_EQ (nano::process_result::progress, return6.code); ASSERT_EQ (100, ledger.weight (key2.pub)); ASSERT_EQ (0, ledger.weight (nano::dev::genesis_key.pub)); - ASSERT_EQ (nano::genesis_amount - 100, ledger.weight (key3.pub)); + ASSERT_EQ (nano::dev::genesis_amount - 100, ledger.weight (key3.pub)); ASSERT_FALSE (ledger.rollback (transaction, receive.hash ())); ASSERT_EQ (50, ledger.weight (key2.pub)); ASSERT_EQ (0, ledger.weight (nano::dev::genesis_key.pub)); - ASSERT_EQ (nano::genesis_amount - 100, ledger.weight (key3.pub)); + ASSERT_EQ (nano::dev::genesis_amount - 100, ledger.weight (key3.pub)); ASSERT_FALSE (ledger.rollback (transaction, open.hash ())); ASSERT_EQ (0, ledger.weight (key2.pub)); ASSERT_EQ (0, ledger.weight (nano::dev::genesis_key.pub)); - ASSERT_EQ (nano::genesis_amount - 100, ledger.weight (key3.pub)); + ASSERT_EQ (nano::dev::genesis_amount - 100, ledger.weight (key3.pub)); ASSERT_FALSE (ledger.rollback (transaction, change1.hash ())); ASSERT_EQ (0, ledger.weight (key2.pub)); ASSERT_EQ (0, ledger.weight (key3.pub)); - ASSERT_EQ (nano::genesis_amount - 100, ledger.weight (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::genesis_amount - 100, ledger.weight (nano::dev::genesis_key.pub)); ASSERT_FALSE (ledger.rollback (transaction, send2.hash ())); ASSERT_EQ (0, ledger.weight (key2.pub)); ASSERT_EQ (0, ledger.weight (key3.pub)); - ASSERT_EQ (nano::genesis_amount - 50, ledger.weight (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::genesis_amount - 50, ledger.weight (nano::dev::genesis_key.pub)); ASSERT_FALSE (ledger.rollback (transaction, send1.hash ())); ASSERT_EQ (0, ledger.weight (key2.pub)); ASSERT_EQ (0, ledger.weight (key3.pub)); - ASSERT_EQ (nano::genesis_amount - 0, ledger.weight (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::genesis_amount - 0, ledger.weight (nano::dev::genesis_key.pub)); } TEST (ledger, bootstrap_rep_weight) @@ -1553,7 +1553,7 @@ TEST (ledger, block_destination_source) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair dest; - nano::uint128_t balance (nano::genesis_amount); + nano::uint128_t balance (nano::dev::genesis_amount); balance -= nano::Gxrb_ratio; nano::send_block block1 (genesis.hash (), dest.pub, balance, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); balance -= nano::Gxrb_ratio; @@ -1598,7 +1598,7 @@ TEST (ledger, state_account) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_EQ (nano::dev::genesis->account (), ledger.account (transaction, send1.hash ())); } @@ -1614,29 +1614,29 @@ TEST (ledger, state_send_receive) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send2 (store->block.get (transaction, send1.hash ())); ASSERT_NE (nullptr, send2); ASSERT_EQ (send1, *send2); - ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); + ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, send1.hash ())); - ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()))); ASSERT_EQ (2, send2->sideband ().height); ASSERT_TRUE (send2->sideband ().details.is_send); ASSERT_FALSE (send2->sideband ().details.is_receive); ASSERT_FALSE (send2->sideband ().details.is_epoch); - nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); ASSERT_TRUE (store->block.exists (transaction, receive1.hash ())); auto receive2 (store->block.get (transaction, receive1.hash ())); ASSERT_NE (nullptr, receive2); ASSERT_EQ (receive1, *receive2); - ASSERT_EQ (nano::genesis_amount, ledger.balance (transaction, receive1.hash ())); + ASSERT_EQ (nano::dev::genesis_amount, ledger.balance (transaction, receive1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, receive1.hash ())); - ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::genesis_amount, ledger.weight (nano::dev::genesis->account ())); ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()))); ASSERT_EQ (store->account.count (transaction), ledger.cache.account_count); ASSERT_EQ (3, receive2->sideband ().height); @@ -1656,24 +1656,24 @@ TEST (ledger, state_receive) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::send_block send1 (genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block send1 (genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send2 (store->block.get (transaction, send1.hash ())); ASSERT_NE (nullptr, send2); ASSERT_EQ (send1, *send2); - ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); + ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, send1.hash ())); - ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); - nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); + ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); + nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); ASSERT_TRUE (store->block.exists (transaction, receive1.hash ())); auto receive2 (store->block.get (transaction, receive1.hash ())); ASSERT_NE (nullptr, receive2); ASSERT_EQ (receive1, *receive2); - ASSERT_EQ (nano::genesis_amount, ledger.balance (transaction, receive1.hash ())); + ASSERT_EQ (nano::dev::genesis_amount, ledger.balance (transaction, receive1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, receive1.hash ())); - ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::genesis_amount, ledger.weight (nano::dev::genesis->account ())); ASSERT_EQ (3, receive2->sideband ().height); ASSERT_FALSE (receive2->sideband ().details.is_send); ASSERT_TRUE (receive2->sideband ().details.is_receive); @@ -1692,16 +1692,16 @@ TEST (ledger, state_rep_change) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair rep; - nano::state_block change1 (nano::dev::genesis->account (), genesis.hash (), rep.pub, nano::genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block change1 (nano::dev::genesis->account (), genesis.hash (), rep.pub, nano::dev::genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, change1).code); ASSERT_TRUE (store->block.exists (transaction, change1.hash ())); auto change2 (store->block.get (transaction, change1.hash ())); ASSERT_NE (nullptr, change2); ASSERT_EQ (change1, *change2); - ASSERT_EQ (nano::genesis_amount, ledger.balance (transaction, change1.hash ())); + ASSERT_EQ (nano::dev::genesis_amount, ledger.balance (transaction, change1.hash ())); ASSERT_EQ (0, ledger.amount (transaction, change1.hash ())); ASSERT_EQ (0, ledger.weight (nano::dev::genesis->account ())); - ASSERT_EQ (nano::genesis_amount, ledger.weight (rep.pub)); + ASSERT_EQ (nano::dev::genesis_amount, ledger.weight (rep.pub)); ASSERT_EQ (2, change2->sideband ().height); ASSERT_FALSE (change2->sideband ().details.is_send); ASSERT_FALSE (change2->sideband ().details.is_receive); @@ -1720,15 +1720,15 @@ TEST (ledger, state_open) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send2 (store->block.get (transaction, send1.hash ())); ASSERT_NE (nullptr, send2); ASSERT_EQ (send1, *send2); - ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); + ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, send1.hash ())); - ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (destination.pub, send1.hash ()))); nano::state_block open1 (destination.pub, 0, nano::dev::genesis->account (), nano::Gxrb_ratio, send1.hash (), destination.prv, destination.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open1).code); @@ -1739,7 +1739,7 @@ TEST (ledger, state_open) ASSERT_EQ (open1, *open2); ASSERT_EQ (nano::Gxrb_ratio, ledger.balance (transaction, open1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, open1.hash ())); - ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::genesis_amount, ledger.weight (nano::dev::genesis->account ())); ASSERT_EQ (ledger.cache.account_count, store->account.count (transaction)); ASSERT_EQ (1, open2->sideband ().height); ASSERT_FALSE (open2->sideband ().details.is_send); @@ -1759,9 +1759,9 @@ TEST (ledger, send_after_state_fail) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - nano::send_block send2 (send1.hash (), nano::dev::genesis->account (), nano::genesis_amount - (2 * nano::Gxrb_ratio), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); + nano::send_block send2 (send1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - (2 * nano::Gxrb_ratio), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::block_position, ledger.process (transaction, send2).code); } @@ -1777,7 +1777,7 @@ TEST (ledger, receive_after_state_fail) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::receive_block receive1 (send1.hash (), send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::block_position, ledger.process (transaction, receive1).code); @@ -1795,7 +1795,7 @@ TEST (ledger, change_after_state_fail) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::keypair rep; nano::change_block change1 (send1.hash (), rep.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); @@ -1813,16 +1813,16 @@ TEST (ledger, state_unreceivable_fail) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::send_block send1 (genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block send1 (genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send2 (store->block.get (transaction, send1.hash ())); ASSERT_NE (nullptr, send2); ASSERT_EQ (send1, *send2); - ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); + ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, send1.hash ())); - ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); - nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); + ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); + nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::gap_source, ledger.process (transaction, receive1).code); } @@ -1837,16 +1837,16 @@ TEST (ledger, state_receive_bad_amount_fail) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::send_block send1 (genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block send1 (genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send2 (store->block.get (transaction, send1.hash ())); ASSERT_NE (nullptr, send2); ASSERT_EQ (send1, *send2); - ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); + ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, send1.hash ())); - ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); - nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); + ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); + nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::balance_mismatch, ledger.process (transaction, receive1).code); } @@ -1861,10 +1861,10 @@ TEST (ledger, state_no_link_amount_fail) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::keypair rep; - nano::state_block change1 (nano::dev::genesis->account (), send1.hash (), rep.pub, nano::genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block change1 (nano::dev::genesis->account (), send1.hash (), rep.pub, nano::dev::genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::balance_mismatch, ledger.process (transaction, change1).code); } @@ -1879,15 +1879,15 @@ TEST (ledger, state_receive_wrong_account_fail) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send2 (store->block.get (transaction, send1.hash ())); ASSERT_NE (nullptr, send2); ASSERT_EQ (send1, *send2); - ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); + ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, send1.hash ())); - ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); nano::keypair key; nano::state_block receive1 (key.pub, 0, nano::dev::genesis->account (), nano::Gxrb_ratio, send1.hash (), key.prv, key.pub, *pool.generate (key.pub)); ASSERT_EQ (nano::process_result::unreceivable, ledger.process (transaction, receive1).code); @@ -1905,7 +1905,7 @@ TEST (ledger, state_open_state_fork) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::state_block open1 (destination.pub, 0, nano::dev::genesis->account (), nano::Gxrb_ratio, send1.hash (), destination.prv, destination.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open1).code); @@ -1926,7 +1926,7 @@ TEST (ledger, state_state_open_fork) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::open_block open1 (send1.hash (), nano::dev::genesis->account (), destination.pub, destination.prv, destination.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open1).code); @@ -1948,7 +1948,7 @@ TEST (ledger, state_open_previous_fail) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::state_block open1 (destination.pub, 1, nano::dev::genesis->account (), nano::Gxrb_ratio, send1.hash (), destination.prv, destination.pub, *pool.generate (1)); ASSERT_EQ (nano::process_result::gap_previous, ledger.process (transaction, open1).code); @@ -1966,7 +1966,7 @@ TEST (ledger, state_open_source_fail) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::state_block open1 (destination.pub, 0, nano::dev::genesis->account (), 0, 0, destination.prv, destination.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::gap_source, ledger.process (transaction, open1).code); @@ -1984,16 +1984,16 @@ TEST (ledger, state_send_change) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair rep; - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), rep.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), rep.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send2 (store->block.get (transaction, send1.hash ())); ASSERT_NE (nullptr, send2); ASSERT_EQ (send1, *send2); - ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); + ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, send1.hash ())); ASSERT_EQ (0, ledger.weight (nano::dev::genesis->account ())); - ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (rep.pub)); + ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.weight (rep.pub)); ASSERT_EQ (2, send2->sideband ().height); ASSERT_TRUE (send2->sideband ().details.is_send); ASSERT_FALSE (send2->sideband ().details.is_receive); @@ -2011,26 +2011,26 @@ TEST (ledger, state_receive_change) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send2 (store->block.get (transaction, send1.hash ())); ASSERT_NE (nullptr, send2); ASSERT_EQ (send1, *send2); - ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); + ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, send1.hash ())); - ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); nano::keypair rep; - nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), rep.pub, nano::genesis_amount, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), rep.pub, nano::dev::genesis_amount, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); ASSERT_TRUE (store->block.exists (transaction, receive1.hash ())); auto receive2 (store->block.get (transaction, receive1.hash ())); ASSERT_NE (nullptr, receive2); ASSERT_EQ (receive1, *receive2); - ASSERT_EQ (nano::genesis_amount, ledger.balance (transaction, receive1.hash ())); + ASSERT_EQ (nano::dev::genesis_amount, ledger.balance (transaction, receive1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, receive1.hash ())); ASSERT_EQ (0, ledger.weight (nano::dev::genesis->account ())); - ASSERT_EQ (nano::genesis_amount, ledger.weight (rep.pub)); + ASSERT_EQ (nano::dev::genesis_amount, ledger.weight (rep.pub)); ASSERT_EQ (3, receive2->sideband ().height); ASSERT_FALSE (receive2->sideband ().details.is_send); ASSERT_TRUE (receive2->sideband ().details.is_receive); @@ -2049,13 +2049,13 @@ TEST (ledger, state_open_old) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::open_block open1 (send1.hash (), nano::dev::genesis->account (), destination.pub, destination.prv, destination.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open1).code); ASSERT_EQ (nano::Gxrb_ratio, ledger.balance (transaction, open1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, open1.hash ())); - ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::genesis_amount, ledger.weight (nano::dev::genesis->account ())); } TEST (ledger, state_receive_old) @@ -2070,9 +2070,9 @@ TEST (ledger, state_receive_old) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - nano::state_block send2 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount - (2 * nano::Gxrb_ratio), destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block send2 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - (2 * nano::Gxrb_ratio), destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); nano::open_block open1 (send1.hash (), nano::dev::genesis->account (), destination.pub, destination.prv, destination.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open1).code); @@ -2080,7 +2080,7 @@ TEST (ledger, state_receive_old) ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); ASSERT_EQ (2 * nano::Gxrb_ratio, ledger.balance (transaction, receive1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, receive1.hash ())); - ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::genesis_amount, ledger.weight (nano::dev::genesis->account ())); } TEST (ledger, state_rollback_send) @@ -2094,22 +2094,22 @@ TEST (ledger, state_rollback_send) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send2 (store->block.get (transaction, send1.hash ())); ASSERT_NE (nullptr, send2); ASSERT_EQ (send1, *send2); - ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.account_balance (transaction, nano::dev::genesis->account ())); - ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.account_balance (transaction, nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); nano::pending_info info; ASSERT_FALSE (store->pending.get (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()), info)); ASSERT_EQ (nano::dev::genesis->account (), info.source); ASSERT_EQ (nano::Gxrb_ratio, info.amount.number ()); ASSERT_FALSE (ledger.rollback (transaction, send1.hash ())); ASSERT_FALSE (store->block.exists (transaction, send1.hash ())); - ASSERT_EQ (nano::genesis_amount, ledger.account_balance (transaction, nano::dev::genesis->account ())); - ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::genesis_amount, ledger.account_balance (transaction, nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::genesis_amount, ledger.weight (nano::dev::genesis->account ())); ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()))); ASSERT_TRUE (store->block.successor (transaction, genesis.hash ()).is_zero ()); ASSERT_EQ (store->account.count (transaction), ledger.cache.account_count); @@ -2126,9 +2126,9 @@ TEST (ledger, state_rollback_receive) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), receive1.hash ()))); ASSERT_FALSE (ledger.rollback (transaction, receive1.hash ())); @@ -2137,8 +2137,8 @@ TEST (ledger, state_rollback_receive) ASSERT_EQ (nano::dev::genesis->account (), info.source); ASSERT_EQ (nano::Gxrb_ratio, info.amount.number ()); ASSERT_FALSE (store->block.exists (transaction, receive1.hash ())); - ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.account_balance (transaction, nano::dev::genesis->account ())); - ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.account_balance (transaction, nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); ASSERT_EQ (store->account.count (transaction), ledger.cache.account_count); } @@ -2154,7 +2154,7 @@ TEST (ledger, state_rollback_received_send) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key; - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::state_block receive1 (key.pub, 0, key.pub, nano::Gxrb_ratio, send1.hash (), key.prv, key.pub, *pool.generate (key.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); @@ -2163,8 +2163,8 @@ TEST (ledger, state_rollback_received_send) ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()))); ASSERT_FALSE (store->block.exists (transaction, send1.hash ())); ASSERT_FALSE (store->block.exists (transaction, receive1.hash ())); - ASSERT_EQ (nano::genesis_amount, ledger.account_balance (transaction, nano::dev::genesis->account ())); - ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::genesis_amount, ledger.account_balance (transaction, nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::genesis_amount, ledger.weight (nano::dev::genesis->account ())); ASSERT_EQ (0, ledger.account_balance (transaction, key.pub)); ASSERT_EQ (0, ledger.weight (key.pub)); ASSERT_EQ (store->account.count (transaction), ledger.cache.account_count); @@ -2182,12 +2182,12 @@ TEST (ledger, state_rep_change_rollback) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair rep; - nano::state_block change1 (nano::dev::genesis->account (), genesis.hash (), rep.pub, nano::genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block change1 (nano::dev::genesis->account (), genesis.hash (), rep.pub, nano::dev::genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, change1).code); ASSERT_FALSE (ledger.rollback (transaction, change1.hash ())); ASSERT_FALSE (store->block.exists (transaction, change1.hash ())); - ASSERT_EQ (nano::genesis_amount, ledger.account_balance (transaction, nano::dev::genesis->account ())); - ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::genesis_amount, ledger.account_balance (transaction, nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::genesis_amount, ledger.weight (nano::dev::genesis->account ())); ASSERT_EQ (0, ledger.weight (rep.pub)); } @@ -2203,14 +2203,14 @@ TEST (ledger, state_open_rollback) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::state_block open1 (destination.pub, 0, nano::dev::genesis->account (), nano::Gxrb_ratio, send1.hash (), destination.prv, destination.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open1).code); ASSERT_FALSE (ledger.rollback (transaction, open1.hash ())); ASSERT_FALSE (store->block.exists (transaction, open1.hash ())); ASSERT_EQ (0, ledger.account_balance (transaction, destination.pub)); - ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); nano::pending_info info; ASSERT_FALSE (store->pending.get (transaction, nano::pending_key (destination.pub, send1.hash ()), info)); ASSERT_EQ (nano::dev::genesis->account (), info.source); @@ -2230,12 +2230,12 @@ TEST (ledger, state_send_change_rollback) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair rep; - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), rep.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), rep.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_FALSE (ledger.rollback (transaction, send1.hash ())); ASSERT_FALSE (store->block.exists (transaction, send1.hash ())); - ASSERT_EQ (nano::genesis_amount, ledger.account_balance (transaction, nano::dev::genesis->account ())); - ASSERT_EQ (nano::genesis_amount, ledger.weight (nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::genesis_amount, ledger.account_balance (transaction, nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::genesis_amount, ledger.weight (nano::dev::genesis->account ())); ASSERT_EQ (0, ledger.weight (rep.pub)); ASSERT_EQ (store->account.count (transaction), ledger.cache.account_count); } @@ -2251,15 +2251,15 @@ TEST (ledger, state_receive_change_rollback) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::keypair rep; - nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), rep.pub, nano::genesis_amount, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), rep.pub, nano::dev::genesis_amount, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); ASSERT_FALSE (ledger.rollback (transaction, receive1.hash ())); ASSERT_FALSE (store->block.exists (transaction, receive1.hash ())); - ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.account_balance (transaction, nano::dev::genesis->account ())); - ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.account_balance (transaction, nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); ASSERT_EQ (0, ledger.weight (rep.pub)); ASSERT_EQ (store->account.count (transaction), ledger.cache.account_count); } @@ -2276,14 +2276,14 @@ TEST (ledger, epoch_blocks_v1_general) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block epoch1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block epoch1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch1).code); ASSERT_FALSE (epoch1.sideband ().details.is_send); ASSERT_FALSE (epoch1.sideband ().details.is_receive); ASSERT_TRUE (epoch1.sideband ().details.is_epoch); ASSERT_EQ (nano::epoch::epoch_1, epoch1.sideband ().details.epoch); ASSERT_EQ (nano::epoch::epoch_0, epoch1.sideband ().source_epoch); // Not used for epoch blocks - nano::state_block epoch2 (nano::dev::genesis->account (), epoch1.hash (), nano::dev::genesis->account (), nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch1.hash ())); + nano::state_block epoch2 (nano::dev::genesis->account (), epoch1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch1.hash ())); ASSERT_EQ (nano::process_result::block_position, ledger.process (transaction, epoch2).code); nano::account_info genesis_info; ASSERT_FALSE (ledger.store.account.get (transaction, nano::dev::genesis->account (), genesis_info)); @@ -2301,7 +2301,7 @@ TEST (ledger, epoch_blocks_v1_general) ASSERT_EQ (nano::epoch::epoch_0, epoch1.sideband ().source_epoch); // Not used for epoch blocks nano::change_block change1 (epoch1.hash (), nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch1.hash ())); ASSERT_EQ (nano::process_result::block_position, ledger.process (transaction, change1).code); - nano::state_block send1 (nano::dev::genesis->account (), epoch1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch1.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), epoch1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (send1.sideband ().details.is_send); ASSERT_FALSE (send1.sideband ().details.is_receive); @@ -2328,7 +2328,7 @@ TEST (ledger, epoch_blocks_v1_general) ASSERT_EQ (0, ledger.balance (transaction, epoch4.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.balance (transaction, receive2.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, receive2.hash ())); - ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.weight (destination.pub)); ASSERT_FALSE (receive2.sideband ().details.is_send); ASSERT_TRUE (receive2.sideband ().details.is_receive); @@ -2347,19 +2347,19 @@ TEST (ledger, epoch_blocks_v2_general) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block epoch1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block epoch1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); // Trying to upgrade from epoch 0 to epoch 2. It is a requirement epoch upgrades are sequential unless the account is unopened ASSERT_EQ (nano::process_result::block_position, ledger.process (transaction, epoch1).code); // Set it to the first epoch and it should now succeed - epoch1 = nano::state_block (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, epoch1.work); + epoch1 = nano::state_block (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, epoch1.work); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch1).code); ASSERT_EQ (nano::epoch::epoch_1, epoch1.sideband ().details.epoch); ASSERT_EQ (nano::epoch::epoch_0, epoch1.sideband ().source_epoch); // Not used for epoch blocks - nano::state_block epoch2 (nano::dev::genesis->account (), epoch1.hash (), nano::dev::genesis->account (), nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch1.hash ())); + nano::state_block epoch2 (nano::dev::genesis->account (), epoch1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch2).code); ASSERT_EQ (nano::epoch::epoch_2, epoch2.sideband ().details.epoch); ASSERT_EQ (nano::epoch::epoch_0, epoch2.sideband ().source_epoch); // Not used for epoch blocks - nano::state_block epoch3 (nano::dev::genesis->account (), epoch2.hash (), nano::dev::genesis->account (), nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch2.hash ())); + nano::state_block epoch3 (nano::dev::genesis->account (), epoch2.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch2.hash ())); ASSERT_EQ (nano::process_result::block_position, ledger.process (transaction, epoch3).code); nano::account_info genesis_info; ASSERT_FALSE (ledger.store.account.get (transaction, nano::dev::genesis->account (), genesis_info)); @@ -2372,7 +2372,7 @@ TEST (ledger, epoch_blocks_v2_general) ASSERT_EQ (genesis_info.epoch (), nano::epoch::epoch_1); nano::change_block change1 (epoch1.hash (), nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch1.hash ())); ASSERT_EQ (nano::process_result::block_position, ledger.process (transaction, change1).code); - nano::state_block send1 (nano::dev::genesis->account (), epoch1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch1.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), epoch1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_EQ (nano::epoch::epoch_1, send1.sideband ().details.epoch); ASSERT_EQ (nano::epoch::epoch_0, send1.sideband ().source_epoch); // Not used for send blocks @@ -2397,7 +2397,7 @@ TEST (ledger, epoch_blocks_v2_general) ASSERT_EQ (0, ledger.balance (transaction, epoch6.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.balance (transaction, receive2.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, receive2.hash ())); - ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.weight (destination.pub)); } @@ -2413,11 +2413,11 @@ TEST (ledger, epoch_blocks_receive_upgrade) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - nano::state_block epoch1 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block epoch1 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch1).code); - nano::state_block send2 (nano::dev::genesis->account (), epoch1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio * 2, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch1.hash ())); + nano::state_block send2 (nano::dev::genesis->account (), epoch1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio * 2, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); ASSERT_EQ (nano::epoch::epoch_1, send2.sideband ().details.epoch); ASSERT_EQ (nano::epoch::epoch_0, send2.sideband ().source_epoch); // Not used for send blocks @@ -2454,14 +2454,14 @@ TEST (ledger, epoch_blocks_receive_upgrade) ASSERT_EQ (nano::process_result::unreceivable, ledger.process (transaction, open2).code); // Upgrade to epoch 2 and send to destination. Try to create an open block from an epoch 2 source block. nano::keypair destination3; - nano::state_block epoch2 (nano::dev::genesis->account (), send2.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio * 2, ledger.epoch_link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send2.hash ())); + nano::state_block epoch2 (nano::dev::genesis->account (), send2.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio * 2, ledger.epoch_link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send2.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch2).code); - nano::state_block send4 (nano::dev::genesis->account (), epoch2.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio * 3, destination3.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch2.hash ())); + nano::state_block send4 (nano::dev::genesis->account (), epoch2.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio * 3, destination3.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch2.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send4).code); nano::open_block open3 (send4.hash (), destination3.pub, destination3.pub, destination3.prv, destination3.pub, *pool.generate (destination3.pub)); ASSERT_EQ (nano::process_result::unreceivable, ledger.process (transaction, open3).code); // Send it to an epoch 1 account - nano::state_block send5 (nano::dev::genesis->account (), send4.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio * 4, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send4.hash ())); + nano::state_block send5 (nano::dev::genesis->account (), send4.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio * 4, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send4.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send5).code); ASSERT_FALSE (ledger.store.account.get (transaction, destination.pub, destination_info)); ASSERT_EQ (destination_info.epoch (), nano::epoch::epoch_1); @@ -2473,7 +2473,7 @@ TEST (ledger, epoch_blocks_receive_upgrade) ASSERT_EQ (destination_info.epoch (), nano::epoch::epoch_2); // Upgrade an unopened account straight to epoch 2 nano::keypair destination4; - nano::state_block send6 (nano::dev::genesis->account (), send5.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio * 5, destination4.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send5.hash ())); + nano::state_block send6 (nano::dev::genesis->account (), send5.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio * 5, destination4.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send5.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send6).code); nano::state_block epoch4 (destination4.pub, 0, 0, 0, ledger.epoch_link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (destination4.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch4).code); @@ -2494,17 +2494,17 @@ TEST (ledger, epoch_blocks_fork) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::send_block send1 (genesis.hash (), nano::account (0), nano::genesis_amount, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block send1 (genesis.hash (), nano::account (0), nano::dev::genesis_amount, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - nano::state_block epoch1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block epoch1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::fork, ledger.process (transaction, epoch1).code); - nano::state_block epoch2 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block epoch2 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::fork, ledger.process (transaction, epoch2).code); - nano::state_block epoch3 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block epoch3 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch3).code); ASSERT_EQ (nano::epoch::epoch_1, epoch3.sideband ().details.epoch); ASSERT_EQ (nano::epoch::epoch_0, epoch3.sideband ().source_epoch); // Not used for epoch state blocks - nano::state_block epoch4 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block epoch4 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::fork, ledger.process (transaction, epoch2).code); } @@ -2515,11 +2515,11 @@ TEST (ledger, successor_epoch) nano::keypair key1; nano::genesis genesis; nano::work_pool pool (std::numeric_limits::max ()); - nano::send_block send1 (genesis.hash (), key1.pub, nano::genesis_amount - 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block send1 (genesis.hash (), key1.pub, nano::dev::genesis_amount - 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); nano::state_block open (key1.pub, 0, key1.pub, 1, send1.hash (), key1.prv, key1.pub, *pool.generate (key1.pub)); nano::state_block change (key1.pub, open.hash (), key1.pub, 1, 0, key1.prv, key1.pub, *pool.generate (open.hash ())); auto open_hash = open.hash (); - nano::send_block send2 (send1.hash (), reinterpret_cast (open_hash), nano::genesis_amount - 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); + nano::send_block send2 (send1.hash (), reinterpret_cast (open_hash), nano::dev::genesis_amount - 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); nano::state_block epoch_open (reinterpret_cast (open_hash), 0, 0, 0, node1.ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (open.hash ())); auto transaction (node1.store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, node1.ledger.process (transaction, send1).code); @@ -2565,7 +2565,7 @@ TEST (ledger, epoch_open_pending) .account (nano::dev::genesis->account ()) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis->account ()) - .balance (nano::genesis_amount - 100) + .balance (nano::dev::genesis_amount - 100) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*pool.generate (nano::dev::genesis->hash ())) @@ -2593,7 +2593,7 @@ TEST (ledger, block_hash_account_conflict) .account (nano::dev::genesis->account ()) .previous (genesis.hash ()) .representative (nano::dev::genesis->account ()) - .balance (nano::genesis_amount - 100) + .balance (nano::dev::genesis_amount - 100) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*pool.generate (genesis.hash ())) @@ -2680,13 +2680,13 @@ TEST (ledger, could_fit) nano::keypair destination; // Test legacy and state change blocks could_fit nano::change_block change1 (genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); - nano::state_block change2 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block change2 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_TRUE (ledger.could_fit (transaction, change1)); ASSERT_TRUE (ledger.could_fit (transaction, change2)); // Test legacy and state send nano::keypair key1; - nano::send_block send1 (change1.hash (), key1.pub, nano::genesis_amount - 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (change1.hash ())); - nano::state_block send2 (nano::dev::genesis->account (), change1.hash (), nano::dev::genesis->account (), nano::genesis_amount - 1, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (change1.hash ())); + nano::send_block send1 (change1.hash (), key1.pub, nano::dev::genesis_amount - 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (change1.hash ())); + nano::state_block send2 (nano::dev::genesis->account (), change1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - 1, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (change1.hash ())); ASSERT_FALSE (ledger.could_fit (transaction, send1)); ASSERT_FALSE (ledger.could_fit (transaction, send2)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, change1).code); @@ -2708,7 +2708,7 @@ TEST (ledger, could_fit) ASSERT_TRUE (ledger.could_fit (transaction, open1)); ASSERT_TRUE (ledger.could_fit (transaction, open2)); // Create another send to receive - nano::state_block send3 (nano::dev::genesis->account (), send2.hash (), nano::dev::genesis->account (), nano::genesis_amount - 2, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send2.hash ())); + nano::state_block send3 (nano::dev::genesis->account (), send2.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - 2, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send2.hash ())); // Test legacy and state receive nano::receive_block receive1 (open1.hash (), send3.hash (), key1.prv, key1.pub, *pool.generate (open1.hash ())); nano::state_block receive2 (key1.pub, open1.hash (), nano::dev::genesis->account (), 2, send3.hash (), key1.prv, key1.pub, *pool.generate (open1.hash ())); @@ -2734,7 +2734,7 @@ TEST (ledger, unchecked_epoch) auto & node1 (*system.nodes[0]); nano::genesis genesis; nano::keypair destination; - auto send1 (std::make_shared (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); + auto send1 (std::make_shared (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send1); auto open1 (std::make_shared (destination.pub, 0, destination.pub, nano::Gxrb_ratio, send1->hash (), destination.prv, destination.pub, 0)); node1.work_generate_blocking (*open1); @@ -2774,7 +2774,7 @@ TEST (ledger, unchecked_epoch_invalid) auto & node1 (*system.add_node (node_config)); nano::genesis genesis; nano::keypair destination; - auto send1 (std::make_shared (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); + auto send1 (std::make_shared (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send1); auto open1 (std::make_shared (destination.pub, 0, destination.pub, nano::Gxrb_ratio, send1->hash (), destination.prv, destination.pub, 0)); node1.work_generate_blocking (*open1); @@ -2826,7 +2826,7 @@ TEST (ledger, unchecked_open) auto & node1 (*system.nodes[0]); nano::genesis genesis; nano::keypair destination; - auto send1 (std::make_shared (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); + auto send1 (std::make_shared (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send1); auto open1 (std::make_shared (send1->hash (), destination.pub, destination.pub, destination.prv, destination.pub, 0)); node1.work_generate_blocking (*open1); @@ -2863,9 +2863,9 @@ TEST (ledger, unchecked_receive) auto & node1 (*system.nodes[0]); nano::genesis genesis; nano::keypair destination; - auto send1 (std::make_shared (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); + auto send1 (std::make_shared (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send1); - auto send2 (std::make_shared (nano::dev::genesis->account (), send1->hash (), nano::dev::genesis->account (), nano::genesis_amount - 2 * nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); + auto send2 (std::make_shared (nano::dev::genesis->account (), send1->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - 2 * nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send2); auto open1 (std::make_shared (send1->hash (), destination.pub, destination.pub, destination.prv, destination.pub, 0)); node1.work_generate_blocking (*open1); @@ -2947,7 +2947,7 @@ TEST (ledger, zero_rep) .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (0) - .balance (nano::genesis_amount) + .balance (nano::dev::genesis_amount) .link (0) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) @@ -2955,18 +2955,18 @@ TEST (ledger, zero_rep) auto transaction (node1.store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, node1.ledger.process (transaction, *block1).code); ASSERT_EQ (0, node1.ledger.cache.rep_weights.representation_get (nano::dev::genesis_key.pub)); - ASSERT_EQ (nano::genesis_amount, node1.ledger.cache.rep_weights.representation_get (0)); + ASSERT_EQ (nano::dev::genesis_amount, node1.ledger.cache.rep_weights.representation_get (0)); auto block2 = builder.state () .account (nano::dev::genesis_key.pub) .previous (block1->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount) + .balance (nano::dev::genesis_amount) .link (0) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (block1->hash ())) .build (); ASSERT_EQ (nano::process_result::progress, node1.ledger.process (transaction, *block2).code); - ASSERT_EQ (nano::genesis_amount, node1.ledger.cache.rep_weights.representation_get (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::genesis_amount, node1.ledger.cache.rep_weights.representation_get (nano::dev::genesis_key.pub)); ASSERT_EQ (0, node1.ledger.cache.rep_weights.representation_get (0)); } @@ -3002,7 +3002,7 @@ TEST (ledger, work_validation) auto send = *builder.send () .previous (nano::dev::genesis->hash ()) .destination (gen.pub) - .balance (nano::genesis_amount - 1) + .balance (nano::dev::genesis_amount - 1) .sign (gen.prv, gen.pub) .work (0) .build (ec); @@ -3028,7 +3028,7 @@ TEST (ledger, work_validation) .account (gen.pub) .previous (change.hash ()) .representative (gen.pub) - .balance (nano::genesis_amount - 1) + .balance (nano::dev::genesis_amount - 1) .link (key.pub) .sign (gen.prv, gen.pub) .work (0) @@ -3081,7 +3081,7 @@ TEST (ledger, dependents_confirmed) .account (nano::dev::genesis->account ()) .previous (genesis.hash ()) .representative (nano::dev::genesis->account ()) - .balance (nano::genesis_amount - 100) + .balance (nano::dev::genesis_amount - 100) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*pool.generate (genesis.hash ())) @@ -3092,7 +3092,7 @@ TEST (ledger, dependents_confirmed) .account (nano::dev::genesis->account ()) .previous (send1->hash ()) .representative (nano::dev::genesis->account ()) - .balance (nano::genesis_amount - 200) + .balance (nano::dev::genesis_amount - 200) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*pool.generate (send1->hash ())) @@ -3154,7 +3154,7 @@ TEST (ledger, dependents_confirmed_pruning) .account (nano::dev::genesis->account ()) .previous (genesis.hash ()) .representative (nano::dev::genesis->account ()) - .balance (nano::genesis_amount - 100) + .balance (nano::dev::genesis_amount - 100) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*pool.generate (genesis.hash ())) @@ -3164,7 +3164,7 @@ TEST (ledger, dependents_confirmed_pruning) .account (nano::dev::genesis->account ()) .previous (send1->hash ()) .representative (nano::dev::genesis->account ()) - .balance (nano::genesis_amount - 200) + .balance (nano::dev::genesis_amount - 200) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*pool.generate (send1->hash ())) @@ -3206,7 +3206,7 @@ TEST (ledger, block_confirmed) .account (nano::dev::genesis->account ()) .previous (genesis.hash ()) .representative (nano::dev::genesis->account ()) - .balance (nano::genesis_amount - 100) + .balance (nano::dev::genesis_amount - 100) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*pool.generate (genesis.hash ())) @@ -3242,7 +3242,7 @@ TEST (ledger, cache) auto account_count = 1 + i; auto block_count = 1 + 2 * (i + 1) - 2; auto cemented_count = 1 + 2 * (i + 1) - 2; - auto genesis_weight = nano::genesis_amount - i; + auto genesis_weight = nano::dev::genesis_amount - i; auto pruned_count = i; auto cache_check = [&, i] (nano::ledger_cache const & cache_a) { @@ -3259,7 +3259,7 @@ TEST (ledger, cache) .account (nano::dev::genesis->account ()) .previous (latest) .representative (nano::dev::genesis->account ()) - .balance (nano::genesis_amount - (i + 1)) + .balance (nano::dev::genesis_amount - (i + 1)) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*pool.generate (latest)) @@ -3346,14 +3346,14 @@ TEST (ledger, pruning_action) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send1_stored (store->block.get (transaction, send1.hash ())); ASSERT_NE (nullptr, send1_stored); ASSERT_EQ (send1, *send1_stored); ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()))); - nano::state_block send2 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block send2 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); ASSERT_TRUE (store->block.exists (transaction, send2.hash ())); // Pruning action @@ -3370,7 +3370,7 @@ TEST (ledger, pruning_action) ASSERT_TRUE (store->block.exists (transaction, genesis.hash ())); ASSERT_TRUE (store->block.exists (transaction, send2.hash ())); // Receiving pruned block - nano::state_block receive1 (nano::dev::genesis->account (), send2.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send2.hash ())); + nano::state_block receive1 (nano::dev::genesis->account (), send2.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send2.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); ASSERT_TRUE (store->block.exists (transaction, receive1.hash ())); auto receive1_stored (store->block.get (transaction, receive1.hash ())); @@ -3407,10 +3407,10 @@ TEST (ledger, pruning_large_chain) auto last_hash (genesis.hash ()); for (auto i (0); i < send_receive_pairs; i++) { - nano::state_block send (nano::dev::genesis->account (), last_hash, nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (last_hash)); + nano::state_block send (nano::dev::genesis->account (), last_hash, nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (last_hash)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); ASSERT_TRUE (store->block.exists (transaction, send.hash ())); - nano::state_block receive (nano::dev::genesis->account (), send.hash (), nano::dev::genesis->account (), nano::genesis_amount, send.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send.hash ())); + nano::state_block receive (nano::dev::genesis->account (), send.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, send.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive).code); ASSERT_TRUE (store->block.exists (transaction, receive.hash ())); last_hash = receive.hash (); @@ -3440,12 +3440,12 @@ TEST (ledger, pruning_source_rollback) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block epoch1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block epoch1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch1).code); - nano::state_block send1 (nano::dev::genesis->account (), epoch1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch1.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), epoch1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()))); - nano::state_block send2 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block send2 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); ASSERT_TRUE (store->block.exists (transaction, send2.hash ())); // Pruning action @@ -3461,7 +3461,7 @@ TEST (ledger, pruning_source_rollback) ASSERT_EQ (nano::Gxrb_ratio, info.amount.number ()); ASSERT_EQ (nano::epoch::epoch_1, info.epoch); // Receiving pruned block - nano::state_block receive1 (nano::dev::genesis->account (), send2.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send2.hash ())); + nano::state_block receive1 (nano::dev::genesis->account (), send2.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send2.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()))); ASSERT_EQ (2, ledger.cache.pruned_count); @@ -3492,15 +3492,15 @@ TEST (ledger, pruning_source_rollback_legacy) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::send_block send1 (genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block send1 (genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()))); nano::keypair key1; - nano::send_block send2 (send1.hash (), key1.pub, nano::genesis_amount - 2 * nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); + nano::send_block send2 (send1.hash (), key1.pub, nano::dev::genesis_amount - 2 * nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); ASSERT_TRUE (store->block.exists (transaction, send2.hash ())); ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (key1.pub, send2.hash ()))); - nano::send_block send3 (send2.hash (), nano::dev::genesis->account (), nano::genesis_amount - 3 * nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send2.hash ())); + nano::send_block send3 (send2.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - 3 * nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send2.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send3).code); ASSERT_TRUE (store->block.exists (transaction, send3.hash ())); ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send3.hash ()))); @@ -3571,7 +3571,7 @@ TEST (ledger, pruning_process_error) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_EQ (0, ledger.cache.pruned_count); ASSERT_EQ (2, ledger.cache.block_count); @@ -3582,7 +3582,7 @@ TEST (ledger, pruning_process_error) // Attempt to process pruned block again ASSERT_EQ (nano::process_result::old, ledger.process (transaction, send1).code); // Attept to process new block after pruned - nano::state_block send2 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block send2 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::gap_previous, ledger.process (transaction, send2).code); ASSERT_EQ (1, ledger.cache.pruned_count); ASSERT_EQ (2, ledger.cache.block_count); @@ -3601,14 +3601,14 @@ TEST (ledger, pruning_legacy_blocks) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::send_block send1 (genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block send1 (genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()))); nano::receive_block receive1 (send1.hash (), send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); nano::change_block change1 (receive1.hash (), key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (receive1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, change1).code); - nano::send_block send2 (change1.hash (), key1.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (change1.hash ())); + nano::send_block send2 (change1.hash (), key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (change1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); nano::open_block open1 (send2.hash (), nano::dev::genesis->account (), key1.pub, key1.prv, key1.pub, *pool.generate (key1.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open1).code); @@ -3646,10 +3646,10 @@ TEST (ledger, pruning_safe_functions) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); - nano::state_block send2 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block send2 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); ASSERT_TRUE (store->block.exists (transaction, send2.hash ())); // Pruning action @@ -3664,7 +3664,7 @@ TEST (ledger, pruning_safe_functions) ASSERT_EQ (0, ledger.balance_safe (transaction, send1.hash (), error)); ASSERT_TRUE (error); error = false; - ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio * 2, ledger.balance_safe (transaction, send2.hash (), error)); + ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio * 2, ledger.balance_safe (transaction, send2.hash (), error)); ASSERT_FALSE (error); error = false; ASSERT_EQ (0, ledger.amount_safe (transaction, send2.hash (), error)); @@ -3689,10 +3689,10 @@ TEST (ledger, hash_root_random) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); - nano::state_block send2 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block send2 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); ASSERT_TRUE (store->block.exists (transaction, send2.hash ())); // Pruning action @@ -3738,7 +3738,7 @@ TEST (ledger, migrate_lmdb_to_rocksdb) .previous (nano::dev::genesis->hash ()) .representative (0) .link (nano::account (10)) - .balance (nano::genesis_amount - 100) + .balance (nano::dev::genesis_amount - 100) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*pool.generate (nano::dev::genesis->hash ())) .build_shared (); @@ -3824,7 +3824,7 @@ TEST (ledger, unconfirmed_frontiers) .account (nano::dev::genesis->account ()) .previous (latest) .representative (nano::dev::genesis->account ()) - .balance (nano::genesis_amount - 100) + .balance (nano::dev::genesis_amount - 100) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*pool.generate (latest)) diff --git a/nano/core_test/network_filter.cpp b/nano/core_test/network_filter.cpp index 2e2c58bde5..43ce1bfc96 100644 --- a/nano/core_test/network_filter.cpp +++ b/nano/core_test/network_filter.cpp @@ -42,7 +42,7 @@ TEST (network_filter, unit) .account (nano::dev::genesis_key.pub) .previous (genesis.open->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - 10 * nano::xrb_ratio) + .balance (nano::dev::genesis_amount - 10 * nano::xrb_ratio) .link (nano::public_key ()) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (0) @@ -72,7 +72,7 @@ TEST (network_filter, many) .account (nano::dev::genesis_key.pub) .previous (genesis.open->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - i * 10 * nano::xrb_ratio) + .balance (nano::dev::genesis_amount - i * 10 * nano::xrb_ratio) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (0) diff --git a/nano/core_test/node.cpp b/nano/core_test/node.cpp index 7d0647cdbb..640d895f6c 100644 --- a/nano/core_test/node.cpp +++ b/nano/core_test/node.cpp @@ -212,7 +212,7 @@ TEST (node, send_out_of_order) node1.process_active (send3); node1.process_active (send2); node1.process_active (send1); - ASSERT_TIMELY (10s, std::all_of (system.nodes.begin (), system.nodes.end (), [&] (std::shared_ptr const & node_a) { return node_a->balance (nano::dev::genesis_key.pub) == nano::genesis_amount - node1.config.receive_minimum.number () * 3; })); + ASSERT_TIMELY (10s, std::all_of (system.nodes.begin (), system.nodes.end (), [&] (std::shared_ptr const & node_a) { return node_a->balance (nano::dev::genesis_key.pub) == nano::dev::genesis_amount - node1.config.receive_minimum.number () * 3; })); } TEST (node, quick_confirm) @@ -247,7 +247,7 @@ TEST (node, node_receive_quorum) auto send = nano::send_block_builder () .previous (previous) .destination (key.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (previous)) .build_shared (); @@ -1055,7 +1055,7 @@ TEST (node, fork_publish) auto send1 = builder.make_block () .previous (genesis.hash ()) .destination (key1.pub) - .balance (nano::genesis_amount - 100) + .balance (nano::dev::genesis_amount - 100) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (0) .build_shared (); @@ -1064,7 +1064,7 @@ TEST (node, fork_publish) auto send2 = builder.make_block () .previous (genesis.hash ()) .destination (key2.pub) - .balance (nano::genesis_amount - 100) + .balance (nano::dev::genesis_amount - 100) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (0) .build_shared (); @@ -1085,7 +1085,7 @@ TEST (node, fork_publish) ASSERT_EQ (send1->hash (), existing1->second.hash); auto winner (*election->tally ().begin ()); ASSERT_EQ (*send1, *winner.second); - ASSERT_EQ (nano::genesis_amount - 100, winner.first); + ASSERT_EQ (nano::dev::genesis_amount - 100, winner.first); } ASSERT_TRUE (node0.expired ()); } @@ -1101,14 +1101,14 @@ TEST (node, fork_publish_inactive) auto send1 = builder.make_block () .previous (genesis.hash ()) .destination (key1.pub) - .balance (nano::genesis_amount - 100) + .balance (nano::dev::genesis_amount - 100) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); auto send2 = builder.make_block () .previous (genesis.hash ()) .destination (key2.pub) - .balance (nano::genesis_amount - 100) + .balance (nano::dev::genesis_amount - 100) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (send1->block_work ()) .build_shared (); @@ -1139,14 +1139,14 @@ TEST (node, fork_keep) auto send1 = builder.make_block () .previous (genesis.hash ()) .destination (key1.pub) - .balance (nano::genesis_amount - 100) + .balance (nano::dev::genesis_amount - 100) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); auto send2 = builder.make_block () .previous (genesis.hash ()) .destination (key2.pub) - .balance (nano::genesis_amount - 100) + .balance (nano::dev::genesis_amount - 100) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); @@ -1175,7 +1175,7 @@ TEST (node, fork_keep) // The vote should be in agreement with what we already have. auto winner (*election1->tally ().begin ()); ASSERT_EQ (*send1, *winner.second); - ASSERT_EQ (nano::genesis_amount - 100, winner.first); + ASSERT_EQ (nano::dev::genesis_amount - 100, winner.first); ASSERT_TRUE (node1.store.block.exists (transaction0, send1->hash ())); ASSERT_TRUE (node2.store.block.exists (transaction1, send1->hash ())); } @@ -1192,7 +1192,7 @@ TEST (node, fork_flip) auto send1 = builder.make_block () .previous (genesis.hash ()) .destination (key1.pub) - .balance (nano::genesis_amount - 100) + .balance (nano::dev::genesis_amount - 100) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); @@ -1201,7 +1201,7 @@ TEST (node, fork_flip) auto send2 = builder.make_block () .previous (genesis.hash ()) .destination (key2.pub) - .balance (nano::genesis_amount - 100) + .balance (nano::dev::genesis_amount - 100) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); @@ -1229,7 +1229,7 @@ TEST (node, fork_flip) ASSERT_TIMELY (10s, node2.ledger.block_or_pruned_exists (publish1.block->hash ())); auto winner (*election1->tally ().begin ()); ASSERT_EQ (*publish1.block, *winner.second); - ASSERT_EQ (nano::genesis_amount - 100, winner.first); + ASSERT_EQ (nano::dev::genesis_amount - 100, winner.first); ASSERT_TRUE (node1.ledger.block_or_pruned_exists (publish1.block->hash ())); ASSERT_TRUE (node2.ledger.block_or_pruned_exists (publish1.block->hash ())); ASSERT_FALSE (node2.ledger.block_or_pruned_exists (publish2.block->hash ())); @@ -1260,7 +1260,7 @@ TEST (node, fork_multi_flip) auto send1 = builder.make_block () .previous (genesis.hash ()) .destination (key1.pub) - .balance (nano::genesis_amount - 100) + .balance (nano::dev::genesis_amount - 100) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); @@ -1269,7 +1269,7 @@ TEST (node, fork_multi_flip) auto send2 = builder.make_block () .previous (genesis.hash ()) .destination (key2.pub) - .balance (nano::genesis_amount - 100) + .balance (nano::dev::genesis_amount - 100) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); @@ -1277,7 +1277,7 @@ TEST (node, fork_multi_flip) auto send3 = builder.make_block () .previous (publish2.block->hash ()) .destination (key2.pub) - .balance (nano::genesis_amount - 100) + .balance (nano::dev::genesis_amount - 100) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (publish2.block->hash ())) .build_shared (); @@ -1306,7 +1306,7 @@ TEST (node, fork_multi_flip) ASSERT_TIMELY (10s, node2.ledger.block_or_pruned_exists (publish1.block->hash ())); auto winner (*election1->tally ().begin ()); ASSERT_EQ (*publish1.block, *winner.second); - ASSERT_EQ (nano::genesis_amount - 100, winner.first); + ASSERT_EQ (nano::dev::genesis_amount - 100, winner.first); ASSERT_TRUE (node1.ledger.block_or_pruned_exists (publish1.block->hash ())); ASSERT_TRUE (node2.ledger.block_or_pruned_exists (publish1.block->hash ())); ASSERT_FALSE (node2.ledger.block_or_pruned_exists (publish2.block->hash ())); @@ -1335,7 +1335,7 @@ TEST (node, fork_bootstrap_flip) auto send1 = builder.make_block () .previous (latest) .destination (key1.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system0.work.generate (latest)) .build_shared (); @@ -1343,7 +1343,7 @@ TEST (node, fork_bootstrap_flip) auto send2 = builder.make_block () .previous (latest) .destination (key2.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system0.work.generate (latest)) .build_shared (); @@ -1430,7 +1430,7 @@ TEST (node, fork_open_flip) auto send1 = nano::send_block_builder () .previous (genesis.hash ()) .destination (key1.pub) - .balance (nano::genesis_amount - 1) + .balance (nano::dev::genesis_amount - 1) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); @@ -1484,7 +1484,7 @@ TEST (node, fork_open_flip) auto transaction2 (node2.store.tx_begin_read ()); auto winner (*election1->tally ().begin ()); ASSERT_EQ (*open1, *winner.second); - ASSERT_EQ (nano::genesis_amount - 1, winner.first); + ASSERT_EQ (nano::dev::genesis_amount - 1, winner.first); ASSERT_TRUE (node1.store.block.exists (transaction1, open1->hash ())); ASSERT_TRUE (node2.store.block.exists (transaction2, open1->hash ())); ASSERT_FALSE (node2.store.block.exists (transaction2, open2->hash ())); @@ -1511,7 +1511,7 @@ TEST (node, fork_no_vote_quorum) auto & node3 (*system.nodes[2]); system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto key4 (system.wallet (0)->deterministic_insert ()); - system.wallet (0)->send_action (nano::dev::genesis_key.pub, key4, nano::genesis_amount / 4); + system.wallet (0)->send_action (nano::dev::genesis_key.pub, key4, nano::dev::genesis_amount / 4); auto key1 (system.wallet (1)->deterministic_insert ()); { auto transaction (system.wallet (1)->wallets.tx_begin_write ()); @@ -1523,7 +1523,7 @@ TEST (node, fork_no_vote_quorum) ASSERT_EQ (node1.config.receive_minimum.number (), node1.weight (key1)); ASSERT_EQ (node1.config.receive_minimum.number (), node2.weight (key1)); ASSERT_EQ (node1.config.receive_minimum.number (), node3.weight (key1)); - nano::state_block send1 (nano::dev::genesis_key.pub, block->hash (), nano::dev::genesis_key.pub, (nano::genesis_amount / 4) - (node1.config.receive_minimum.number () * 2), key1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (block->hash ())); + nano::state_block send1 (nano::dev::genesis_key.pub, block->hash (), nano::dev::genesis_key.pub, (nano::dev::genesis_amount / 4) - (node1.config.receive_minimum.number () * 2), key1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (block->hash ())); ASSERT_EQ (nano::process_result::progress, node1.process (send1).code); ASSERT_EQ (nano::process_result::progress, node2.process (send1).code); ASSERT_EQ (nano::process_result::progress, node3.process (send1).code); @@ -1531,7 +1531,7 @@ TEST (node, fork_no_vote_quorum) auto send2 = nano::send_block_builder () .previous (block->hash ()) .destination (key2) - .balance ((nano::genesis_amount / 4) - (node1.config.receive_minimum.number () * 2)) + .balance ((nano::dev::genesis_amount / 4) - (node1.config.receive_minimum.number () * 2)) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (block->hash ())) .build_shared (); @@ -1575,10 +1575,10 @@ TEST (node, DISABLED_fork_pre_confirm) auto transaction (system.wallet (2)->wallets.tx_begin_write ()); system.wallet (2)->store.representative_set (transaction, key2.pub); } - auto block0 (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key1.pub, nano::genesis_amount / 3)); + auto block0 (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key1.pub, nano::dev::genesis_amount / 3)); ASSERT_NE (nullptr, block0); ASSERT_TIMELY (30s, node0.balance (key1.pub) != 0); - auto block1 (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key2.pub, nano::genesis_amount / 3)); + auto block1 (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key2.pub, nano::dev::genesis_amount / 3)); ASSERT_NE (nullptr, block1); ASSERT_TIMELY (30s, node0.balance (key2.pub) != 0); nano::keypair key3; @@ -1638,7 +1638,7 @@ TEST (node, DISABLED_fork_stale) .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - nano::Mxrb_ratio) + .balance (nano::dev::genesis_amount - nano::Mxrb_ratio) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (0) @@ -1655,7 +1655,7 @@ TEST (node, DISABLED_fork_stale) .account (nano::dev::genesis_key.pub) .previous (send3->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - 2 * nano::Mxrb_ratio) + .balance (nano::dev::genesis_amount - 2 * nano::Mxrb_ratio) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (0) @@ -1665,7 +1665,7 @@ TEST (node, DISABLED_fork_stale) .account (nano::dev::genesis_key.pub) .previous (send3->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - 2 * nano::Mxrb_ratio) + .balance (nano::dev::genesis_amount - 2 * nano::Mxrb_ratio) .link (key2.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (0) @@ -1964,7 +1964,7 @@ TEST (node, bootstrap_fork_open) auto send0 = *builder.send () .previous (nano::dev::genesis->hash ()) .destination (key0.pub) - .balance (nano::genesis_amount - 500) + .balance (nano::dev::genesis_amount - 500) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build (); @@ -2020,7 +2020,7 @@ TEST (node, bootstrap_confirm_frontiers) auto send0 = nano::send_block_builder () .previous (nano::dev::genesis->hash ()) .destination (key0.pub) - .balance (nano::genesis_amount - 500) + .balance (nano::dev::genesis_amount - 500) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node0->work_generate_blocking (nano::dev::genesis->hash ())) .build_shared (); @@ -2082,7 +2082,7 @@ TEST (node, DISABLED_unconfirmed_send) ASSERT_EQ (nano::process_result::progress, node1.ledger.process (transaction, send2).code); } auto send3 (wallet1->send_action (key0.pub, nano::dev::genesis->account (), nano::Mxrb_ratio)); - ASSERT_TIMELY (10s, node0.balance (nano::dev::genesis->account ()) == nano::genesis_amount); + ASSERT_TIMELY (10s, node0.balance (nano::dev::genesis->account ()) == nano::dev::genesis_amount); } // Test that nodes can track nodes that have rep weight for priority broadcasting @@ -2138,7 +2138,7 @@ TEST (node, rep_weight) .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - amount_not_pr) + .balance (nano::dev::genesis_amount - amount_not_pr) .link (keypair1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) @@ -2158,7 +2158,7 @@ TEST (node, rep_weight) .account (nano::dev::genesis_key.pub) .previous (block1->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - amount_not_pr - amount_pr) + .balance (nano::dev::genesis_amount - amount_not_pr - amount_pr) .link (keypair2.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (block1->hash ())) @@ -2220,7 +2220,7 @@ TEST (node, rep_remove) .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - node.minimum_principal_weight () * 2) + .balance (nano::dev::genesis_amount - node.minimum_principal_weight () * 2) .link (keypair1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) @@ -2240,7 +2240,7 @@ TEST (node, rep_remove) .account (nano::dev::genesis_key.pub) .previous (block1->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - node.minimum_principal_weight () * 4) + .balance (nano::dev::genesis_amount - node.minimum_principal_weight () * 4) .link (keypair2.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (block1->hash ())) @@ -2477,11 +2477,11 @@ TEST (node, online_reps) auto vote (std::make_shared ()); ASSERT_EQ (0, node1.online_reps.online ()); node1.online_reps.observe (nano::dev::genesis_key.pub); - ASSERT_EQ (nano::genesis_amount, node1.online_reps.online ()); + ASSERT_EQ (nano::dev::genesis_amount, node1.online_reps.online ()); // 1 minimum, 1 maximum ASSERT_EQ (node1.config.online_weight_minimum, node1.online_reps.trended ()); node1.online_reps.sample (); - ASSERT_EQ (nano::genesis_amount, node1.online_reps.trended ()); + ASSERT_EQ (nano::dev::genesis_amount, node1.online_reps.trended ()); node1.online_reps.clear (); // 2 minimum, 1 maximum node1.online_reps.sample (); @@ -2507,7 +2507,7 @@ TEST (node, online_reps_rep_crawler) node1.rep_crawler.active.insert (nano::dev::genesis->hash ()); } node1.vote_processor.vote_blocking (vote, std::make_shared (node1)); - ASSERT_EQ (nano::genesis_amount, node1.online_reps.online ()); + ASSERT_EQ (nano::dev::genesis_amount, node1.online_reps.online ()); } } @@ -2525,7 +2525,7 @@ TEST (node, online_reps_election) .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node1.work_generate_blocking (genesis.hash ())) @@ -2538,7 +2538,7 @@ TEST (node, online_reps_election) auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::milliseconds_since_epoch (), std::vector{ send1->hash () }); ASSERT_EQ (0, node1.online_reps.online ()); node1.vote_processor.vote_blocking (vote, std::make_shared (node1)); - ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, node1.online_reps.online ()); + ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, node1.online_reps.online ()); } TEST (node, block_confirm) @@ -2564,7 +2564,7 @@ TEST (node, block_confirm) .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node1.work_generate_blocking (genesis.hash ())) @@ -2665,7 +2665,7 @@ TEST (node, local_votes_cache) nano::system system; nano::node_config node_config (nano::get_available_port (), system.logging); node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; - node_config.receive_minimum = nano::genesis_amount; + node_config.receive_minimum = nano::dev::genesis_amount; auto & node (*system.add_node (node_config)); nano::genesis genesis; nano::state_block_builder builder; @@ -2673,7 +2673,7 @@ TEST (node, local_votes_cache) .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (genesis.hash ())) @@ -2682,7 +2682,7 @@ TEST (node, local_votes_cache) .account (nano::dev::genesis_key.pub) .previous (send1->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - 2 * nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - 2 * nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (send1->hash ())) @@ -2691,7 +2691,7 @@ TEST (node, local_votes_cache) .account (nano::dev::genesis_key.pub) .previous (send2->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - 3 * nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - 3 * nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (send2->hash ())) @@ -2760,7 +2760,7 @@ TEST (node, local_votes_cache_batch) .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (genesis.hash ())) @@ -2772,7 +2772,7 @@ TEST (node, local_votes_cache_batch) .account (nano::dev::genesis_key.pub) .previous (send1->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - 2 * nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - 2 * nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (send1->hash ())) @@ -2838,7 +2838,7 @@ TEST (node, local_votes_cache_generate_new_vote) .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (genesis.hash ())) @@ -2878,7 +2878,7 @@ TEST (node, local_votes_cache_fork) .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node1.work_generate_blocking (genesis.hash ())) @@ -2887,7 +2887,7 @@ TEST (node, local_votes_cache_fork) .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - 2 * nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - 2 * nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node1.work_generate_blocking (genesis.hash ())) @@ -2959,7 +2959,7 @@ TEST (node, vote_by_hash_bundle) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - 1) + .balance (nano::dev::genesis_amount - 1) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) @@ -2971,7 +2971,7 @@ TEST (node, vote_by_hash_bundle) auto block = builder.make_block () .from (*blocks.back ()) .previous (blocks.back ()->hash ()) - .balance (nano::genesis_amount - i) + .balance (nano::dev::genesis_amount - i) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (blocks.back ()->hash ())) .build_shared (); @@ -3062,7 +3062,7 @@ TEST (node, vote_by_hash_epoch_block_republish) .account (nano::dev::genesis->account ()) .previous (genesis.hash ()) .representative (nano::dev::genesis->account ()) - .balance (nano::genesis_amount) + .balance (nano::dev::genesis_amount) .link (node1.ledger.epoch_link (nano::epoch::epoch_1)) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) @@ -3098,7 +3098,7 @@ TEST (node, epoch_conflict_confirm) .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - 1) + .balance (nano::dev::genesis_amount - 1) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) @@ -3125,7 +3125,7 @@ TEST (node, epoch_conflict_confirm) .account (nano::dev::genesis_key.pub) .previous (send->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - 2) + .balance (nano::dev::genesis_amount - 2) .link (open->hash ()) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send->hash ())) @@ -3232,7 +3232,7 @@ TEST (node, fork_election_invalid_block_signature) .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) @@ -3241,7 +3241,7 @@ TEST (node, fork_election_invalid_block_signature) .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - 2 * nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - 2 * nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) @@ -3250,7 +3250,7 @@ TEST (node, fork_election_invalid_block_signature) .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - 2 * nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - 2 * nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .sign (nano::dev::genesis_key.prv, 0) // Invalid signature @@ -3281,7 +3281,7 @@ TEST (node, block_processor_signatures) .account (nano::dev::genesis_key.pub) .previous (latest) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node1.work_generate_blocking (latest)) @@ -3290,7 +3290,7 @@ TEST (node, block_processor_signatures) .account (nano::dev::genesis_key.pub) .previous (send1->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - 2 * nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - 2 * nano::Gxrb_ratio) .link (key2.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node1.work_generate_blocking (send1->hash ())) @@ -3299,7 +3299,7 @@ TEST (node, block_processor_signatures) .account (nano::dev::genesis_key.pub) .previous (send2->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - 3 * nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - 3 * nano::Gxrb_ratio) .link (key3.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node1.work_generate_blocking (send2->hash ())) @@ -3309,7 +3309,7 @@ TEST (node, block_processor_signatures) .account (nano::dev::genesis_key.pub) .previous (send3->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - 4 * nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - 4 * nano::Gxrb_ratio) .link (key3.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node1.work_generate_blocking (send3->hash ())) @@ -3320,7 +3320,7 @@ TEST (node, block_processor_signatures) .account (nano::dev::genesis_key.pub) .previous (send3->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - 5 * nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - 5 * nano::Gxrb_ratio) .link (key3.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node1.work_generate_blocking (send3->hash ())) @@ -3394,7 +3394,7 @@ TEST (node, block_processor_reject_state) .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (genesis.hash ())) @@ -3409,7 +3409,7 @@ TEST (node, block_processor_reject_state) .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - 2 * nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - 2 * nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (genesis.hash ())) @@ -3433,7 +3433,7 @@ TEST (node, block_processor_full) .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (genesis.hash ())) @@ -3442,7 +3442,7 @@ TEST (node, block_processor_full) .account (nano::dev::genesis_key.pub) .previous (send1->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - 2 * nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - 2 * nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (send1->hash ())) @@ -3451,7 +3451,7 @@ TEST (node, block_processor_full) .account (nano::dev::genesis_key.pub) .previous (send2->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - 3 * nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - 3 * nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (send2->hash ())) @@ -3480,7 +3480,7 @@ TEST (node, block_processor_half_full) .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (genesis.hash ())) @@ -3489,7 +3489,7 @@ TEST (node, block_processor_half_full) .account (nano::dev::genesis_key.pub) .previous (send1->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - 2 * nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - 2 * nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (send1->hash ())) @@ -3498,7 +3498,7 @@ TEST (node, block_processor_half_full) .account (nano::dev::genesis_key.pub) .previous (send2->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - 3 * nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - 3 * nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (send2->hash ())) @@ -3783,7 +3783,7 @@ TEST (node, bidirectional_tcp) .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node1->work_generate_blocking (genesis.hash ())) @@ -3817,7 +3817,7 @@ TEST (node, bidirectional_tcp) .account (nano::dev::genesis_key.pub) .previous (send1->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - 2 * nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - 2 * nano::Gxrb_ratio) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node1->work_generate_blocking (send1->hash ())) @@ -3877,7 +3877,7 @@ TEST (node, aggressive_flooding) ASSERT_TIMELY (10s, std::all_of (nodes_wallets.begin (), nodes_wallets.end (), [] (auto const & node_wallet) { return node_wallet.first->rep_crawler.principal_representatives ().size () != 0; })); // Send a large amount to create a principal representative in each node - auto large_amount = (nano::genesis_amount / 2) / nodes_wallets.size (); + auto large_amount = (nano::dev::genesis_amount / 2) / nodes_wallets.size (); std::vector> genesis_blocks; for (auto & node_wallet : nodes_wallets) { @@ -3977,7 +3977,7 @@ TEST (node, rollback_vote_self) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .link (key.pub) - .balance (nano::genesis_amount - weight) + .balance (nano::dev::genesis_amount - weight) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); @@ -4066,7 +4066,7 @@ TEST (node, rollback_gap_source) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .link (key.pub) - .balance (nano::genesis_amount - 1) + .balance (nano::dev::genesis_amount - 1) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); @@ -4163,7 +4163,7 @@ TEST (node, dependency_graph) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .link (key1.pub) - .balance (nano::genesis_amount - 1) + .balance (nano::dev::genesis_amount - 1) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); @@ -4192,7 +4192,7 @@ TEST (node, dependency_graph) .from (*gen_send1) .previous (gen_send1->hash ()) .link (key1_send1->hash ()) - .balance (nano::genesis_amount) + .balance (nano::dev::genesis_amount) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (gen_send1->hash ())) .build (); @@ -4365,7 +4365,7 @@ TEST (node, dependency_graph_frontier) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .link (key1.pub) - .balance (nano::genesis_amount - 1) + .balance (nano::dev::genesis_amount - 1) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); @@ -4394,7 +4394,7 @@ TEST (node, dependency_graph_frontier) .from (*gen_send1) .previous (gen_send1->hash ()) .link (key1_send1->hash ()) - .balance (nano::genesis_amount) + .balance (nano::dev::genesis_amount) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (gen_send1->hash ())) .build (); @@ -4528,7 +4528,7 @@ TEST (node, deferred_dependent_elections) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .link (key.pub) - .balance (nano::genesis_amount - 1) + .balance (nano::dev::genesis_amount - 1) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); @@ -4703,7 +4703,7 @@ TEST (node, pruning_automatic) auto send1 = nano::send_block_builder () .previous (genesis.hash ()) .destination (key1.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); @@ -4756,7 +4756,7 @@ TEST (node, pruning_age) auto send1 = nano::send_block_builder () .previous (genesis.hash ()) .destination (key1.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); @@ -4813,7 +4813,7 @@ TEST (node, pruning_depth) auto send1 = nano::send_block_builder () .previous (genesis.hash ()) .destination (key1.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) .build_shared (); diff --git a/nano/core_test/request_aggregator.cpp b/nano/core_test/request_aggregator.cpp index 421e8a11f8..664ddd6a96 100644 --- a/nano/core_test/request_aggregator.cpp +++ b/nano/core_test/request_aggregator.cpp @@ -15,7 +15,7 @@ TEST (request_aggregator, one) auto & node (*system.add_node (node_config)); nano::genesis genesis; system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); - auto send1 (std::make_shared (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node.work_generate_blocking (genesis.hash ()))); + auto send1 (std::make_shared (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node.work_generate_blocking (genesis.hash ()))); std::vector> request; request.emplace_back (send1->hash (), send1->root ()); auto channel (node.network.udp_channels.create (node.network.endpoint ())); @@ -56,7 +56,7 @@ TEST (request_aggregator, one_update) .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) @@ -69,7 +69,7 @@ TEST (request_aggregator, one_update) .account (nano::dev::genesis_key.pub) .previous (send1->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - 2 * nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - 2 * nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (send1->hash ())) @@ -123,7 +123,7 @@ TEST (request_aggregator, two) .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - 1) + .balance (nano::dev::genesis_amount - 1) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (genesis.hash ())) @@ -135,7 +135,7 @@ TEST (request_aggregator, two) .account (nano::dev::genesis_key.pub) .previous (send1->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - 2) + .balance (nano::dev::genesis_amount - 2) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (send1->hash ())) @@ -194,7 +194,7 @@ TEST (request_aggregator, two_endpoints) auto & node2 (*system.add_node (node_config, node_flags)); nano::genesis genesis; system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); - auto send1 (std::make_shared (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::genesis_amount - 1, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1.work_generate_blocking (genesis.hash ()))); + auto send1 (std::make_shared (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - 1, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1.work_generate_blocking (genesis.hash ()))); std::vector> request; request.emplace_back (send1->hash (), send1->root ()); ASSERT_EQ (nano::process_result::progress, node1.ledger.process (node1.store.tx_begin_write (), *send1).code); @@ -238,7 +238,7 @@ TEST (request_aggregator, split) .account (nano::dev::genesis_key.pub) .previous (previous) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - (i + 1)) + .balance (nano::dev::genesis_amount - (i + 1)) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (previous)) @@ -280,7 +280,7 @@ TEST (request_aggregator, channel_lifetime) auto & node (*system.add_node (node_config)); nano::genesis genesis; system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); - auto send1 (std::make_shared (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node.work_generate_blocking (genesis.hash ()))); + auto send1 (std::make_shared (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node.work_generate_blocking (genesis.hash ()))); ASSERT_EQ (nano::process_result::progress, node.ledger.process (node.store.tx_begin_write (), *send1).code); std::vector> request; request.emplace_back (send1->hash (), send1->root ()); @@ -301,7 +301,7 @@ TEST (request_aggregator, channel_update) auto & node (*system.add_node (node_config)); nano::genesis genesis; system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); - auto send1 (std::make_shared (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node.work_generate_blocking (genesis.hash ()))); + auto send1 (std::make_shared (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node.work_generate_blocking (genesis.hash ()))); ASSERT_EQ (nano::process_result::progress, node.ledger.process (node.store.tx_begin_write (), *send1).code); std::vector> request; request.emplace_back (send1->hash (), send1->root ()); @@ -330,7 +330,7 @@ TEST (request_aggregator, channel_max_queue) auto & node (*system.add_node (node_config)); nano::genesis genesis; system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); - auto send1 (std::make_shared (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node.work_generate_blocking (genesis.hash ()))); + auto send1 (std::make_shared (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node.work_generate_blocking (genesis.hash ()))); ASSERT_EQ (nano::process_result::progress, node.ledger.process (node.store.tx_begin_write (), *send1).code); std::vector> request; request.emplace_back (send1->hash (), send1->root ()); @@ -348,7 +348,7 @@ TEST (request_aggregator, unique) auto & node (*system.add_node (node_config)); nano::genesis genesis; system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); - auto send1 (std::make_shared (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node.work_generate_blocking (genesis.hash ()))); + auto send1 (std::make_shared (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node.work_generate_blocking (genesis.hash ()))); ASSERT_EQ (nano::process_result::progress, node.ledger.process (node.store.tx_begin_write (), *send1).code); std::vector> request; request.emplace_back (send1->hash (), send1->root ()); @@ -377,7 +377,7 @@ TEST (request_aggregator, cannot_vote) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - 1) + .balance (nano::dev::genesis_amount - 1) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) diff --git a/nano/core_test/system.cpp b/nano/core_test/system.cpp index 032e0030c2..446e185f1a 100644 --- a/nano/core_test/system.cpp +++ b/nano/core_test/system.cpp @@ -29,7 +29,7 @@ TEST (system, system_genesis) for (auto & i : system.nodes) { auto transaction (i->store.tx_begin_read ()); - ASSERT_EQ (nano::genesis_amount, i->ledger.account_balance (transaction, nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::genesis_amount, i->ledger.account_balance (transaction, nano::dev::genesis->account ())); } } @@ -40,7 +40,7 @@ TEST (system, DISABLED_generate_send_existing) nano::thread_runner runner (system.io_ctx, node1.config.io_threads); system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::keypair stake_preserver; - auto send_block (system.wallet (0)->send_action (nano::dev::genesis->account (), stake_preserver.pub, nano::genesis_amount / 3 * 2, true)); + auto send_block (system.wallet (0)->send_action (nano::dev::genesis->account (), stake_preserver.pub, nano::dev::genesis_amount / 3 * 2, true)); nano::account_info info1; { auto transaction (node1.store.tx_begin_read ()); @@ -71,7 +71,7 @@ TEST (system, DISABLED_generate_send_existing) ASSERT_FALSE (node1.store.account.get (transaction, nano::dev::genesis_key.pub, info2)); } ASSERT_EQ (info1.block_count + 2, info2.block_count); - ASSERT_EQ (info2.balance, nano::genesis_amount / 3); + ASSERT_EQ (info2.balance, nano::dev::genesis_amount / 3); { auto transaction (node1.store.tx_begin_read ()); ASSERT_NE (node1.ledger.amount (transaction, info2.head), 0); @@ -94,7 +94,7 @@ TEST (system, DISABLED_generate_send_new) ASSERT_EQ (node1.store.account.end (), iterator1); } nano::keypair stake_preserver; - auto send_block (system.wallet (0)->send_action (nano::dev::genesis->account (), stake_preserver.pub, nano::genesis_amount / 3 * 2, true)); + auto send_block (system.wallet (0)->send_action (nano::dev::genesis->account (), stake_preserver.pub, nano::dev::genesis_amount / 3 * 2, true)); { auto transaction (node1.store.tx_begin_write ()); auto open_block (std::make_shared (send_block->hash (), nano::dev::genesis->account (), stake_preserver.pub, stake_preserver.prv, stake_preserver.pub, 0)); @@ -136,7 +136,7 @@ TEST (system, rep_initialize_one) nano::keypair key; system.ledger_initialization_set ({ key }); auto node = system.add_node (); - ASSERT_EQ (nano::genesis_amount, node->balance (key.pub)); + ASSERT_EQ (nano::dev::genesis_amount, node->balance (key.pub)); } TEST (system, rep_initialize_two) @@ -146,8 +146,8 @@ TEST (system, rep_initialize_two) nano::keypair key1; system.ledger_initialization_set ({ key0, key1 }); auto node = system.add_node (); - ASSERT_EQ (nano::genesis_amount / 2, node->balance (key0.pub)); - ASSERT_EQ (nano::genesis_amount / 2, node->balance (key1.pub)); + ASSERT_EQ (nano::dev::genesis_amount / 2, node->balance (key0.pub)); + ASSERT_EQ (nano::dev::genesis_amount / 2, node->balance (key1.pub)); } TEST (system, rep_initialize_one_reserve) @@ -156,7 +156,7 @@ TEST (system, rep_initialize_one_reserve) nano::keypair key; system.ledger_initialization_set ({ key }, nano::Gxrb_ratio); auto node = system.add_node (); - ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio, node->balance (key.pub)); + ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, node->balance (key.pub)); ASSERT_EQ (nano::Gxrb_ratio, node->balance (nano::dev::genesis_key.pub)); } @@ -167,8 +167,8 @@ TEST (system, rep_initialize_two_reserve) nano::keypair key1; system.ledger_initialization_set ({ key0, key1 }, nano::Gxrb_ratio); auto node = system.add_node (); - ASSERT_EQ ((nano::genesis_amount - nano::Gxrb_ratio) / 2, node->balance (key0.pub)); - ASSERT_EQ ((nano::genesis_amount - nano::Gxrb_ratio) / 2, node->balance (key1.pub)); + ASSERT_EQ ((nano::dev::genesis_amount - nano::Gxrb_ratio) / 2, node->balance (key0.pub)); + ASSERT_EQ ((nano::dev::genesis_amount - nano::Gxrb_ratio) / 2, node->balance (key1.pub)); } TEST (system, rep_initialize_many) @@ -178,9 +178,9 @@ TEST (system, rep_initialize_many) nano::keypair key1; system.ledger_initialization_set ({ key0, key1 }, nano::Gxrb_ratio); auto node0 = system.add_node (); - ASSERT_EQ ((nano::genesis_amount - nano::Gxrb_ratio) / 2, node0->balance (key0.pub)); - ASSERT_EQ ((nano::genesis_amount - nano::Gxrb_ratio) / 2, node0->balance (key1.pub)); + ASSERT_EQ ((nano::dev::genesis_amount - nano::Gxrb_ratio) / 2, node0->balance (key0.pub)); + ASSERT_EQ ((nano::dev::genesis_amount - nano::Gxrb_ratio) / 2, node0->balance (key1.pub)); auto node1 = system.add_node (); - ASSERT_EQ ((nano::genesis_amount - nano::Gxrb_ratio) / 2, node1->balance (key0.pub)); - ASSERT_EQ ((nano::genesis_amount - nano::Gxrb_ratio) / 2, node1->balance (key1.pub)); + ASSERT_EQ ((nano::dev::genesis_amount - nano::Gxrb_ratio) / 2, node1->balance (key0.pub)); + ASSERT_EQ ((nano::dev::genesis_amount - nano::Gxrb_ratio) / 2, node1->balance (key1.pub)); } diff --git a/nano/core_test/vote_processor.cpp b/nano/core_test/vote_processor.cpp index 801029c571..b89f7e94c9 100644 --- a/nano/core_test/vote_processor.cpp +++ b/nano/core_test/vote_processor.cpp @@ -28,7 +28,7 @@ TEST (vote_processor, codes) ASSERT_EQ (nano::vote_code::indeterminate, node.vote_processor.vote_blocking (vote, channel)); // First vote from an account for an ongoing election - genesis.open->sideband_set (nano::block_sideband (nano::dev::genesis->account (), 0, nano::genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); + genesis.open->sideband_set (nano::block_sideband (nano::dev::genesis->account (), 0, nano::dev::genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); node.block_confirm (genesis.open); ASSERT_NE (nullptr, node.active.election (genesis.open->qualified_root ())); ASSERT_EQ (nano::vote_code::vote, node.vote_processor.vote_blocking (vote, channel)); @@ -78,7 +78,7 @@ TEST (vote_processor, invalid_signature) vote_invalid->signature.bytes[0] ^= 1; auto channel = std::make_shared (node); - genesis.open->sideband_set (nano::block_sideband (nano::dev::genesis->account (), 0, nano::genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); + genesis.open->sideband_set (nano::block_sideband (nano::dev::genesis->account (), 0, nano::dev::genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); node.block_confirm (genesis.open); auto election = node.active.election (genesis.open->qualified_root ()); ASSERT_TRUE (election); @@ -262,14 +262,14 @@ TEST (vote_processor, no_broadcast_local) .account (key.pub) .representative (nano::dev::genesis_key.pub) .previous (0) - .balance (nano::genesis_amount - 2 * node.config.vote_minimum.number ()) + .balance (nano::dev::genesis_amount - 2 * node.config.vote_minimum.number ()) .link (send->hash ()) .sign (key.prv, key.pub) .work (*system.work.generate (key.pub)) .build (ec); ASSERT_FALSE (ec); ASSERT_EQ (nano::process_result::progress, node.process_local (open).code); - ASSERT_EQ (nano::genesis_amount - node.config.vote_minimum.number (), node.weight (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::genesis_amount - node.config.vote_minimum.number (), node.weight (nano::dev::genesis_key.pub)); node.block_confirm (open); // Insert account in wallet system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); diff --git a/nano/core_test/voting.cpp b/nano/core_test/voting.cpp index 6cb610ba96..be22842475 100644 --- a/nano/core_test/voting.cpp +++ b/nano/core_test/voting.cpp @@ -168,7 +168,7 @@ TEST (vote_spacing, vote_generator) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) @@ -177,7 +177,7 @@ TEST (vote_spacing, vote_generator) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio - 1) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio - 1) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) @@ -211,7 +211,7 @@ TEST (vote_spacing, rapid) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) @@ -220,7 +220,7 @@ TEST (vote_spacing, rapid) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio - 1) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio - 1) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) diff --git a/nano/core_test/wallet.cpp b/nano/core_test/wallet.cpp index 5188d76621..ec504d7d44 100644 --- a/nano/core_test/wallet.cpp +++ b/nano/core_test/wallet.cpp @@ -169,7 +169,7 @@ TEST (wallet, insufficient_spend_one) system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto block (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key1.pub, 500)); ASSERT_NE (nullptr, block); - ASSERT_EQ (nullptr, system.wallet (0)->send_action (nano::dev::genesis_key.pub, key1.pub, nano::genesis_amount)); + ASSERT_EQ (nullptr, system.wallet (0)->send_action (nano::dev::genesis_key.pub, key1.pub, nano::dev::genesis_amount)); } TEST (wallet, spend_all_one) @@ -837,7 +837,7 @@ TEST (wallet, send_race) for (auto i (1); i < 60; ++i) { ASSERT_NE (nullptr, system.wallet (0)->send_action (nano::dev::genesis_key.pub, key2.pub, nano::Gxrb_ratio)); - ASSERT_EQ (nano::genesis_amount - nano::Gxrb_ratio * i, system.nodes[0]->balance (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio * i, system.nodes[0]->balance (nano::dev::genesis_key.pub)); } } @@ -1166,7 +1166,7 @@ TEST (wallet, search_pending) .account (nano::dev::genesis->account ()) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis->account ()) - .balance (nano::genesis_amount - node.config.receive_minimum.number ()) + .balance (nano::dev::genesis_amount - node.config.receive_minimum.number ()) .link (nano::dev::genesis->account ()) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) @@ -1193,7 +1193,7 @@ TEST (wallet, search_pending) // Pending search should create the receive block ASSERT_EQ (2, node.ledger.cache.block_count); ASSERT_FALSE (wallet.search_pending (wallet.wallets.tx_begin_read ())); - ASSERT_TIMELY (3s, node.balance (nano::dev::genesis->account ()) == nano::genesis_amount); + ASSERT_TIMELY (3s, node.balance (nano::dev::genesis->account ()) == nano::dev::genesis_amount); auto receive_hash = node.ledger.latest (node.store.tx_begin_read (), nano::dev::genesis->account ()); auto receive = node.block (receive_hash); ASSERT_NE (nullptr, receive); diff --git a/nano/core_test/wallets.cpp b/nano/core_test/wallets.cpp index 47f205e40a..e7703f995b 100644 --- a/nano/core_test/wallets.cpp +++ b/nano/core_test/wallets.cpp @@ -169,7 +169,7 @@ TEST (wallets, search_pending) .account (nano::dev::genesis->account ()) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis->account ()) - .balance (nano::genesis_amount - node.config.receive_minimum.number ()) + .balance (nano::dev::genesis_amount - node.config.receive_minimum.number ()) .link (nano::dev::genesis->account ()) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) @@ -210,7 +210,7 @@ TEST (wallets, search_pending) { node.wallets.search_pending (wallet_id); } - ASSERT_TIMELY (3s, node.balance (nano::dev::genesis->account ()) == nano::genesis_amount); + ASSERT_TIMELY (3s, node.balance (nano::dev::genesis->account ()) == nano::dev::genesis_amount); auto receive_hash = node.ledger.latest (node.store.tx_begin_read (), nano::dev::genesis->account ()); auto receive = node.block (receive_hash); ASSERT_NE (nullptr, receive); diff --git a/nano/core_test/websocket.cpp b/nano/core_test/websocket.cpp index b76e348799..90970b34ee 100644 --- a/nano/core_test/websocket.cpp +++ b/nano/core_test/websocket.cpp @@ -83,7 +83,7 @@ TEST (websocket, confirmation) nano::keypair key; system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); - auto balance = nano::genesis_amount; + auto balance = nano::dev::genesis_amount; auto send_amount = node1->online_reps.delta () + 1; // Quick-confirm a block, legacy blocks should work without filtering { @@ -186,7 +186,7 @@ TEST (websocket, confirmation_options) // Confirm a state block for an in-wallet account system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::keypair key; - auto balance = nano::genesis_amount; + auto balance = nano::dev::genesis_amount; auto send_amount = node1->online_reps.delta () + 1; nano::block_hash previous (node1->latest (nano::dev::genesis_key.pub)); { @@ -320,7 +320,7 @@ TEST (websocket, confirmation_options_votes) // Confirm a state block for an in-wallet account system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::keypair key; - auto balance = nano::genesis_amount; + auto balance = nano::dev::genesis_amount; auto send_amount = node1->config.online_weight_minimum.number () + 1; nano::block_hash previous (node1->latest (nano::dev::genesis_key.pub)); { @@ -430,7 +430,7 @@ TEST (websocket, confirmation_options_update) .account (nano::dev::genesis_key.pub) .previous (previous) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (previous)) @@ -448,7 +448,7 @@ TEST (websocket, confirmation_options_update) .account (nano::dev::genesis_key.pub) .previous (previous) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - 2 * nano::Gxrb_ratio) + .balance (nano::dev::genesis_amount - 2 * nano::Gxrb_ratio) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (previous)) @@ -490,7 +490,7 @@ TEST (websocket, vote) .account (nano::dev::genesis_key.pub) .previous (previous) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - (node1->online_reps.delta () + 1)) + .balance (nano::dev::genesis_amount - (node1->online_reps.delta () + 1)) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (previous)) @@ -582,7 +582,7 @@ TEST (websocket, vote_options_representatives) // Quick-confirm a block nano::keypair key; - auto balance = nano::genesis_amount; + auto balance = nano::dev::genesis_amount; system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto send_amount = node1->online_reps.delta () + 1; auto confirm_block = [&] () { @@ -918,7 +918,7 @@ TEST (websocket, new_unconfirmed_block) .account (nano::dev::genesis_key.pub) .previous (genesis.hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - 1) + .balance (nano::dev::genesis_amount - 1) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (genesis.hash ())) diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index f12fcd833a..2aa78405fc 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -1042,7 +1042,7 @@ void nano::json_handler::available_supply () auto landing_balance (node.balance (nano::account ("059F68AAB29DE0D3A27443625C7EA9CDDB6517A8B76FE37727EF6A4D76832AD5"))); // Active unavailable account auto faucet_balance (node.balance (nano::account ("8E319CE6F3025E5B2DF66DA7AB1467FE48F1679C13DD43BFDB29FA2E9FC40D3B"))); // Faucet account auto burned_balance ((node.balance_pending (nano::account (0), false)).second); // Burning 0 account - auto available (node.network_params.ledger.genesis_amount - genesis_balance - landing_balance - faucet_balance - burned_balance); + auto available (nano::dev::genesis_amount - genesis_balance - landing_balance - faucet_balance - burned_balance); response_l.put ("available", available.convert_to ()); response_errors (); } @@ -2332,7 +2332,7 @@ class history_visitor : public nano::block_visitor else { tree.put ("account", network_params.ledger.genesis_account ().to_account ()); - tree.put ("amount", network_params.ledger.genesis_amount.convert_to ()); + tree.put ("amount", nano::dev::genesis_amount.convert_to ()); } } void change_block (nano::change_block const & block_a) @@ -3260,7 +3260,7 @@ void nano::json_handler::receive () bool generate_work (work == 0); // Disable work generation if "work" option is provided auto response_a (response); wallet->receive_async ( - hash, representative, node.network_params.ledger.genesis_amount, account, [response_a] (std::shared_ptr const & block_a) { + hash, representative, nano::dev::genesis_amount, account, [response_a] (std::shared_ptr const & block_a) { if (block_a != nullptr) { boost::property_tree::ptree response_l; diff --git a/nano/node/node.cpp b/nano/node/node.cpp index 9b9ac0d7f2..c28a3e57ce 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -1331,7 +1331,7 @@ void nano::node::process_confirmed_data (nano::transaction const & transaction_a } else { - amount_a = ledger.network_params.ledger.genesis_amount; + amount_a = nano::dev::genesis_amount; } if (auto state = dynamic_cast (block_a.get ())) { diff --git a/nano/qt/qt.cpp b/nano/qt/qt.cpp index c51436d405..e1caab3edc 100644 --- a/nano/qt/qt.cpp +++ b/nano/qt/qt.cpp @@ -557,7 +557,7 @@ class short_text_visitor : public nano::block_visitor else { account = params.ledger.genesis_account (); - amount = params.ledger.genesis_amount; + amount = nano::dev::genesis_amount; } } void change_block (nano::change_block const & block_a) diff --git a/nano/qt_test/qt.cpp b/nano/qt_test/qt.cpp index 3a5a41e04b..511cdf8fb0 100644 --- a/nano/qt_test/qt.cpp +++ b/nano/qt_test/qt.cpp @@ -562,9 +562,9 @@ TEST (history, pruned_source) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); auto latest (ledger.latest (transaction, nano::dev::genesis_key.pub)); - nano::send_block send1 (latest, nano::dev::genesis_key.pub, nano::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); + nano::send_block send1 (latest, nano::dev::genesis_key.pub, nano::dev::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - nano::send_block send2 (send1.hash (), key.pub, nano::genesis_amount - 200, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1.hash ())); + nano::send_block send2 (send1.hash (), key.pub, nano::dev::genesis_amount - 200, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); nano::receive_block receive (send2.hash (), send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send2.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive).code); @@ -592,7 +592,7 @@ TEST (history, pruned_source) { auto transaction (store->tx_begin_write ()); auto latest (ledger.latest (transaction, nano::dev::genesis_key.pub)); - nano::state_block send (nano::dev::genesis_key.pub, latest, nano::dev::genesis_key.pub, nano::genesis_amount - 200, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); + nano::state_block send (nano::dev::genesis_key.pub, latest, nano::dev::genesis_key.pub, nano::dev::genesis_amount - 200, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); auto latest_key (ledger.latest (transaction, key.pub)); nano::state_block receive (key.pub, latest_key, key.pub, 200, send.hash (), key.prv, key.pub, *system.work.generate (latest_key)); diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index 1ea83c1f47..725e87492e 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -236,7 +236,7 @@ TEST (rpc, account_balance) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::genesis_amount - 1) + .balance (nano::dev::genesis_amount - 1) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) @@ -400,14 +400,14 @@ TEST (rpc, send) request.put ("source", nano::dev::genesis_key.pub.to_account ()); request.put ("destination", nano::dev::genesis_key.pub.to_account ()); request.put ("amount", "100"); - ASSERT_EQ (node->balance (nano::dev::genesis_key.pub), nano::genesis_amount); + ASSERT_EQ (node->balance (nano::dev::genesis_key.pub), nano::dev::genesis_amount); auto response (wait_response (system, rpc, request, 10s)); std::string block_text (response.get ("block")); nano::block_hash block; ASSERT_FALSE (block.decode_hex (block_text)); ASSERT_TRUE (node->ledger.block_or_pruned_exists (block)); ASSERT_EQ (node->latest (nano::dev::genesis_key.pub), block); - ASSERT_NE (node->balance (nano::dev::genesis_key.pub), nano::genesis_amount); + ASSERT_NE (node->balance (nano::dev::genesis_key.pub), nano::dev::genesis_amount); } TEST (rpc, send_fail) @@ -487,18 +487,18 @@ TEST (rpc, send_idempotent) request.put ("action", "send"); request.put ("source", nano::dev::genesis_key.pub.to_account ()); request.put ("destination", nano::account (0).to_account ()); - request.put ("amount", (nano::genesis_amount - (nano::genesis_amount / 4)).convert_to ()); + request.put ("amount", (nano::dev::genesis_amount - (nano::dev::genesis_amount / 4)).convert_to ()); request.put ("id", "123abc"); auto response (wait_response (system, rpc, request)); std::string block_text (response.get ("block")); nano::block_hash block; ASSERT_FALSE (block.decode_hex (block_text)); ASSERT_TRUE (node->ledger.block_or_pruned_exists (block)); - ASSERT_EQ (node->balance (nano::dev::genesis_key.pub), nano::genesis_amount / 4); + ASSERT_EQ (node->balance (nano::dev::genesis_key.pub), nano::dev::genesis_amount / 4); auto response2 (wait_response (system, rpc, request)); ASSERT_EQ ("", response2.get ("error", "")); ASSERT_EQ (block_text, response2.get ("block")); - ASSERT_EQ (node->balance (nano::dev::genesis_key.pub), nano::genesis_amount / 4); + ASSERT_EQ (node->balance (nano::dev::genesis_key.pub), nano::dev::genesis_amount / 4); request.erase ("id"); request.put ("id", "456def"); auto response3 (wait_response (system, rpc, request)); @@ -1086,9 +1086,9 @@ TEST (rpc, history) auto receive (system.wallet (0)->receive_action (send->hash (), nano::dev::genesis_key.pub, node0->config.receive_minimum.number (), send->link ().as_account ())); ASSERT_NE (nullptr, receive); nano::genesis genesis; - nano::state_block usend (nano::dev::genesis->account (), node0->latest (nano::dev::genesis->account ()), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (node0->latest (nano::dev::genesis->account ()))); - nano::state_block ureceive (nano::dev::genesis->account (), usend.hash (), nano::dev::genesis->account (), nano::genesis_amount, usend.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (usend.hash ())); - nano::state_block uchange (nano::dev::genesis->account (), ureceive.hash (), nano::keypair ().pub, nano::genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (ureceive.hash ())); + nano::state_block usend (nano::dev::genesis->account (), node0->latest (nano::dev::genesis->account ()), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (node0->latest (nano::dev::genesis->account ()))); + nano::state_block ureceive (nano::dev::genesis->account (), usend.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, usend.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (usend.hash ())); + nano::state_block uchange (nano::dev::genesis->account (), ureceive.hash (), nano::keypair ().pub, nano::dev::genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (ureceive.hash ())); { auto transaction (node0->store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, node0->ledger.process (transaction, usend).code); @@ -1127,7 +1127,7 @@ TEST (rpc, history) ASSERT_EQ (send->hash ().to_string (), std::get<3> (history_l[3])); ASSERT_EQ ("receive", std::get<0> (history_l[4])); ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), std::get<1> (history_l[4])); - ASSERT_EQ (nano::genesis_amount.convert_to (), std::get<2> (history_l[4])); + ASSERT_EQ (nano::dev::genesis_amount.convert_to (), std::get<2> (history_l[4])); ASSERT_EQ (genesis.hash ().to_string (), std::get<3> (history_l[4])); } @@ -1143,9 +1143,9 @@ TEST (rpc, account_history) auto receive (system.wallet (0)->receive_action (send->hash (), nano::dev::genesis_key.pub, node0->config.receive_minimum.number (), send->link ().as_account ())); ASSERT_NE (nullptr, receive); nano::genesis genesis; - nano::state_block usend (nano::dev::genesis->account (), node0->latest (nano::dev::genesis->account ()), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (node0->latest (nano::dev::genesis->account ()))); - nano::state_block ureceive (nano::dev::genesis->account (), usend.hash (), nano::dev::genesis->account (), nano::genesis_amount, usend.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (usend.hash ())); - nano::state_block uchange (nano::dev::genesis->account (), ureceive.hash (), nano::keypair ().pub, nano::genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (ureceive.hash ())); + nano::state_block usend (nano::dev::genesis->account (), node0->latest (nano::dev::genesis->account ()), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (node0->latest (nano::dev::genesis->account ()))); + nano::state_block ureceive (nano::dev::genesis->account (), usend.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, usend.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (usend.hash ())); + nano::state_block uchange (nano::dev::genesis->account (), ureceive.hash (), nano::keypair ().pub, nano::dev::genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (ureceive.hash ())); { auto transaction (node0->store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, node0->ledger.process (transaction, usend).code); @@ -1189,7 +1189,7 @@ TEST (rpc, account_history) ASSERT_EQ ("3", std::get<4> (history_l[3])); ASSERT_EQ ("receive", std::get<0> (history_l[4])); ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), std::get<1> (history_l[4])); - ASSERT_EQ (nano::genesis_amount.convert_to (), std::get<2> (history_l[4])); + ASSERT_EQ (nano::dev::genesis_amount.convert_to (), std::get<2> (history_l[4])); ASSERT_EQ (genesis.hash ().to_string (), std::get<3> (history_l[4])); ASSERT_EQ ("1", std::get<4> (history_l[4])); // change block (height 2) is skipped } @@ -1279,13 +1279,13 @@ TEST (rpc, history_pruning) nano::genesis genesis; auto change (std::make_shared (genesis.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work.generate (genesis.hash ()))); node0->process_active (change); - auto send (std::make_shared (change->hash (), nano::dev::genesis_key.pub, nano::genesis_amount - node0->config.receive_minimum.number (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work.generate (change->hash ()))); + auto send (std::make_shared (change->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - node0->config.receive_minimum.number (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work.generate (change->hash ()))); node0->process_active (send); auto receive (std::make_shared (send->hash (), send->hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work.generate (send->hash ()))); node0->process_active (receive); - auto usend (std::make_shared (nano::dev::genesis->account (), receive->hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (receive->hash ()))); - auto ureceive (std::make_shared (nano::dev::genesis->account (), usend->hash (), nano::dev::genesis->account (), nano::genesis_amount, usend->hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (usend->hash ()))); - auto uchange (std::make_shared (nano::dev::genesis->account (), ureceive->hash (), nano::keypair ().pub, nano::genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (ureceive->hash ()))); + auto usend (std::make_shared (nano::dev::genesis->account (), receive->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (receive->hash ()))); + auto ureceive (std::make_shared (nano::dev::genesis->account (), usend->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, usend->hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (usend->hash ()))); + auto uchange (std::make_shared (nano::dev::genesis->account (), ureceive->hash (), nano::keypair ().pub, nano::dev::genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (ureceive->hash ()))); node0->process_active (usend); node0->process_active (ureceive); node0->process_active (uchange); @@ -1490,7 +1490,7 @@ TEST (rpc, process_block_async) ASSERT_EQ (ec.message (), response.get ("error")); } - auto state_send (std::make_shared (nano::dev::genesis_key.pub, latest, nano::dev::genesis_key.pub, nano::genesis_amount - 100, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest))); + auto state_send (std::make_shared (nano::dev::genesis_key.pub, latest, nano::dev::genesis_key.pub, nano::dev::genesis_amount - 100, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest))); std::string json1; state_send->serialize_json (json1); request.put ("block", json1); @@ -1546,7 +1546,7 @@ TEST (rpc, process_subtype_send) auto [rpc, rpc_ctx] = add_rpc (system, node1); nano::keypair key; auto latest (node1->latest (nano::dev::genesis_key.pub)); - nano::state_block send (nano::dev::genesis->account (), latest, nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest)); + nano::state_block send (nano::dev::genesis->account (), latest, nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest)); boost::property_tree::ptree request; request.put ("action", "process"); std::string json; @@ -1572,7 +1572,7 @@ TEST (rpc, process_subtype_open) auto & node2 = *system.add_node (); nano::keypair key; auto latest (node1->latest (nano::dev::genesis_key.pub)); - auto send = std::make_shared (nano::dev::genesis->account (), latest, nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest)); + auto send = std::make_shared (nano::dev::genesis->account (), latest, nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest)); ASSERT_EQ (nano::process_result::progress, node1->process (*send).code); ASSERT_EQ (nano::process_result::progress, node2.process (*send).code); auto [rpc, rpc_ctx] = add_rpc (system, node1); @@ -1602,12 +1602,12 @@ TEST (rpc, process_subtype_receive) auto node1 = add_ipc_enabled_node (system); auto & node2 = *system.add_node (); auto latest (node1->latest (nano::dev::genesis_key.pub)); - auto send = std::make_shared (nano::dev::genesis->account (), latest, nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest)); + auto send = std::make_shared (nano::dev::genesis->account (), latest, nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest)); ASSERT_EQ (nano::process_result::progress, node1->process (*send).code); ASSERT_EQ (nano::process_result::progress, node2.process (*send).code); auto [rpc, rpc_ctx] = add_rpc (system, node1); node1->scheduler.manual (send); - nano::state_block receive (nano::dev::genesis_key.pub, send->hash (), nano::dev::genesis_key.pub, nano::genesis_amount, send->hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (send->hash ())); + nano::state_block receive (nano::dev::genesis_key.pub, send->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount, send->hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (send->hash ())); boost::property_tree::ptree request; request.put ("action", "process"); std::string json; @@ -1636,7 +1636,7 @@ TEST (rpc, process_ledger_insufficient_work) auto latest (node->latest (nano::dev::genesis_key.pub)); auto min_difficulty = node->network_params.network.publish_thresholds.entry; auto max_difficulty = node->network_params.network.publish_thresholds.epoch_1; - nano::state_block send (nano::dev::genesis->account (), latest, nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, system.work_generate_limited (latest, min_difficulty, max_difficulty)); + nano::state_block send (nano::dev::genesis->account (), latest, nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, system.work_generate_limited (latest, min_difficulty, max_difficulty)); ASSERT_LT (send.difficulty (), max_difficulty); ASSERT_GE (send.difficulty (), min_difficulty); boost::property_tree::ptree request; @@ -1877,7 +1877,7 @@ TEST (rpc, search_pending) system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto wallet (node->wallets.items.begin ()->first.to_string ()); auto latest (node->latest (nano::dev::genesis_key.pub)); - nano::send_block block (latest, nano::dev::genesis_key.pub, nano::genesis_amount - node->config.receive_minimum.number (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node->work_generate_blocking (latest)); + nano::send_block block (latest, nano::dev::genesis_key.pub, nano::dev::genesis_amount - node->config.receive_minimum.number (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node->work_generate_blocking (latest)); { auto transaction (node->store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, block).code); @@ -1887,7 +1887,7 @@ TEST (rpc, search_pending) request.put ("action", "search_pending"); request.put ("wallet", wallet); auto response (wait_response (system, rpc, request)); - ASSERT_TIMELY (10s, node->balance (nano::dev::genesis_key.pub) == nano::genesis_amount); + ASSERT_TIMELY (10s, node->balance (nano::dev::genesis_key.pub) == nano::dev::genesis_amount); } TEST (rpc, version) @@ -2330,7 +2330,7 @@ TEST (rpc, block_count_pruning) node_flags.enable_pruning = true; auto node1 = add_ipc_enabled_node (system, node_config, node_flags); auto latest (node1->latest (nano::dev::genesis_key.pub)); - auto send1 (std::make_shared (latest, nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest))); + auto send1 (std::make_shared (latest, nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest))); node1->process_active (send1); auto receive1 (std::make_shared (send1->hash (), send1->hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (send1->hash ()))); node1->process_active (receive1); @@ -2878,7 +2878,7 @@ TEST (rpc, republish) request.put ("action", "republish"); request.put ("hash", send.hash ().to_string ()); auto response (wait_response (system, rpc, request)); - ASSERT_TIMELY (10s, system.nodes[1]->balance (nano::dev::genesis_key.pub) != nano::genesis_amount); + ASSERT_TIMELY (10s, system.nodes[1]->balance (nano::dev::genesis_key.pub) != nano::dev::genesis_amount); auto & blocks_node (response.get_child ("blocks")); std::vector blocks; for (auto i (blocks_node.begin ()), n (blocks_node.end ()); i != n; ++i) @@ -3422,7 +3422,7 @@ TEST (rpc, search_pending_all) auto node = add_ipc_enabled_node (system); system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto latest (node->latest (nano::dev::genesis_key.pub)); - nano::send_block block (latest, nano::dev::genesis_key.pub, nano::genesis_amount - node->config.receive_minimum.number (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node->work_generate_blocking (latest)); + nano::send_block block (latest, nano::dev::genesis_key.pub, nano::dev::genesis_amount - node->config.receive_minimum.number (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node->work_generate_blocking (latest)); { auto transaction (node->store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, block).code); @@ -3431,7 +3431,7 @@ TEST (rpc, search_pending_all) boost::property_tree::ptree request; request.put ("action", "search_pending_all"); auto response (wait_response (system, rpc, request)); - ASSERT_TIMELY (10s, node->balance (nano::dev::genesis_key.pub) == nano::genesis_amount); + ASSERT_TIMELY (10s, node->balance (nano::dev::genesis_key.pub) == nano::dev::genesis_amount); } TEST (rpc, wallet_republish) @@ -3775,7 +3775,7 @@ TEST (rpc, json_block_input) auto node1 = add_ipc_enabled_node (system); nano::keypair key; system.wallet (0)->insert_adhoc (key.prv); - nano::state_block send (nano::dev::genesis->account (), node1->latest (nano::dev::genesis_key.pub), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0); + nano::state_block send (nano::dev::genesis->account (), node1->latest (nano::dev::genesis_key.pub), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0); auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request; request.put ("action", "sign"); @@ -3833,7 +3833,7 @@ TEST (rpc, blocks_info) std::string account_text (blocks.second.get ("block_account")); ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), account_text); std::string amount_text (blocks.second.get ("amount")); - ASSERT_EQ (nano::genesis_amount.convert_to (), amount_text); + ASSERT_EQ (nano::dev::genesis_amount.convert_to (), amount_text); std::string blocks_text (blocks.second.get ("contents")); ASSERT_FALSE (blocks_text.empty ()); boost::optional pending (blocks.second.get_optional ("pending")); @@ -3841,7 +3841,7 @@ TEST (rpc, blocks_info) boost::optional source (blocks.second.get_optional ("source_account")); ASSERT_FALSE (source.is_initialized ()); std::string balance_text (blocks.second.get ("balance")); - ASSERT_EQ (nano::genesis_amount.convert_to (), balance_text); + ASSERT_EQ (nano::dev::genesis_amount.convert_to (), balance_text); ASSERT_TRUE (blocks.second.get ("confirmed")); // Genesis block is confirmed by default std::string successor_text (blocks.second.get ("successor")); ASSERT_EQ (nano::block_hash (0).to_string (), successor_text); // Genesis block doesn't have successor yet @@ -3952,14 +3952,14 @@ TEST (rpc, block_info_successor) std::string account_text (response.get ("block_account")); ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), account_text); std::string amount_text (response.get ("amount")); - ASSERT_EQ (nano::genesis_amount.convert_to (), amount_text); + ASSERT_EQ (nano::dev::genesis_amount.convert_to (), amount_text); } TEST (rpc, block_info_pruning) { nano::system system; nano::node_config node_config0 (nano::get_available_port (), system.logging); - node_config0.receive_minimum = nano::genesis_amount; // Prevent auto-receive & receive1 block conflicts + node_config0.receive_minimum = nano::dev::genesis_amount; // Prevent auto-receive & receive1 block conflicts auto & node0 = *system.add_node (node_config0); nano::node_config node_config1 (nano::get_available_port (), system.logging); node_config1.enable_voting = false; // Remove after allowing pruned voting @@ -3967,7 +3967,7 @@ TEST (rpc, block_info_pruning) node_flags.enable_pruning = true; auto node1 = add_ipc_enabled_node (system, node_config1, node_flags); auto latest (node1->latest (nano::dev::genesis_key.pub)); - auto send1 (std::make_shared (latest, nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest))); + auto send1 (std::make_shared (latest, nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest))); node1->process_active (send1); auto receive1 (std::make_shared (send1->hash (), send1->hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (send1->hash ()))); node1->process_active (receive1); @@ -4002,7 +4002,7 @@ TEST (rpc, block_info_pruning) ASSERT_FALSE (json_error); ASSERT_EQ (receive1->full_hash (), receive_from_json.full_hash ()); std::string balance_text (response2.get ("balance")); - ASSERT_EQ (nano::genesis_amount.convert_to (), balance_text); + ASSERT_EQ (nano::dev::genesis_amount.convert_to (), balance_text); ASSERT_TRUE (response2.get ("confirmed")); std::string successor_text (response2.get ("successor")); ASSERT_EQ (successor_text, nano::block_hash (0).to_string ()); // receive1 block doesn't have successor yet @@ -4012,7 +4012,7 @@ TEST (rpc, pruned_exists) { nano::system system; nano::node_config node_config0 (nano::get_available_port (), system.logging); - node_config0.receive_minimum = nano::genesis_amount; // Prevent auto-receive & receive1 block conflicts + node_config0.receive_minimum = nano::dev::genesis_amount; // Prevent auto-receive & receive1 block conflicts auto & node0 = *system.add_node (node_config0); nano::node_config node_config1 (nano::get_available_port (), system.logging); node_config1.enable_voting = false; // Remove after allowing pruned voting @@ -4020,7 +4020,7 @@ TEST (rpc, pruned_exists) node_flags.enable_pruning = true; auto node1 = add_ipc_enabled_node (system, node_config1, node_flags); auto latest (node1->latest (nano::dev::genesis_key.pub)); - auto send1 (std::make_shared (latest, nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest))); + auto send1 (std::make_shared (latest, nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest))); node1->process_active (send1); auto receive1 (std::make_shared (send1->hash (), send1->hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (send1->hash ()))); node1->process_active (receive1); @@ -4087,7 +4087,7 @@ TEST (rpc, ledger) auto node = add_ipc_enabled_node (system); nano::keypair key; auto latest (node->latest (nano::dev::genesis_key.pub)); - auto genesis_balance (nano::genesis_amount); + auto genesis_balance (nano::dev::genesis_amount); auto send_amount (genesis_balance - 100); genesis_balance -= send_amount; nano::send_block send (latest, key.pub, genesis_balance, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node->work_generate_blocking (latest)); @@ -4313,7 +4313,7 @@ TEST (rpc, block_create_state) request.put ("account", nano::dev::genesis_key.pub.to_account ()); request.put ("previous", genesis.hash ().to_string ()); request.put ("representative", nano::dev::genesis_key.pub.to_account ()); - request.put ("balance", (nano::genesis_amount - nano::Gxrb_ratio).convert_to ()); + request.put ("balance", (nano::dev::genesis_amount - nano::Gxrb_ratio).convert_to ()); request.put ("link", key.pub.to_account ()); request.put ("work", nano::to_string_hex (*node->work_generate_blocking (genesis.hash ()))); auto response (wait_response (system, rpc, request)); @@ -4398,7 +4398,7 @@ TEST (rpc, block_create_state_request_work) request.put ("wallet", node->wallets.items.begin ()->first.to_string ()); request.put ("account", nano::dev::genesis_key.pub.to_account ()); request.put ("representative", nano::dev::genesis_key.pub.to_account ()); - request.put ("balance", (nano::genesis_amount - nano::Gxrb_ratio).convert_to ()); + request.put ("balance", (nano::dev::genesis_amount - nano::Gxrb_ratio).convert_to ()); request.put ("link", key.pub.to_account ()); request.put ("previous", previous); auto response (wait_response (system, rpc, request)); @@ -4710,7 +4710,7 @@ TEST (rpc, online_reps) auto send_block (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key.pub, nano::Gxrb_ratio)); ASSERT_NE (nullptr, send_block); ASSERT_TIMELY (10s, !node2->online_reps.list ().empty ()); - ASSERT_EQ (node2->online_reps.online (), nano::genesis_amount - nano::Gxrb_ratio); + ASSERT_EQ (node2->online_reps.online (), nano::dev::genesis_amount - nano::Gxrb_ratio); auto [rpc, rpc_ctx] = add_rpc (system, node2); boost::property_tree::ptree request; request.put ("action", "representatives_online"); @@ -4778,7 +4778,7 @@ TEST (rpc, confirmation_height_currently_processing) { auto transaction = node->store.tx_begin_write (); nano::keypair key1; - nano::send_block send (previous_genesis_chain_hash, key1.pub, nano::genesis_amount - nano::Gxrb_ratio - 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (previous_genesis_chain_hash)); + nano::send_block send (previous_genesis_chain_hash, key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio - 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (previous_genesis_chain_hash)); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, send).code); previous_genesis_chain_hash = send.hash (); } @@ -4848,7 +4848,7 @@ TEST (rpc, confirmation_history) ASSERT_EQ (block->hash ().to_string (), hash); nano::amount tally_num; tally_num.decode_dec (tally); - debug_assert (tally_num == nano::genesis_amount || tally_num == (nano::genesis_amount - nano::Gxrb_ratio)); + debug_assert (tally_num == nano::dev::genesis_amount || tally_num == (nano::dev::genesis_amount - nano::Gxrb_ratio)); system.stop (); } @@ -4879,7 +4879,7 @@ TEST (rpc, confirmation_history_hash) ASSERT_EQ (send2->hash ().to_string (), hash); nano::amount tally_num; tally_num.decode_dec (tally); - debug_assert (tally_num == nano::genesis_amount || tally_num == (nano::genesis_amount - nano::Gxrb_ratio) || tally_num == (nano::genesis_amount - 2 * nano::Gxrb_ratio) || tally_num == (nano::genesis_amount - 3 * nano::Gxrb_ratio)); + debug_assert (tally_num == nano::dev::genesis_amount || tally_num == (nano::dev::genesis_amount - nano::Gxrb_ratio) || tally_num == (nano::dev::genesis_amount - 2 * nano::Gxrb_ratio) || tally_num == (nano::dev::genesis_amount - 3 * nano::Gxrb_ratio)); system.stop (); } @@ -4889,7 +4889,7 @@ TEST (rpc, block_confirm) auto node = add_ipc_enabled_node (system); system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::genesis genesis; - auto send1 (std::make_shared (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node->work_generate_blocking (genesis.hash ()))); + auto send1 (std::make_shared (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node->work_generate_blocking (genesis.hash ()))); { auto transaction (node->store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, *send1).code); @@ -5212,7 +5212,7 @@ TEST (rpc, wallet_history) // Genesis block ASSERT_EQ ("receive", std::get<0> (history_l[3])); ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), std::get<1> (history_l[3])); - ASSERT_EQ (nano::genesis_amount.convert_to (), std::get<2> (history_l[3])); + ASSERT_EQ (nano::dev::genesis_amount.convert_to (), std::get<2> (history_l[3])); ASSERT_EQ (nano::dev::genesis->hash ().to_string (), std::get<3> (history_l[3])); ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), std::get<4> (history_l[3])); } @@ -5222,7 +5222,7 @@ TEST (rpc, sign_hash) nano::system system; auto node1 = add_ipc_enabled_node (system); nano::keypair key; - nano::state_block send (nano::dev::genesis->account (), node1->latest (nano::dev::genesis_key.pub), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0); + nano::state_block send (nano::dev::genesis->account (), node1->latest (nano::dev::genesis_key.pub), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0); auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request; request.put ("action", "sign"); @@ -5245,7 +5245,7 @@ TEST (rpc, sign_block) auto node1 = add_ipc_enabled_node (system); nano::keypair key; system.wallet (0)->insert_adhoc (key.prv); - nano::state_block send (nano::dev::genesis->account (), node1->latest (nano::dev::genesis_key.pub), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0); + nano::state_block send (nano::dev::genesis->account (), node1->latest (nano::dev::genesis_key.pub), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0); auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request; request.put ("action", "sign"); @@ -5634,14 +5634,14 @@ TEST (rpc, epoch_upgrade) auto node = add_ipc_enabled_node (system); nano::keypair key1, key2, key3; nano::keypair epoch_signer (nano::dev::genesis_key); - auto send1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::genesis_amount - 1, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); // to opened account + auto send1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - 1, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); // to opened account ASSERT_EQ (nano::process_result::progress, node->process (*send1).code); - auto send2 (std::make_shared (nano::dev::genesis_key.pub, send1->hash (), nano::dev::genesis_key.pub, nano::genesis_amount - 2, key2.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1->hash ()))); // to unopened account (pending) + auto send2 (std::make_shared (nano::dev::genesis_key.pub, send1->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - 2, key2.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1->hash ()))); // to unopened account (pending) ASSERT_EQ (nano::process_result::progress, node->process (*send2).code); - auto send3 (std::make_shared (nano::dev::genesis_key.pub, send2->hash (), nano::dev::genesis_key.pub, nano::genesis_amount - 3, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send2->hash ()))); // to burn (0) + auto send3 (std::make_shared (nano::dev::genesis_key.pub, send2->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - 3, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send2->hash ()))); // to burn (0) ASSERT_EQ (nano::process_result::progress, node->process (*send3).code); nano::account max_account (std::numeric_limits::max ()); - auto send4 (std::make_shared (nano::dev::genesis_key.pub, send3->hash (), nano::dev::genesis_key.pub, nano::genesis_amount - 4, max_account, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send3->hash ()))); // to max account + auto send4 (std::make_shared (nano::dev::genesis_key.pub, send3->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - 4, max_account, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send3->hash ()))); // to max account ASSERT_EQ (nano::process_result::progress, node->process (*send4).code); auto open (std::make_shared (key1.pub, 0, key1.pub, 1, send1->hash (), key1.prv, key1.pub, *system.work.generate (key1.pub))); ASSERT_EQ (nano::process_result::progress, node->process (*open).code); @@ -5683,9 +5683,9 @@ TEST (rpc, epoch_upgrade) rpc_ctx->io_scope->reset (); // Epoch 2 upgrade auto genesis_latest (node->latest (nano::dev::genesis_key.pub)); - auto send5 (std::make_shared (nano::dev::genesis_key.pub, genesis_latest, nano::dev::genesis_key.pub, nano::genesis_amount - 5, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (genesis_latest))); // to burn (0) + auto send5 (std::make_shared (nano::dev::genesis_key.pub, genesis_latest, nano::dev::genesis_key.pub, nano::dev::genesis_amount - 5, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (genesis_latest))); // to burn (0) ASSERT_EQ (nano::process_result::progress, node->process (*send5).code); - auto send6 (std::make_shared (nano::dev::genesis_key.pub, send5->hash (), nano::dev::genesis_key.pub, nano::genesis_amount - 6, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send5->hash ()))); // to key1 (again) + auto send6 (std::make_shared (nano::dev::genesis_key.pub, send5->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - 6, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send5->hash ()))); // to key1 (again) ASSERT_EQ (nano::process_result::progress, node->process (*send6).code); auto key1_latest (node->latest (key1.pub)); auto send7 (std::make_shared (key1.pub, key1_latest, key1.pub, 0, key3.pub, key1.prv, key1.pub, *system.work.generate (key1_latest))); // to key3 @@ -5728,14 +5728,14 @@ TEST (rpc, epoch_upgrade_multithreaded) auto node = add_ipc_enabled_node (system, node_config); nano::keypair key1, key2, key3; nano::keypair epoch_signer (nano::dev::genesis_key); - auto send1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::genesis_amount - 1, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); // to opened account + auto send1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - 1, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); // to opened account ASSERT_EQ (nano::process_result::progress, node->process (*send1).code); - auto send2 (std::make_shared (nano::dev::genesis_key.pub, send1->hash (), nano::dev::genesis_key.pub, nano::genesis_amount - 2, key2.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1->hash ()))); // to unopened account (pending) + auto send2 (std::make_shared (nano::dev::genesis_key.pub, send1->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - 2, key2.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1->hash ()))); // to unopened account (pending) ASSERT_EQ (nano::process_result::progress, node->process (*send2).code); - auto send3 (std::make_shared (nano::dev::genesis_key.pub, send2->hash (), nano::dev::genesis_key.pub, nano::genesis_amount - 3, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send2->hash ()))); // to burn (0) + auto send3 (std::make_shared (nano::dev::genesis_key.pub, send2->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - 3, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send2->hash ()))); // to burn (0) ASSERT_EQ (nano::process_result::progress, node->process (*send3).code); nano::account max_account (std::numeric_limits::max ()); - auto send4 (std::make_shared (nano::dev::genesis_key.pub, send3->hash (), nano::dev::genesis_key.pub, nano::genesis_amount - 4, max_account, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send3->hash ()))); // to max account + auto send4 (std::make_shared (nano::dev::genesis_key.pub, send3->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - 4, max_account, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send3->hash ()))); // to max account ASSERT_EQ (nano::process_result::progress, node->process (*send4).code); auto open (std::make_shared (key1.pub, 0, key1.pub, 1, send1->hash (), key1.prv, key1.pub, *system.work.generate (key1.pub))); ASSERT_EQ (nano::process_result::progress, node->process (*open).code); @@ -5776,9 +5776,9 @@ TEST (rpc, epoch_upgrade_multithreaded) rpc_ctx->io_scope->reset (); // Epoch 2 upgrade auto genesis_latest (node->latest (nano::dev::genesis_key.pub)); - auto send5 (std::make_shared (nano::dev::genesis_key.pub, genesis_latest, nano::dev::genesis_key.pub, nano::genesis_amount - 5, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (genesis_latest))); // to burn (0) + auto send5 (std::make_shared (nano::dev::genesis_key.pub, genesis_latest, nano::dev::genesis_key.pub, nano::dev::genesis_amount - 5, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (genesis_latest))); // to burn (0) ASSERT_EQ (nano::process_result::progress, node->process (*send5).code); - auto send6 (std::make_shared (nano::dev::genesis_key.pub, send5->hash (), nano::dev::genesis_key.pub, nano::genesis_amount - 6, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send5->hash ()))); // to key1 (again) + auto send6 (std::make_shared (nano::dev::genesis_key.pub, send5->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - 6, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send5->hash ()))); // to key1 (again) ASSERT_EQ (nano::process_result::progress, node->process (*send6).code); auto key1_latest (node->latest (key1.pub)); auto send7 (std::make_shared (key1.pub, key1_latest, key1.pub, 0, key3.pub, key1.prv, key1.pub, *system.work.generate (key1_latest))); // to key3 @@ -5821,7 +5821,7 @@ TEST (rpc, account_lazy_start) auto node1 = system.add_node (node_flags); nano::keypair key; // Generating test chain - auto send1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); + auto send1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); ASSERT_EQ (nano::process_result::progress, node1->process (*send1).code); auto open (std::make_shared (send1->hash (), key.pub, key.pub, key.prv, key.pub, *system.work.generate (key.pub))); ASSERT_EQ (nano::process_result::progress, node1->process (*open).code); @@ -5858,7 +5858,7 @@ TEST (rpc, receive) nano::keypair key1; wallet->insert_adhoc (key1.prv); auto send1 (wallet->send_action (nano::dev::genesis_key.pub, key1.pub, node->config.receive_minimum.number (), *node->work_generate_blocking (nano::dev::genesis->hash ()))); - ASSERT_TIMELY (5s, node->balance (nano::dev::genesis_key.pub) != nano::genesis_amount); + ASSERT_TIMELY (5s, node->balance (nano::dev::genesis_key.pub) != nano::dev::genesis_amount); ASSERT_TIMELY (10s, !node->store.account.exists (node->store.tx_begin_read (), key1.pub)); // Send below minimum receive amount auto send2 (wallet->send_action (nano::dev::genesis_key.pub, key1.pub, node->config.receive_minimum.number () - 1, *node->work_generate_blocking (send1->hash ()))); @@ -5899,7 +5899,7 @@ TEST (rpc, receive_unopened) // Test receiving for unopened account nano::keypair key1; auto send1 (wallet->send_action (nano::dev::genesis_key.pub, key1.pub, node->config.receive_minimum.number () - 1, *node->work_generate_blocking (nano::dev::genesis->hash ()))); - ASSERT_TIMELY (5s, !node->balance (nano::dev::genesis_key.pub) != nano::genesis_amount); + ASSERT_TIMELY (5s, !node->balance (nano::dev::genesis_key.pub) != nano::dev::genesis_amount); ASSERT_FALSE (node->store.account.exists (node->store.tx_begin_read (), key1.pub)); ASSERT_TRUE (node->store.block.exists (node->store.tx_begin_read (), send1->hash ())); wallet->insert_adhoc (key1.prv); // should not auto receive, amount sent was lower than minimum @@ -5961,7 +5961,7 @@ TEST (rpc, receive_work_disabled) ASSERT_TRUE (worker_node.work_generation_enabled ()); auto send1 (wallet->send_action (nano::dev::genesis_key.pub, key1.pub, node->config.receive_minimum.number () - 1, *worker_node.work_generate_blocking (genesis.hash ()), false)); ASSERT_TRUE (send1 != nullptr); - ASSERT_TIMELY (5s, node->balance (nano::dev::genesis_key.pub) != nano::genesis_amount); + ASSERT_TIMELY (5s, node->balance (nano::dev::genesis_key.pub) != nano::dev::genesis_amount); ASSERT_FALSE (node->store.account.exists (node->store.tx_begin_read (), key1.pub)); ASSERT_TRUE (node->store.block.exists (node->store.tx_begin_read (), send1->hash ())); wallet->insert_adhoc (key1.prv); @@ -5994,7 +5994,7 @@ TEST (rpc, receive_pruned) nano::keypair key1; wallet2->insert_adhoc (key1.prv); auto send1 (wallet1->send_action (nano::dev::genesis_key.pub, key1.pub, node2->config.receive_minimum.number (), *node2->work_generate_blocking (nano::dev::genesis->hash ()))); - ASSERT_TIMELY (5s, node2->balance (nano::dev::genesis_key.pub) != nano::genesis_amount); + ASSERT_TIMELY (5s, node2->balance (nano::dev::genesis_key.pub) != nano::dev::genesis_amount); ASSERT_TIMELY (10s, !node2->store.account.exists (node2->store.tx_begin_read (), key1.pub)); // Send below minimum receive amount auto send2 (wallet1->send_action (nano::dev::genesis_key.pub, key1.pub, node2->config.receive_minimum.number () - 1, *node2->work_generate_blocking (send1->hash ()))); @@ -6211,8 +6211,8 @@ TEST (rpc, confirmation_active) auto [rpc, rpc_ctx] = add_rpc (system, node1); nano::genesis genesis; - auto send1 (std::make_shared (genesis.hash (), nano::public_key (), nano::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (genesis.hash ()))); - auto send2 (std::make_shared (send1->hash (), nano::public_key (), nano::genesis_amount - 200, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1->hash ()))); + auto send1 (std::make_shared (genesis.hash (), nano::public_key (), nano::dev::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (genesis.hash ()))); + auto send2 (std::make_shared (send1->hash (), nano::public_key (), nano::dev::genesis_amount - 200, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1->hash ()))); node1->process_active (send1); node1->process_active (send2); nano::blocks_confirm (*node1, { send1, send2 }); @@ -6240,7 +6240,7 @@ TEST (rpc, confirmation_info) auto [rpc, rpc_ctx] = add_rpc (system, node1); nano::genesis genesis; - auto send (std::make_shared (genesis.hash (), nano::public_key (), nano::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (genesis.hash ()))); + auto send (std::make_shared (genesis.hash (), nano::public_key (), nano::dev::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (genesis.hash ()))); node1->process_active (send); node1->block_processor.flush (); node1->scheduler.flush (); diff --git a/nano/secure/common.cpp b/nano/secure/common.cpp index 0f46a198f6..f1a299967c 100644 --- a/nano/secure/common.cpp +++ b/nano/secure/common.cpp @@ -82,6 +82,7 @@ std::string const test_canary_public_key_data = nano::get_env_or_default ("NANO_ nano::ledger_constants nano::dev::constants{ nano::networks::nano_dev_network }; std::shared_ptr & nano::dev::genesis = nano::dev::constants.genesis; nano::keypair nano::dev::genesis_key{ dev_private_key_data }; +nano::uint128_t nano::dev::genesis_amount{ std::numeric_limits::max () }; nano::network_params::network_params () : network_params (network_constants::active_network) @@ -116,7 +117,6 @@ nano::ledger_constants::ledger_constants (nano::networks network_a) : nano_live_genesis (parse_block_from_genesis_data (live_genesis_data)), nano_test_genesis (parse_block_from_genesis_data (test_genesis_data)), genesis (network_a == nano::networks::nano_dev_network ? nano_dev_genesis : network_a == nano::networks::nano_beta_network ? nano_beta_genesis : network_a == nano::networks::nano_test_network ? nano_test_genesis : nano_live_genesis), - genesis_amount (std::numeric_limits::max ()), burn_account (0), nano_dev_final_votes_canary_account (dev_public_key_data), nano_beta_final_votes_canary_account (beta_canary_public_key_data), diff --git a/nano/secure/common.hpp b/nano/secure/common.hpp index 06cf476265..572536062b 100644 --- a/nano/secure/common.hpp +++ b/nano/secure/common.hpp @@ -379,7 +379,6 @@ class ledger_constants std::shared_ptr nano_live_genesis; std::shared_ptr nano_test_genesis; std::shared_ptr genesis; - nano::uint128_t genesis_amount; nano::account burn_account; nano::account nano_dev_final_votes_canary_account; nano::account nano_beta_final_votes_canary_account; @@ -399,6 +398,7 @@ namespace dev extern nano::ledger_constants constants; extern std::shared_ptr & genesis; extern nano::keypair genesis_key; + extern nano::uint128_t genesis_amount; } /** Constants which depend on random values (this class should never be used globally due to CryptoPP globals potentially not being initialized) */ diff --git a/nano/secure/ledger.cpp b/nano/secure/ledger.cpp index 6d735d4172..551431da6d 100644 --- a/nano/secure/ledger.cpp +++ b/nano/secure/ledger.cpp @@ -1103,7 +1103,7 @@ nano::account nano::ledger::account_safe (nano::transaction const & transaction_ nano::uint128_t nano::ledger::amount (nano::transaction const & transaction_a, nano::account const & account_a) { release_assert (account_a == network_params.ledger.genesis_account ()); - return network_params.ledger.genesis_amount; + return nano::dev::genesis_amount; } nano::uint128_t nano::ledger::amount (nano::transaction const & transaction_a, nano::block_hash const & hash_a) diff --git a/nano/secure/store_partial.hpp b/nano/secure/store_partial.hpp index 2af7a4c16b..666a9b8d6b 100644 --- a/nano/secure/store_partial.hpp +++ b/nano/secure/store_partial.hpp @@ -108,7 +108,7 @@ class store_partial : public store auto & genesis = *network_params.ledger.genesis; auto hash_l (genesis.hash ()); debug_assert (account.begin (transaction_a) == account.end ()); - genesis.sideband_set (nano::block_sideband (network_params.ledger.genesis_account (), 0, network_params.ledger.genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); + genesis.sideband_set (nano::block_sideband (network_params.ledger.genesis_account (), 0, nano::dev::genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); block.put (transaction_a, hash_l, genesis); ++ledger_cache_a.block_count; confirmation_height.put (transaction_a, network_params.ledger.genesis_account (), nano::confirmation_height_info{ 1, genesis.hash () }); diff --git a/nano/slow_test/node.cpp b/nano/slow_test/node.cpp index 008958c506..0d03564aa4 100644 --- a/nano/slow_test/node.cpp +++ b/nano/slow_test/node.cpp @@ -100,7 +100,7 @@ TEST (ledger, deep_account_compute) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key; - auto balance (nano::genesis_amount - 1); + auto balance (nano::dev::genesis_amount - 1); nano::send_block send (genesis.hash (), key.pub, balance, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); nano::open_block open (send.hash (), nano::dev::genesis_key.pub, key.pub, key.prv, key.pub, *pool.generate (key.pub)); @@ -146,7 +146,7 @@ TEST (wallet, multithreaded_send_async) } })); } - ASSERT_TIMELY (1000s, system.nodes[0]->balance (nano::dev::genesis_key.pub) == (nano::genesis_amount - 20 * 1000 * 1000)); + ASSERT_TIMELY (1000s, system.nodes[0]->balance (nano::dev::genesis_key.pub) == (nano::dev::genesis_amount - 20 * 1000 * 1000)); } for (auto i (threads.begin ()), n (threads.end ()); i != n; ++i) { @@ -488,7 +488,7 @@ TEST (node, mass_vote_by_hash) std::vector> blocks; for (auto i (0); i < 10000; ++i) { - auto block (std::make_shared (nano::dev::genesis_key.pub, previous, nano::dev::genesis_key.pub, nano::genesis_amount - (i + 1) * nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (previous))); + auto block (std::make_shared (nano::dev::genesis_key.pub, previous, nano::dev::genesis_key.pub, nano::dev::genesis_amount - (i + 1) * nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (previous))); previous = block->hash (); blocks.push_back (block); } @@ -647,7 +647,7 @@ TEST (confirmation_height, long_chains) auto const num_blocks = nano::confirmation_height::unbounded_cutoff * 2 + 50; // First open the other account - nano::send_block send (latest, key1.pub, nano::genesis_amount - nano::Gxrb_ratio + num_blocks + 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); + nano::send_block send (latest, key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio + num_blocks + 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); nano::open_block open (send.hash (), nano::dev::genesis->account (), key1.pub, key1.prv, key1.pub, *system.work.generate (key1.pub)); { auto transaction = node->store.tx_begin_write (); @@ -662,7 +662,7 @@ TEST (confirmation_height, long_chains) auto transaction = node->store.tx_begin_write (); for (auto i = num_blocks - 1; i > 0; --i) { - nano::send_block send (previous_genesis_chain_hash, key1.pub, nano::genesis_amount - nano::Gxrb_ratio + i + 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (previous_genesis_chain_hash)); + nano::send_block send (previous_genesis_chain_hash, key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio + i + 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (previous_genesis_chain_hash)); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, send).code); nano::receive_block receive (previous_destination_chain_hash, send.hash (), key1.prv, key1.pub, *system.work.generate (previous_destination_chain_hash)); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, receive).code); @@ -674,11 +674,11 @@ TEST (confirmation_height, long_chains) // Send one from destination to genesis and pocket it nano::send_block send1 (previous_destination_chain_hash, nano::dev::genesis_key.pub, nano::Gxrb_ratio - 2, key1.prv, key1.pub, *system.work.generate (previous_destination_chain_hash)); - auto receive1 (std::make_shared (nano::dev::genesis_key.pub, previous_genesis_chain_hash, nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio + 1, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (previous_genesis_chain_hash))); + auto receive1 (std::make_shared (nano::dev::genesis_key.pub, previous_genesis_chain_hash, nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio + 1, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (previous_genesis_chain_hash))); // Unpocketed. Send to a non-existing account to prevent auto receives from the wallet adjusting expected confirmation height nano::keypair key2; - nano::state_block send2 (nano::dev::genesis->account (), receive1->hash (), nano::dev::genesis->account (), nano::genesis_amount - nano::Gxrb_ratio, key2.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (receive1->hash ())); + nano::state_block send2 (nano::dev::genesis->account (), receive1->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, key2.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (receive1->hash ())); { auto transaction = node->store.tx_begin_write (); @@ -738,7 +738,7 @@ TEST (confirmation_height, dynamic_algorithm) std::vector> state_blocks; for (auto i = 0; i < num_blocks; ++i) { - auto send (std::make_shared (nano::dev::genesis_key.pub, latest_genesis->hash (), nano::dev::genesis_key.pub, nano::genesis_amount - i - 1, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest_genesis->hash ()))); + auto send (std::make_shared (nano::dev::genesis_key.pub, latest_genesis->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - i - 1, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest_genesis->hash ()))); latest_genesis = send; state_blocks.push_back (send); } @@ -794,7 +794,7 @@ TEST (confirmation_height, dynamic_algorithm_no_transition_while_pending) auto add_block_to_genesis_chain = [&] (nano::write_transaction & transaction) { static int num = 0; - auto send (std::make_shared (nano::dev::genesis_key.pub, latest_genesis, nano::dev::genesis_key.pub, nano::genesis_amount - num - 1, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest_genesis))); + auto send (std::make_shared (nano::dev::genesis_key.pub, latest_genesis, nano::dev::genesis_key.pub, nano::dev::genesis_amount - num - 1, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest_genesis))); latest_genesis = send->hash (); state_blocks.push_back (send); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, *send).code); @@ -873,7 +873,7 @@ TEST (confirmation_height, many_accounts_send_receive_self) nano::keypair key; keys.emplace_back (key); - nano::send_block send (latest_genesis, key.pub, nano::genesis_amount - 1 - i, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest_genesis)); + nano::send_block send (latest_genesis, key.pub, nano::dev::genesis_amount - 1 - i, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest_genesis)); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, send).code); auto open = std::make_shared (send.hash (), nano::dev::genesis_key.pub, key.pub, key.prv, key.pub, *system.work.generate (key.pub)); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, *open).code); @@ -994,7 +994,7 @@ TEST (confirmation_height, many_accounts_send_receive_self_no_elections) { nano::keypair key; keys.emplace_back (key); - nano::send_block send (latest_genesis, key.pub, nano::genesis_amount - 1 - i, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (latest_genesis)); + nano::send_block send (latest_genesis, key.pub, nano::dev::genesis_amount - 1 - i, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (latest_genesis)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); auto open = std::make_shared (send.hash (), nano::dev::genesis_key.pub, key.pub, key.prv, key.pub, *pool.generate (key.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, *open).code); @@ -1312,7 +1312,7 @@ TEST (telemetry, under_load) system.wallet (0)->insert_adhoc (key.prv); auto latest_genesis = node->latest (nano::dev::genesis_key.pub); auto num_blocks = 150000; - auto send (std::make_shared (nano::dev::genesis_key.pub, latest_genesis, nano::dev::genesis_key.pub, nano::genesis_amount - num_blocks, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest_genesis))); + auto send (std::make_shared (nano::dev::genesis_key.pub, latest_genesis, nano::dev::genesis_key.pub, nano::dev::genesis_amount - num_blocks, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest_genesis))); node->process_active (send); latest_genesis = send->hash (); auto open (std::make_shared (key.pub, 0, key.pub, num_blocks, send->hash (), key.prv, key.pub, *system.work.generate (key.pub))); @@ -1329,7 +1329,7 @@ TEST (telemetry, under_load) } }; - std::thread thread1 (thread_func, nano::dev::genesis_key, latest_genesis, nano::genesis_amount - num_blocks); + std::thread thread1 (thread_func, nano::dev::genesis_key, latest_genesis, nano::dev::genesis_amount - num_blocks); std::thread thread2 (thread_func, key, latest_key, num_blocks); ASSERT_TIMELY (200s, node1->ledger.cache.block_count == num_blocks * 2 + 3); @@ -1447,7 +1447,7 @@ TEST (telemetry, many_nodes) // Give all nodes a non-default number of blocks nano::keypair key; nano::genesis genesis; - nano::state_block send (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::genesis_amount - nano::Mxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (genesis.hash ())); + nano::state_block send (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Mxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (genesis.hash ())); for (auto node : system.nodes) { auto transaction (node->store.tx_begin_write ()); @@ -1736,7 +1736,7 @@ TEST (node, mass_block_new) auto send = builder.make_block () .account (nano::dev::genesis_key.pub) .previous (latest_genesis) - .balance (nano::genesis_amount - i - 1) + .balance (nano::dev::genesis_amount - i - 1) .representative (nano::dev::genesis_key.pub) .link (keys[i].pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) @@ -1834,7 +1834,7 @@ TEST (node, wallet_create_block_confirm_conflicts) auto transaction = node->store.tx_begin_write (); for (auto i = num_blocks - 1; i > 0; --i) { - nano::send_block send (latest, key1.pub, nano::genesis_amount - nano::Gxrb_ratio + i + 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); + nano::send_block send (latest, key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio + i + 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, send).code); latest = send.hash (); } diff --git a/nano/test_common/system.cpp b/nano/test_common/system.cpp index 2377943227..56d996cf0a 100644 --- a/nano/test_common/system.cpp +++ b/nano/test_common/system.cpp @@ -152,8 +152,8 @@ nano::system::~system () void nano::system::ledger_initialization_set (std::vector const & reps, nano::amount const & reserve) { nano::block_hash previous = nano::dev::genesis->hash (); - auto amount = (nano::genesis_amount - reserve.number ()) / reps.size (); - auto balance = nano::genesis_amount; + auto amount = (nano::dev::genesis_amount - reserve.number ()) / reps.size (); + auto balance = nano::dev::genesis_amount; for (auto const & i : reps) { balance -= amount; diff --git a/nano/test_common/testutil.cpp b/nano/test_common/testutil.cpp index aea9951a0a..a0ef80634a 100644 --- a/nano/test_common/testutil.cpp +++ b/nano/test_common/testutil.cpp @@ -9,14 +9,6 @@ using namespace std::chrono_literals; -/* Convenience constants for tests which are always on the test network */ -namespace -{ -nano::ledger_constants dev_constants (nano::networks::nano_dev_network); -} - -nano::uint128_t const & nano::genesis_amount (dev_constants.genesis_amount); - void nano::wait_peer_connections (nano::system & system_a) { auto wait_peer_count = [&system_a] (bool in_memory) { From b687356b74c0c71eb4b4f68dbc5431c887cb9732 Mon Sep 17 00:00:00 2001 From: Russel Waters <6511720+argakiig@users.noreply.github.com> Date: Wed, 21 Jul 2021 05:30:24 -0700 Subject: [PATCH 099/346] Weekly Coverage Runs to coveralls.io (#3055) * Workflow Cleanup Weekly Coverage Runs Script Cleanup * surface any test series failure * cleanup for newer cmake and actions long hashes * host cmake is new like osx --- .github/workflows/beta_artifacts.yml | 2 +- .github/workflows/coverage.yml | 56 +++++++++++++ .github/workflows/develop.yml | 4 +- .github/workflows/live_artifacts.yml | 2 +- .github/workflows/release_tests.yml | 62 -------------- .github/workflows/rocksdb_release_tests.yml | 48 ----------- .github/workflows/rocksdb_tests.yml | 68 ---------------- .github/workflows/test_network_artifacts.yml | 2 +- .github/workflows/tests.yml | 86 ++++++++++++++------ CMakeLists.txt | 25 ++++++ README.md | 3 + ci/actions/deploy.sh | 4 +- ci/actions/linux/install_deps.sh | 8 +- ci/actions/windows/build.ps1 | 2 +- ci/build-centos.sh | 4 +- ci/build-travis.sh | 34 ++++---- ci/check-cmake-format.sh | 2 +- ci/cmake-format-all.sh | 2 +- ci/test.sh | 12 ++- cmake/Modules/CoverageTest.cmake | 23 ++++++ coverage/CMakeLists.txt | 52 ++++++++++++ docker/ci/Dockerfile-gcc | 2 +- 22 files changed, 266 insertions(+), 237 deletions(-) create mode 100644 .github/workflows/coverage.yml delete mode 100644 .github/workflows/release_tests.yml delete mode 100644 .github/workflows/rocksdb_release_tests.yml delete mode 100644 .github/workflows/rocksdb_tests.yml mode change 100644 => 100755 ci/check-cmake-format.sh create mode 100644 cmake/Modules/CoverageTest.cmake create mode 100644 coverage/CMakeLists.txt diff --git a/.github/workflows/beta_artifacts.yml b/.github/workflows/beta_artifacts.yml index c930326176..4f88d957ac 100644 --- a/.github/workflows/beta_artifacts.yml +++ b/.github/workflows/beta_artifacts.yml @@ -118,4 +118,4 @@ jobs: env: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - AWS_DEFAULT_REGION: us-east-2 \ No newline at end of file + AWS_DEFAULT_REGION: us-east-2 diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml new file mode 100644 index 0000000000..18d2d3aeca --- /dev/null +++ b/.github/workflows/coverage.yml @@ -0,0 +1,56 @@ +name: Coverage Reports + +on: + workflow_dispatch: + inputs: + label: + description: "label to append to run" + default: "Scheduled" + required: true + schedule: + - cron: "0 1 * * 0" +jobs: + coverage_test: + name: Coverage Test [TEST_USE_ROCKSDB=${{ matrix.TEST_USE_ROCKSDB }}] + if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository + env: + LCOV: 1 + COMPILER: gcc + BOOST_ROOT: /tmp/boost + runs-on: ubuntu-18.04 + strategy: + matrix: + TEST_USE_ROCKSDB: [0, 1] + fail-fast: false + continue-on-error: true + timeout-minutes: 60 + steps: + - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f + with: + submodules: "recursive" + - name: Fetch Deps + run: | + sudo apt-get update -qq && sudo apt-get install -yqq build-essential g++ wget python zlib1g-dev qt5-default \ + valgrind xorg xvfb xauth xfonts-100dpi xfonts-75dpi xfonts-scalable xfonts-cyrillic ocl-icd-opencl-dev \ + git lcov python3-pip + util/build_prep/fetch_boost.sh + wget -O cmake_install.sh https://github.com/Kitware/CMake/releases/download/v3.15.4/cmake-3.15.4-Linux-x86_64.sh + chmod +x cmake_install.sh + sudo ./cmake_install.sh --prefix=/usr --exclude-subdir --skip-license + - name: Build and Test + env: + TEST_USE_ROCKSDB: ${{ matrix.TEST_USE_ROCKSDB }} + run: ./ci/build-travis.sh /usr/lib/x86_64-linux=gnu/cmake/Qt5 + - uses: coverallsapp/github-action@8cbef1dea373ebce56de0a14c68d6267baa10b44 + with: + github-token: ${{ secrets.github_token }} + flag-name: rocksdb-${{ matrix.TEST_USE_ROCKSDB }},${{ github.event.inputs.label }} + parallel: true + finish: + needs: coverage_test + runs-on: ubuntu-18.04 + steps: + - uses: coverallsapp/github-action@8cbef1dea373ebce56de0a14c68d6267baa10b44 + with: + github-token: ${{ secrets.github_token }} + parallel-finished: true \ No newline at end of file diff --git a/.github/workflows/develop.yml b/.github/workflows/develop.yml index 4a42219576..0350abf8fa 100644 --- a/.github/workflows/develop.yml +++ b/.github/workflows/develop.yml @@ -3,7 +3,7 @@ name: Develop on: push: branches: - - develop + - develop jobs: linux_job: runs-on: ubuntu-18.04 @@ -24,4 +24,4 @@ jobs: - name: Deploy Docker (nanocurrency/nano-env) run: ci/actions/linux/deploy-docker.sh env: - DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} \ No newline at end of file + DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }} diff --git a/.github/workflows/live_artifacts.yml b/.github/workflows/live_artifacts.yml index 3cca372e8e..3fd7b24106 100644 --- a/.github/workflows/live_artifacts.yml +++ b/.github/workflows/live_artifacts.yml @@ -117,4 +117,4 @@ jobs: env: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - AWS_DEFAULT_REGION: us-east-2 \ No newline at end of file + AWS_DEFAULT_REGION: us-east-2 diff --git a/.github/workflows/release_tests.yml b/.github/workflows/release_tests.yml deleted file mode 100644 index e6cb9d3270..0000000000 --- a/.github/workflows/release_tests.yml +++ /dev/null @@ -1,62 +0,0 @@ -name: Release Tests - -on: - push: - tags: '*' - -env: - RELEASE: 1 - artifact: 0 - -jobs: - osx_test: - runs-on: macos-latest - env: - BOOST_ROOT: /tmp/boost - steps: - - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f - with: - submodules: "recursive" - - - name: Fetch Deps - run: TEST=1 ci/actions/osx/install_deps.sh - - name: Run Tests - run: ci/build-travis.sh "/tmp/qt/lib/cmake/Qt5"; - - gcc_test: - runs-on: ubuntu-18.04 - timeout-minutes: 60 - steps: - - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f - with: - submodules: "recursive" - - - name: Fetch Deps - run: ci/actions/linux/install_deps.sh - - name: Run Tests - run: docker run -v ${PWD}:/workspace nanocurrency/nano-env:gcc /bin/bash -c "cd /workspace && RELEASE=1 ./ci/build-travis.sh /usr/lib/x86_64-linux-gnu/cmake/Qt5 ${PWD}" - - clang_test: - runs-on: ubuntu-18.04 - timeout-minutes: 60 - steps: - - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f - with: - submodules: "recursive" - - - name: Fetch Deps - run: ci/actions/linux/install_deps.sh - - name: Run Tests - run: docker run -v ${PWD}:/workspace nanocurrency/nano-env:clang-6 /bin/bash -c "cd /workspace && RELEASE=1 ./ci/build-travis.sh /usr/lib/x86_64-linux-gnu/cmake/Qt5 ${PWD}" - - windows_test: - runs-on: windows-latest - timeout-minutes: 60 - steps: - - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f - with: - submodules: "recursive" - - name: Fetch Deps - run: ci/actions/windows/install_deps.ps1 - - name: Run Tests - run: ci/actions/windows/build.ps1 diff --git a/.github/workflows/rocksdb_release_tests.yml b/.github/workflows/rocksdb_release_tests.yml deleted file mode 100644 index de2fbe34e7..0000000000 --- a/.github/workflows/rocksdb_release_tests.yml +++ /dev/null @@ -1,48 +0,0 @@ -name: RocksDB Release Tests - -on: - push: - tags: '*' - -env: - RELEASE: 1 - artifact: 0 - TEST_USE_ROCKSDB: 1 - -jobs: - osx_test: - runs-on: macos-latest - env: - BOOST_ROOT: /tmp/boost - steps: - - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f - with: - submodules: "recursive" - - name: Fetch Deps - run: TEST=1 ci/actions/osx/install_deps.sh - - name: Run Tests - run: ci/build-travis.sh "/tmp/qt/lib/cmake/Qt5"; - - gcc_test: - runs-on: ubuntu-18.04 - timeout-minutes: 60 - steps: - - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f - with: - submodules: "recursive" - - name: Fetch Deps - run: ci/actions/linux/install_deps.sh - - name: Run Tests - run: docker run -e TEST_USE_ROCKSDB -v ${PWD}:/workspace nanocurrency/nano-env:gcc /bin/bash -c "cd /workspace && RELEASE=1 ./ci/build-travis.sh /usr/lib/x86_64-linux-gnu/cmake/Qt5 ${PWD}" - - clang_test: - runs-on: ubuntu-18.04 - timeout-minutes: 60 - steps: - - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f - with: - submodules: "recursive" - - name: Fetch Deps - run: ci/actions/linux/install_deps.sh - - name: Run Tests - run: docker run -e TEST_USE_ROCKSDB -v ${PWD}:/workspace nanocurrency/nano-env:clang-6 /bin/bash -c "cd /workspace && RELEASE=1 ./ci/build-travis.sh /usr/lib/x86_64-linux-gnu/cmake/Qt5 ${PWD}" diff --git a/.github/workflows/rocksdb_tests.yml b/.github/workflows/rocksdb_tests.yml deleted file mode 100644 index 94b52d0425..0000000000 --- a/.github/workflows/rocksdb_tests.yml +++ /dev/null @@ -1,68 +0,0 @@ -name: RocksDB Tests - -on: [push, pull_request] - -env: - RELEASE: 0 - artifact: 0 - TEST_USE_ROCKSDB: 1 - -jobs: - osx_test: - runs-on: macos-latest - env: - BOOST_ROOT: /tmp/boost - DEADLINE_SCALE_FACTOR: 2 - if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository - steps: - - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f - with: - submodules: "recursive" - - name: Fetch Deps - run: TEST=1 ci/actions/osx/install_deps.sh - - name: Run Tests - run: ci/build-travis.sh "/tmp/qt/lib/cmake/Qt5"; - - gcc_test: - runs-on: ubuntu-18.04 - timeout-minutes: 60 - if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository - steps: - - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f - with: - submodules: "recursive" - - name: Fetch Deps - run: ci/actions/linux/install_deps.sh - - name: Run Tests - run: docker run -e TEST_USE_ROCKSDB -v ${PWD}:/workspace nanocurrency/nano-env:gcc /bin/bash -c "cd /workspace && ./ci/build-travis.sh /usr/lib/x86_64-linux-gnu/cmake/Qt5 ${PWD}" - - clang_test: - runs-on: ubuntu-18.04 - timeout-minutes: 60 - if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository - steps: - - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f - with: - submodules: "recursive" - - name: Fetch Deps - run: ci/actions/linux/install_deps.sh - - name: Run Tests - run: docker run -e TEST_USE_ROCKSDB -v ${PWD}:/workspace nanocurrency/nano-env:clang-6 /bin/bash -c "cd /workspace && ./ci/build-travis.sh /usr/lib/x86_64-linux-gnu/cmake/Qt5 ${PWD}" - - windows_test: - runs-on: windows-latest - timeout-minutes: 60 - env: - RELEASE: 1 - DEADLINE_SCALE_FACTOR: 2 - if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository - steps: - - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f - with: - submodules: "recursive" - - name: Windows Defender - run: ci/actions/windows/disable_windows_defender.ps1 - - name: Fetch Deps - run: ci/actions/windows/install_deps.ps1 - - name: Run Tests - run: ci/actions/windows/build.ps1 diff --git a/.github/workflows/test_network_artifacts.yml b/.github/workflows/test_network_artifacts.yml index 479b8efba0..ce473cb96b 100644 --- a/.github/workflows/test_network_artifacts.yml +++ b/.github/workflows/test_network_artifacts.yml @@ -118,4 +118,4 @@ jobs: env: AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }} AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }} - AWS_DEFAULT_REGION: us-east-2 \ No newline at end of file + AWS_DEFAULT_REGION: us-east-2 diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index c429d6779a..15d0702938 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -5,12 +5,21 @@ on: [push, pull_request] env: RELEASE: 0 artifact: 0 - + jobs: osx_test: - runs-on: macos-latest + name: OSX unit tests [TEST_USE_ROCKSDB=${{ matrix.TEST_USE_ROCKSDB }}] + strategy: + fail-fast: false + matrix: + TEST_USE_ROCKSDB: [0, 1] + RELEASE: + - ${{ startsWith(github.ref, 'refs/tags/') }} env: BOOST_ROOT: /tmp/boost + TEST_USE_ROCKSDB: ${{ matrix.TEST_USE_ROCKSDB }} + RELEASE: ${{ matrix.RELEASE }} + runs-on: macos-latest if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository steps: - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f @@ -18,25 +27,32 @@ jobs: submodules: "recursive" - name: Fetch Deps run: TEST=1 ci/actions/osx/install_deps.sh - - name: Run Tests + - name: Build Tests run: ci/build-travis.sh "/tmp/qt/lib/cmake/Qt5"; + - name: Run Tests lmdb + if: ${{ matrix.TEST_USE_ROCKSDB == 0 }} + run: cd build && sudo TEST_USE_ROCKSDB=$TEST_USE_ROCKSDB ../ci/test.sh . + - name: Run Tests rocksdb + env: + DEADLINE_SCALE_FACTOR: 2 + if: ${{ matrix.TEST_USE_ROCKSDB == 1 }} + run: cd build && sudo TEST_USE_ROCKSDB=$TEST_USE_ROCKSDB ../ci/test.sh . - gcc_test: + linux_test: + name: Linux Unit Tests [TEST_USE_ROCKSDB=${{ matrix.TEST_USE_ROCKSDB }} - COMPILER=${{ matrix.COMPILER }}] + timeout-minutes: 90 + strategy: + fail-fast: false + matrix: + TEST_USE_ROCKSDB: [0, 1] + COMPILER: [gcc, clang-6] + RELEASE: + - ${{ startsWith(github.ref, 'refs/tags/') }} runs-on: ubuntu-18.04 - timeout-minutes: 60 - if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository - steps: - - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f - with: - submodules: "recursive" - - name: Fetch Deps - run: ci/actions/linux/install_deps.sh - - name: Run Tests - run: docker run -v ${PWD}:/workspace nanocurrency/nano-env:gcc /bin/bash -c "cd /workspace && ./ci/build-travis.sh /usr/lib/x86_64-linux-gnu/cmake/Qt5 ${PWD}" - - clang_test: - runs-on: ubuntu-18.04 - timeout-minutes: 60 + env: + COMPILER: ${{ matrix.COMPILER }} + TEST_USE_ROCKSDB: ${{ matrix.TEST_USE_ROCKSDB }} + RELEASE: ${{ matrix.RELEASE }} if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository steps: - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f @@ -44,12 +60,31 @@ jobs: submodules: "recursive" - name: Fetch Deps run: ci/actions/linux/install_deps.sh - - name: Run Tests - run: docker run -v ${PWD}:/workspace nanocurrency/nano-env:clang-6 /bin/bash -c "cd /workspace && ./ci/build-travis.sh /usr/lib/x86_64-linux-gnu/cmake/Qt5 ${PWD}" + - name: Build Tests + run: docker run -e TEST_USE_ROCKSDB -e RELEASE -v ${PWD}:/workspace nanocurrency/nano-env:${{ matrix.COMPILER }} /bin/bash -c "cd /workspace && ./ci/build-travis.sh /usr/lib/x86_64-linux-gnu/cmake/Qt5" + - name: Run Tests lmdb + if: ${{ matrix.TEST_USE_ROCKSDB == 0 }} + run: docker run -e RELEASE -v ${PWD}:/workspace nanocurrency/nano-env:${{ matrix.COMPILER }} /bin/bash -c "cd /workspace/build && ../ci/test.sh ." + - name: Run Tests rocksdb + if: ${{ matrix.TEST_USE_ROCKSDB == 1 }} + run: docker run -e TEST_USE_ROCKSDB -e DEADLINE_SCALE_FACTOR=2 -e RELEASE -v ${PWD}:/workspace nanocurrency/nano-env:${{ matrix.COMPILER }} /bin/bash -c "cd /workspace/build && ../ci/test.sh ." windows_test: + name: Windows Unit Tests [TEST_USE_ROCKSDB=${{ matrix.TEST_USE_ROCKSDB }}] + timeout-minutes: 90 + strategy: + fail-fast: false + matrix: + TEST_USE_ROCKSDB: [0, 1] + RELEASE: + - ${{ startsWith(github.ref, 'refs/tags/') }} + exclude: + - RELEASE: true + TEST_USE_ROCKSDB: 1 runs-on: windows-latest - timeout-minutes: 60 + env: + TEST_USE_ROCKSDB: ${{ matrix.TEST_USE_ROCKSDB }} + RELEASE: ${{ matrix.RELEASE }} if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository steps: - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f @@ -57,8 +92,13 @@ jobs: submodules: "recursive" - name: Windows Defender run: ci/actions/windows/disable_windows_defender.ps1 - - name: Fetch Deps run: ci/actions/windows/install_deps.ps1 - - name: Run Tests + - name: Run Tests lmdb + if: ${{ matrix.TEST_USE_ROCKSDB == 0 }} + run: ci/actions/windows/build.ps1 + - name: Run Tests rocksdb + if: ${{ matrix.TEST_USE_ROCKSDB == 1 }} + env: + DEADLINE_SCALE_FACTOR: 2 run: ci/actions/windows/build.ps1 diff --git a/CMakeLists.txt b/CMakeLists.txt index 3683c55158..7db5c61ad6 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -29,6 +29,15 @@ execute_process( OUTPUT_STRIP_TRAILING_WHITESPACE) option(CI_BUILD false) + +set(COVERAGE + OFF + CACHE BOOL "Code Coverage Targets") +if(COVERAGE) + list(APPEND CMAKE_MODULE_PATH "${CMAKE_SOURCE_DIR}/cmake/Modules") + include(CoverageTest) +endif() + set(CI_TEST 0 CACHE STRING "") @@ -600,6 +609,17 @@ if(NANO_TEST OR RAIBLOCKS_TEST) add_subdirectory(nano/core_test) add_subdirectory(nano/rpc_test) add_subdirectory(nano/slow_test) + add_custom_target( + build_tests + COMMAND echo "BATCH BUILDING TESTS" + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + DEPENDS core_test load_test rpc_test nano_node nano_rpc) + + add_custom_target( + run_tests + COMMAND ${PROJECT_SOURCE_DIR}/ci/test.sh ${CMAKE_BINARY_DIR} + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + DEPENDS build_tests) endif() if(NANO_GUI OR RAIBLOCKS_GUI) install(FILES ${PROJECT_BINARY_DIR}/config-node.toml.sample DESTINATION .) @@ -690,6 +710,7 @@ if(NANO_GUI OR RAIBLOCKS_GUI) set_target_properties( qt_test PROPERTIES COMPILE_FLAGS "-DQT_NO_KEYWORDS -DBOOST_ASIO_HAS_STD_ARRAY=1") + add_dependencies(build_tests qt_test) endif() if(APPLE) @@ -839,5 +860,9 @@ if(NANO_GUI OR RAIBLOCKS_GUI) endif() endif() +if(COVERAGE) + add_subdirectory(coverage) +endif() + set(CPACK_RESOURCE_FILE_LICENSE ${CMAKE_SOURCE_DIR}/LICENSE) include(CPack) diff --git a/README.md b/README.md index e2bea00584..ae0f4f13d8 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,8 @@
+ Logo +

@@ -8,6 +10,7 @@ [![Beta Artifacts](https://github.com/nanocurrency/nano-node/workflows/Beta/badge.svg)](https://github.com/nanocurrency/nano-node/actions?query=workflow%3ABeta) [![GitHub release (latest by date)](https://img.shields.io/github/v/release/nanocurrency/nano-node)](https://github.com/nanocurrency/nano-node/releases/latest) [![GitHub tag (latest by date)](https://img.shields.io/github/v/tag/nanocurrency/nano-node?color=darkblue&label=beta)](https://github.com/nanocurrency/nano-node/tags) +[![Coverage Status](https://coveralls.io/repos/github/nanocurrency/nano-node/badge.svg?branch=develop)](https://coveralls.io/github/nanocurrency/nano-node?branch=develop) [![Tests](https://github.com/nanocurrency/nano-node/workflows/Tests/badge.svg)](https://github.com/nanocurrency/nano-node/actions?query=workflow%3ATests) [![RelWithDebug Tests](https://github.com/nanocurrency/nano-node/workflows/Release%20Tests/badge.svg)](https://github.com/nanocurrency/nano-node/actions?query=workflow%3A%22Release+Tests%22) [![Discord](https://img.shields.io/badge/discord-join%20chat-orange.svg)](https://chat.nano.org) diff --git a/ci/actions/deploy.sh b/ci/actions/deploy.sh index e305daf003..4aee6f1d6e 100755 --- a/ci/actions/deploy.sh +++ b/ci/actions/deploy.sh @@ -5,9 +5,9 @@ set -o nounset set -o xtrace OS=$(uname) -if [[ "${BETA-0}" -eq 1 ]]; then +if [[ "${BETA:-0}" -eq 1 ]]; then BUILD="beta" -elif [[ "${TEST-0}" -eq 1 ]]; then +elif [[ "${TEST:-0}" -eq 1 ]]; then BUILD="test" else BUILD="live" diff --git a/ci/actions/linux/install_deps.sh b/ci/actions/linux/install_deps.sh index 5fda44b8aa..fb421c441a 100755 --- a/ci/actions/linux/install_deps.sh +++ b/ci/actions/linux/install_deps.sh @@ -3,5 +3,9 @@ sudo mkdir -p /etc/docker && echo '{"ipv6":true,"fixed-cidr-v6":"2001:db8:1::/64"}' | sudo tee /etc/docker/daemon.json && sudo service docker restart ci/build-docker-image.sh docker/ci/Dockerfile-base nanocurrency/nano-env:base -ci/build-docker-image.sh docker/ci/Dockerfile-gcc nanocurrency/nano-env:gcc -ci/build-docker-image.sh docker/ci/Dockerfile-clang-6 nanocurrency/nano-env:clang-6 +if [[ "${COMPILER:-}" != "" ]]; then + ci/build-docker-image.sh docker/ci/Dockerfile-gcc nanocurrency/nano-env:${COMPILER} +else + ci/build-docker-image.sh docker/ci/Dockerfile-gcc nanocurrency/nano-env:gcc + ci/build-docker-image.sh docker/ci/Dockerfile-clang-6 nanocurrency/nano-env:clang-6 +fi diff --git a/ci/actions/windows/build.ps1 b/ci/actions/windows/build.ps1 index a2d65053d8..5001074184 100644 --- a/ci/actions/windows/build.ps1 +++ b/ci/actions/windows/build.ps1 @@ -20,7 +20,7 @@ if (${env:artifact} -eq 1) { $env:RUN = "artifact" } else { - if ( ${env:RELEASE} -eq 1 ) { + if ( ${env:RELEASE} -eq "true" -or ${env:TEST_USE_ROCKSDB} -eq 1 ) { $env:BUILD_TYPE = "RelWithDebInfo" } else { diff --git a/ci/build-centos.sh b/ci/build-centos.sh index e8962faa9f..19b6bee18a 100755 --- a/ci/build-centos.sh +++ b/ci/build-centos.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash TAGS=$(git describe --abbrev=0 --tags) -VERSIONS=$(echo $TAGS | sed 's/V//') +VERSIONS=${TAGS//V/} RELEASE=$(echo $CI_JOB_ID) run_source() { @@ -16,7 +16,7 @@ run_build() { run_update() { for file in ./nanocurrency*.in; do - outfile="$(echo "${file}" | sed 's@\.in$@@')" + outfile="${file//.in/}" echo "Updating \"${outfile}\"..." diff --git a/ci/build-travis.sh b/ci/build-travis.sh index 39fa935509..7b2f225678 100755 --- a/ci/build-travis.sh +++ b/ci/build-travis.sh @@ -28,26 +28,24 @@ fi mkdir build pushd build -if [[ ${RELEASE-0} -eq 1 ]]; then +if [[ "${RELEASE:-false}" == "true" ]]; then BUILD_TYPE="RelWithDebInfo" -else - BUILD_TYPE="Debug" fi -if [[ ${ASAN_INT-0} -eq 1 ]]; then +if [[ ${ASAN_INT:-0} -eq 1 ]]; then SANITIZERS="-DNANO_ASAN_INT=ON" -elif [[ ${ASAN-0} -eq 1 ]]; then +elif [[ ${ASAN:-0} -eq 1 ]]; then SANITIZERS="-DNANO_ASAN=ON" -elif [[ ${TSAN-0} -eq 1 ]]; then +elif [[ ${TSAN:-0} -eq 1 ]]; then SANITIZERS="-DNANO_TSAN=ON" -else - SANITIZERS="" +elif [[ ${LCOV:-0} -eq 1 ]]; then + SANITIZERS="-DCOVERAGE=ON" fi ulimit -S -n 8192 if [[ "$OS" == 'Linux' ]]; then - if clang --version; then + if clang --version && [ ${LCOV:-0} == 0 ]; then BACKTRACE="-DNANO_STACKTRACE_BACKTRACE=ON \ -DBACKTRACE_INCLUDE=" else @@ -64,22 +62,24 @@ cmake \ -DNANO_GUI=ON \ -DPORTABLE=1 \ -DNANO_WARN_TO_ERR=ON \ --DCMAKE_BUILD_TYPE=${BUILD_TYPE} \ +-DCMAKE_BUILD_TYPE=${BUILD_TYPE:-Debug} \ -DCMAKE_VERBOSE_MAKEFILE=ON \ --DBOOST_ROOT=/tmp/boost/ \ +-DBOOST_ROOT=${BOOST_ROOT:-/tmp/boost/} \ -DNANO_SHARED_BOOST=ON \ -DQt5_DIR=${qt_dir} \ -DCI_TEST="1" \ -${BACKTRACE} \ -${SANITIZERS} \ +${BACKTRACE:-} \ +${SANITIZERS:-} \ .. if [[ "$OS" == 'Linux' ]]; then - cmake --build ${PWD} -- -j2 + if [[ ${LCOV:-0} == 1 ]]; then + cmake --build ${PWD} --target generate_coverage -- -j2 + else + cmake --build ${PWD} --target build_tests -k -- -j2 + fi else - sudo cmake --build ${PWD} -- -j2 + sudo cmake --build ${PWD} --target build_tests -- -j2 fi popd - -./ci/test.sh ./build diff --git a/ci/check-cmake-format.sh b/ci/check-cmake-format.sh old mode 100644 new mode 100755 index f0bbf478d5..633f818221 --- a/ci/check-cmake-format.sh +++ b/ci/check-cmake-format.sh @@ -6,7 +6,7 @@ if ! command -v cmake-format &>/dev/null; then fi REPO_ROOT=$(git rev-parse --show-toplevel) cd "${REPO_ROOT}" -find "${REPO_ROOT}" -iwholename "${REPO_ROOT}/nano/*/CMakeLists.txt" -o -iwholename "${REPO_ROOT}/CMakeLists.txt" | xargs cmake-format --check &>.cmake_format_check +find "${REPO_ROOT}" -iwholename "${REPO_ROOT}/nano/*/CMakeLists.txt" -o -iwholename "${REPO_ROOT}/CMakeLists.txt" -o -iwholename "${REPO_ROOT}/coverage/CMakeLists.txt" | xargs cmake-format --check &>.cmake_format_check if [[ $(wc -l .cmake_format_check | cut -f1 -d ' ') != 0 ]]; then echo echo "Code formatting differs from expected - please run \n\t'bash ci/cmake-format-all.sh'" diff --git a/ci/cmake-format-all.sh b/ci/cmake-format-all.sh index 784cf863ce..ea8199c08f 100755 --- a/ci/cmake-format-all.sh +++ b/ci/cmake-format-all.sh @@ -8,4 +8,4 @@ if ! command -v cmake-format &>/dev/null; then fi REPO_ROOT=$(git rev-parse --show-toplevel) cd "${REPO_ROOT}" -find "${REPO_ROOT}" -iwholename "${REPO_ROOT}/nano/*/CMakeLists.txt" -o -iwholename "${REPO_ROOT}/CMakeLists.txt" | xargs cmake-format -i +find "${REPO_ROOT}" -iwholename "${REPO_ROOT}/nano/*/CMakeLists.txt" -o -iwholename "${REPO_ROOT}/CMakeLists.txt" -o -iwholename "${REPO_ROOT}/coverage/CMakeLists.txt" | xargs cmake-format -i diff --git a/ci/test.sh b/ci/test.sh index 8319aaff27..817c6873ec 100755 --- a/ci/test.sh +++ b/ci/test.sh @@ -29,7 +29,7 @@ xvfb_run_() { Xvfb :2 -screen 0 1024x768x24 & xvfb_pid=$! sleep ${INIT_DELAY_SEC} - DISPLAY=:2 ${TIMEOUT_CMD} ${TIMEOUT_TIME_ARG} ${TIMEOUT_SEC-${TIMEOUT_DEFAULT}} $@ + DISPLAY=:2 ${TIMEOUT_CMD} ${TIMEOUT_TIME_ARG} ${TIMEOUT_DEFAULT} $@ res=${?} kill ${xvfb_pid} @@ -57,14 +57,14 @@ run_tests() { sleep $((30 + (RANDOM % 30))) fi - ${TIMEOUT_CMD} ${TIMEOUT_TIME_ARG} ${TIMEOUT_SEC-${TIMEOUT_DEFAULT}} ./core_test + ${TIMEOUT_CMD} ${TIMEOUT_TIME_ARG} ${TIMEOUT_DEFAULT} ./core_test core_test_res=${?} if [ "${core_test_res}" = '0' ]; then break fi done - xvfb_run_ ./rpc_test + ${TIMEOUT_CMD} ${TIMEOUT_TIME_ARG} ${TIMEOUT_DEFAULT} ./rpc_test rpc_test_res=${?} xvfb_run_ ./qt_test @@ -73,7 +73,11 @@ run_tests() { echo "Core Test return code: ${core_test_res}" echo "RPC Test return code: ${rpc_test_res}" echo "QT Test return code: ${qt_test_res}" - return ${core_test_res} + if [[ ${core_test_res} != 0 || ${rpc_test_res} != 0 || ${qt_test_res} != 0 ]]; then + return 1 + else + return 0 + fi } cd ${build_dir} diff --git a/cmake/Modules/CoverageTest.cmake b/cmake/Modules/CoverageTest.cmake new file mode 100644 index 0000000000..df15e1174c --- /dev/null +++ b/cmake/Modules/CoverageTest.cmake @@ -0,0 +1,23 @@ +set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -fprofile-arcs -ftest-coverage") +set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_EXE_LINKER_FLAGS} --coverage -lgcov") +find_program(LCOV_PATH lcov) +message("lcov found: ${LCOV_PATH}") +find_program(GENHTML_PATH genhtml) +message("genhtml found: ${GENHTML_PATH}") +if(NOT CMAKE_COMPILER_IS_GNUCXX) + # Clang version 3.0.0 and greater now supports gcov as well. + message( + WARNING + "Compiler is not GNU gcc! Clang Version 3.0.0 and greater supports gcov as well, but older versions don't." + ) + if(NOT "${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang") + message(FATAL_ERROR "Compiler is not GNU gcc! Aborting...") + endif() +endif() +if(NOT (CMAKE_BUILD_TYPE STREQUAL "Debug" OR CMAKE_BUILD_TYPE STREQUAL + "Coverage")) + message( + WARNING + "Code coverage results with an optimized (non-Debug) build may be misleading" + ) +endif() \ No newline at end of file diff --git a/coverage/CMakeLists.txt b/coverage/CMakeLists.txt new file mode 100644 index 0000000000..9a990097e0 --- /dev/null +++ b/coverage/CMakeLists.txt @@ -0,0 +1,52 @@ +add_custom_target( + clean_coverage + COMMAND echo "CLEANING COUNTERS" + COMMAND ${LCOV_PATH} --directory . --zerocounter -q + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + DEPENDS build_tests) + +add_custom_target( + coverage_tests + COMMAND echo "RUN TESTS FOR COVERAGE" + COMMAND ${PROJECT_SOURCE_DIR}/ci/test.sh ${CMAKE_BINARY_DIR} || true + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + DEPENDS clean_coverage) + +add_custom_target( + coveralls_upload + COMMAND echo "UPLOADING COVERALLS COVERAGE REPORT" + COMMAND coveralls -i nano -b build -r . --gcov-options '\\-lp' + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + DEPENDS coverage_tests) + +add_custom_target( + generate_coverage + COMMAND echo "CAPTURING COVERAGE DATA" + COMMAND ${LCOV_PATH} --directory . --capture --output-file lcov.info.raw -q + COMMAND echo "REMOVING FLUFF FROM REPORT" + COMMAND + ${LCOV_PATH} --remove lcov.info.raw '/usr/*' '/tmp/*' + '${PROJECT_SOURCE_DIR}/cpptoml/*' '${PROJECT_SOURCE_DIR}/crypto/*' + '${PROJECT_SOURCE_DIR}/flatbuffers/*' '${PROJECT_SOURCE_DIR}/gtest/*' + '${PROJECT_SOURCE_DIR}/rocksdb/*' '${PROJECT_SOURCE_DIR}/valgrind/*' + '${PROJECT_SOURCE_DIR}/nano/core_test/*' + '${PROJECT_SOURCE_DIR}/nano/load_test/*' + '${PROJECT_SOURCE_DIR}/nano/ipc_flatbuffers_test/*' + '${PROJECT_SOURCE_DIR}/nano/ipc_flatbuffers_lib/*' + '${PROJECT_SOURCE_DIR}/nano/nano_node/*' + '${PROJECT_SOURCE_DIR}/nano/nano_wallet/*' + '${PROJECT_SOURCE_DIR}/nano/nano_rpc/*' + '${PROJECT_SOURCE_DIR}/nano/rpc_test/*' + '${PROJECT_SOURCE_DIR}/nano/qt_test/*' '${PROJECT_SOURCE_DIR}/nano/qt/*' + '${PROJECT_SOURCE_DIR}/nano/test_common/*' + '${PROJECT_SOURCE_DIR}/nano/qt_system/*' --output-file + ${PROJECT_SOURCE_DIR}/coverage/lcov.info -q + WORKING_DIRECTORY ${CMAKE_BINARY_DIR} + DEPENDS coverage_tests) + +add_custom_target( + generate_html + COMMAND echo "GENERATING HTML COVERAGE REPORT" + COMMAND ${GENHTML_PATH} -o coverage ${PROJECT_SOURCE_DIR}/coverage/lcov.info + WORKING_DIRECTORY ${PROJECT_SOURCE_DIR} + DEPENDS generate_coverage) diff --git a/docker/ci/Dockerfile-gcc b/docker/ci/Dockerfile-gcc index 2bad5b9ee5..65960198f7 100644 --- a/docker/ci/Dockerfile-gcc +++ b/docker/ci/Dockerfile-gcc @@ -1,6 +1,6 @@ FROM nanocurrency/nano-env:base -RUN apt-get install -yqq git +RUN apt update -qq && apt-get install -yqq git ENV BOOST_ROOT=/tmp/boost From b4107d1802990fb578a3ddeed7d650b41140c13a Mon Sep 17 00:00:00 2001 From: Russel Waters <6511720+argakiig@users.noreply.github.com> Date: Wed, 21 Jul 2021 08:31:25 -0700 Subject: [PATCH 100/346] Update CMakeLists.txt (#3384) Add diskhash to coverage exclusions --- coverage/CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/coverage/CMakeLists.txt b/coverage/CMakeLists.txt index 9a990097e0..2646419411 100644 --- a/coverage/CMakeLists.txt +++ b/coverage/CMakeLists.txt @@ -29,7 +29,7 @@ add_custom_target( '${PROJECT_SOURCE_DIR}/cpptoml/*' '${PROJECT_SOURCE_DIR}/crypto/*' '${PROJECT_SOURCE_DIR}/flatbuffers/*' '${PROJECT_SOURCE_DIR}/gtest/*' '${PROJECT_SOURCE_DIR}/rocksdb/*' '${PROJECT_SOURCE_DIR}/valgrind/*' - '${PROJECT_SOURCE_DIR}/nano/core_test/*' + '${PROJECT_SOURCE_DIR}/nano/core_test/*' '${PROJECT_SOURCE_DIR}/diskhash/*' '${PROJECT_SOURCE_DIR}/nano/load_test/*' '${PROJECT_SOURCE_DIR}/nano/ipc_flatbuffers_test/*' '${PROJECT_SOURCE_DIR}/nano/ipc_flatbuffers_lib/*' From e12039e3e92d85d04044e1a16350050e29acfcf7 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Thu, 22 Jul 2021 01:13:59 +0100 Subject: [PATCH 101/346] wallet_pending and accounts_pending handle empty results differently. accounts_pending inserted an entri with an empty array and wallet_pending didn't insert a result at all. This caused wallet_pending to fail check_block_response_count. --- nano/node/json_handler.cpp | 5 ++++- nano/rpc_test/rpc.cpp | 10 +++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index 2aa78405fc..6e386042ca 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -1002,7 +1002,10 @@ void nano::json_handler::accounts_pending () }); } } - pending.add_child (account.to_account (), peers_l); + if (!peers_l.empty ()) + { + pending.add_child (account.to_account (), peers_l); + } } } response_l.add_child ("blocks", pending); diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index 725e87492e..49cb446cf8 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -142,7 +142,15 @@ boost::property_tree::ptree wait_response (nano::system & system, std::shared_pt void check_block_response_count (nano::system & system, std::shared_ptr const & rpc, boost::property_tree::ptree & request, uint64_t size_count) { auto response (wait_response (system, rpc, request)); - ASSERT_EQ (size_count, response.get_child ("blocks").front ().second.size ()); + auto & blocks = response.get_child ("blocks"); + if (size_count > 0) + { + ASSERT_EQ (size_count, blocks.front ().second.size ()); + } + else + { + ASSERT_TRUE (blocks.empty ()); + } } class scoped_io_thread_name_change From fb59c28e0c75b4f6a245462eb48f146b85b651bb Mon Sep 17 00:00:00 2001 From: clemahieu Date: Sat, 24 Jul 2021 16:09:40 +0100 Subject: [PATCH 102/346] Initializing genesis sideband statically. --- nano/secure/common.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/nano/secure/common.cpp b/nano/secure/common.cpp index f1a299967c..58c02c9c67 100644 --- a/nano/secure/common.cpp +++ b/nano/secure/common.cpp @@ -1,6 +1,7 @@ #include #include #include +#include #include #include @@ -83,6 +84,15 @@ nano::ledger_constants nano::dev::constants{ nano::networks::nano_dev_network }; std::shared_ptr & nano::dev::genesis = nano::dev::constants.genesis; nano::keypair nano::dev::genesis_key{ dev_private_key_data }; nano::uint128_t nano::dev::genesis_amount{ std::numeric_limits::max () }; +namespace { +struct genesis_sideband_initializer { +genesis_sideband_initializer () +{ + nano::dev::genesis->sideband_set (nano::block_sideband (nano::dev::genesis->account (), 0, nano::dev::genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); +} +}; +genesis_sideband_initializer initializer; +} nano::network_params::network_params () : network_params (network_constants::active_network) From 3bc420c0a65f39567307e9a2f7cda5b2bbf1f2cd Mon Sep 17 00:00:00 2001 From: clemahieu Date: Sat, 24 Jul 2021 16:16:28 +0100 Subject: [PATCH 103/346] Converting usages of nano::genesis to directly using nano::dev::genesis. --- nano/core_test/active_transactions.cpp | 79 +++-- nano/core_test/block_store.cpp | 56 ++-- nano/core_test/bootstrap.cpp | 103 +++---- nano/core_test/confirmation_height.cpp | 28 +- nano/core_test/conflicts.cpp | 11 +- nano/core_test/election.cpp | 6 +- nano/core_test/frontiers_confirmation.cpp | 7 +- nano/core_test/gap_cache.cpp | 3 +- nano/core_test/ledger.cpp | 337 ++++++++-------------- nano/core_test/network.cpp | 33 +-- nano/core_test/network_filter.cpp | 14 +- nano/core_test/node.cpp | 244 +++++++--------- nano/core_test/processor_service.cpp | 2 - nano/core_test/request_aggregator.cpp | 32 +- nano/core_test/vote_processor.cpp | 27 +- nano/core_test/wallet.cpp | 4 +- nano/core_test/wallets.cpp | 3 +- nano/core_test/websocket.cpp | 12 +- nano/slow_test/node.cpp | 13 +- nano/test_common/system.cpp | 3 +- 20 files changed, 385 insertions(+), 632 deletions(-) diff --git a/nano/core_test/active_transactions.cpp b/nano/core_test/active_transactions.cpp index 472c82c6bf..f198e11f97 100644 --- a/nano/core_test/active_transactions.cpp +++ b/nano/core_test/active_transactions.cpp @@ -17,13 +17,12 @@ TEST (active_transactions, confirm_active) nano::node_flags node_flags; node_flags.disable_request_loop = true; auto & node1 = *system.add_node (node_flags); - nano::genesis genesis; auto send = nano::send_block_builder () - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .destination (nano::public_key ()) .balance (nano::dev::genesis_amount - 100) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*system.work.generate (genesis.hash ())) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, node1.process (*send).code); nano::node_config node_config2 (nano::get_available_port (), system.logging); @@ -92,16 +91,15 @@ TEST (active_transactions, confirm_frontier) node2.rep_crawler.probable_reps.emplace (nano::dev::genesis_key.pub, nano::dev::genesis_amount, *peers.begin ()); } - nano::genesis genesis; nano::state_block_builder builder; auto send = builder .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - 100) .link (nano::public_key ()) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*system.work.generate (genesis.hash ())) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); auto send_copy = builder.make_block ().from (*send).build_shared (); ASSERT_EQ (nano::process_result::progress, node1.process (*send).code); @@ -127,7 +125,6 @@ TEST (active_transactions, keep_local) node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto & node = *system.add_node (node_config); auto & wallet (*system.wallet (0)); - nano::genesis genesis; //key 1/2 will be managed by the wallet nano::keypair key1, key2, key3, key4, key5, key6; wallet.insert_adhoc (nano::dev::genesis_key.prv); @@ -492,17 +489,16 @@ TEST (active_transactions, vote_replays) node_config.enable_voting = false; node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto & node = *system.add_node (node_config); - nano::genesis genesis; nano::keypair key; nano::state_block_builder builder; auto send1 = builder.make_block () .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*system.work.generate (genesis.hash ())) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); ASSERT_NE (nullptr, send1); auto open1 = builder.make_block () @@ -582,31 +578,27 @@ TEST (active_transactions, dropped_cleanup) flags.disable_request_loop = true; auto & node (*system.add_node (flags)); - nano::genesis genesis; - auto block = genesis.open; - block->sideband_set (nano::block_sideband (nano::dev::genesis->account (), 0, nano::dev::genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); - // Add to network filter to ensure proper cleanup after the election is dropped std::vector block_bytes; { nano::vectorstream stream (block_bytes); - block->serialize (stream); + nano::dev::genesis->serialize (stream); } ASSERT_FALSE (node.network.publish_filter.apply (block_bytes.data (), block_bytes.size ())); ASSERT_TRUE (node.network.publish_filter.apply (block_bytes.data (), block_bytes.size ())); - node.block_confirm (block); + node.block_confirm (nano::dev::genesis); node.scheduler.flush (); - auto election = node.active.election (block->qualified_root ()); + auto election = node.active.election (nano::dev::genesis->qualified_root ()); ASSERT_NE (nullptr, election); // Not yet removed ASSERT_TRUE (node.network.publish_filter.apply (block_bytes.data (), block_bytes.size ())); - ASSERT_EQ (1, node.active.blocks.count (block->hash ())); + ASSERT_EQ (1, node.active.blocks.count (nano::dev::genesis->hash ())); // Now simulate dropping the election ASSERT_FALSE (election->confirmed ()); - node.active.erase (*block); + node.active.erase (*nano::dev::genesis); // The filter must have been cleared ASSERT_FALSE (node.network.publish_filter.apply (block_bytes.data (), block_bytes.size ())); @@ -615,17 +607,17 @@ TEST (active_transactions, dropped_cleanup) ASSERT_EQ (1, node.stats.count (nano::stat::type::election, nano::stat::detail::election_drop_all)); // Block cleared from active - ASSERT_EQ (0, node.active.blocks.count (block->hash ())); + ASSERT_EQ (0, node.active.blocks.count (nano::dev::genesis->hash ())); // Repeat test for a confirmed election ASSERT_TRUE (node.network.publish_filter.apply (block_bytes.data (), block_bytes.size ())); - node.block_confirm (block); + node.block_confirm (nano::dev::genesis); node.scheduler.flush (); - election = node.active.election (block->qualified_root ()); + election = node.active.election (nano::dev::genesis->qualified_root ()); ASSERT_NE (nullptr, election); election->force_confirm (); ASSERT_TRUE (election->confirmed ()); - node.active.erase (*block); + node.active.erase (*nano::dev::genesis); // The filter should not have been cleared ASSERT_TRUE (node.network.publish_filter.apply (block_bytes.data (), block_bytes.size ())); @@ -634,7 +626,7 @@ TEST (active_transactions, dropped_cleanup) ASSERT_EQ (1, node.stats.count (nano::stat::type::election, nano::stat::detail::election_drop_all)); // Block cleared from active - ASSERT_EQ (0, node.active.blocks.count (block->hash ())); + ASSERT_EQ (0, node.active.blocks.count (nano::dev::genesis->hash ())); } TEST (active_transactions, republish_winner) @@ -646,17 +638,16 @@ TEST (active_transactions, republish_winner) node_config.peering_port = nano::get_available_port (); auto & node2 = *system.add_node (node_config); - nano::genesis genesis; nano::keypair key; nano::state_block_builder builder; auto send1 = builder.make_block () .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*system.work.generate (genesis.hash ())) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); node1.process_active (send1); @@ -668,12 +659,12 @@ TEST (active_transactions, republish_winner) { auto fork = builder.make_block () .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - 1 - i) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*system.work.generate (genesis.hash ())) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); node1.process_active (fork); } @@ -684,12 +675,12 @@ TEST (active_transactions, republish_winner) // Process new fork with vote to change winner auto fork = builder.make_block () .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - 2 * nano::Gxrb_ratio) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*system.work.generate (genesis.hash ())) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); node1.process_active (fork); @@ -712,17 +703,16 @@ TEST (active_transactions, fork_filter_cleanup) node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto & node1 (*system.add_node (node_config)); - nano::genesis genesis; nano::keypair key; nano::state_block_builder builder; auto send1 = builder.make_block () .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*system.work.generate (genesis.hash ())) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); std::vector block_bytes; { @@ -735,12 +725,12 @@ TEST (active_transactions, fork_filter_cleanup) { auto fork = builder.make_block () .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - 1 - i) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*system.work.generate (genesis.hash ())) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); node1.process_active (fork); node1.block_processor.flush (); @@ -771,11 +761,10 @@ TEST (active_transactions, fork_replacement_tally) node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto & node1 (*system.add_node (node_config)); - nano::genesis genesis; size_t reps_count = 20; size_t const max_blocks = 10; std::vector keys (reps_count); - auto latest (genesis.hash ()); + auto latest (nano::dev::genesis->hash ()); auto balance (nano::dev::genesis_amount); auto amount (node1.minimum_principal_weight ()); nano::state_block_builder builder; @@ -942,13 +931,12 @@ TEST (active_transactions, confirm_new) { nano::system system (1); auto & node1 = *system.nodes[0]; - nano::genesis genesis; auto send = nano::send_block_builder () - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .destination (nano::public_key ()) .balance (nano::dev::genesis_amount - 100) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*system.work.generate (genesis.hash ())) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); node1.process_active (send); node1.block_processor.flush (); @@ -970,26 +958,25 @@ TEST (active_transactions, conflicting_block_vote_existing_election) nano::node_flags node_flags; node_flags.disable_request_loop = true; auto & node = *system.add_node (node_flags); - nano::genesis genesis; nano::keypair key; nano::state_block_builder builder; auto send = builder.make_block () .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - 100) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*system.work.generate (genesis.hash ())) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); auto fork = builder.make_block () .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - 200) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*system.work.generate (genesis.hash ())) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); auto vote_fork (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), fork)); diff --git a/nano/core_test/block_store.cpp b/nano/core_test/block_store.cpp index 2bd7952f65..9721b9ffab 100644 --- a/nano/core_test/block_store.cpp +++ b/nano/core_test/block_store.cpp @@ -324,14 +324,12 @@ TEST (block_store, genesis) nano::logger_mt logger; auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); - nano::genesis genesis; - auto hash (genesis.hash ()); nano::ledger_cache ledger_cache; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger_cache); nano::account_info info; ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis->account (), info)); - ASSERT_EQ (hash, info.head); + ASSERT_EQ (nano::dev::genesis->hash (), info.head); auto block1 (store->block.get (transaction, info.head)); ASSERT_NE (nullptr, block1); auto receive1 (dynamic_cast (block1.get ())); @@ -342,7 +340,7 @@ TEST (block_store, genesis) nano::confirmation_height_info confirmation_height_info; ASSERT_FALSE (store->confirmation_height.get (transaction, nano::dev::genesis->account (), confirmation_height_info)); ASSERT_EQ (confirmation_height_info.height, 1); - ASSERT_EQ (confirmation_height_info.frontier, hash); + ASSERT_EQ (confirmation_height_info.frontier, nano::dev::genesis->hash ()); auto dev_pub_text (nano::dev::genesis_key.pub.to_string ()); auto dev_pub_account (nano::dev::genesis_key.pub.to_account ()); auto dev_prv_text (nano::dev::genesis_key.prv.to_string ()); @@ -661,7 +659,6 @@ TEST (mdb_block_store, supported_version_upgrades) } // Check that upgrading from an unsupported version is not supported auto path (nano::unique_path ()); - nano::genesis genesis; nano::logger_mt logger; { nano::mdb_store store (logger, path); @@ -693,7 +690,7 @@ TEST (mdb_block_store, supported_version_upgrades) ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "accounts_v1", MDB_CREATE, &store.accounts_v1_handle)); ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "open", MDB_CREATE, &store.open_blocks_handle)); modify_account_info_to_v14 (store, transaction, nano::dev::genesis->account (), 1, nano::dev::genesis->hash ()); - write_block_w_sideband_v18 (store, store.open_blocks_handle, transaction, *nano::genesis ().open); + write_block_w_sideband_v18 (store, store.open_blocks_handle, transaction, *nano::dev::genesis); } // Upgrade should work @@ -880,7 +877,6 @@ TEST (block_store, cemented_count_cache) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); auto transaction (store->tx_begin_write ()); - nano::genesis genesis; nano::ledger_cache ledger_cache; store->initialize (transaction, ledger_cache); ASSERT_EQ (1, ledger_cache.cemented_count); @@ -890,8 +886,6 @@ TEST (block_store, block_random) { nano::logger_mt logger; auto store = nano::make_store (logger, nano::unique_path ()); - ASSERT_TRUE (!store->init_error ()); - nano::genesis genesis; { nano::ledger_cache ledger_cache; auto transaction (store->tx_begin_write ()); @@ -900,7 +894,7 @@ TEST (block_store, block_random) auto transaction (store->tx_begin_read ()); auto block (store->block.random (transaction)); ASSERT_NE (nullptr, block); - ASSERT_EQ (*block, *genesis.open); + ASSERT_EQ (*block, *nano::dev::genesis); } TEST (block_store, pruned_random) @@ -908,7 +902,6 @@ TEST (block_store, pruned_random) nano::logger_mt logger; auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); - nano::genesis genesis; nano::open_block block (0, 1, 0, nano::keypair ().prv, 0, 0); block.sideband_set ({}); auto hash1 (block.hash ()); @@ -970,9 +963,8 @@ TEST (block_store, state_block) nano::logger_mt logger; auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_FALSE (store->init_error ()); - nano::genesis genesis; nano::keypair key1; - nano::state_block block1 (1, genesis.hash (), 3, 4, 6, key1.prv, key1.pub, 7); + nano::state_block block1 (1, nano::dev::genesis->hash (), 3, 4, 6, key1.prv, key1.pub, 7); block1.sideband_set ({}); { nano::ledger_cache ledger_cache; @@ -1005,7 +997,6 @@ TEST (mdb_block_store, sideband_height) return; } nano::logger_mt logger; - nano::genesis genesis; nano::keypair key1; nano::keypair key2; nano::keypair key3; @@ -1016,7 +1007,7 @@ TEST (mdb_block_store, sideband_height) auto transaction (store.tx_begin_write ()); store.initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::send_block send (genesis.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block send (nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); nano::receive_block receive (send.hash (), send.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive).code); @@ -1040,7 +1031,7 @@ TEST (mdb_block_store, sideband_height) ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, state_receive).code); nano::open_block open (state_send3.hash (), nano::dev::genesis_key.pub, key3.pub, key3.prv, key3.pub, *pool.generate (key3.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open).code); - auto block1 (store.block.get (transaction, genesis.hash ())); + auto block1 (store.block.get (transaction, nano::dev::genesis->hash ())); ASSERT_EQ (block1->sideband ().height, 1); auto block2 (store.block.get (transaction, send.hash ())); ASSERT_EQ (block2->sideband ().height, 2); @@ -1271,10 +1262,9 @@ TEST (mdb_block_store, upgrade_v14_v15) } // Extract confirmation height to a separate database auto path (nano::unique_path ()); - nano::genesis genesis; nano::network_params network_params; nano::work_pool pool (std::numeric_limits::max ()); - nano::send_block send (genesis.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block send (nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); nano::state_block epoch (nano::dev::genesis_key.pub, send.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, network_params.ledger.epochs.link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send.hash ())); nano::state_block state_send (nano::dev::genesis_key.pub, epoch.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch.hash ())); { @@ -1289,7 +1279,7 @@ TEST (mdb_block_store, upgrade_v14_v15) nano::confirmation_height_info confirmation_height_info; ASSERT_FALSE (store.confirmation_height.get (transaction, nano::dev::genesis->account (), confirmation_height_info)); ASSERT_EQ (confirmation_height_info.height, 1); - ASSERT_EQ (confirmation_height_info.frontier, genesis.hash ()); + ASSERT_EQ (confirmation_height_info.frontier, nano::dev::genesis->hash ()); // These databases get removed after an upgrade, so readd them ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "state_v1", MDB_CREATE, &store.state_blocks_v1_handle)); ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "accounts_v1", MDB_CREATE, &store.accounts_v1_handle)); @@ -1309,7 +1299,7 @@ TEST (mdb_block_store, upgrade_v14_v15) write_sideband_v14 (store, transaction, state_send, store.state_blocks_v1_handle); write_sideband_v14 (store, transaction, epoch, store.state_blocks_v1_handle); - write_block_w_sideband_v18 (store, store.open_blocks_handle, transaction, *genesis.open); + write_block_w_sideband_v18 (store, store.open_blocks_handle, transaction, *nano::dev::genesis); write_block_w_sideband_v18 (store, store.send_blocks_handle, transaction, send); // Remove from blocks table @@ -1347,7 +1337,7 @@ TEST (mdb_block_store, upgrade_v14_v15) nano::confirmation_height_info confirmation_height_info; ASSERT_FALSE (store.confirmation_height.get (transaction, nano::dev::genesis->account (), confirmation_height_info)); ASSERT_EQ (confirmation_height_info.height, 1); - ASSERT_EQ (confirmation_height_info.frontier, genesis.hash ()); + ASSERT_EQ (confirmation_height_info.frontier, nano::dev::genesis->hash ()); // accounts_v1, state_blocks_v1 & pending_v1 tables should be deleted auto error_get_accounts_v1 (mdb_get (store.env.tx (transaction), store.accounts_v1_handle, nano::mdb_val (nano::dev::genesis->account ()), value)); @@ -1385,7 +1375,6 @@ TEST (mdb_block_store, upgrade_v15_v16) auto path (nano::unique_path ()); nano::mdb_val value; { - nano::genesis genesis; nano::logger_mt logger; nano::mdb_store store (logger, path); nano::stat stats; @@ -1398,7 +1387,7 @@ TEST (mdb_block_store, upgrade_v15_v16) auto weight = ledger.cache.rep_weights.representation_get (nano::dev::genesis->account ()); ASSERT_EQ (MDB_SUCCESS, mdb_put (txn, store.representation_handle, nano::mdb_val (nano::dev::genesis->account ()), nano::mdb_val (nano::uint128_union (weight)), 0)); ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "open", MDB_CREATE, &store.open_blocks_handle)); - write_block_w_sideband_v18 (store, store.open_blocks_handle, transaction, *genesis.open); + write_block_w_sideband_v18 (store, store.open_blocks_handle, transaction, *nano::dev::genesis); // Lower the database to the previous version store.version.put (transaction, 15); // Confirm the rep weight exists in the database @@ -1428,9 +1417,8 @@ TEST (mdb_block_store, upgrade_v16_v17) // Don't test this in rocksdb mode return; } - nano::genesis genesis; nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block block1 (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block block1 (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); nano::state_block block2 (nano::dev::genesis_key.pub, block1.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio - 1, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (block1.hash ())); nano::state_block block3 (nano::dev::genesis_key.pub, block2.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio - 2, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (block2.hash ())); @@ -1438,7 +1426,6 @@ TEST (mdb_block_store, upgrade_v16_v17) auto path (nano::unique_path ()); nano::mdb_val value; { - nano::genesis genesis; nano::logger_mt logger; nano::mdb_store store (logger, path); nano::stat stats; @@ -1451,7 +1438,7 @@ TEST (mdb_block_store, upgrade_v16_v17) modify_confirmation_height_to_v15 (store, transaction, nano::dev::genesis->account (), confirmation_height); ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "open", MDB_CREATE, &store.open_blocks_handle)); - write_block_w_sideband_v18 (store, store.open_blocks_handle, transaction, *genesis.open); + write_block_w_sideband_v18 (store, store.open_blocks_handle, transaction, *nano::dev::genesis); ASSERT_FALSE (mdb_dbi_open (store.env.tx (transaction), "state_blocks", MDB_CREATE, &store.state_blocks_handle)); write_block_w_sideband_v18 (store, store.state_blocks_handle, transaction, block1); write_block_w_sideband_v18 (store, store.state_blocks_handle, transaction, block2); @@ -1479,7 +1466,7 @@ TEST (mdb_block_store, upgrade_v16_v17) }; code (0, nano::block_hash (0)); - code (1, genesis.hash ()); + code (1, nano::dev::genesis->hash ()); code (2, block1.hash ()); code (3, block2.hash ()); code (4, block3.hash ()); @@ -1493,13 +1480,12 @@ TEST (mdb_block_store, upgrade_v17_v18) return; } auto path (nano::unique_path ()); - nano::genesis genesis; nano::keypair key1; nano::keypair key2; nano::keypair key3; nano::network_params network_params; nano::work_pool pool (std::numeric_limits::max ()); - nano::send_block send_zero (genesis.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block send_zero (nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); nano::state_block state_receive_zero (nano::dev::genesis_key.pub, send_zero.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount, send_zero.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send_zero.hash ())); nano::state_block epoch (nano::dev::genesis_key.pub, state_receive_zero.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount, network_params.ledger.epochs.link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_receive_zero.hash ())); nano::state_block state_send (nano::dev::genesis_key.pub, epoch.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch.hash ())); @@ -1542,7 +1528,7 @@ TEST (mdb_block_store, upgrade_v17_v18) write_block_w_sideband_v18 (store, store.state_blocks_handle, transaction, epoch_first); write_block_w_sideband_v18 (store, store.state_blocks_handle, transaction, state_send2); write_block_w_sideband_v18 (store, store.state_blocks_handle, transaction, state_send_epoch_link); - write_block_w_sideband_v18 (store, store.open_blocks_handle, transaction, *genesis.open); + write_block_w_sideband_v18 (store, store.open_blocks_handle, transaction, *nano::dev::genesis); write_block_w_sideband_v18 (store, store.send_blocks_handle, transaction, send_zero); // Replace with the previous sideband version for state blocks @@ -1708,7 +1694,6 @@ TEST (mdb_block_store, upgrade_v18_v19) nano::state_block state_open (key1.pub, 0, 0, nano::Gxrb_ratio, state_send.hash (), key1.prv, key1.pub, *pool.generate (key1.pub)); { - nano::genesis genesis; nano::logger_mt logger; nano::mdb_store store (logger, path); nano::stat stats; @@ -1732,7 +1717,7 @@ TEST (mdb_block_store, upgrade_v18_v19) ASSERT_FALSE (mdb_dbi_open (txn, "state_blocks", MDB_CREATE, &store.state_blocks_handle)); // Modify blocks back to the old tables - write_block_w_sideband_v18 (store, store.open_blocks_handle, transaction, *genesis.open); + write_block_w_sideband_v18 (store, store.open_blocks_handle, transaction, *nano::dev::genesis); write_block_w_sideband_v18 (store, store.send_blocks_handle, transaction, send); write_block_w_sideband_v18 (store, store.receive_blocks_handle, transaction, receive); write_block_w_sideband_v18 (store, store.change_blocks_handle, transaction, change); @@ -1790,7 +1775,6 @@ TEST (mdb_block_store, upgrade_v19_v20) return; } auto path (nano::unique_path ()); - nano::genesis genesis; nano::logger_mt logger; nano::stat stats; { @@ -1820,7 +1804,6 @@ TEST (mdb_block_store, upgrade_v20_v21) return; } auto path (nano::unique_path ()); - nano::genesis genesis; nano::logger_mt logger; nano::stat stats; { @@ -1867,7 +1850,6 @@ TEST (mdb_block_store, upgrade_backup) { nano::logger_mt logger; - nano::genesis genesis; nano::mdb_store store (logger, path); auto transaction (store.tx_begin_write ()); store.version.put (transaction, 14); @@ -1942,7 +1924,7 @@ TEST (block_store, final_vote) auto store = nano::make_store (logger, path); { - auto qualified_root = nano::genesis ().open->qualified_root (); + auto qualified_root = nano::dev::genesis->qualified_root (); auto transaction (store->tx_begin_write ()); store->final_vote.put (transaction, qualified_root, nano::block_hash (2)); ASSERT_EQ (store->final_vote.count (transaction), 1); diff --git a/nano/core_test/bootstrap.cpp b/nano/core_test/bootstrap.cpp index 22e2563535..aa68bc6e74 100644 --- a/nano/core_test/bootstrap.cpp +++ b/nano/core_test/bootstrap.cpp @@ -64,10 +64,9 @@ TEST (bulk_pull, end_not_owned) system.nodes[0]->work_generate_blocking (open); ASSERT_EQ (nano::process_result::progress, system.nodes[0]->process (open).code); auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); - nano::genesis genesis; auto req = std::make_unique (); req->start = key2.pub; - req->end = genesis.hash (); + req->end = nano::dev::genesis->hash (); connection->requests.push (std::unique_ptr{}); auto request (std::make_shared (connection, std::move (req))); ASSERT_EQ (request->current, request->request->end); @@ -77,10 +76,9 @@ TEST (bulk_pull, none) { nano::system system (1); auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); - nano::genesis genesis; auto req = std::make_unique (); req->start = nano::dev::genesis_key.pub; - req->end = genesis.hash (); + req->end = nano::dev::genesis->hash (); connection->requests.push (std::unique_ptr{}); auto request (std::make_shared (connection, std::move (req))); auto block (request->get_next ()); @@ -107,15 +105,14 @@ TEST (bulk_pull, by_block) { nano::system system (1); auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); - nano::genesis genesis; auto req = std::make_unique (); - req->start = genesis.hash (); + req->start = nano::dev::genesis->hash (); req->end.clear (); connection->requests.push (std::unique_ptr{}); auto request (std::make_shared (connection, std::move (req))); auto block (request->get_next ()); ASSERT_NE (nullptr, block); - ASSERT_EQ (block->hash (), genesis.hash ()); + ASSERT_EQ (block->hash (), nano::dev::genesis->hash ()); block = request->get_next (); ASSERT_EQ (nullptr, block); @@ -125,15 +122,14 @@ TEST (bulk_pull, by_block_single) { nano::system system (1); auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); - nano::genesis genesis; auto req = std::make_unique (); - req->start = genesis.hash (); - req->end = genesis.hash (); + req->start = nano::dev::genesis->hash (); + req->end = nano::dev::genesis->hash (); connection->requests.push (std::unique_ptr{}); auto request (std::make_shared (connection, std::move (req))); auto block (request->get_next ()); ASSERT_NE (nullptr, block); - ASSERT_EQ (block->hash (), genesis.hash ()); + ASSERT_EQ (block->hash (), nano::dev::genesis->hash ()); block = request->get_next (); ASSERT_EQ (nullptr, block); @@ -143,7 +139,6 @@ TEST (bulk_pull, count_limit) { nano::system system (1); auto node0 (system.nodes[0]); - nano::genesis genesis; auto send1 (std::make_shared (node0->latest (nano::dev::genesis_key.pub), nano::dev::genesis_key.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (node0->latest (nano::dev::genesis_key.pub)))); ASSERT_EQ (nano::process_result::progress, node0->process (*send1).code); @@ -248,7 +243,6 @@ TEST (bootstrap_processor, process_state) nano::node_flags node_flags; node_flags.disable_bootstrap_bulk_push_client = true; auto node0 (system.add_node (config, node_flags)); - nano::genesis genesis; nano::state_block_builder builder; system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); @@ -353,19 +347,18 @@ TEST (bootstrap_processor, DISABLED_pull_requeue_network_error) auto node1 (system.add_node (config, node_flags)); config.peering_port = nano::get_available_port (); auto node2 (system.add_node (config, node_flags)); - nano::genesis genesis; nano::keypair key1; nano::state_block_builder builder; auto send1 = builder .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*system.work.generate (genesis.hash ())) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); node1->bootstrap_initiator.bootstrap (node2->network.endpoint ()); @@ -377,7 +370,7 @@ TEST (bootstrap_processor, DISABLED_pull_requeue_network_error) nano::unique_lock lock (node1->bootstrap_initiator.connections->mutex); ASSERT_FALSE (attempt->stopped); ++attempt->pulling; - node1->bootstrap_initiator.connections->pulls.emplace_back (nano::dev::genesis_key.pub, send1->hash (), genesis.hash (), attempt->incremental_id); + node1->bootstrap_initiator.connections->pulls.emplace_back (nano::dev::genesis_key.pub, send1->hash (), nano::dev::genesis->hash (), attempt->incremental_id); node1->bootstrap_initiator.connections->request_pull (lock); node2->stop (); } @@ -486,7 +479,6 @@ TEST (bootstrap_processor, lazy_hash) nano::node_flags node_flags; node_flags.disable_bootstrap_bulk_push_client = true; auto node0 (system.add_node (config, node_flags)); - nano::genesis genesis; nano::keypair key1; nano::keypair key2; // Generating test chain @@ -495,12 +487,12 @@ TEST (bootstrap_processor, lazy_hash) auto send1 = builder .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*node0->work_generate_blocking (genesis.hash ())) + .work (*node0->work_generate_blocking (nano::dev::genesis->hash ())) .build_shared (); auto receive1 = builder .make_block () @@ -561,7 +553,6 @@ TEST (bootstrap_processor, lazy_hash_bootstrap_id) nano::node_flags node_flags; node_flags.disable_bootstrap_bulk_push_client = true; auto node0 (system.add_node (config, node_flags)); - nano::genesis genesis; nano::keypair key1; nano::keypair key2; // Generating test chain @@ -570,12 +561,12 @@ TEST (bootstrap_processor, lazy_hash_bootstrap_id) auto send1 = builder .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*node0->work_generate_blocking (genesis.hash ())) + .work (*node0->work_generate_blocking (nano::dev::genesis->hash ())) .build_shared (); auto receive1 = builder .make_block () @@ -638,7 +629,6 @@ TEST (bootstrap_processor, lazy_hash_pruning) node_flags.disable_bootstrap_bulk_push_client = true; node_flags.enable_pruning = true; auto node0 (system.add_node (config, node_flags)); - nano::genesis genesis; nano::keypair key1; nano::keypair key2; // Generating test chain @@ -647,12 +637,12 @@ TEST (bootstrap_processor, lazy_hash_pruning) auto send1 = builder .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*node0->work_generate_blocking (genesis.hash ())) + .work (*node0->work_generate_blocking (nano::dev::genesis->hash ())) .build_shared (); auto receive1 = builder .make_block () @@ -772,7 +762,6 @@ TEST (bootstrap_processor, lazy_max_pull_count) nano::node_flags node_flags; node_flags.disable_bootstrap_bulk_push_client = true; auto node0 (system.add_node (config, node_flags)); - nano::genesis genesis; nano::keypair key1; nano::keypair key2; // Generating test chain @@ -781,12 +770,12 @@ TEST (bootstrap_processor, lazy_max_pull_count) auto send1 = builder .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*node0->work_generate_blocking (genesis.hash ())) + .work (*node0->work_generate_blocking (nano::dev::genesis->hash ())) .build_shared (); auto receive1 = builder .make_block () @@ -876,7 +865,6 @@ TEST (bootstrap_processor, lazy_unclear_state_link) node_flags.disable_bootstrap_bulk_push_client = true; node_flags.disable_legacy_bootstrap = true; auto node1 = system.add_node (config, node_flags); - nano::genesis genesis; nano::keypair key; // Generating test chain @@ -884,12 +872,12 @@ TEST (bootstrap_processor, lazy_unclear_state_link) auto send1 = builder .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*system.work.generate (genesis.hash ())) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, node1->process (*send1).code); auto send2 = builder @@ -939,7 +927,6 @@ TEST (bootstrap_processor, lazy_unclear_state_link_not_existing) node_flags.disable_bootstrap_bulk_push_client = true; node_flags.disable_legacy_bootstrap = true; auto node1 = system.add_node (config, node_flags); - nano::genesis genesis; nano::keypair key, key2; // Generating test chain @@ -947,12 +934,12 @@ TEST (bootstrap_processor, lazy_unclear_state_link_not_existing) auto send1 = builder .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*system.work.generate (genesis.hash ())) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, node1->process (*send1).code); auto open (std::make_shared (send1->hash (), key.pub, key.pub, key.prv, key.pub, *system.work.generate (key.pub))); @@ -991,7 +978,6 @@ TEST (bootstrap_processor, DISABLED_lazy_destinations) node_flags.disable_bootstrap_bulk_push_client = true; node_flags.disable_legacy_bootstrap = true; auto node1 = system.add_node (config, node_flags); - nano::genesis genesis; nano::keypair key1, key2; // Generating test chain @@ -999,12 +985,12 @@ TEST (bootstrap_processor, DISABLED_lazy_destinations) auto send1 = builder .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*system.work.generate (genesis.hash ())) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, node1->process (*send1).code); auto send2 = builder @@ -1056,7 +1042,6 @@ TEST (bootstrap_processor, lazy_pruning_missing_block) node_flags.disable_legacy_bootstrap = true; node_flags.enable_pruning = true; auto node1 = system.add_node (config, node_flags); - nano::genesis genesis; nano::keypair key1, key2; // Generating test chain @@ -1064,12 +1049,12 @@ TEST (bootstrap_processor, lazy_pruning_missing_block) auto send1 = builder .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*system.work.generate (genesis.hash ())) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); node1->process_active (send1); auto send2 = builder @@ -1151,7 +1136,6 @@ TEST (bootstrap_processor, lazy_cancel) nano::node_flags node_flags; node_flags.disable_bootstrap_bulk_push_client = true; auto node0 (system.add_node (config, node_flags)); - nano::genesis genesis; nano::keypair key1; // Generating test chain @@ -1159,12 +1143,12 @@ TEST (bootstrap_processor, lazy_cancel) auto send1 = builder .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*node0->work_generate_blocking (genesis.hash ())) + .work (*node0->work_generate_blocking (nano::dev::genesis->hash ())) .build_shared (); // Start lazy bootstrap with last block in chain known @@ -1190,7 +1174,6 @@ TEST (bootstrap_processor, wallet_lazy_frontier) node_flags.disable_bootstrap_bulk_push_client = true; node_flags.disable_legacy_bootstrap = true; auto node0 = system.add_node (config, node_flags); - nano::genesis genesis; nano::keypair key1; nano::keypair key2; // Generating test chain @@ -1199,12 +1182,12 @@ TEST (bootstrap_processor, wallet_lazy_frontier) auto send1 = builder .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*node0->work_generate_blocking (genesis.hash ())) + .work (*node0->work_generate_blocking (nano::dev::genesis->hash ())) .build_shared (); auto receive1 = builder .make_block () @@ -1269,7 +1252,6 @@ TEST (bootstrap_processor, wallet_lazy_pending) node_flags.disable_bootstrap_bulk_push_client = true; node_flags.disable_legacy_bootstrap = true; auto node0 = system.add_node (config, node_flags); - nano::genesis genesis; nano::keypair key1; nano::keypair key2; // Generating test chain @@ -1278,12 +1260,12 @@ TEST (bootstrap_processor, wallet_lazy_pending) auto send1 = builder .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*node0->work_generate_blocking (genesis.hash ())) + .work (*node0->work_generate_blocking (nano::dev::genesis->hash ())) .build_shared (); auto receive1 = builder .make_block () @@ -1331,7 +1313,6 @@ TEST (bootstrap_processor, multiple_attempts) nano::node_flags node_flags; node_flags.disable_bootstrap_bulk_push_client = true; auto node1 = system.add_node (config, node_flags); - nano::genesis genesis; nano::keypair key1; nano::keypair key2; // Generating test chain @@ -1340,12 +1321,12 @@ TEST (bootstrap_processor, multiple_attempts) auto send1 = builder .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*node1->work_generate_blocking (genesis.hash ())) + .work (*node1->work_generate_blocking (nano::dev::genesis->hash ())) .build_shared (); auto receive1 = builder .make_block () @@ -1434,8 +1415,7 @@ TEST (frontier_req, begin) connection->requests.push (std::unique_ptr{}); auto request (std::make_shared (connection, std::move (req))); ASSERT_EQ (nano::dev::genesis_key.pub, request->current); - nano::genesis genesis; - ASSERT_EQ (genesis.hash (), request->frontier); + ASSERT_EQ (nano::dev::genesis->hash (), request->frontier); } TEST (frontier_req, end) @@ -1455,14 +1435,13 @@ TEST (frontier_req, count) { nano::system system (1); auto node1 = system.nodes[0]; - nano::genesis genesis; // Public key FB93... after genesis in accounts table nano::keypair key1 ("ED5AE0A6505B14B67435C29FD9FEEBC26F597D147BC92F6D795FFAD7AFD3D967"); nano::state_block_builder builder; auto send1 = builder .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (key1.pub) @@ -1529,8 +1508,7 @@ TEST (frontier_req, time_cutoff) connection->requests.push (std::unique_ptr{}); auto request (std::make_shared (connection, std::move (req))); ASSERT_EQ (nano::dev::genesis_key.pub, request->current); - nano::genesis genesis; - ASSERT_EQ (genesis.hash (), request->frontier); + ASSERT_EQ (nano::dev::genesis->hash (), request->frontier); // Wait 4 seconds until age of account will be > 3 seconds std::this_thread::sleep_for (std::chrono::milliseconds (4100)); auto req2 (std::make_unique ()); @@ -1547,7 +1525,6 @@ TEST (frontier_req, confirmed_frontier) { nano::system system (1); auto node1 = system.nodes[0]; - nano::genesis genesis; nano::raw_key priv_key; // Public key before genesis in accounts table while (nano::pub_key (priv_key).number () >= nano::dev::genesis_key.pub.number ()) @@ -1565,7 +1542,7 @@ TEST (frontier_req, confirmed_frontier) auto send1 = builder .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (key_before_genesis.pub) @@ -1623,7 +1600,7 @@ TEST (frontier_req, confirmed_frontier) connection->requests.push (std::unique_ptr{}); auto request (std::make_shared (connection, std::move (req))); ASSERT_EQ (nano::dev::genesis_key.pub, request->current); - ASSERT_EQ (genesis.hash (), request->frontier); + ASSERT_EQ (nano::dev::genesis->hash (), request->frontier); // Request starting with account before genesis (confirmed only) auto connection2 (std::make_shared (std::make_shared (*node1), node1)); @@ -1637,7 +1614,7 @@ TEST (frontier_req, confirmed_frontier) connection2->requests.push (std::unique_ptr{}); auto request2 (std::make_shared (connection2, std::move (req2))); ASSERT_EQ (nano::dev::genesis_key.pub, request2->current); - ASSERT_EQ (genesis.hash (), request2->frontier); + ASSERT_EQ (nano::dev::genesis->hash (), request2->frontier); // Request starting with account after genesis (confirmed only) auto connection3 (std::make_shared (std::make_shared (*node1), node1)); diff --git a/nano/core_test/confirmation_height.cpp b/nano/core_test/confirmation_height.cpp index 28dbfabe82..8d3c7cab3f 100644 --- a/nano/core_test/confirmation_height.cpp +++ b/nano/core_test/confirmation_height.cpp @@ -223,9 +223,8 @@ TEST (confirmation_height, gap_bootstrap) nano::node_flags node_flags; node_flags.confirmation_height_processor_mode = mode_a; auto & node1 = *system.add_node (node_flags); - nano::genesis genesis; nano::keypair destination; - auto send1 (std::make_shared (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); + auto send1 (std::make_shared (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send1); auto send2 (std::make_shared (nano::dev::genesis->account (), send1->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - 2 * nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send2); @@ -261,7 +260,7 @@ TEST (confirmation_height, gap_bootstrap) nano::confirmation_height_info confirmation_height_info; ASSERT_FALSE (node1.store.confirmation_height.get (transaction, nano::dev::genesis_key.pub, confirmation_height_info)); ASSERT_EQ (1, confirmation_height_info.height); - ASSERT_EQ (genesis.hash (), confirmation_height_info.frontier); + ASSERT_EQ (nano::dev::genesis->hash (), confirmation_height_info.frontier); } // Now complete the chain where the block comes in on the bootstrap network. @@ -277,7 +276,7 @@ TEST (confirmation_height, gap_bootstrap) nano::confirmation_height_info confirmation_height_info; ASSERT_FALSE (node1.store.confirmation_height.get (transaction, nano::dev::genesis_key.pub, confirmation_height_info)); ASSERT_EQ (1, confirmation_height_info.height); - ASSERT_EQ (genesis.hash (), confirmation_height_info.frontier); + ASSERT_EQ (nano::dev::genesis->hash (), confirmation_height_info.frontier); ASSERT_TRUE (node1.store.confirmation_height.get (transaction, destination.pub, confirmation_height_info)); ASSERT_EQ (0, confirmation_height_info.height); ASSERT_EQ (nano::block_hash (0), confirmation_height_info.frontier); @@ -310,8 +309,7 @@ TEST (confirmation_height, gap_live) system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); system.wallet (1)->insert_adhoc (destination.prv); - nano::genesis genesis; - auto send1 (std::make_shared (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - 1, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); + auto send1 (std::make_shared (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - 1, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node->work_generate_blocking (*send1); auto send2 (std::make_shared (nano::dev::genesis->account (), send1->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - 2, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node->work_generate_blocking (*send2); @@ -655,11 +653,10 @@ TEST (confirmation_height, conflict_rollback_cemented) auto node2 = system.add_node (node_flags); ASSERT_EQ (1, node1->network.size ()); nano::keypair key1; - nano::genesis genesis; - auto send1 (std::make_shared (genesis.hash (), key1.pub, nano::dev::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (genesis.hash ()))); + auto send1 (std::make_shared (nano::dev::genesis->hash (), key1.pub, nano::dev::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); nano::publish publish1 (send1); nano::keypair key2; - auto send2 (std::make_shared (genesis.hash (), key2.pub, nano::dev::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (genesis.hash ()))); + auto send2 (std::make_shared (nano::dev::genesis->hash (), key2.pub, nano::dev::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); nano::publish publish2 (send2); auto channel1 (node1->network.udp_channels.create (node1->network.endpoint ())); node1->network.inbound (publish1, channel1); @@ -676,7 +673,7 @@ TEST (confirmation_height, conflict_rollback_cemented) node1->block_processor.flush (); node2->network.inbound (publish1, channel2); node2->block_processor.flush (); - auto election (node2->active.election (nano::qualified_root (genesis.hash (), genesis.hash ()))); + auto election (node2->active.election (nano::qualified_root (nano::dev::genesis->hash (), nano::dev::genesis->hash ()))); ASSERT_NE (nullptr, election); ASSERT_EQ (1, election->votes ().size ()); // Force blocks to be cemented on both nodes @@ -723,13 +720,12 @@ TEST (confirmation_heightDeathTest, rollback_added_block) auto path (nano::unique_path ()); auto store = nano::make_store (logger, path); ASSERT_TRUE (!store->init_error ()); - nano::genesis genesis; nano::stat stats; nano::ledger ledger (*store, stats); nano::write_database_queue write_database_queue (false); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - auto send = std::make_shared (genesis.hash (), key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + auto send = std::make_shared (nano::dev::genesis->hash (), key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); { auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); @@ -800,7 +796,6 @@ TEST (confirmation_heightDeathTest, modified_chain) auto path (nano::unique_path ()); auto store = nano::make_store (logger, path); ASSERT_TRUE (!store->init_error ()); - nano::genesis genesis; nano::stat stats; nano::ledger ledger (*store, stats); nano::write_database_queue write_database_queue (false); @@ -871,7 +866,6 @@ TEST (confirmation_heightDeathTest, modified_chain_account_removed) auto path (nano::unique_path ()); auto store = nano::make_store (logger, path); ASSERT_TRUE (!store->init_error ()); - nano::genesis genesis; nano::stat stats; nano::ledger ledger (*store, stats); nano::write_database_queue write_database_queue (false); @@ -1364,7 +1358,6 @@ TEST (confirmation_height, unbounded_block_cache_iteration) auto path (nano::unique_path ()); auto store = nano::make_store (logger, path); ASSERT_TRUE (!store->init_error ()); - nano::genesis genesis; nano::stat stats; nano::ledger ledger (*store, stats); nano::write_database_queue write_database_queue (false); @@ -1372,7 +1365,7 @@ TEST (confirmation_height, unbounded_block_cache_iteration) nano::work_pool pool (std::numeric_limits::max ()); nano::logging logging; nano::keypair key1; - auto send = std::make_shared (genesis.hash (), key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + auto send = std::make_shared (nano::dev::genesis->hash (), key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); auto send1 = std::make_shared (send->hash (), key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send->hash ())); { auto transaction (store->tx_begin_write ()); @@ -1415,14 +1408,13 @@ TEST (confirmation_height, pruned_source) auto path (nano::unique_path ()); auto store = nano::make_store (logger, path); ASSERT_TRUE (!store->init_error ()); - nano::genesis genesis; nano::stat stats; nano::ledger ledger (*store, stats); ledger.pruning = true; nano::write_database_queue write_database_queue (false); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1, key2; - auto send1 = std::make_shared (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - 100, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + auto send1 = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - 100, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); auto open1 = std::make_shared (key1.pub, 0, key1.pub, 100, send1->hash (), key1.prv, key1.pub, *pool.generate (key1.pub)); auto send2 = std::make_shared (key1.pub, open1->hash (), key1.pub, 50, key2.pub, key1.prv, key1.pub, *pool.generate (open1->hash ())); auto send3 = std::make_shared (key1.pub, send2->hash (), key1.pub, 25, key2.pub, key1.prv, key1.pub, *pool.generate (send2->hash ())); diff --git a/nano/core_test/conflicts.cpp b/nano/core_test/conflicts.cpp index cfbb4c3b6c..709c1b58ac 100644 --- a/nano/core_test/conflicts.cpp +++ b/nano/core_test/conflicts.cpp @@ -12,9 +12,8 @@ TEST (conflicts, start_stop) { nano::system system (1); auto & node1 (*system.nodes[0]); - nano::genesis genesis; nano::keypair key1; - auto send1 (std::make_shared (genesis.hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); + auto send1 (std::make_shared (nano::dev::genesis->hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send1); ASSERT_EQ (nano::process_result::progress, node1.process (*send1).code); ASSERT_EQ (0, node1.active.size ()); @@ -30,14 +29,13 @@ TEST (conflicts, add_existing) { nano::system system (1); auto & node1 (*system.nodes[0]); - nano::genesis genesis; nano::keypair key1; - auto send1 (std::make_shared (genesis.hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); + auto send1 (std::make_shared (nano::dev::genesis->hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send1); ASSERT_EQ (nano::process_result::progress, node1.process (*send1).code); node1.scheduler.activate (nano::dev::genesis_key.pub, node1.store.tx_begin_read ()); nano::keypair key2; - auto send2 (std::make_shared (genesis.hash (), key2.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); + auto send2 (std::make_shared (nano::dev::genesis->hash (), key2.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); send2->sideband_set ({}); node1.scheduler.activate (nano::dev::genesis_key.pub, node1.store.tx_begin_read ()); node1.scheduler.flush (); @@ -55,9 +53,8 @@ TEST (conflicts, add_two) { nano::system system (1); auto & node1 (*system.nodes[0]); - nano::genesis genesis; nano::keypair key1; - auto send1 (std::make_shared (genesis.hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); + auto send1 (std::make_shared (nano::dev::genesis->hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send1); ASSERT_EQ (nano::process_result::progress, node1.process (*send1).code); node1.block_confirm (send1); diff --git a/nano/core_test/election.cpp b/nano/core_test/election.cpp index 601e4426ae..ba2689f831 100644 --- a/nano/core_test/election.cpp +++ b/nano/core_test/election.cpp @@ -9,12 +9,10 @@ using namespace std::chrono_literals; TEST (election, construction) { nano::system system (1); - nano::genesis genesis; auto & node = *system.nodes[0]; - genesis.open->sideband_set (nano::block_sideband (nano::dev::genesis->account (), 0, nano::dev::genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); - node.block_confirm (genesis.open); + node.block_confirm (nano::dev::genesis); node.scheduler.flush (); - auto election = node.active.election (genesis.open->qualified_root ()); + auto election = node.active.election (nano::dev::genesis->qualified_root ()); election->transition_active (); } diff --git a/nano/core_test/frontiers_confirmation.cpp b/nano/core_test/frontiers_confirmation.cpp index 8f5a39e9a5..c2335d10f7 100644 --- a/nano/core_test/frontiers_confirmation.cpp +++ b/nano/core_test/frontiers_confirmation.cpp @@ -210,7 +210,6 @@ TEST (frontiers_confirmation, expired_optimistic_elections_removal) TEST (frontiers_confirmation, mode) { - nano::genesis genesis; nano::keypair key; nano::node_flags node_flags; // Always mode @@ -219,7 +218,7 @@ TEST (frontiers_confirmation, mode) nano::node_config node_config (nano::get_available_port (), system.logging); node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::always; auto node = system.add_node (node_config, node_flags); - nano::state_block send (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node->work_generate_blocking (genesis.hash ())); + nano::state_block send (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node->work_generate_blocking (nano::dev::genesis->hash ())); { auto transaction = node->store.tx_begin_write (); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, send).code); @@ -232,7 +231,7 @@ TEST (frontiers_confirmation, mode) nano::node_config node_config (nano::get_available_port (), system.logging); node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::automatic; auto node = system.add_node (node_config, node_flags); - nano::state_block send (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node->work_generate_blocking (genesis.hash ())); + nano::state_block send (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node->work_generate_blocking (nano::dev::genesis->hash ())); { auto transaction = node->store.tx_begin_write (); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, send).code); @@ -245,7 +244,7 @@ TEST (frontiers_confirmation, mode) nano::node_config node_config (nano::get_available_port (), system.logging); node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto node = system.add_node (node_config, node_flags); - nano::state_block send (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node->work_generate_blocking (genesis.hash ())); + nano::state_block send (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node->work_generate_blocking (nano::dev::genesis->hash ())); { auto transaction = node->store.tx_begin_write (); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, send).code); diff --git a/nano/core_test/gap_cache.cpp b/nano/core_test/gap_cache.cpp index 270e8203e9..663390b62d 100644 --- a/nano/core_test/gap_cache.cpp +++ b/nano/core_test/gap_cache.cpp @@ -91,8 +91,7 @@ TEST (gap_cache, two_dependencies) nano::system system (1); auto & node1 (*system.nodes[0]); nano::keypair key; - nano::genesis genesis; - auto send1 (std::make_shared (genesis.hash (), key.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (genesis.hash ()))); + auto send1 (std::make_shared (nano::dev::genesis->hash (), key.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); auto send2 (std::make_shared (send1->hash (), key.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1->hash ()))); auto open (std::make_shared (send1->hash (), key.pub, key.pub, key.prv, key.pub, *system.work.generate (key.pub))); ASSERT_EQ (0, node1.gap_cache.size ()); diff --git a/nano/core_test/ledger.cpp b/nano/core_test/ledger.cpp index f80296aa0d..cebc122e98 100644 --- a/nano/core_test/ledger.cpp +++ b/nano/core_test/ledger.cpp @@ -46,7 +46,6 @@ TEST (ledger, genesis_balance) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); auto balance (ledger.account_balance (transaction, nano::dev::genesis->account ())); @@ -63,7 +62,7 @@ TEST (ledger, genesis_balance) nano::confirmation_height_info confirmation_height_info; ASSERT_FALSE (store->confirmation_height.get (transaction, nano::dev::genesis->account (), confirmation_height_info)); ASSERT_EQ (confirmation_height_info.height, 1); - ASSERT_EQ (confirmation_height_info.frontier, genesis.hash ()); + ASSERT_EQ (confirmation_height_info.frontier, nano::dev::genesis->hash ()); } TEST (ledger, process_modifies_sideband) @@ -73,10 +72,9 @@ TEST (ledger, process_modifies_sideband) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; store->initialize (store->tx_begin_write (), ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (store->tx_begin_write (), send1).code); ASSERT_EQ (send1.sideband ().timestamp, store->block.get (store->tx_begin_read (), send1.hash ())->sideband ().timestamp); } @@ -90,7 +88,6 @@ TEST (ledger, process_send) nano::stat stats; nano::ledger ledger (*store, stats); auto transaction (store->tx_begin_write ()); - nano::genesis genesis; store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::account_info info1; @@ -189,7 +186,6 @@ TEST (ledger, process_receive) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -253,7 +249,6 @@ TEST (ledger, rollback_receiver) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -293,12 +288,11 @@ TEST (ledger, rollback_representation) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key5; - nano::change_block change1 (genesis.hash (), key5.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::change_block change1 (nano::dev::genesis->hash (), key5.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, change1).code); nano::keypair key3; nano::change_block change2 (change1.hash (), key3.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (change1.hash ())); @@ -347,11 +341,10 @@ TEST (ledger, receive_rollback) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::send_block send (genesis.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block send (nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); nano::receive_block receive (send.hash (), send.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive).code); @@ -365,7 +358,6 @@ TEST (ledger, process_duplicate) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -388,12 +380,11 @@ TEST (ledger, representative_genesis) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); auto latest (ledger.latest (transaction, nano::dev::genesis_key.pub)); ASSERT_FALSE (latest.is_zero ()); - ASSERT_EQ (genesis.open->hash (), ledger.representative (transaction, latest)); + ASSERT_EQ (nano::dev::genesis->hash (), ledger.representative (transaction, latest)); } TEST (ledger, weight) @@ -403,7 +394,6 @@ TEST (ledger, weight) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); ASSERT_EQ (nano::dev::genesis_amount, ledger.weight (nano::dev::genesis->account ())); @@ -417,7 +407,6 @@ TEST (ledger, representative_change) nano::stat stats; nano::ledger ledger (*store, stats); nano::keypair key2; - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -457,7 +446,6 @@ TEST (ledger, send_fork) nano::ledger ledger (*store, stats); nano::keypair key2; nano::keypair key3; - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -478,7 +466,6 @@ TEST (ledger, receive_fork) nano::ledger ledger (*store, stats); nano::keypair key2; nano::keypair key3; - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -505,7 +492,6 @@ TEST (ledger, open_fork) nano::ledger ledger (*store, stats); nano::keypair key2; nano::keypair key3; - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -538,13 +524,12 @@ TEST (ledger, representation) nano::stat stats; nano::ledger ledger (*store, stats); auto & rep_weights = ledger.cache.rep_weights; - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); ASSERT_EQ (nano::dev::genesis_amount, rep_weights.representation_get (nano::dev::genesis_key.pub)); nano::keypair key2; - nano::send_block block1 (genesis.hash (), key2.pub, nano::dev::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block block1 (nano::dev::genesis->hash (), key2.pub, nano::dev::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block1).code); ASSERT_EQ (nano::dev::genesis_amount - 100, rep_weights.representation_get (nano::dev::genesis_key.pub)); nano::keypair key3; @@ -612,12 +597,11 @@ TEST (ledger, double_open) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key2; - nano::send_block send1 (genesis.hash (), key2.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block send1 (nano::dev::genesis->hash (), key2.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::open_block open1 (send1.hash (), key2.pub, key2.pub, key2.prv, key2.pub, *pool.generate (key2.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open1).code); @@ -632,12 +616,11 @@ TEST (ledger, double_receive) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key2; - nano::send_block send1 (genesis.hash (), key2.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block send1 (nano::dev::genesis->hash (), key2.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::open_block open1 (send1.hash (), key2.pub, key2.pub, key2.prv, key2.pub, *pool.generate (key2.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open1).code); @@ -651,9 +634,8 @@ TEST (votes, check_signature) nano::node_config node_config (nano::get_available_port (), system.logging); node_config.online_weight_minimum = std::numeric_limits::max (); auto & node1 = *system.add_node (node_config); - nano::genesis genesis; nano::keypair key1; - auto send1 (std::make_shared (genesis.hash (), key1.pub, nano::dev::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); + auto send1 (std::make_shared (nano::dev::genesis->hash (), key1.pub, nano::dev::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send1); { auto transaction (node1.store.tx_begin_write ()); @@ -675,9 +657,8 @@ TEST (votes, add_one) { nano::system system (1); auto & node1 (*system.nodes[0]); - nano::genesis genesis; nano::keypair key1; - auto send1 (std::make_shared (genesis.hash (), key1.pub, nano::dev::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); + auto send1 (std::make_shared (nano::dev::genesis->hash (), key1.pub, nano::dev::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send1); auto transaction (node1.store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, node1.ledger.process (transaction, *send1).code); @@ -704,9 +685,8 @@ TEST (votes, add_two) { nano::system system{ 1 }; auto & node1 = *system.nodes[0]; - nano::genesis genesis; nano::keypair key1; - auto send1 = std::make_shared (genesis.hash (), key1.pub, nano::dev::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0); + auto send1 = std::make_shared (nano::dev::genesis->hash (), key1.pub, nano::dev::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0); node1.work_generate_blocking (*send1); auto transaction = node1.store.tx_begin_write (); ASSERT_EQ (nano::process_result::progress, node1.ledger.process (transaction, *send1).code); @@ -714,7 +694,7 @@ TEST (votes, add_two) node1.scheduler.flush (); auto election1 = node1.active.election (send1->qualified_root ()); nano::keypair key2; - auto send2 = std::make_shared (genesis.hash (), key2.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0); + auto send2 = std::make_shared (nano::dev::genesis->hash (), key2.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0); auto vote2 = std::make_shared (key2.pub, key2.prv, 1, send2); ASSERT_EQ (nano::vote_code::vote, node1.active.vote (vote2)); auto vote1 = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 1, send1); @@ -796,9 +776,8 @@ TEST (votes, add_old) { nano::system system (1); auto & node1 (*system.nodes[0]); - nano::genesis genesis; nano::keypair key1; - auto send1 (std::make_shared (genesis.hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); + auto send1 (std::make_shared (nano::dev::genesis->hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send1); auto transaction (node1.store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, node1.ledger.process (transaction, *send1).code); @@ -809,7 +788,7 @@ TEST (votes, add_old) auto channel (std::make_shared (node1)); node1.vote_processor.vote_blocking (vote1, channel); nano::keypair key2; - auto send2 (std::make_shared (genesis.hash (), key2.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); + auto send2 (std::make_shared (nano::dev::genesis->hash (), key2.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send2); auto vote2 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 1, send2)); { @@ -830,9 +809,8 @@ TEST (votes, add_old_different_account) { nano::system system (1); auto & node1 (*system.nodes[0]); - nano::genesis genesis; nano::keypair key1; - auto send1 (std::make_shared (genesis.hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); + auto send1 (std::make_shared (nano::dev::genesis->hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send1); auto send2 (std::make_shared (send1->hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send2); @@ -871,9 +849,8 @@ TEST (votes, add_cooldown) { nano::system system (1); auto & node1 (*system.nodes[0]); - nano::genesis genesis; nano::keypair key1; - auto send1 (std::make_shared (genesis.hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); + auto send1 (std::make_shared (nano::dev::genesis->hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send1); auto transaction (node1.store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, node1.ledger.process (transaction, *send1).code); @@ -884,7 +861,7 @@ TEST (votes, add_cooldown) auto channel (std::make_shared (node1)); node1.vote_processor.vote_blocking (vote1, channel); nano::keypair key2; - auto send2 (std::make_shared (genesis.hash (), key2.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); + auto send2 (std::make_shared (nano::dev::genesis->hash (), key2.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send2); auto vote2 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 2, send2)); node1.vote_processor.vote_blocking (vote2, channel); @@ -901,13 +878,12 @@ TEST (ledger, successor) nano::system system (1); auto & node1 (*system.nodes[0]); nano::keypair key1; - nano::genesis genesis; - nano::send_block send1 (genesis.hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0); + nano::send_block send1 (nano::dev::genesis->hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0); node1.work_generate_blocking (send1); auto transaction (node1.store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, node1.ledger.process (transaction, send1).code); - ASSERT_EQ (send1, *node1.ledger.successor (transaction, nano::qualified_root (nano::root (0), genesis.hash ()))); - ASSERT_EQ (*genesis.open, *node1.ledger.successor (transaction, genesis.open->qualified_root ())); + ASSERT_EQ (send1, *node1.ledger.successor (transaction, nano::qualified_root (nano::root (0), nano::dev::genesis->hash ()))); + ASSERT_EQ (*nano::dev::genesis, *node1.ledger.successor (transaction, nano::dev::genesis->qualified_root ())); ASSERT_EQ (nullptr, node1.ledger.successor (transaction, nano::qualified_root (0))); } @@ -918,12 +894,11 @@ TEST (ledger, fail_change_old) ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - nano::change_block block (genesis.hash (), key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::change_block block (nano::dev::genesis->hash (), key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); auto result1 (ledger.process (transaction, block)); ASSERT_EQ (nano::process_result::progress, result1.code); auto result2 (ledger.process (transaction, block)); @@ -937,7 +912,6 @@ TEST (ledger, fail_change_gap_previous) ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -954,12 +928,11 @@ TEST (ledger, fail_change_bad_signature) ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - nano::change_block block (genesis.hash (), key1.pub, nano::keypair ().prv, 0, *pool.generate (genesis.hash ())); + nano::change_block block (nano::dev::genesis->hash (), key1.pub, nano::keypair ().prv, 0, *pool.generate (nano::dev::genesis->hash ())); auto result1 (ledger.process (transaction, block)); ASSERT_EQ (nano::process_result::bad_signature, result1.code); } @@ -971,16 +944,15 @@ TEST (ledger, fail_change_fork) ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - nano::change_block block1 (genesis.hash (), key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::change_block block1 (nano::dev::genesis->hash (), key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); auto result1 (ledger.process (transaction, block1)); ASSERT_EQ (nano::process_result::progress, result1.code); nano::keypair key2; - nano::change_block block2 (genesis.hash (), key2.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::change_block block2 (nano::dev::genesis->hash (), key2.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); auto result2 (ledger.process (transaction, block2)); ASSERT_EQ (nano::process_result::fork, result2.code); } @@ -992,12 +964,11 @@ TEST (ledger, fail_send_old) ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - nano::send_block block (genesis.hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block block (nano::dev::genesis->hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); auto result1 (ledger.process (transaction, block)); ASSERT_EQ (nano::process_result::progress, result1.code); auto result2 (ledger.process (transaction, block)); @@ -1011,7 +982,6 @@ TEST (ledger, fail_send_gap_previous) ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -1028,12 +998,11 @@ TEST (ledger, fail_send_bad_signature) ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - nano::send_block block (genesis.hash (), key1.pub, 1, nano::keypair ().prv, 0, *pool.generate (genesis.hash ())); + nano::send_block block (nano::dev::genesis->hash (), key1.pub, 1, nano::keypair ().prv, 0, *pool.generate (nano::dev::genesis->hash ())); auto result1 (ledger.process (transaction, block)); ASSERT_EQ (nano::process_result::bad_signature, result1.code); } @@ -1045,12 +1014,11 @@ TEST (ledger, fail_send_negative_spend) ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block block1 (nano::dev::genesis->hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block1).code); nano::keypair key2; nano::send_block block2 (block1.hash (), key2.pub, 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (block1.hash ())); @@ -1064,15 +1032,14 @@ TEST (ledger, fail_send_fork) ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block block1 (nano::dev::genesis->hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block1).code); nano::keypair key2; - nano::send_block block2 (genesis.hash (), key2.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block block2 (nano::dev::genesis->hash (), key2.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::fork, ledger.process (transaction, block2).code); } @@ -1083,12 +1050,11 @@ TEST (ledger, fail_open_old) ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block block1 (nano::dev::genesis->hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block1).code); nano::open_block block2 (block1.hash (), 1, key1.pub, key1.prv, key1.pub, *pool.generate (key1.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block2).code); @@ -1102,7 +1068,6 @@ TEST (ledger, fail_open_gap_source) ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -1119,12 +1084,11 @@ TEST (ledger, fail_open_bad_signature) ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block block1 (nano::dev::genesis->hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block1).code); nano::open_block block2 (block1.hash (), 1, key1.pub, key1.prv, key1.pub, *pool.generate (key1.pub)); block2.signature.clear (); @@ -1138,12 +1102,11 @@ TEST (ledger, fail_open_fork_previous) ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block block1 (nano::dev::genesis->hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block1).code); nano::send_block block2 (block1.hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (block1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block2).code); @@ -1161,12 +1124,11 @@ TEST (ledger, fail_open_account_mismatch) ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block block1 (nano::dev::genesis->hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block1).code); nano::keypair badkey; nano::open_block block2 (block1.hash (), 1, badkey.pub, badkey.prv, badkey.pub, *pool.generate (badkey.pub)); @@ -1181,12 +1143,11 @@ TEST (ledger, fail_receive_old) ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block block1 (nano::dev::genesis->hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block1).code); nano::send_block block2 (block1.hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (block1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block2).code); @@ -1204,12 +1165,11 @@ TEST (ledger, fail_receive_gap_source) ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block block1 (nano::dev::genesis->hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); auto result1 (ledger.process (transaction, block1)); ASSERT_EQ (nano::process_result::progress, result1.code); nano::send_block block2 (block1.hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (block1.hash ())); @@ -1230,12 +1190,11 @@ TEST (ledger, fail_receive_overreceive) ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block block1 (nano::dev::genesis->hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); auto result1 (ledger.process (transaction, block1)); ASSERT_EQ (nano::process_result::progress, result1.code); nano::open_block block2 (block1.hash (), 1, key1.pub, key1.prv, key1.pub, *pool.generate (key1.pub)); @@ -1253,12 +1212,11 @@ TEST (ledger, fail_receive_bad_signature) ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block block1 (nano::dev::genesis->hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); auto result1 (ledger.process (transaction, block1)); ASSERT_EQ (nano::process_result::progress, result1.code); nano::send_block block2 (block1.hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (block1.hash ())); @@ -1279,12 +1237,11 @@ TEST (ledger, fail_receive_gap_previous_opened) ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block block1 (nano::dev::genesis->hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); auto result1 (ledger.process (transaction, block1)); ASSERT_EQ (nano::process_result::progress, result1.code); nano::send_block block2 (block1.hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (block1.hash ())); @@ -1305,12 +1262,11 @@ TEST (ledger, fail_receive_gap_previous_unopened) ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block block1 (nano::dev::genesis->hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); auto result1 (ledger.process (transaction, block1)); ASSERT_EQ (nano::process_result::progress, result1.code); nano::send_block block2 (block1.hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (block1.hash ())); @@ -1328,12 +1284,11 @@ TEST (ledger, fail_receive_fork_previous) ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - nano::send_block block1 (genesis.hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block block1 (nano::dev::genesis->hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); auto result1 (ledger.process (transaction, block1)); ASSERT_EQ (nano::process_result::progress, result1.code); nano::send_block block2 (block1.hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (block1.hash ())); @@ -1358,12 +1313,11 @@ TEST (ledger, fail_receive_received_source) ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - nano::send_block block1 (genesis.hash (), key1.pub, 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block block1 (nano::dev::genesis->hash (), key1.pub, 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); auto result1 (ledger.process (transaction, block1)); ASSERT_EQ (nano::process_result::progress, result1.code); nano::send_block block2 (block1.hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (block1.hash ())); @@ -1407,7 +1361,6 @@ TEST (ledger, latest_root) ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -1428,12 +1381,10 @@ TEST (ledger, change_representative_move_representation) nano::ledger ledger (*store, stats); nano::keypair key1; auto transaction (store->tx_begin_write ()); - nano::genesis genesis; store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - auto hash1 (genesis.hash ()); ASSERT_EQ (nano::dev::genesis_amount, ledger.weight (nano::dev::genesis_key.pub)); - nano::send_block send (hash1, key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (hash1)); + nano::send_block send (nano::dev::genesis->hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); ASSERT_EQ (0, ledger.weight (nano::dev::genesis_key.pub)); nano::keypair key2; @@ -1453,7 +1404,6 @@ TEST (ledger, send_open_receive_rollback) nano::stat stats; nano::ledger ledger (*store, stats); auto transaction (store->tx_begin_write ()); - nano::genesis genesis; store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::account_info info1; @@ -1513,7 +1463,6 @@ TEST (ledger, bootstrap_rep_weight) nano::ledger ledger (*store, stats); nano::account_info info1; nano::keypair key2; - nano::genesis genesis; nano::work_pool pool (std::numeric_limits::max ()); { auto transaction (store->tx_begin_write ()); @@ -1548,14 +1497,13 @@ TEST (ledger, block_destination_source) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair dest; nano::uint128_t balance (nano::dev::genesis_amount); balance -= nano::Gxrb_ratio; - nano::send_block block1 (genesis.hash (), dest.pub, balance, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block block1 (nano::dev::genesis->hash (), dest.pub, balance, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); balance -= nano::Gxrb_ratio; nano::send_block block2 (block1.hash (), nano::dev::genesis->account (), balance, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (block1.hash ())); balance += nano::Gxrb_ratio; @@ -1594,11 +1542,10 @@ TEST (ledger, state_account) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_EQ (nano::dev::genesis->account (), ledger.account (transaction, send1.hash ())); } @@ -1610,11 +1557,10 @@ TEST (ledger, state_send_receive) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send2 (store->block.get (transaction, send1.hash ())); @@ -1652,11 +1598,10 @@ TEST (ledger, state_receive) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::send_block send1 (genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block send1 (nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send2 (store->block.get (transaction, send1.hash ())); @@ -1687,12 +1632,11 @@ TEST (ledger, state_rep_change) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair rep; - nano::state_block change1 (nano::dev::genesis->account (), genesis.hash (), rep.pub, nano::dev::genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block change1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), rep.pub, nano::dev::genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, change1).code); ASSERT_TRUE (store->block.exists (transaction, change1.hash ())); auto change2 (store->block.get (transaction, change1.hash ())); @@ -1715,12 +1659,11 @@ TEST (ledger, state_open) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send2 (store->block.get (transaction, send1.hash ())); @@ -1755,11 +1698,10 @@ TEST (ledger, send_after_state_fail) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::send_block send2 (send1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - (2 * nano::Gxrb_ratio), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::block_position, ledger.process (transaction, send2).code); @@ -1773,11 +1715,10 @@ TEST (ledger, receive_after_state_fail) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::receive_block receive1 (send1.hash (), send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::block_position, ledger.process (transaction, receive1).code); @@ -1791,11 +1732,10 @@ TEST (ledger, change_after_state_fail) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::keypair rep; nano::change_block change1 (send1.hash (), rep.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); @@ -1809,11 +1749,10 @@ TEST (ledger, state_unreceivable_fail) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::send_block send1 (genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block send1 (nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send2 (store->block.get (transaction, send1.hash ())); @@ -1833,11 +1772,10 @@ TEST (ledger, state_receive_bad_amount_fail) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::send_block send1 (genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block send1 (nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send2 (store->block.get (transaction, send1.hash ())); @@ -1857,11 +1795,10 @@ TEST (ledger, state_no_link_amount_fail) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::keypair rep; nano::state_block change1 (nano::dev::genesis->account (), send1.hash (), rep.pub, nano::dev::genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); @@ -1875,11 +1812,10 @@ TEST (ledger, state_receive_wrong_account_fail) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send2 (store->block.get (transaction, send1.hash ())); @@ -1900,12 +1836,11 @@ TEST (ledger, state_open_state_fork) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::state_block open1 (destination.pub, 0, nano::dev::genesis->account (), nano::Gxrb_ratio, send1.hash (), destination.prv, destination.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open1).code); @@ -1921,12 +1856,11 @@ TEST (ledger, state_state_open_fork) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::open_block open1 (send1.hash (), nano::dev::genesis->account (), destination.pub, destination.prv, destination.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open1).code); @@ -1943,12 +1877,11 @@ TEST (ledger, state_open_previous_fail) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::state_block open1 (destination.pub, 1, nano::dev::genesis->account (), nano::Gxrb_ratio, send1.hash (), destination.prv, destination.pub, *pool.generate (1)); ASSERT_EQ (nano::process_result::gap_previous, ledger.process (transaction, open1).code); @@ -1961,12 +1894,11 @@ TEST (ledger, state_open_source_fail) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::state_block open1 (destination.pub, 0, nano::dev::genesis->account (), 0, 0, destination.prv, destination.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::gap_source, ledger.process (transaction, open1).code); @@ -1979,12 +1911,11 @@ TEST (ledger, state_send_change) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair rep; - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), rep.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), rep.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send2 (store->block.get (transaction, send1.hash ())); @@ -2007,11 +1938,10 @@ TEST (ledger, state_receive_change) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send2 (store->block.get (transaction, send1.hash ())); @@ -2044,12 +1974,11 @@ TEST (ledger, state_open_old) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::open_block open1 (send1.hash (), nano::dev::genesis->account (), destination.pub, destination.prv, destination.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open1).code); @@ -2065,12 +1994,11 @@ TEST (ledger, state_receive_old) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::state_block send2 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - (2 * nano::Gxrb_ratio), destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); @@ -2090,11 +2018,10 @@ TEST (ledger, state_rollback_send) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send2 (store->block.get (transaction, send1.hash ())); @@ -2111,7 +2038,7 @@ TEST (ledger, state_rollback_send) ASSERT_EQ (nano::dev::genesis_amount, ledger.account_balance (transaction, nano::dev::genesis->account ())); ASSERT_EQ (nano::dev::genesis_amount, ledger.weight (nano::dev::genesis->account ())); ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()))); - ASSERT_TRUE (store->block.successor (transaction, genesis.hash ()).is_zero ()); + ASSERT_TRUE (store->block.successor (transaction, nano::dev::genesis->hash ()).is_zero ()); ASSERT_EQ (store->account.count (transaction), ledger.cache.account_count); } @@ -2122,11 +2049,10 @@ TEST (ledger, state_rollback_receive) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); @@ -2149,12 +2075,11 @@ TEST (ledger, state_rollback_received_send) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key; - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::state_block receive1 (key.pub, 0, key.pub, nano::Gxrb_ratio, send1.hash (), key.prv, key.pub, *pool.generate (key.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); @@ -2177,12 +2102,11 @@ TEST (ledger, state_rep_change_rollback) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair rep; - nano::state_block change1 (nano::dev::genesis->account (), genesis.hash (), rep.pub, nano::dev::genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block change1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), rep.pub, nano::dev::genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, change1).code); ASSERT_FALSE (ledger.rollback (transaction, change1.hash ())); ASSERT_FALSE (store->block.exists (transaction, change1.hash ())); @@ -2198,12 +2122,11 @@ TEST (ledger, state_open_rollback) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::state_block open1 (destination.pub, 0, nano::dev::genesis->account (), nano::Gxrb_ratio, send1.hash (), destination.prv, destination.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open1).code); @@ -2225,12 +2148,11 @@ TEST (ledger, state_send_change_rollback) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair rep; - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), rep.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), rep.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_FALSE (ledger.rollback (transaction, send1.hash ())); ASSERT_FALSE (store->block.exists (transaction, send1.hash ())); @@ -2247,11 +2169,10 @@ TEST (ledger, state_receive_change_rollback) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::keypair rep; nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), rep.pub, nano::dev::genesis_amount, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); @@ -2271,12 +2192,11 @@ TEST (ledger, epoch_blocks_v1_general) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block epoch1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block epoch1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch1).code); ASSERT_FALSE (epoch1.sideband ().details.is_send); ASSERT_FALSE (epoch1.sideband ().details.is_receive); @@ -2342,16 +2262,15 @@ TEST (ledger, epoch_blocks_v2_general) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block epoch1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block epoch1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); // Trying to upgrade from epoch 0 to epoch 2. It is a requirement epoch upgrades are sequential unless the account is unopened ASSERT_EQ (nano::process_result::block_position, ledger.process (transaction, epoch1).code); // Set it to the first epoch and it should now succeed - epoch1 = nano::state_block (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, epoch1.work); + epoch1 = nano::state_block (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, epoch1.work); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch1).code); ASSERT_EQ (nano::epoch::epoch_1, epoch1.sideband ().details.epoch); ASSERT_EQ (nano::epoch::epoch_0, epoch1.sideband ().source_epoch); // Not used for epoch blocks @@ -2408,12 +2327,11 @@ TEST (ledger, epoch_blocks_receive_upgrade) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::state_block epoch1 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch1).code); @@ -2489,16 +2407,15 @@ TEST (ledger, epoch_blocks_fork) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::send_block send1 (genesis.hash (), nano::account (0), nano::dev::genesis_amount, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block send1 (nano::dev::genesis->hash (), nano::account (0), nano::dev::genesis_amount, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - nano::state_block epoch1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block epoch1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::fork, ledger.process (transaction, epoch1).code); - nano::state_block epoch2 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block epoch2 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::fork, ledger.process (transaction, epoch2).code); nano::state_block epoch3 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch3).code); @@ -2513,9 +2430,8 @@ TEST (ledger, successor_epoch) nano::system system (1); auto & node1 (*system.nodes[0]); nano::keypair key1; - nano::genesis genesis; nano::work_pool pool (std::numeric_limits::max ()); - nano::send_block send1 (genesis.hash (), key1.pub, nano::dev::genesis_amount - 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block send1 (nano::dev::genesis->hash (), key1.pub, nano::dev::genesis_amount - 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); nano::state_block open (key1.pub, 0, key1.pub, 1, send1.hash (), key1.prv, key1.pub, *pool.generate (key1.pub)); nano::state_block change (key1.pub, open.hash (), key1.pub, 1, 0, key1.prv, key1.pub, *pool.generate (open.hash ())); auto open_hash = open.hash (); @@ -2580,7 +2496,6 @@ TEST (ledger, block_hash_account_conflict) nano::block_builder builder; nano::system system (1); auto & node1 (*system.nodes[0]); - nano::genesis genesis; nano::keypair key1; nano::keypair key2; nano::work_pool pool (std::numeric_limits::max ()); @@ -2591,12 +2506,12 @@ TEST (ledger, block_hash_account_conflict) */ auto send1 = builder.state () .account (nano::dev::genesis->account ()) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis->account ()) .balance (nano::dev::genesis_amount - 100) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*pool.generate (genesis.hash ())) + .work (*pool.generate (nano::dev::genesis->hash ())) .build_shared (); auto receive1 = builder.state () @@ -2673,14 +2588,13 @@ TEST (ledger, could_fit) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; // Test legacy and state change blocks could_fit - nano::change_block change1 (genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); - nano::state_block change2 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::change_block change1 (nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::state_block change2 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_TRUE (ledger.could_fit (transaction, change1)); ASSERT_TRUE (ledger.could_fit (transaction, change2)); // Test legacy and state send @@ -2732,9 +2646,8 @@ TEST (ledger, unchecked_epoch) { nano::system system (1); auto & node1 (*system.nodes[0]); - nano::genesis genesis; nano::keypair destination; - auto send1 (std::make_shared (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); + auto send1 (std::make_shared (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send1); auto open1 (std::make_shared (destination.pub, 0, destination.pub, nano::Gxrb_ratio, send1->hash (), destination.prv, destination.pub, 0)); node1.work_generate_blocking (*open1); @@ -2772,9 +2685,8 @@ TEST (ledger, unchecked_epoch_invalid) nano::node_config node_config (nano::get_available_port (), system.logging); node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto & node1 (*system.add_node (node_config)); - nano::genesis genesis; nano::keypair destination; - auto send1 (std::make_shared (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); + auto send1 (std::make_shared (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send1); auto open1 (std::make_shared (destination.pub, 0, destination.pub, nano::Gxrb_ratio, send1->hash (), destination.prv, destination.pub, 0)); node1.work_generate_blocking (*open1); @@ -2824,9 +2736,8 @@ TEST (ledger, unchecked_open) { nano::system system (1); auto & node1 (*system.nodes[0]); - nano::genesis genesis; nano::keypair destination; - auto send1 (std::make_shared (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); + auto send1 (std::make_shared (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send1); auto open1 (std::make_shared (send1->hash (), destination.pub, destination.pub, destination.prv, destination.pub, 0)); node1.work_generate_blocking (*open1); @@ -2861,9 +2772,8 @@ TEST (ledger, unchecked_receive) { nano::system system (1); auto & node1 (*system.nodes[0]); - nano::genesis genesis; nano::keypair destination; - auto send1 (std::make_shared (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); + auto send1 (std::make_shared (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send1); auto send2 (std::make_shared (nano::dev::genesis->account (), send1->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - 2 * nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send2); @@ -2915,7 +2825,6 @@ TEST (ledger, confirmation_height_not_updated) nano::stat stats; nano::ledger ledger (*store, stats); auto transaction (store->tx_begin_write ()); - nano::genesis genesis; store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::account_info account_info; @@ -2925,11 +2834,11 @@ TEST (ledger, confirmation_height_not_updated) nano::confirmation_height_info confirmation_height_info; ASSERT_FALSE (store->confirmation_height.get (transaction, nano::dev::genesis->account (), confirmation_height_info)); ASSERT_EQ (1, confirmation_height_info.height); - ASSERT_EQ (genesis.hash (), confirmation_height_info.frontier); + ASSERT_EQ (nano::dev::genesis->hash (), confirmation_height_info.frontier); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_FALSE (store->confirmation_height.get (transaction, nano::dev::genesis->account (), confirmation_height_info)); ASSERT_EQ (1, confirmation_height_info.height); - ASSERT_EQ (genesis.hash (), confirmation_height_info.frontier); + ASSERT_EQ (nano::dev::genesis->hash (), confirmation_height_info.frontier); nano::open_block open1 (send1.hash (), nano::dev::genesis->account (), key.pub, key.prv, key.pub, *pool.generate (key.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open1).code); ASSERT_TRUE (store->confirmation_height.get (transaction, key.pub, confirmation_height_info)); @@ -2941,16 +2850,15 @@ TEST (ledger, zero_rep) { nano::system system (1); auto & node1 (*system.nodes[0]); - nano::genesis genesis; nano::block_builder builder; auto block1 = builder.state () .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (0) .balance (nano::dev::genesis_amount) .link (0) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*system.work.generate (genesis.hash ())) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build (); auto transaction (node1.store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, node1.ledger.process (transaction, *block1).code); @@ -2977,7 +2885,6 @@ TEST (ledger, work_validation) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; store->initialize (store->tx_begin_write (), ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::block_builder builder; @@ -3072,19 +2979,18 @@ TEST (ledger, dependents_confirmed) nano::stat stats; nano::ledger ledger (*store, stats); auto transaction (store->tx_begin_write ()); - nano::genesis genesis; store->initialize (transaction, ledger.cache); - ASSERT_TRUE (ledger.dependents_confirmed (transaction, *genesis.open)); + ASSERT_TRUE (ledger.dependents_confirmed (transaction, *nano::dev::genesis)); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; auto send1 = builder.state () .account (nano::dev::genesis->account ()) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis->account ()) .balance (nano::dev::genesis_amount - 100) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*pool.generate (genesis.hash ())) + .work (*pool.generate (nano::dev::genesis->hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, *send1).code); ASSERT_TRUE (ledger.dependents_confirmed (transaction, *send1)); @@ -3146,18 +3052,17 @@ TEST (ledger, dependents_confirmed_pruning) nano::ledger ledger (*store, stats); ledger.pruning = true; auto transaction (store->tx_begin_write ()); - nano::genesis genesis; store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; auto send1 = builder.state () .account (nano::dev::genesis->account ()) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis->account ()) .balance (nano::dev::genesis_amount - 100) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*pool.generate (genesis.hash ())) + .work (*pool.generate (nano::dev::genesis->hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, *send1).code); auto send2 = builder.state () @@ -3197,19 +3102,18 @@ TEST (ledger, block_confirmed) nano::stat stats; nano::ledger ledger (*store, stats); auto transaction (store->tx_begin_write ()); - nano::genesis genesis; store->initialize (transaction, ledger.cache); - ASSERT_TRUE (ledger.block_confirmed (transaction, genesis.open->hash ())); + ASSERT_TRUE (ledger.block_confirmed (transaction, nano::dev::genesis->hash ())); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; auto send1 = builder.state () .account (nano::dev::genesis->account ()) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis->account ()) .balance (nano::dev::genesis_amount - 100) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*pool.generate (genesis.hash ())) + .work (*pool.generate (nano::dev::genesis->hash ())) .build (); // Must be safe against non-existing blocks ASSERT_FALSE (ledger.block_confirmed (transaction, send1->hash ())); @@ -3229,7 +3133,6 @@ TEST (ledger, cache) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; store->initialize (store->tx_begin_write (), ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::block_builder builder; @@ -3342,11 +3245,10 @@ TEST (ledger, pruning_action) nano::stat stats; nano::ledger ledger (*store, stats); ledger.pruning = true; - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send1_stored (store->block.get (transaction, send1.hash ())); @@ -3358,7 +3260,7 @@ TEST (ledger, pruning_action) ASSERT_TRUE (store->block.exists (transaction, send2.hash ())); // Pruning action ASSERT_EQ (1, ledger.pruning_action (transaction, send1.hash (), 1)); - ASSERT_EQ (0, ledger.pruning_action (transaction, genesis.hash (), 1)); + ASSERT_EQ (0, ledger.pruning_action (transaction, nano::dev::genesis->hash (), 1)); ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()))); ASSERT_FALSE (store->block.exists (transaction, send1.hash ())); ASSERT_TRUE (ledger.block_or_pruned_exists (transaction, send1.hash ())); @@ -3367,7 +3269,7 @@ TEST (ledger, pruning_action) ASSERT_TRUE (ledger.block_or_pruned_exists (transaction, send1.hash ())); ledger.pruning = true; ASSERT_TRUE (store->pruned.exists (transaction, send1.hash ())); - ASSERT_TRUE (store->block.exists (transaction, genesis.hash ())); + ASSERT_TRUE (store->block.exists (transaction, nano::dev::genesis->hash ())); ASSERT_TRUE (store->block.exists (transaction, send2.hash ())); // Receiving pruned block nano::state_block receive1 (nano::dev::genesis->account (), send2.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send2.hash ())); @@ -3399,12 +3301,11 @@ TEST (ledger, pruning_large_chain) nano::stat stats; nano::ledger ledger (*store, stats); ledger.pruning = true; - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); size_t send_receive_pairs (20); - auto last_hash (genesis.hash ()); + auto last_hash (nano::dev::genesis->hash ()); for (auto i (0); i < send_receive_pairs; i++) { nano::state_block send (nano::dev::genesis->account (), last_hash, nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (last_hash)); @@ -3420,7 +3321,7 @@ TEST (ledger, pruning_large_chain) // Pruning action ASSERT_EQ (send_receive_pairs * 2, ledger.pruning_action (transaction, last_hash, 5)); ASSERT_TRUE (store->pruned.exists (transaction, last_hash)); - ASSERT_TRUE (store->block.exists (transaction, genesis.hash ())); + ASSERT_TRUE (store->block.exists (transaction, nano::dev::genesis->hash ())); ASSERT_FALSE (store->block.exists (transaction, last_hash)); ASSERT_EQ (store->pruned.count (transaction), ledger.cache.pruned_count); ASSERT_EQ (store->block.count (transaction), ledger.cache.block_count - ledger.cache.pruned_count); @@ -3436,11 +3337,10 @@ TEST (ledger, pruning_source_rollback) nano::stat stats; nano::ledger ledger (*store, stats); ledger.pruning = true; - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block epoch1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block epoch1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch1).code); nano::state_block send1 (nano::dev::genesis->account (), epoch1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -3454,7 +3354,7 @@ TEST (ledger, pruning_source_rollback) ASSERT_TRUE (store->pruned.exists (transaction, send1.hash ())); ASSERT_FALSE (store->block.exists (transaction, epoch1.hash ())); ASSERT_TRUE (store->pruned.exists (transaction, epoch1.hash ())); - ASSERT_TRUE (store->block.exists (transaction, genesis.hash ())); + ASSERT_TRUE (store->block.exists (transaction, nano::dev::genesis->hash ())); nano::pending_info info; ASSERT_FALSE (store->pending.get (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()), info)); ASSERT_EQ (nano::dev::genesis->account (), info.source); @@ -3488,11 +3388,10 @@ TEST (ledger, pruning_source_rollback_legacy) nano::stat stats; nano::ledger ledger (*store, stats); ledger.pruning = true; - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::send_block send1 (genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block send1 (nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()))); nano::keypair key1; @@ -3510,7 +3409,7 @@ TEST (ledger, pruning_source_rollback_legacy) ASSERT_TRUE (store->pruned.exists (transaction, send2.hash ())); ASSERT_FALSE (store->block.exists (transaction, send1.hash ())); ASSERT_TRUE (store->pruned.exists (transaction, send1.hash ())); - ASSERT_TRUE (store->block.exists (transaction, genesis.hash ())); + ASSERT_TRUE (store->block.exists (transaction, nano::dev::genesis->hash ())); nano::pending_info info1; ASSERT_FALSE (store->pending.get (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()), info1)); ASSERT_EQ (nano::dev::genesis->account (), info1.source); @@ -3567,11 +3466,10 @@ TEST (ledger, pruning_process_error) nano::stat stats; nano::ledger ledger (*store, stats); ledger.pruning = true; - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_EQ (0, ledger.cache.pruned_count); ASSERT_EQ (2, ledger.cache.block_count); @@ -3596,12 +3494,11 @@ TEST (ledger, pruning_legacy_blocks) nano::stat stats; nano::ledger ledger (*store, stats); ledger.pruning = true; - nano::genesis genesis; nano::keypair key1; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::send_block send1 (genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block send1 (nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()))); nano::receive_block receive1 (send1.hash (), send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); @@ -3617,7 +3514,7 @@ TEST (ledger, pruning_legacy_blocks) // Pruning action ASSERT_EQ (3, ledger.pruning_action (transaction, change1.hash (), 2)); ASSERT_EQ (1, ledger.pruning_action (transaction, open1.hash (), 1)); - ASSERT_TRUE (store->block.exists (transaction, genesis.hash ())); + ASSERT_TRUE (store->block.exists (transaction, nano::dev::genesis->hash ())); ASSERT_FALSE (store->block.exists (transaction, send1.hash ())); ASSERT_TRUE (store->pruned.exists (transaction, send1.hash ())); ASSERT_FALSE (store->block.exists (transaction, receive1.hash ())); @@ -3642,11 +3539,10 @@ TEST (ledger, pruning_safe_functions) nano::stat stats; nano::ledger ledger (*store, stats); ledger.pruning = true; - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); nano::state_block send2 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); @@ -3657,7 +3553,7 @@ TEST (ledger, pruning_safe_functions) ASSERT_FALSE (store->block.exists (transaction, send1.hash ())); ASSERT_TRUE (ledger.block_or_pruned_exists (transaction, send1.hash ())); // true for pruned ASSERT_TRUE (store->pruned.exists (transaction, send1.hash ())); - ASSERT_TRUE (store->block.exists (transaction, genesis.hash ())); + ASSERT_TRUE (store->block.exists (transaction, nano::dev::genesis->hash ())); ASSERT_TRUE (store->block.exists (transaction, send2.hash ())); // Safe ledger actions bool error (false); @@ -3685,11 +3581,10 @@ TEST (ledger, hash_root_random) nano::stat stats; nano::ledger ledger (*store, stats); ledger.pruning = true; - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), genesis.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); nano::state_block send2 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); @@ -3699,7 +3594,7 @@ TEST (ledger, hash_root_random) ASSERT_EQ (1, ledger.pruning_action (transaction, send1.hash (), 1)); ASSERT_FALSE (store->block.exists (transaction, send1.hash ())); ASSERT_TRUE (store->pruned.exists (transaction, send1.hash ())); - ASSERT_TRUE (store->block.exists (transaction, genesis.hash ())); + ASSERT_TRUE (store->block.exists (transaction, nano::dev::genesis->hash ())); ASSERT_TRUE (store->block.exists (transaction, send2.hash ())); // Test random block including pruned bool done (false); @@ -3724,7 +3619,6 @@ TEST (ledger, hash_root_random) TEST (ledger, migrate_lmdb_to_rocksdb) { auto path (nano::unique_path ()); - nano::genesis genesis; nano::logger_mt logger; boost::asio::ip::address_v6 address (boost::asio::ip::make_address_v6 ("::ffff:127.0.0.1")); uint16_t port = 100; @@ -3810,7 +3704,6 @@ TEST (ledger, unconfirmed_frontiers) ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; store->initialize (store->tx_begin_write (), ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); diff --git a/nano/core_test/network.cpp b/nano/core_test/network.cpp index fd840137cb..f4754b9aba 100644 --- a/nano/core_test/network.cpp +++ b/nano/core_test/network.cpp @@ -205,17 +205,16 @@ TEST (network, send_discarded_publish) auto & node1 (*system.nodes[0]); auto & node2 (*system.nodes[1]); auto block (std::make_shared (1, 1, 2, nano::keypair ().prv, 4, *system.work.generate (nano::root (1)))); - nano::genesis genesis; { auto transaction (node1.store.tx_begin_read ()); node1.network.flood_block (block); - ASSERT_EQ (genesis.hash (), node1.ledger.latest (transaction, nano::dev::genesis_key.pub)); - ASSERT_EQ (genesis.hash (), node2.latest (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::genesis->hash (), node1.ledger.latest (transaction, nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::genesis->hash (), node2.latest (nano::dev::genesis_key.pub)); } ASSERT_TIMELY (10s, node2.stats.count (nano::stat::type::message, nano::stat::detail::publish, nano::stat::dir::in) != 0); auto transaction (node1.store.tx_begin_read ()); - ASSERT_EQ (genesis.hash (), node1.ledger.latest (transaction, nano::dev::genesis_key.pub)); - ASSERT_EQ (genesis.hash (), node2.latest (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::genesis->hash (), node1.ledger.latest (transaction, nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::genesis->hash (), node2.latest (nano::dev::genesis_key.pub)); } TEST (network, send_invalid_publish) @@ -223,18 +222,17 @@ TEST (network, send_invalid_publish) nano::system system (2); auto & node1 (*system.nodes[0]); auto & node2 (*system.nodes[1]); - nano::genesis genesis; auto block (std::make_shared (1, 1, 20, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::root (1)))); { auto transaction (node1.store.tx_begin_read ()); node1.network.flood_block (block); - ASSERT_EQ (genesis.hash (), node1.ledger.latest (transaction, nano::dev::genesis_key.pub)); - ASSERT_EQ (genesis.hash (), node2.latest (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::genesis->hash (), node1.ledger.latest (transaction, nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::genesis->hash (), node2.latest (nano::dev::genesis_key.pub)); } ASSERT_TIMELY (10s, node2.stats.count (nano::stat::type::message, nano::stat::detail::publish, nano::stat::dir::in) != 0); auto transaction (node1.store.tx_begin_read ()); - ASSERT_EQ (genesis.hash (), node1.ledger.latest (transaction, nano::dev::genesis_key.pub)); - ASSERT_EQ (genesis.hash (), node2.latest (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::genesis->hash (), node1.ledger.latest (transaction, nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::genesis->hash (), node2.latest (nano::dev::genesis_key.pub)); } TEST (network, send_valid_confirm_ack) @@ -353,8 +351,7 @@ TEST (receivable_processor, confirm_insufficient_pos) { nano::system system (1); auto & node1 (*system.nodes[0]); - nano::genesis genesis; - auto block1 (std::make_shared (genesis.hash (), 0, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); + auto block1 (std::make_shared (nano::dev::genesis->hash (), 0, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*block1); ASSERT_EQ (nano::process_result::progress, node1.process (*block1).code); node1.scheduler.activate (nano::dev::genesis_key.pub, node1.store.tx_begin_read ()); @@ -368,8 +365,7 @@ TEST (receivable_processor, confirm_sufficient_pos) { nano::system system (1); auto & node1 (*system.nodes[0]); - nano::genesis genesis; - auto block1 (std::make_shared (genesis.hash (), 0, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); + auto block1 (std::make_shared (nano::dev::genesis->hash (), 0, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*block1); ASSERT_EQ (nano::process_result::progress, node1.process (*block1).code); node1.scheduler.activate (nano::dev::genesis_key.pub, node1.store.tx_begin_read ()); @@ -947,8 +943,7 @@ TEST (network, duplicate_detection) auto & node0 (*system.add_node (node_flags)); auto & node1 (*system.add_node (node_flags)); auto udp_channel (std::make_shared (node0.network.udp_channels, node1.network.endpoint (), node1.network_params.protocol.protocol_version)); - nano::genesis genesis; - nano::publish publish (genesis.open); + nano::publish publish (nano::dev::genesis); // Publish duplicate detection through UDP ASSERT_EQ (0, node1.stats.count (nano::stat::type::filter, nano::stat::detail::duplicate_publish)); @@ -970,8 +965,7 @@ TEST (network, duplicate_revert_publish) node_flags.block_processor_full_size = 0; auto & node (*system.add_node (node_flags)); ASSERT_TRUE (node.block_processor.full ()); - nano::genesis genesis; - nano::publish publish (genesis.open); + nano::publish publish (nano::dev::genesis); std::vector bytes; { nano::vectorstream stream (bytes); @@ -1000,8 +994,7 @@ TEST (network, duplicate_revert_publish) TEST (network, bandwidth_limiter) { nano::system system; - nano::genesis genesis; - nano::publish message (genesis.open); + nano::publish message (nano::dev::genesis); auto message_size = message.to_bytes ()->size (); auto message_limit = 4; // must be multiple of the number of channels nano::node_config node_config (nano::get_available_port (), system.logging); diff --git a/nano/core_test/network_filter.cpp b/nano/core_test/network_filter.cpp index 43ce1bfc96..fbc7bd965f 100644 --- a/nano/core_test/network_filter.cpp +++ b/nano/core_test/network_filter.cpp @@ -8,7 +8,7 @@ TEST (network_filter, unit) { - nano::genesis genesis; + nano::ledger_constants constants{ nano::networks::nano_dev_network }; nano::network_filter filter (1); auto one_block = [&filter] (std::shared_ptr const & block_a, bool expect_duplicate_a) { nano::publish message (block_a); @@ -32,15 +32,15 @@ TEST (network_filter, unit) ASSERT_NE (nullptr, block); ASSERT_EQ (*block, *block_a); }; - one_block (genesis.open, false); + one_block (constants.genesis, false); for (int i = 0; i < 10; ++i) { - one_block (genesis.open, true); + one_block (constants.genesis, true); } nano::state_block_builder builder; auto new_block = builder .account (nano::dev::genesis_key.pub) - .previous (genesis.open->hash ()) + .previous (constants.genesis_hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - 10 * nano::xrb_ratio) .link (nano::public_key ()) @@ -55,14 +55,14 @@ TEST (network_filter, unit) } for (int i = 0; i < 100; ++i) { - one_block (genesis.open, false); + one_block (constants.genesis, false); one_block (new_block, false); } } TEST (network_filter, many) { - nano::genesis genesis; + nano::ledger_constants constants{ nano::networks::nano_dev_network }; nano::network_filter filter (4); nano::keypair key1; for (int i = 0; i < 100; ++i) @@ -70,7 +70,7 @@ TEST (network_filter, many) nano::state_block_builder builder; auto block = builder .account (nano::dev::genesis_key.pub) - .previous (genesis.open->hash ()) + .previous (constants.genesis_hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - i * 10 * nano::xrb_ratio) .link (key1.pub) diff --git a/nano/core_test/node.cpp b/nano/core_test/node.cpp index 640d895f6c..23fa77de68 100644 --- a/nano/core_test/node.cpp +++ b/nano/core_test/node.cpp @@ -186,14 +186,13 @@ TEST (node, send_out_of_order) nano::system system (2); auto & node1 (*system.nodes[0]); nano::keypair key2; - nano::genesis genesis; nano::send_block_builder builder; auto send1 = builder.make_block () - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .destination (key2.pub) .balance (std::numeric_limits::max () - node1.config.receive_minimum.number ()) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*system.work.generate (genesis.hash ())) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); auto send2 = builder.make_block () .previous (send1->hash ()) @@ -1050,10 +1049,9 @@ TEST (node, fork_publish) auto & node1 (*system.nodes[0]); system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::keypair key1; - nano::genesis genesis; nano::send_block_builder builder; auto send1 = builder.make_block () - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .destination (key1.pub) .balance (nano::dev::genesis_amount - 100) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) @@ -1062,7 +1060,7 @@ TEST (node, fork_publish) node1.work_generate_blocking (*send1); nano::keypair key2; auto send2 = builder.make_block () - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .destination (key2.pub) .balance (nano::dev::genesis_amount - 100) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) @@ -1094,19 +1092,18 @@ TEST (node, fork_publish) TEST (node, fork_publish_inactive) { nano::system system (1); - nano::genesis genesis; nano::keypair key1; nano::keypair key2; nano::send_block_builder builder; auto send1 = builder.make_block () - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .destination (key1.pub) .balance (nano::dev::genesis_amount - 100) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*system.work.generate (genesis.hash ())) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); auto send2 = builder.make_block () - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .destination (key2.pub) .balance (nano::dev::genesis_amount - 100) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) @@ -1133,22 +1130,21 @@ TEST (node, fork_keep) ASSERT_EQ (1, node1.network.size ()); nano::keypair key1; nano::keypair key2; - nano::genesis genesis; nano::send_block_builder builder; // send1 and send2 fork to different accounts auto send1 = builder.make_block () - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .destination (key1.pub) .balance (nano::dev::genesis_amount - 100) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*system.work.generate (genesis.hash ())) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); auto send2 = builder.make_block () - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .destination (key2.pub) .balance (nano::dev::genesis_amount - 100) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*system.work.generate (genesis.hash ())) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); node1.process_active (send1); node1.block_processor.flush (); @@ -1163,7 +1159,7 @@ TEST (node, fork_keep) node1.block_processor.flush (); node2.process_active (send2); node2.block_processor.flush (); - auto election1 (node2.active.election (nano::qualified_root (genesis.hash (), genesis.hash ()))); + auto election1 (node2.active.election (nano::qualified_root (nano::dev::genesis->hash (), nano::dev::genesis->hash ()))); ASSERT_NE (nullptr, election1); ASSERT_EQ (1, election1->votes ().size ()); ASSERT_TRUE (node1.ledger.block_or_pruned_exists (send1->hash ())); @@ -1187,23 +1183,22 @@ TEST (node, fork_flip) auto & node2 (*system.nodes[1]); ASSERT_EQ (1, node1.network.size ()); nano::keypair key1; - nano::genesis genesis; nano::send_block_builder builder; auto send1 = builder.make_block () - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .destination (key1.pub) .balance (nano::dev::genesis_amount - 100) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*system.work.generate (genesis.hash ())) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); nano::publish publish1 (send1); nano::keypair key2; auto send2 = builder.make_block () - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .destination (key2.pub) .balance (nano::dev::genesis_amount - 100) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*system.work.generate (genesis.hash ())) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); nano::publish publish2 (send2); auto channel1 (node1.network.udp_channels.create (node1.network.endpoint ())); @@ -1221,7 +1216,7 @@ TEST (node, fork_flip) node1.block_processor.flush (); node2.network.inbound (publish1, channel2); node2.block_processor.flush (); - auto election1 (node2.active.election (nano::qualified_root (genesis.hash (), genesis.hash ()))); + auto election1 (node2.active.election (nano::qualified_root (nano::dev::genesis->hash (), nano::dev::genesis->hash ()))); ASSERT_NE (nullptr, election1); ASSERT_EQ (1, election1->votes ().size ()); ASSERT_NE (nullptr, node1.block (publish1.block->hash ())); @@ -1255,23 +1250,22 @@ TEST (node, fork_multi_flip) auto & node2 (*system.add_node (node_config, node_flags, type)); ASSERT_EQ (1, node1.network.size ()); nano::keypair key1; - nano::genesis genesis; nano::send_block_builder builder; auto send1 = builder.make_block () - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .destination (key1.pub) .balance (nano::dev::genesis_amount - 100) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*system.work.generate (genesis.hash ())) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); nano::publish publish1 (send1); nano::keypair key2; auto send2 = builder.make_block () - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .destination (key2.pub) .balance (nano::dev::genesis_amount - 100) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*system.work.generate (genesis.hash ())) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); nano::publish publish2 (send2); auto send3 = builder.make_block () @@ -1297,7 +1291,7 @@ TEST (node, fork_multi_flip) node1.block_processor.flush (); node2.network.inbound (publish1, node2.network.udp_channels.create (node2.network.endpoint ())); node2.block_processor.flush (); - auto election1 (node2.active.election (nano::qualified_root (genesis.hash (), genesis.hash ()))); + auto election1 (node2.active.election (nano::qualified_root (nano::dev::genesis->hash (), nano::dev::genesis->hash ()))); ASSERT_NE (nullptr, election1); ASSERT_EQ (1, election1->votes ().size ()); ASSERT_TRUE (node1.ledger.block_or_pruned_exists (publish1.block->hash ())); @@ -1367,13 +1361,12 @@ TEST (node, fork_open) nano::system system (1); auto & node1 (*system.nodes[0]); nano::keypair key1; - nano::genesis genesis; auto send1 = nano::send_block_builder () - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .destination (key1.pub) .balance (0) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*system.work.generate (genesis.hash ())) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); nano::publish publish1 (send1); auto channel1 (node1.network.udp_channels.create (node1.network.endpoint ())); @@ -1424,15 +1417,14 @@ TEST (node, fork_open_flip) auto & node2 (*system.nodes[1]); ASSERT_EQ (1, node1.network.size ()); nano::keypair key1; - nano::genesis genesis; nano::keypair rep1; nano::keypair rep2; auto send1 = nano::send_block_builder () - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .destination (key1.pub) .balance (nano::dev::genesis_amount - 1) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*system.work.generate (genesis.hash ())) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); // A copy is necessary to avoid data races during ledger processing, which sets the sideband auto send1_copy (std::make_shared (*send1)); @@ -1561,7 +1553,6 @@ TEST (node, DISABLED_fork_pre_confirm) auto & node0 (*system.nodes[0]); auto & node1 (*system.nodes[1]); auto & node2 (*system.nodes[2]); - nano::genesis genesis; system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::keypair key1; system.wallet (1)->insert_adhoc (key1.prv); @@ -1630,13 +1621,12 @@ TEST (node, DISABLED_fork_stale) std::shared_ptr channel (std::make_shared (node2.network.udp_channels, node1.network.endpoint (), node2.network_params.protocol.protocol_version)); auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, std::vector ()); node2.rep_crawler.response (channel, vote); - nano::genesis genesis; nano::keypair key1; nano::keypair key2; nano::state_block_builder builder; auto send3 = builder.make_block () .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - nano::Mxrb_ratio) .link (key1.pub) @@ -2127,7 +2117,6 @@ TEST (node, rep_weight) auto & node1 = *add_node (); auto & node2 = *add_node (); auto & node3 = *add_node (); - nano::genesis genesis; nano::keypair keypair1; nano::keypair keypair2; nano::block_builder builder; @@ -2136,12 +2125,12 @@ TEST (node, rep_weight) std::shared_ptr block1 = builder .state () .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - amount_not_pr) .link (keypair1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*system.work.generate (genesis.hash ())) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build (); std::shared_ptr block2 = builder .state () @@ -2187,9 +2176,9 @@ TEST (node, rep_weight) ASSERT_NE (nullptr, channel2); std::shared_ptr channel3 = nano::establish_tcp (system, node, node3.network.endpoint ()); ASSERT_NE (nullptr, channel3); - auto vote0 = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, genesis.open); - auto vote1 = std::make_shared (keypair1.pub, keypair1.prv, 0, genesis.open); - auto vote2 = std::make_shared (keypair2.pub, keypair2.prv, 0, genesis.open); + auto vote0 = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, nano::dev::genesis); + auto vote1 = std::make_shared (keypair1.pub, keypair1.prv, 0, nano::dev::genesis); + auto vote2 = std::make_shared (keypair2.pub, keypair2.prv, 0, nano::dev::genesis); node.rep_crawler.response (channel1, vote0); node.rep_crawler.response (channel2, vote1); node.rep_crawler.response (channel3, vote2); @@ -2211,19 +2200,18 @@ TEST (node, rep_remove) nano::node_flags node_flags; node_flags.disable_udp = false; auto & node = *system.add_node (node_flags); - nano::genesis genesis; nano::keypair keypair1; nano::keypair keypair2; nano::block_builder builder; std::shared_ptr block1 = builder .state () .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - node.minimum_principal_weight () * 2) .link (keypair1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*system.work.generate (genesis.hash ())) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build (); std::shared_ptr block2 = builder .state () @@ -2266,7 +2254,7 @@ TEST (node, rep_remove) nano::endpoint endpoint0 (boost::asio::ip::address_v6::loopback (), nano::get_available_port ()); std::shared_ptr channel0 (std::make_shared (node.network.udp_channels, endpoint0, node.network_params.protocol.protocol_version)); auto channel_udp = node.network.udp_channels.insert (endpoint0, node.network_params.protocol.protocol_version); - auto vote1 = std::make_shared (keypair1.pub, keypair1.prv, 0, genesis.open); + auto vote1 = std::make_shared (keypair1.pub, keypair1.prv, 0, nano::dev::genesis); ASSERT_FALSE (node.rep_crawler.response (channel0, vote1)); ASSERT_TIMELY (5s, node.rep_crawler.representative_count () == 1); auto reps (node.rep_crawler.representatives (1)); @@ -2287,13 +2275,13 @@ TEST (node, rep_remove) system.wallet (1)->insert_adhoc (nano::dev::genesis_key.prv); auto channel1 (node.network.find_channel (node1->network.endpoint ())); ASSERT_NE (nullptr, channel1); - auto vote2 = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, genesis.open); + auto vote2 = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, nano::dev::genesis); node.rep_crawler.response (channel1, vote2); ASSERT_TIMELY (10s, node.rep_crawler.representative_count () == 1); // Add inactive TCP representative channel auto node2 (std::make_shared (system.io_ctx, nano::unique_path (), nano::node_config (nano::get_available_port (), system.logging), system.work)); std::weak_ptr node_w (node.shared ()); - auto vote3 = std::make_shared (keypair2.pub, keypair2.prv, 0, genesis.open); + auto vote3 = std::make_shared (keypair2.pub, keypair2.prv, 0, nano::dev::genesis); node.network.tcp_channels.start_tcp (node2->network.endpoint (), [node_w, &vote3] (std::shared_ptr const & channel2) { if (auto node_l = node_w.lock ()) { @@ -2518,17 +2506,16 @@ TEST (node, online_reps_election) flags.disable_rep_crawler = true; auto & node1 = *system.add_node (flags); // Start election - nano::genesis genesis; nano::keypair key; nano::state_block_builder builder; auto send1 = builder.make_block () .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*node1.work_generate_blocking (genesis.hash ())) + .work (*node1.work_generate_blocking (nano::dev::genesis->hash ())) .build_shared (); node1.process_active (send1); node1.block_processor.flush (); @@ -2556,18 +2543,17 @@ TEST (node, block_confirm) nano::system system (2, type, node_flags); auto & node1 (*system.nodes[0]); auto & node2 (*system.nodes[1]); - nano::genesis genesis; nano::keypair key; nano::state_block_builder builder; system.wallet (1)->insert_adhoc (nano::dev::genesis_key.prv); auto send1 = builder.make_block () .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*node1.work_generate_blocking (genesis.hash ())) + .work (*node1.work_generate_blocking (nano::dev::genesis->hash ())) .build_shared (); // A copy is necessary to avoid data races during ledger processing, which sets the sideband auto send1_copy = builder.make_block () @@ -2637,18 +2623,17 @@ TEST (node, confirm_quorum) { nano::system system (1); auto & node1 = *system.nodes[0]; - nano::genesis genesis; system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); // Put greater than node.delta () in pending so quorum can't be reached nano::amount new_balance = node1.online_reps.delta () - nano::Gxrb_ratio; auto send1 = nano::state_block_builder () .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (new_balance) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*node1.work_generate_blocking (genesis.hash ())) + .work (*node1.work_generate_blocking (nano::dev::genesis->hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, node1.process (*send1).code); system.wallet (0)->send_action (nano::dev::genesis_key.pub, nano::dev::genesis_key.pub, new_balance.number ()); @@ -2667,16 +2652,15 @@ TEST (node, local_votes_cache) node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; node_config.receive_minimum = nano::dev::genesis_amount; auto & node (*system.add_node (node_config)); - nano::genesis genesis; nano::state_block_builder builder; auto send1 = builder.make_block () .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*node.work_generate_blocking (genesis.hash ())) + .work (*node.work_generate_blocking (nano::dev::genesis->hash ())) .build_shared (); auto send2 = builder.make_block () .account (nano::dev::genesis_key.pub) @@ -2753,17 +2737,16 @@ TEST (node, local_votes_cache_batch) node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto & node (*system.add_node (node_config)); ASSERT_GE (node.network_params.voting.max_cache, 2); - nano::genesis genesis; system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::keypair key1; auto send1 = nano::state_block_builder () .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*node.work_generate_blocking (genesis.hash ())) + .work (*node.work_generate_blocking (nano::dev::genesis->hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, node.ledger.process (node.store.tx_begin_write (), *send1).code); node.confirmation_height_processor.add (send1); @@ -2822,30 +2805,29 @@ TEST (node, local_votes_cache_generate_new_vote) nano::node_config node_config (nano::get_available_port (), system.logging); node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto & node (*system.add_node (node_config)); - nano::genesis genesis; system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); // Repsond with cached vote - nano::confirm_req message1 (genesis.open); + nano::confirm_req message1 (nano::dev::genesis); auto channel (node.network.udp_channels.create (node.network.endpoint ())); node.network.inbound (message1, channel); - ASSERT_TIMELY (3s, !node.history.votes (genesis.open->root (), genesis.open->hash ()).empty ()); - auto votes1 (node.history.votes (genesis.open->root (), genesis.open->hash ())); + ASSERT_TIMELY (3s, !node.history.votes (nano::dev::genesis->root (), nano::dev::genesis->hash ()).empty ()); + auto votes1 (node.history.votes (nano::dev::genesis->root (), nano::dev::genesis->hash ())); ASSERT_EQ (1, votes1.size ()); ASSERT_EQ (1, votes1[0]->blocks.size ()); - ASSERT_EQ (genesis.open->hash (), boost::get (votes1[0]->blocks[0])); + ASSERT_EQ (nano::dev::genesis->hash (), boost::get (votes1[0]->blocks[0])); ASSERT_TIMELY (3s, node.stats.count (nano::stat::type::requests, nano::stat::detail::requests_generated_votes) == 1); auto send1 = nano::state_block_builder () .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*node.work_generate_blocking (genesis.hash ())) + .work (*node.work_generate_blocking (nano::dev::genesis->hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, node.process (*send1).code); // One of the hashes is cached - std::vector> roots_hashes{ std::make_pair (genesis.open->hash (), genesis.open->root ()), std::make_pair (send1->hash (), send1->root ()) }; + std::vector> roots_hashes{ std::make_pair (nano::dev::genesis->hash (), nano::dev::genesis->root ()), std::make_pair (send1->hash (), send1->root ()) }; nano::confirm_req message2 (roots_hashes); node.network.inbound (message2, channel); ASSERT_TIMELY (3s, !node.history.votes (send1->root (), send1->hash ()).empty ()); @@ -2853,7 +2835,7 @@ TEST (node, local_votes_cache_generate_new_vote) ASSERT_EQ (1, votes2.size ()); ASSERT_EQ (1, votes2[0]->blocks.size ()); ASSERT_TIMELY (3s, node.stats.count (nano::stat::type::requests, nano::stat::detail::requests_generated_votes) == 2); - ASSERT_FALSE (node.history.votes (genesis.open->root (), genesis.open->hash ()).empty ()); + ASSERT_FALSE (node.history.votes (nano::dev::genesis->root (), nano::dev::genesis->hash ()).empty ()); ASSERT_FALSE (node.history.votes (send1->root (), send1->hash ()).empty ()); // First generated + again cached + new generated ASSERT_TIMELY (3s, 3 == node.stats.count (nano::stat::type::message, nano::stat::detail::confirm_ack, nano::stat::dir::out)); @@ -2872,25 +2854,24 @@ TEST (node, local_votes_cache_fork) nano::node_config node_config (nano::get_available_port (), system.logging); node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto & node1 (*system.add_node (node_config, node_flags)); - nano::genesis genesis; system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto send1 = nano::state_block_builder () .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*node1.work_generate_blocking (genesis.hash ())) + .work (*node1.work_generate_blocking (nano::dev::genesis->hash ())) .build_shared (); auto send1_fork = nano::state_block_builder () .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - 2 * nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*node1.work_generate_blocking (genesis.hash ())) + .work (*node1.work_generate_blocking (nano::dev::genesis->hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, node1.process (*send1).code); // Cache vote @@ -2916,21 +2897,20 @@ TEST (node, vote_republish) nano::keypair key2; // by not setting a private key on node1's wallet, it is stopped from voting system.wallet (1)->insert_adhoc (key2.prv); - nano::genesis genesis; nano::send_block_builder builder; auto send1 = builder.make_block () - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .destination (key2.pub) .balance (std::numeric_limits::max () - node1.config.receive_minimum.number ()) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*system.work.generate (genesis.hash ())) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); auto send2 = builder.make_block () - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .destination (key2.pub) .balance (std::numeric_limits::max () - node1.config.receive_minimum.number () * 2) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*system.work.generate (genesis.hash ())) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); node1.process_active (send1); ASSERT_TIMELY (5s, node2.block (send1->hash ())); @@ -3010,21 +2990,20 @@ TEST (node, vote_by_hash_republish) auto & node2 = *system.nodes[1]; nano::keypair key2; system.wallet (1)->insert_adhoc (key2.prv); - nano::genesis genesis; nano::send_block_builder builder; auto send1 = builder.make_block () - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .destination (key2.pub) .balance (std::numeric_limits::max () - node1.config.receive_minimum.number ()) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*system.work.generate (genesis.hash ())) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); auto send2 = builder.make_block () - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .destination (key2.pub) .balance (std::numeric_limits::max () - node1.config.receive_minimum.number () * 2) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*system.work.generate (genesis.hash ())) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); node1.process_active (send1); ASSERT_TIMELY (5s, node2.active.active (*send1)); @@ -3050,22 +3029,21 @@ TEST (node, vote_by_hash_epoch_block_republish) auto & node2 (*system.nodes[1]); nano::keypair key2; system.wallet (1)->insert_adhoc (key2.prv); - nano::genesis genesis; auto send1 = nano::send_block_builder () - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .destination (key2.pub) .balance (std::numeric_limits::max () - node1.config.receive_minimum.number ()) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*system.work.generate (genesis.hash ())) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); auto epoch1 = nano::state_block_builder () .account (nano::dev::genesis->account ()) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis->account ()) .balance (nano::dev::genesis_amount) .link (node1.ledger.epoch_link (nano::epoch::epoch_1)) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*system.work.generate (genesis.hash ())) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); node1.process_active (send1); ASSERT_TIMELY (5s, node2.active.active (*send1)); @@ -3091,17 +3069,16 @@ TEST (node, epoch_conflict_confirm) node_config.peering_port = nano::get_available_port (); auto node1 = system.add_node (node_config); nano::keypair key; - nano::genesis genesis; nano::keypair epoch_signer (nano::dev::genesis_key); nano::state_block_builder builder; auto send = builder.make_block () .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - 1) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*system.work.generate (genesis.hash ())) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); auto open = builder.make_block () .account (key.pub) @@ -3188,21 +3165,20 @@ TEST (node, fork_invalid_block_signature) auto & node1 (*system.add_node (node_flags)); auto & node2 (*system.add_node (node_flags)); nano::keypair key2; - nano::genesis genesis; nano::send_block_builder builder; auto send1 = builder.make_block () - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .destination (key2.pub) .balance (std::numeric_limits::max () - node1.config.receive_minimum.number ()) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*system.work.generate (genesis.hash ())) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); auto send2 = builder.make_block () - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .destination (key2.pub) .balance (std::numeric_limits::max () - node1.config.receive_minimum.number () * 2) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*system.work.generate (genesis.hash ())) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); auto send2_corrupt (std::make_shared (*send2)); send2_corrupt->signature = nano::signature (123); @@ -3226,33 +3202,32 @@ TEST (node, fork_election_invalid_block_signature) { nano::system system (1); auto & node1 (*system.nodes[0]); - nano::genesis genesis; nano::block_builder builder; auto send1 = builder.state () .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) - .work (*system.work.generate (genesis.hash ())) + .work (*system.work.generate (nano::dev::genesis->hash ())) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .build_shared (); auto send2 = builder.state () .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - 2 * nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) - .work (*system.work.generate (genesis.hash ())) + .work (*system.work.generate (nano::dev::genesis->hash ())) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .build_shared (); auto send3 = builder.state () .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - 2 * nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) - .work (*system.work.generate (genesis.hash ())) + .work (*system.work.generate (nano::dev::genesis->hash ())) .sign (nano::dev::genesis_key.prv, 0) // Invalid signature .build_shared (); auto channel1 (node1.network.udp_channels.create (node1.network.endpoint ())); @@ -3388,16 +3363,15 @@ TEST (node, block_processor_reject_state) { nano::system system (1); auto & node (*system.nodes[0]); - nano::genesis genesis; nano::state_block_builder builder; auto send1 = builder.make_block () .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*node.work_generate_blocking (genesis.hash ())) + .work (*node.work_generate_blocking (nano::dev::genesis->hash ())) .build_shared (); send1->signature.bytes[0] ^= 1; ASSERT_FALSE (node.ledger.block_or_pruned_exists (send1->hash ())); @@ -3407,12 +3381,12 @@ TEST (node, block_processor_reject_state) ASSERT_FALSE (node.ledger.block_or_pruned_exists (send1->hash ())); auto send2 = builder.make_block () .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - 2 * nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*node.work_generate_blocking (genesis.hash ())) + .work (*node.work_generate_blocking (nano::dev::genesis->hash ())) .build_shared (); node.process_active (send2); auto flushed2 = std::async (std::launch::async, [&node] { node.block_processor.flush (); }); @@ -3427,16 +3401,15 @@ TEST (node, block_processor_full) node_flags.force_use_write_database_queue = true; node_flags.block_processor_full_size = 3; auto & node = *system.add_node (nano::node_config (nano::get_available_port (), system.logging), node_flags); - nano::genesis genesis; nano::state_block_builder builder; auto send1 = builder.make_block () .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*node.work_generate_blocking (genesis.hash ())) + .work (*node.work_generate_blocking (nano::dev::genesis->hash ())) .build_shared (); auto send2 = builder.make_block () .account (nano::dev::genesis_key.pub) @@ -3474,16 +3447,15 @@ TEST (node, block_processor_half_full) node_flags.block_processor_full_size = 6; node_flags.force_use_write_database_queue = true; auto & node = *system.add_node (nano::node_config (nano::get_available_port (), system.logging), node_flags); - nano::genesis genesis; nano::state_block_builder builder; auto send1 = builder.make_block () .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*node.work_generate_blocking (genesis.hash ())) + .work (*node.work_generate_blocking (nano::dev::genesis->hash ())) .build_shared (); auto send2 = builder.make_block () .account (nano::dev::genesis_key.pub) @@ -3520,14 +3492,13 @@ TEST (node, confirm_back) nano::system system (1); nano::keypair key; auto & node (*system.nodes[0]); - nano::genesis genesis; auto genesis_start_balance (node.balance (nano::dev::genesis_key.pub)); auto send1 = nano::send_block_builder () - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .destination (key.pub) .balance (genesis_start_balance - 1) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*system.work.generate (genesis.hash ())) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); nano::state_block_builder builder; auto open = builder.make_block () @@ -3723,7 +3694,6 @@ TEST (node, dont_write_lock_node) nano::logger_mt logger; auto store = nano::make_store (logger, path, false, true); { - nano::genesis genesis; nano::ledger_cache ledger_cache; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger_cache); @@ -3776,17 +3746,16 @@ TEST (node, bidirectional_tcp) ASSERT_EQ (node1->network.endpoint (), list2[0]->get_endpoint ()); ASSERT_EQ (node1->node_id.pub, list2[0]->get_node_id ()); // Test block propagation from node 1 - nano::genesis genesis; nano::keypair key; nano::state_block_builder builder; auto send1 = builder.make_block () .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*node1->work_generate_blocking (genesis.hash ())) + .work (*node1->work_generate_blocking (nano::dev::genesis->hash ())) .build_shared (); node1->process_active (send1); node1->block_processor.flush (); @@ -4659,7 +4628,7 @@ TEST (rep_crawler, recently_confirmed) nano::system system (1); auto & node1 (*system.nodes[0]); ASSERT_EQ (1, node1.ledger.cache.block_count); - auto const block = nano::genesis ().open; + auto const block = nano::dev::genesis; node1.active.add_recently_confirmed (block->qualified_root (), block->hash ()); auto & node2 (*system.add_node ()); system.wallet (1)->insert_adhoc (nano::dev::genesis_key.prv); @@ -4698,14 +4667,13 @@ TEST (node, pruning_automatic) nano::node_flags node_flags; node_flags.enable_pruning = true; auto & node1 = *system.add_node (node_config, node_flags); - nano::genesis genesis; nano::keypair key1; auto send1 = nano::send_block_builder () - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .destination (key1.pub) .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*system.work.generate (genesis.hash ())) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); auto send2 = nano::send_block_builder () .previous (send1->hash ()) @@ -4738,7 +4706,7 @@ TEST (node, pruning_automatic) ASSERT_TIMELY (2s, node1.store.pruned.count (node1.store.tx_begin_read ()) == 1); // Transaction commit ASSERT_EQ (1, node1.ledger.cache.pruned_count); ASSERT_EQ (3, node1.ledger.cache.block_count); - ASSERT_TRUE (node1.ledger.block_or_pruned_exists (genesis.hash ())); + ASSERT_TRUE (node1.ledger.block_or_pruned_exists (nano::dev::genesis->hash ())); ASSERT_TRUE (node1.ledger.block_or_pruned_exists (send1->hash ())); // true for pruned ASSERT_TRUE (node1.ledger.block_or_pruned_exists (send2->hash ())); } @@ -4751,14 +4719,13 @@ TEST (node, pruning_age) nano::node_flags node_flags; node_flags.enable_pruning = true; auto & node1 = *system.add_node (node_config, node_flags); - nano::genesis genesis; nano::keypair key1; auto send1 = nano::send_block_builder () - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .destination (key1.pub) .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*system.work.generate (genesis.hash ())) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); auto send2 = nano::send_block_builder () .previous (send1->hash ()) @@ -4795,7 +4762,7 @@ TEST (node, pruning_age) node1.ledger_pruning (1, true, false); ASSERT_EQ (1, node1.ledger.cache.pruned_count); ASSERT_EQ (3, node1.ledger.cache.block_count); - ASSERT_TRUE (node1.ledger.block_or_pruned_exists (genesis.hash ())); + ASSERT_TRUE (node1.ledger.block_or_pruned_exists (nano::dev::genesis->hash ())); ASSERT_TRUE (node1.ledger.block_or_pruned_exists (send1->hash ())); // true for pruned ASSERT_TRUE (node1.ledger.block_or_pruned_exists (send2->hash ())); } @@ -4808,14 +4775,13 @@ TEST (node, pruning_depth) nano::node_flags node_flags; node_flags.enable_pruning = true; auto & node1 = *system.add_node (node_config, node_flags); - nano::genesis genesis; nano::keypair key1; auto send1 = nano::send_block_builder () - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .destination (key1.pub) .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*system.work.generate (genesis.hash ())) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); auto send2 = nano::send_block_builder () .previous (send1->hash ()) @@ -4848,7 +4814,7 @@ TEST (node, pruning_depth) node1.ledger_pruning (1, true, false); ASSERT_EQ (1, node1.ledger.cache.pruned_count); ASSERT_EQ (3, node1.ledger.cache.block_count); - ASSERT_TRUE (node1.ledger.block_or_pruned_exists (genesis.hash ())); + ASSERT_TRUE (node1.ledger.block_or_pruned_exists (nano::dev::genesis->hash ())); ASSERT_TRUE (node1.ledger.block_or_pruned_exists (send1->hash ())); // true for pruned ASSERT_TRUE (node1.ledger.block_or_pruned_exists (send2->hash ())); } diff --git a/nano/core_test/processor_service.cpp b/nano/core_test/processor_service.cpp index 9d93cddd19..aa5b98d6a7 100644 --- a/nano/core_test/processor_service.cpp +++ b/nano/core_test/processor_service.cpp @@ -14,7 +14,6 @@ TEST (processor_service, bad_send_signature) ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -33,7 +32,6 @@ TEST (processor_service, bad_receive_signature) ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); diff --git a/nano/core_test/request_aggregator.cpp b/nano/core_test/request_aggregator.cpp index 664ddd6a96..525d40243c 100644 --- a/nano/core_test/request_aggregator.cpp +++ b/nano/core_test/request_aggregator.cpp @@ -13,9 +13,8 @@ TEST (request_aggregator, one) nano::node_config node_config (nano::get_available_port (), system.logging); node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto & node (*system.add_node (node_config)); - nano::genesis genesis; system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); - auto send1 (std::make_shared (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node.work_generate_blocking (genesis.hash ()))); + auto send1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node.work_generate_blocking (nano::dev::genesis->hash ()))); std::vector> request; request.emplace_back (send1->hash (), send1->root ()); auto channel (node.network.udp_channels.create (node.network.endpoint ())); @@ -49,18 +48,17 @@ TEST (request_aggregator, one_update) nano::node_config node_config (nano::get_available_port (), system.logging); node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto & node (*system.add_node (node_config)); - nano::genesis genesis; system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::keypair key1; auto send1 = nano::state_block_builder () .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*node.work_generate_blocking (genesis.hash ())) + .work (*node.work_generate_blocking (nano::dev::genesis->hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, node.ledger.process (node.store.tx_begin_write (), *send1).code); node.confirmation_height_processor.add (send1); @@ -115,18 +113,17 @@ TEST (request_aggregator, two) nano::node_config node_config (nano::get_available_port (), system.logging); node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto & node (*system.add_node (node_config)); - nano::genesis genesis; system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::keypair key1; nano::state_block_builder builder; auto send1 = builder.make_block () .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - 1) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*node.work_generate_blocking (genesis.hash ())) + .work (*node.work_generate_blocking (nano::dev::genesis->hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, node.ledger.process (node.store.tx_begin_write (), *send1).code); node.confirmation_height_processor.add (send1); @@ -192,9 +189,8 @@ TEST (request_aggregator, two_endpoints) auto & node1 (*system.add_node (node_config, node_flags)); node_config.peering_port = nano::get_available_port (); auto & node2 (*system.add_node (node_config, node_flags)); - nano::genesis genesis; system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); - auto send1 (std::make_shared (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - 1, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1.work_generate_blocking (genesis.hash ()))); + auto send1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - 1, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1.work_generate_blocking (nano::dev::genesis->hash ()))); std::vector> request; request.emplace_back (send1->hash (), send1->root ()); ASSERT_EQ (nano::process_result::progress, node1.ledger.process (node1.store.tx_begin_write (), *send1).code); @@ -224,11 +220,10 @@ TEST (request_aggregator, split) nano::node_config node_config (nano::get_available_port (), system.logging); node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto & node (*system.add_node (node_config)); - nano::genesis genesis; system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); std::vector> request; std::vector> blocks; - auto previous = genesis.hash (); + auto previous = nano::dev::genesis->hash (); // Add max_vbh + 1 blocks and request votes for them for (size_t i (0); i <= max_vbh; ++i) { @@ -278,9 +273,8 @@ TEST (request_aggregator, channel_lifetime) nano::node_config node_config (nano::get_available_port (), system.logging); node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto & node (*system.add_node (node_config)); - nano::genesis genesis; system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); - auto send1 (std::make_shared (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node.work_generate_blocking (genesis.hash ()))); + auto send1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node.work_generate_blocking (nano::dev::genesis->hash ()))); ASSERT_EQ (nano::process_result::progress, node.ledger.process (node.store.tx_begin_write (), *send1).code); std::vector> request; request.emplace_back (send1->hash (), send1->root ()); @@ -299,9 +293,8 @@ TEST (request_aggregator, channel_update) nano::node_config node_config (nano::get_available_port (), system.logging); node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto & node (*system.add_node (node_config)); - nano::genesis genesis; system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); - auto send1 (std::make_shared (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node.work_generate_blocking (genesis.hash ()))); + auto send1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node.work_generate_blocking (nano::dev::genesis->hash ()))); ASSERT_EQ (nano::process_result::progress, node.ledger.process (node.store.tx_begin_write (), *send1).code); std::vector> request; request.emplace_back (send1->hash (), send1->root ()); @@ -328,9 +321,8 @@ TEST (request_aggregator, channel_max_queue) node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; node_config.max_queued_requests = 1; auto & node (*system.add_node (node_config)); - nano::genesis genesis; system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); - auto send1 (std::make_shared (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node.work_generate_blocking (genesis.hash ()))); + auto send1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node.work_generate_blocking (nano::dev::genesis->hash ()))); ASSERT_EQ (nano::process_result::progress, node.ledger.process (node.store.tx_begin_write (), *send1).code); std::vector> request; request.emplace_back (send1->hash (), send1->root ()); @@ -346,9 +338,8 @@ TEST (request_aggregator, unique) nano::node_config node_config (nano::get_available_port (), system.logging); node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto & node (*system.add_node (node_config)); - nano::genesis genesis; system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); - auto send1 (std::make_shared (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node.work_generate_blocking (genesis.hash ()))); + auto send1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node.work_generate_blocking (nano::dev::genesis->hash ()))); ASSERT_EQ (nano::process_result::progress, node.ledger.process (node.store.tx_begin_write (), *send1).code); std::vector> request; request.emplace_back (send1->hash (), send1->root ()); @@ -371,7 +362,6 @@ TEST (request_aggregator, cannot_vote) auto & node (*system.add_node (flags)); // This prevents activation of blocks which are cemented node.confirmation_height_processor.cemented_observers.clear (); - nano::genesis genesis; nano::state_block_builder builder; auto send1 = builder.make_block () .account (nano::dev::genesis_key.pub) diff --git a/nano/core_test/vote_processor.cpp b/nano/core_test/vote_processor.cpp index b89f7e94c9..d3b1db2689 100644 --- a/nano/core_test/vote_processor.cpp +++ b/nano/core_test/vote_processor.cpp @@ -11,9 +11,8 @@ TEST (vote_processor, codes) { nano::system system (1); auto & node (*system.nodes[0]); - nano::genesis genesis; nano::keypair key; - auto vote (std::make_shared (key.pub, key.prv, 1, std::vector{ genesis.open->hash () })); + auto vote (std::make_shared (key.pub, key.prv, 1, std::vector{ nano::dev::genesis->hash () })); auto vote_invalid = std::make_shared (*vote); vote_invalid->signature.bytes[0] ^= 1; auto channel (std::make_shared (node)); @@ -28,9 +27,8 @@ TEST (vote_processor, codes) ASSERT_EQ (nano::vote_code::indeterminate, node.vote_processor.vote_blocking (vote, channel)); // First vote from an account for an ongoing election - genesis.open->sideband_set (nano::block_sideband (nano::dev::genesis->account (), 0, nano::dev::genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); - node.block_confirm (genesis.open); - ASSERT_NE (nullptr, node.active.election (genesis.open->qualified_root ())); + node.block_confirm (nano::dev::genesis); + ASSERT_NE (nullptr, node.active.election (nano::dev::genesis->qualified_root ())); ASSERT_EQ (nano::vote_code::vote, node.vote_processor.vote_blocking (vote, channel)); // Processing the same vote is a replay @@ -46,7 +44,7 @@ TEST (vote_processor, codes) ASSERT_EQ (nano::vote_code::vote, node.vote_processor.vote_blocking (vote, channel)); // Once the election is removed (confirmed / dropped) the vote is again indeterminate - node.active.erase (*genesis.open); + node.active.erase (*nano::dev::genesis); ASSERT_EQ (nano::vote_code::indeterminate, node.vote_processor.vote_blocking (vote, channel)); } @@ -54,8 +52,7 @@ TEST (vote_processor, flush) { nano::system system (1); auto & node (*system.nodes[0]); - nano::genesis genesis; - auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 1, std::vector{ genesis.open->hash () })); + auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 1, std::vector{ nano::dev::genesis->hash () })); auto channel (std::make_shared (node)); for (unsigned i = 0; i < 2000; ++i) { @@ -71,16 +68,14 @@ TEST (vote_processor, invalid_signature) { nano::system system{ 1 }; auto & node = *system.nodes[0]; - nano::genesis genesis; nano::keypair key; - auto vote = std::make_shared (key.pub, key.prv, 1, std::vector{ genesis.open->hash () }); + auto vote = std::make_shared (key.pub, key.prv, 1, std::vector{ nano::dev::genesis->hash () }); auto vote_invalid = std::make_shared (*vote); vote_invalid->signature.bytes[0] ^= 1; auto channel = std::make_shared (node); - genesis.open->sideband_set (nano::block_sideband (nano::dev::genesis->account (), 0, nano::dev::genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); - node.block_confirm (genesis.open); - auto election = node.active.election (genesis.open->qualified_root ()); + node.block_confirm (nano::dev::genesis); + auto election = node.active.election (nano::dev::genesis->qualified_root ()); ASSERT_TRUE (election); ASSERT_EQ (1, election->votes ().size ()); node.vote_processor.vote (vote_invalid, channel); @@ -97,9 +92,8 @@ TEST (vote_processor, no_capacity) nano::node_flags node_flags; node_flags.vote_processor_capacity = 0; auto & node (*system.add_node (node_flags)); - nano::genesis genesis; nano::keypair key; - auto vote (std::make_shared (key.pub, key.prv, 1, std::vector{ genesis.open->hash () })); + auto vote (std::make_shared (key.pub, key.prv, 1, std::vector{ nano::dev::genesis->hash () })); auto channel (std::make_shared (node)); ASSERT_TRUE (node.vote_processor.vote (vote, channel)); } @@ -110,9 +104,8 @@ TEST (vote_processor, overflow) nano::node_flags node_flags; node_flags.vote_processor_capacity = 1; auto & node (*system.add_node (node_flags)); - nano::genesis genesis; nano::keypair key; - auto vote (std::make_shared (key.pub, key.prv, 1, std::vector{ genesis.open->hash () })); + auto vote (std::make_shared (key.pub, key.prv, 1, std::vector{ nano::dev::genesis->hash () })); auto channel (std::make_shared (node)); // No way to lock the processor, but queueing votes in quick succession must result in overflow diff --git a/nano/core_test/wallet.cpp b/nano/core_test/wallet.cpp index ec504d7d44..979295c72f 100644 --- a/nano/core_test/wallet.cpp +++ b/nano/core_test/wallet.cpp @@ -636,7 +636,7 @@ TEST (wallet, work) nano::system system (1); auto wallet (system.wallet (0)); wallet->insert_adhoc (nano::dev::genesis_key.prv); - nano::genesis genesis; + wallet->insert_adhoc (nano::dev::genesis_key.prv); auto done (false); system.deadline_set (20s); while (!done) @@ -645,7 +645,7 @@ TEST (wallet, work) uint64_t work (0); if (!wallet->store.work_get (transaction, nano::dev::genesis_key.pub, work)) { - done = nano::work_difficulty (genesis.open->work_version (), genesis.hash (), work) >= system.nodes[0]->default_difficulty (genesis.open->work_version ()); + done = nano::work_difficulty (nano::dev::genesis->work_version (), nano::dev::genesis->hash (), work) >= system.nodes[0]->default_difficulty (nano::dev::genesis->work_version ()); } ASSERT_NO_ERROR (system.poll ()); } diff --git a/nano/core_test/wallets.cpp b/nano/core_test/wallets.cpp index e7703f995b..114f807842 100644 --- a/nano/core_test/wallets.cpp +++ b/nano/core_test/wallets.cpp @@ -97,8 +97,7 @@ TEST (wallets, vote_minimum) auto & node1 (*system.nodes[0]); nano::keypair key1; nano::keypair key2; - nano::genesis genesis; - nano::state_block send1 (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, std::numeric_limits::max () - node1.config.vote_minimum.number (), key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (genesis.hash ())); + nano::state_block send1 (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, std::numeric_limits::max () - node1.config.vote_minimum.number (), key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, node1.process (send1).code); nano::state_block open1 (key1.pub, 0, key1.pub, node1.config.vote_minimum.number (), send1.hash (), key1.prv, key1.pub, *system.work.generate (key1.pub)); ASSERT_EQ (nano::process_result::progress, node1.process (open1).code); diff --git a/nano/core_test/websocket.cpp b/nano/core_test/websocket.cpp index 90970b34ee..546280d1ca 100644 --- a/nano/core_test/websocket.cpp +++ b/nano/core_test/websocket.cpp @@ -140,8 +140,7 @@ TEST (websocket, stopped_election) // Create election, then erase it, causing a websocket message to be emitted nano::keypair key1; - nano::genesis genesis; - auto send1 (std::make_shared (genesis.hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (genesis.hash ()))); + auto send1 (std::make_shared (nano::dev::genesis->hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); nano::publish publish1 (send1); auto channel1 (node1->network.udp_channels.create (node1->network.endpoint ())); node1->network.inbound (publish1, channel1); @@ -422,7 +421,6 @@ TEST (websocket, confirmation_options_update) // Confirm a block system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); - nano::genesis genesis; nano::keypair key; nano::state_block_builder builder; auto previous (node1->latest (nano::dev::genesis_key.pub)); @@ -532,8 +530,7 @@ TEST (websocket, vote_options_type) ASSERT_TIMELY (5s, ack_ready); // Custom made votes for simplicity - nano::genesis genesis; - auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, genesis.open)); + auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, nano::dev::genesis)); nano::websocket::message_builder builder; auto msg (builder.vote_received (vote, nano::vote_code::replay)); node1->websocket_server->broadcast (msg); @@ -913,15 +910,14 @@ TEST (websocket, new_unconfirmed_block) nano::state_block_builder builder; // Process a new block - nano::genesis genesis; auto send1 = builder .account (nano::dev::genesis_key.pub) - .previous (genesis.hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - 1) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*system.work.generate (genesis.hash ())) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); ASSERT_EQ (nano::process_result::progress, node1->process_local (send1).code); diff --git a/nano/slow_test/node.cpp b/nano/slow_test/node.cpp index 0d03564aa4..adb801d104 100644 --- a/nano/slow_test/node.cpp +++ b/nano/slow_test/node.cpp @@ -95,13 +95,12 @@ TEST (ledger, deep_account_compute) ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats); - nano::genesis genesis; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key; auto balance (nano::dev::genesis_amount - 1); - nano::send_block send (genesis.hash (), key.pub, balance, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (genesis.hash ())); + nano::send_block send (nano::dev::genesis->hash (), key.pub, balance, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); nano::open_block open (send.hash (), nano::dev::genesis_key.pub, key.pub, key.prv, key.pub, *pool.generate (key.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open).code); @@ -734,7 +733,7 @@ TEST (confirmation_height, dynamic_algorithm) nano::keypair key; system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto const num_blocks = nano::confirmation_height::unbounded_cutoff; - auto latest_genesis = nano::genesis ().open; + auto latest_genesis = nano::dev::genesis; std::vector> state_blocks; for (auto i = 0; i < num_blocks; ++i) { @@ -966,7 +965,6 @@ TEST (confirmation_height, many_accounts_send_receive_self_no_elections) auto path (nano::unique_path ()); auto store = nano::make_store (logger, path); ASSERT_TRUE (!store->init_error ()); - nano::genesis genesis; nano::stat stats; nano::ledger ledger (*store, stats); nano::write_database_queue write_database_queue (false); @@ -1305,7 +1303,6 @@ TEST (telemetry, under_load) auto node = system.add_node (node_config, node_flags); node_config.peering_port = nano::get_available_port (); auto node1 = system.add_node (node_config, node_flags); - nano::genesis genesis; nano::keypair key; nano::keypair key1; system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); @@ -1446,8 +1443,7 @@ TEST (telemetry, many_nodes) // Give all nodes a non-default number of blocks nano::keypair key; - nano::genesis genesis; - nano::state_block send (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Mxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (genesis.hash ())); + nano::state_block send (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Mxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ())); for (auto node : system.nodes) { auto transaction (node->store.tx_begin_write ()); @@ -1497,7 +1493,7 @@ TEST (telemetry, many_nodes) ASSERT_EQ (data.pre_release_version, nano::get_pre_release_node_version ()); ASSERT_EQ (data.maker, 0); ASSERT_LT (data.uptime, 100); - ASSERT_EQ (data.genesis_block, genesis.hash ()); + ASSERT_EQ (data.genesis_block, nano::dev::genesis->hash ()); ASSERT_LE (data.timestamp, std::chrono::system_clock::now ()); ASSERT_EQ (data.active_difficulty, system.nodes.front ()->default_difficulty (nano::work_version::work_1)); } @@ -1724,7 +1720,6 @@ TEST (node, mass_block_new) } }; - nano::genesis genesis; nano::keypair key; std::vector keys (num_blocks); nano::state_block_builder builder; diff --git a/nano/test_common/system.cpp b/nano/test_common/system.cpp index 56d996cf0a..fadbd2657c 100644 --- a/nano/test_common/system.cpp +++ b/nano/test_common/system.cpp @@ -365,8 +365,7 @@ void nano::system::generate_rollback (nano::node & node_a, std::vector Date: Sat, 24 Jul 2021 17:54:16 +0100 Subject: [PATCH 104/346] Initializing sideband when creating constants, rather than elsewhere. --- nano/secure/common.cpp | 18 +++++++----------- nano/secure/common.hpp | 4 ++-- nano/secure/store_partial.hpp | 11 +++++------ 3 files changed, 14 insertions(+), 19 deletions(-) diff --git a/nano/secure/common.cpp b/nano/secure/common.cpp index 58c02c9c67..c75f5d1dea 100644 --- a/nano/secure/common.cpp +++ b/nano/secure/common.cpp @@ -80,19 +80,10 @@ char const * live_canary_public_key_data = "7CBAF192A3763DAEC9F9BAC1B2CDF665D836 std::string const test_canary_public_key_data = nano::get_env_or_default ("NANO_TEST_CANARY_PUB", "3BAD2C554ACE05F5E528FBBCE79D51E552C55FA765CCFD89B289C4835DE5F04A"); // nano_1gxf7jcnomi7yqkkjyxwwygo5sckrohtgsgezp6u74g6ifgydw4cajwbk8bf } -nano::ledger_constants nano::dev::constants{ nano::networks::nano_dev_network }; -std::shared_ptr & nano::dev::genesis = nano::dev::constants.genesis; nano::keypair nano::dev::genesis_key{ dev_private_key_data }; nano::uint128_t nano::dev::genesis_amount{ std::numeric_limits::max () }; -namespace { -struct genesis_sideband_initializer { -genesis_sideband_initializer () -{ - nano::dev::genesis->sideband_set (nano::block_sideband (nano::dev::genesis->account (), 0, nano::dev::genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); -} -}; -genesis_sideband_initializer initializer; -} +nano::ledger_constants nano::dev::constants{ nano::networks::nano_dev_network }; +std::shared_ptr & nano::dev::genesis = nano::dev::constants.genesis; nano::network_params::network_params () : network_params (network_constants::active_network) @@ -139,6 +130,11 @@ nano::ledger_constants::ledger_constants (nano::networks network_a) : nano_test_final_votes_canary_height (1), final_votes_canary_height (network_a == nano::networks::nano_dev_network ? nano_dev_final_votes_canary_height : network_a == nano::networks::nano_beta_network ? nano_beta_final_votes_canary_height : network_a == nano::networks::nano_test_network ? nano_test_final_votes_canary_height : nano_live_final_votes_canary_height) { + nano_beta_genesis->sideband_set (nano::block_sideband (nano_beta_genesis->account (), 0, nano::dev::genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); + nano_dev_genesis->sideband_set (nano::block_sideband (nano_dev_genesis->account (), 0, nano::dev::genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); + nano_live_genesis->sideband_set (nano::block_sideband (nano_live_genesis->account (), 0, nano::dev::genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); + nano_test_genesis->sideband_set (nano::block_sideband (nano_test_genesis->account (), 0, nano::dev::genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); + nano::link epoch_link_v1; const char * epoch_message_v1 ("epoch v1 block"); strncpy ((char *)epoch_link_v1.bytes.data (), epoch_message_v1, epoch_link_v1.bytes.size ()); diff --git a/nano/secure/common.hpp b/nano/secure/common.hpp index 572536062b..96f2ebc6b6 100644 --- a/nano/secure/common.hpp +++ b/nano/secure/common.hpp @@ -395,10 +395,10 @@ class ledger_constants namespace dev { - extern nano::ledger_constants constants; - extern std::shared_ptr & genesis; extern nano::keypair genesis_key; extern nano::uint128_t genesis_amount; + extern nano::ledger_constants constants; + extern std::shared_ptr & genesis; } /** Constants which depend on random values (this class should never be used globally due to CryptoPP globals potentially not being initialized) */ diff --git a/nano/secure/store_partial.hpp b/nano/secure/store_partial.hpp index 666a9b8d6b..950fd26f80 100644 --- a/nano/secure/store_partial.hpp +++ b/nano/secure/store_partial.hpp @@ -105,16 +105,15 @@ class store_partial : public store */ void initialize (nano::write_transaction const & transaction_a, nano::ledger_cache & ledger_cache_a) override { - auto & genesis = *network_params.ledger.genesis; - auto hash_l (genesis.hash ()); + debug_assert (network_params.ledger.genesis->has_sideband ()); debug_assert (account.begin (transaction_a) == account.end ()); - genesis.sideband_set (nano::block_sideband (network_params.ledger.genesis_account (), 0, nano::dev::genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); - block.put (transaction_a, hash_l, genesis); + auto hash_l (network_params.ledger.genesis->hash ()); + block.put (transaction_a, hash_l, *network_params.ledger.genesis); ++ledger_cache_a.block_count; - confirmation_height.put (transaction_a, network_params.ledger.genesis_account (), nano::confirmation_height_info{ 1, genesis.hash () }); + confirmation_height.put (transaction_a, network_params.ledger.genesis_account (), nano::confirmation_height_info{ 1, network_params.ledger.genesis->hash () }); ++ledger_cache_a.cemented_count; ledger_cache_a.final_votes_confirmation_canary = (network_params.ledger.final_votes_canary_account == network_params.ledger.genesis_account () && 1 >= network_params.ledger.final_votes_canary_height); - account.put (transaction_a, network_params.ledger.genesis_account (), { hash_l, network_params.ledger.genesis_account (), genesis.hash (), std::numeric_limits::max (), nano::seconds_since_epoch (), 1, nano::epoch::epoch_0 }); + account.put (transaction_a, network_params.ledger.genesis_account (), { hash_l, network_params.ledger.genesis_account (), network_params.ledger.genesis->hash (), std::numeric_limits::max (), nano::seconds_since_epoch (), 1, nano::epoch::epoch_0 }); ++ledger_cache_a.account_count; ledger_cache_a.rep_weights.representation_put (network_params.ledger.genesis_account (), std::numeric_limits::max ()); frontier.put (transaction_a, hash_l, network_params.ledger.genesis_account ()); From 91113e7d23709ef6af215c9ae8cab7a8b3bc1e68 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Sat, 24 Jul 2021 23:37:02 +0100 Subject: [PATCH 105/346] Removing genesis_hash function since it can be directly queried easily. --- nano/core_test/network_filter.cpp | 4 ++-- nano/node/cli.cpp | 4 ++-- nano/node/json_handler.cpp | 2 +- nano/node/telemetry.cpp | 4 ++-- nano/secure/common.cpp | 7 ------- nano/secure/common.hpp | 1 - nano/secure/ledger.cpp | 2 +- nano/test_common/system.cpp | 2 +- nano/test_common/telemetry.cpp | 2 +- 9 files changed, 10 insertions(+), 18 deletions(-) diff --git a/nano/core_test/network_filter.cpp b/nano/core_test/network_filter.cpp index fbc7bd965f..747cdff447 100644 --- a/nano/core_test/network_filter.cpp +++ b/nano/core_test/network_filter.cpp @@ -40,7 +40,7 @@ TEST (network_filter, unit) nano::state_block_builder builder; auto new_block = builder .account (nano::dev::genesis_key.pub) - .previous (constants.genesis_hash ()) + .previous (constants.genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - 10 * nano::xrb_ratio) .link (nano::public_key ()) @@ -70,7 +70,7 @@ TEST (network_filter, many) nano::state_block_builder builder; auto block = builder .account (nano::dev::genesis_key.pub) - .previous (constants.genesis_hash ()) + .previous (constants.genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::genesis_amount - i * 10 * nano::xrb_ratio) .link (key1.pub) diff --git a/nano/node/cli.cpp b/nano/node/cli.cpp index b8c76d3735..485ba95903 100644 --- a/nano/node/cli.cpp +++ b/nano/node/cli.cpp @@ -577,7 +577,7 @@ std::error_code nano::handle_node_options (boost::program_options::variables_map if (account == node.node->network_params.ledger.genesis_account ()) { conf_height_reset_num = 1; - node.node->store.confirmation_height.put (transaction, account, { confirmation_height_info.height, node.node->network_params.ledger.genesis_hash () }); + node.node->store.confirmation_height.put (transaction, account, { confirmation_height_info.height, node.node->network_params.ledger.genesis->hash () }); } else { @@ -1307,7 +1307,7 @@ void reset_confirmation_heights (nano::write_transaction const & transaction, na // Then make sure the confirmation height of the genesis account open block is 1 nano::network_params network_params; - store.confirmation_height.put (transaction, network_params.ledger.genesis_account (), { 1, network_params.ledger.genesis_hash () }); + store.confirmation_height.put (transaction, network_params.ledger.genesis_account (), { 1, network_params.ledger.genesis->hash () }); } bool is_using_rocksdb (boost::filesystem::path const & data_path, boost::program_options::variables_map const & vm, std::error_code & ec) diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index 6e386042ca..82f8b2f2b8 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -4146,7 +4146,7 @@ void nano::json_handler::version () response_l.put ("node_vendor", boost::str (boost::format ("Nano %1%") % NANO_VERSION_STRING)); response_l.put ("store_vendor", node.store.vendor_get ()); response_l.put ("network", node.network_params.network.get_current_network_as_string ()); - response_l.put ("network_identifier", node.network_params.ledger.genesis_hash ().to_string ()); + response_l.put ("network_identifier", node.network_params.ledger.genesis->hash ().to_string ()); response_l.put ("build_info", BUILD_INFO); response_errors (); } diff --git a/nano/node/telemetry.cpp b/nano/node/telemetry.cpp index 35144862a7..84a6c288ef 100644 --- a/nano/node/telemetry.cpp +++ b/nano/node/telemetry.cpp @@ -92,7 +92,7 @@ bool nano::telemetry::verify_message (nano::telemetry_ack const & message_a, nan if (!remove_channel) { // Check for different genesis blocks - remove_channel = (message_a.data.genesis_block != network_params.ledger.genesis_hash ()); + remove_channel = (message_a.data.genesis_block != network_params.ledger.genesis->hash ()); if (remove_channel) { stats.inc (nano::stat::type::telemetry, nano::stat::detail::different_genesis_hash); @@ -634,7 +634,7 @@ nano::telemetry_data nano::local_telemetry_data (nano::ledger const & ledger_a, telemetry_data.protocol_version = network_params_a.protocol.protocol_version; telemetry_data.uptime = std::chrono::duration_cast (std::chrono::steady_clock::now () - statup_time_a).count (); telemetry_data.unchecked_count = ledger_a.store.unchecked.count (ledger_a.store.tx_begin_read ()); - telemetry_data.genesis_block = network_params_a.ledger.genesis_hash (); + telemetry_data.genesis_block = network_params_a.ledger.genesis->hash (); telemetry_data.peer_count = nano::narrow_cast (network_a.size ()); telemetry_data.account_count = ledger_a.cache.account_count; telemetry_data.major_version = nano::get_major_node_version (); diff --git a/nano/secure/common.cpp b/nano/secure/common.cpp index c75f5d1dea..3361ceaa98 100644 --- a/nano/secure/common.cpp +++ b/nano/secure/common.cpp @@ -157,13 +157,6 @@ nano::account nano::ledger_constants::genesis_account () const return result; } -nano::block_hash nano::ledger_constants::genesis_hash () const -{ - auto result = genesis->hash (); - debug_assert (!result.is_zero ()); - return result; -} - nano::random_constants::random_constants () { nano::random_pool::generate_block (not_an_account.bytes.data (), not_an_account.bytes.size ()); diff --git a/nano/secure/common.hpp b/nano/secure/common.hpp index 96f2ebc6b6..a0f59706fd 100644 --- a/nano/secure/common.hpp +++ b/nano/secure/common.hpp @@ -369,7 +369,6 @@ class ledger_constants ledger_constants (nano::network_constants & network_constants); ledger_constants (nano::networks network_a); nano::account genesis_account () const; - nano::block_hash genesis_hash () const; nano::keypair zero_key; nano::account nano_beta_account; nano::account nano_live_account; diff --git a/nano/secure/ledger.cpp b/nano/secure/ledger.cpp index 551431da6d..72723083b8 100644 --- a/nano/secure/ledger.cpp +++ b/nano/secure/ledger.cpp @@ -1342,7 +1342,7 @@ uint64_t nano::ledger::pruning_action (nano::write_transaction & transaction_a, { uint64_t pruned_count (0); nano::block_hash hash (hash_a); - while (!hash.is_zero () && hash != network_params.ledger.genesis_hash ()) + while (!hash.is_zero () && hash != network_params.ledger.genesis->hash ()) { auto block (store.block.get (transaction_a, hash)); if (block != nullptr) diff --git a/nano/test_common/system.cpp b/nano/test_common/system.cpp index fadbd2657c..c5747f9620 100644 --- a/nano/test_common/system.cpp +++ b/nano/test_common/system.cpp @@ -365,7 +365,7 @@ void nano::system::generate_rollback (nano::node & node_a, std::vectorhash ()) { accounts_a[index] = accounts_a[accounts_a.size () - 1]; accounts_a.pop_back (); diff --git a/nano/test_common/telemetry.cpp b/nano/test_common/telemetry.cpp index fc2d2dd0a4..2ecc2897a1 100644 --- a/nano/test_common/telemetry.cpp +++ b/nano/test_common/telemetry.cpp @@ -13,7 +13,7 @@ void nano::compare_default_telemetry_response_data_excluding_signature (nano::te ASSERT_EQ (telemetry_data_a.unchecked_count, 0); ASSERT_EQ (telemetry_data_a.account_count, 1); ASSERT_LT (telemetry_data_a.uptime, 100); - ASSERT_EQ (telemetry_data_a.genesis_block, network_params_a.ledger.genesis_hash ()); + ASSERT_EQ (telemetry_data_a.genesis_block, network_params_a.ledger.genesis->hash ()); ASSERT_EQ (telemetry_data_a.major_version, nano::get_major_node_version ()); ASSERT_EQ (telemetry_data_a.minor_version, nano::get_minor_node_version ()); ASSERT_EQ (telemetry_data_a.patch_version, nano::get_patch_node_version ()); From e76f0c40cba9f1218c480b057437c8f579343db2 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Sun, 25 Jul 2021 00:25:27 +0100 Subject: [PATCH 106/346] Removing genesis_account function since it can be directly queried easily. --- nano/node/bootstrap/bootstrap_lazy.cpp | 2 +- nano/node/cli.cpp | 4 ++-- nano/node/json_handler.cpp | 6 +++--- nano/node/node.cpp | 2 +- nano/node/nodeconfig.cpp | 4 ++-- nano/qt/qt.cpp | 4 ++-- nano/secure/common.cpp | 9 +-------- nano/secure/common.hpp | 1 - nano/secure/ledger.cpp | 4 ++-- nano/secure/store_partial.hpp | 10 +++++----- nano/test_common/system.cpp | 2 +- 11 files changed, 20 insertions(+), 28 deletions(-) diff --git a/nano/node/bootstrap/bootstrap_lazy.cpp b/nano/node/bootstrap/bootstrap_lazy.cpp index d30a7d1895..e7fa1198d1 100644 --- a/nano/node/bootstrap/bootstrap_lazy.cpp +++ b/nano/node/bootstrap/bootstrap_lazy.cpp @@ -247,7 +247,7 @@ bool nano::bootstrap_attempt_lazy::process_block_lazy (std::shared_ptrsource ().is_zero () && !node->ledger.block_or_pruned_exists (block_a->source ()) && block_a->source () != node->network_params.ledger.genesis_account ()) + if (!block_a->source ().is_zero () && !node->ledger.block_or_pruned_exists (block_a->source ()) && block_a->source () != node->network_params.ledger.genesis->account ()) { lazy_add (block_a->source (), retry_limit); } diff --git a/nano/node/cli.cpp b/nano/node/cli.cpp index 485ba95903..e72153fd2c 100644 --- a/nano/node/cli.cpp +++ b/nano/node/cli.cpp @@ -574,7 +574,7 @@ std::error_code nano::handle_node_options (boost::program_options::variables_map { auto transaction (node.node->store.tx_begin_write ()); auto conf_height_reset_num = 0; - if (account == node.node->network_params.ledger.genesis_account ()) + if (account == node.node->network_params.ledger.genesis->account ()) { conf_height_reset_num = 1; node.node->store.confirmation_height.put (transaction, account, { confirmation_height_info.height, node.node->network_params.ledger.genesis->hash () }); @@ -1307,7 +1307,7 @@ void reset_confirmation_heights (nano::write_transaction const & transaction, na // Then make sure the confirmation height of the genesis account open block is 1 nano::network_params network_params; - store.confirmation_height.put (transaction, network_params.ledger.genesis_account (), { 1, network_params.ledger.genesis->hash () }); + store.confirmation_height.put (transaction, network_params.ledger.genesis->account (), { 1, network_params.ledger.genesis->hash () }); } bool is_using_rocksdb (boost::filesystem::path const & data_path, boost::program_options::variables_map const & vm, std::error_code & ec) diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index 82f8b2f2b8..78107ffc61 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -1041,7 +1041,7 @@ void nano::json_handler::active_difficulty () void nano::json_handler::available_supply () { - auto genesis_balance (node.balance (node.network_params.ledger.genesis_account ())); // Cold storage genesis + auto genesis_balance (node.balance (node.network_params.ledger.genesis->account ())); // Cold storage genesis auto landing_balance (node.balance (nano::account ("059F68AAB29DE0D3A27443625C7EA9CDDB6517A8B76FE37727EF6A4D76832AD5"))); // Active unavailable account auto faucet_balance (node.balance (nano::account ("8E319CE6F3025E5B2DF66DA7AB1467FE48F1679C13DD43BFDB29FA2E9FC40D3B"))); // Faucet account auto burned_balance ((node.balance_pending (nano::account (0), false)).second); // Burning 0 account @@ -2318,7 +2318,7 @@ class history_visitor : public nano::block_visitor // Report opens as a receive tree.put ("type", "receive"); } - if (block_a.hashables.source != network_params.ledger.genesis_account ()) + if (block_a.hashables.source != network_params.ledger.genesis->account ()) { bool error_or_pruned (false); auto amount (handler.node.ledger.amount_safe (transaction, hash, error_or_pruned).convert_to ()); @@ -2334,7 +2334,7 @@ class history_visitor : public nano::block_visitor } else { - tree.put ("account", network_params.ledger.genesis_account ().to_account ()); + tree.put ("account", network_params.ledger.genesis->account ().to_account ()); tree.put ("amount", nano::dev::genesis_amount.convert_to ()); } } diff --git a/nano/node/node.cpp b/nano/node/node.cpp index c28a3e57ce..670f920cb4 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -1318,7 +1318,7 @@ void nano::node::process_confirmed_data (nano::transaction const & transaction_a bool error (false); auto previous_balance (ledger.balance_safe (transaction_a, previous, error)); auto block_balance (store.block.balance_calculated (block_a)); - if (hash_a != ledger.network_params.ledger.genesis_account ()) + if (hash_a != ledger.network_params.ledger.genesis->account ()) { if (!error) { diff --git a/nano/node/nodeconfig.cpp b/nano/node/nodeconfig.cpp index c422bf7ec1..15afe8f1c0 100644 --- a/nano/node/nodeconfig.cpp +++ b/nano/node/nodeconfig.cpp @@ -40,7 +40,7 @@ nano::node_config::node_config (uint16_t peering_port_a, nano::logging const & l { case nano::networks::nano_dev_network: enable_voting = true; - preconfigured_representatives.push_back (network_params.ledger.genesis_account ()); + preconfigured_representatives.push_back (network_params.ledger.genesis->account ()); break; case nano::networks::nano_beta_network: { @@ -63,7 +63,7 @@ nano::node_config::node_config (uint16_t peering_port_a, nano::logging const & l break; case nano::networks::nano_test_network: preconfigured_peers.push_back (default_test_peer_network); - preconfigured_representatives.push_back (network_params.ledger.genesis_account ()); + preconfigured_representatives.push_back (network_params.ledger.genesis->account ()); break; default: debug_assert (false); diff --git a/nano/qt/qt.cpp b/nano/qt/qt.cpp index e1caab3edc..70fc464ba8 100644 --- a/nano/qt/qt.cpp +++ b/nano/qt/qt.cpp @@ -544,7 +544,7 @@ class short_text_visitor : public nano::block_visitor { static nano::network_params params; type = "Receive"; - if (block_a.hashables.source != params.ledger.genesis_account ()) + if (block_a.hashables.source != params.ledger.genesis->account ()) { bool error_or_pruned (false); account = ledger.account_safe (transaction, block_a.hashables.source, error_or_pruned); @@ -556,7 +556,7 @@ class short_text_visitor : public nano::block_visitor } else { - account = params.ledger.genesis_account (); + account = params.ledger.genesis->account (); amount = nano::dev::genesis_amount; } } diff --git a/nano/secure/common.cpp b/nano/secure/common.cpp index 3361ceaa98..73dcf8be9e 100644 --- a/nano/secure/common.cpp +++ b/nano/secure/common.cpp @@ -138,7 +138,7 @@ nano::ledger_constants::ledger_constants (nano::networks network_a) : nano::link epoch_link_v1; const char * epoch_message_v1 ("epoch v1 block"); strncpy ((char *)epoch_link_v1.bytes.data (), epoch_message_v1, epoch_link_v1.bytes.size ()); - epochs.add (nano::epoch::epoch_1, genesis_account (), epoch_link_v1); + epochs.add (nano::epoch::epoch_1, genesis->account (), epoch_link_v1); nano::link epoch_link_v2; nano::account nano_live_epoch_v2_signer; @@ -150,13 +150,6 @@ nano::ledger_constants::ledger_constants (nano::networks network_a) : epochs.add (nano::epoch::epoch_2, epoch_v2_signer, epoch_link_v2); } -nano::account nano::ledger_constants::genesis_account () const -{ - auto result = genesis->account (); - debug_assert (!result.is_zero ()); - return result; -} - nano::random_constants::random_constants () { nano::random_pool::generate_block (not_an_account.bytes.data (), not_an_account.bytes.size ()); diff --git a/nano/secure/common.hpp b/nano/secure/common.hpp index a0f59706fd..9553adc367 100644 --- a/nano/secure/common.hpp +++ b/nano/secure/common.hpp @@ -368,7 +368,6 @@ class ledger_constants public: ledger_constants (nano::network_constants & network_constants); ledger_constants (nano::networks network_a); - nano::account genesis_account () const; nano::keypair zero_key; nano::account nano_beta_account; nano::account nano_live_account; diff --git a/nano/secure/ledger.cpp b/nano/secure/ledger.cpp index 72723083b8..501f2f7439 100644 --- a/nano/secure/ledger.cpp +++ b/nano/secure/ledger.cpp @@ -1102,7 +1102,7 @@ nano::account nano::ledger::account_safe (nano::transaction const & transaction_ // Return amount decrease or increase for block nano::uint128_t nano::ledger::amount (nano::transaction const & transaction_a, nano::account const & account_a) { - release_assert (account_a == network_params.ledger.genesis_account ()); + release_assert (account_a == network_params.ledger.genesis->account ()); return nano::dev::genesis_amount; } @@ -1204,7 +1204,7 @@ class dependent_block_visitor : public nano::block_visitor } void open_block (nano::open_block const & block_a) override { - if (block_a.source () != ledger.network_params.ledger.genesis_account ()) + if (block_a.source () != ledger.network_params.ledger.genesis->account ()) { result[0] = block_a.source (); } diff --git a/nano/secure/store_partial.hpp b/nano/secure/store_partial.hpp index 950fd26f80..58de2fb313 100644 --- a/nano/secure/store_partial.hpp +++ b/nano/secure/store_partial.hpp @@ -110,13 +110,13 @@ class store_partial : public store auto hash_l (network_params.ledger.genesis->hash ()); block.put (transaction_a, hash_l, *network_params.ledger.genesis); ++ledger_cache_a.block_count; - confirmation_height.put (transaction_a, network_params.ledger.genesis_account (), nano::confirmation_height_info{ 1, network_params.ledger.genesis->hash () }); + confirmation_height.put (transaction_a, network_params.ledger.genesis->account (), nano::confirmation_height_info{ 1, network_params.ledger.genesis->hash () }); ++ledger_cache_a.cemented_count; - ledger_cache_a.final_votes_confirmation_canary = (network_params.ledger.final_votes_canary_account == network_params.ledger.genesis_account () && 1 >= network_params.ledger.final_votes_canary_height); - account.put (transaction_a, network_params.ledger.genesis_account (), { hash_l, network_params.ledger.genesis_account (), network_params.ledger.genesis->hash (), std::numeric_limits::max (), nano::seconds_since_epoch (), 1, nano::epoch::epoch_0 }); + ledger_cache_a.final_votes_confirmation_canary = (network_params.ledger.final_votes_canary_account == network_params.ledger.genesis->account () && 1 >= network_params.ledger.final_votes_canary_height); + account.put (transaction_a, network_params.ledger.genesis->account (), { hash_l, network_params.ledger.genesis->account (), network_params.ledger.genesis->hash (), std::numeric_limits::max (), nano::seconds_since_epoch (), 1, nano::epoch::epoch_0 }); ++ledger_cache_a.account_count; - ledger_cache_a.rep_weights.representation_put (network_params.ledger.genesis_account (), std::numeric_limits::max ()); - frontier.put (transaction_a, hash_l, network_params.ledger.genesis_account ()); + ledger_cache_a.rep_weights.representation_put (network_params.ledger.genesis->account (), std::numeric_limits::max ()); + frontier.put (transaction_a, hash_l, network_params.ledger.genesis->account ()); } bool root_exists (nano::transaction const & transaction_a, nano::root const & root_a) override diff --git a/nano/test_common/system.cpp b/nano/test_common/system.cpp index c5747f9620..9fe6068ca9 100644 --- a/nano/test_common/system.cpp +++ b/nano/test_common/system.cpp @@ -397,7 +397,7 @@ void nano::system::generate_receive (nano::node & node_a) } if (send_block != nullptr) { - auto receive_error (wallet (0)->receive_sync (send_block, nano::ledger_constants (nano::networks::nano_dev_network).genesis_account (), std::numeric_limits::max ())); + auto receive_error (wallet (0)->receive_sync (send_block, nano::dev::genesis->account (), std::numeric_limits::max ())); (void)receive_error; } } From 8e7ac28806bc077a0741666a3289465fd2d9854e Mon Sep 17 00:00:00 2001 From: clemahieu Date: Sun, 25 Jul 2021 02:38:41 +0100 Subject: [PATCH 107/346] Moving nano::genesis_amount on to nano::ledger_constants --- nano/core_test/active_transactions.cpp | 70 ++-- nano/core_test/block_store.cpp | 42 +-- nano/core_test/bootstrap.cpp | 52 +-- nano/core_test/confirmation_height.cpp | 90 ++--- nano/core_test/confirmation_solicitor.cpp | 10 +- nano/core_test/election.cpp | 10 +- nano/core_test/election_scheduler.cpp | 10 +- nano/core_test/frontiers_confirmation.cpp | 6 +- nano/core_test/gap_cache.cpp | 12 +- nano/core_test/ledger.cpp | 432 +++++++++++----------- nano/core_test/network_filter.cpp | 4 +- nano/core_test/node.cpp | 170 ++++----- nano/core_test/request_aggregator.cpp | 24 +- nano/core_test/system.cpp | 28 +- nano/core_test/vote_processor.cpp | 4 +- nano/core_test/voting.cpp | 8 +- nano/core_test/wallet.cpp | 8 +- nano/core_test/wallets.cpp | 4 +- nano/core_test/websocket.cpp | 16 +- nano/node/json_handler.cpp | 6 +- nano/node/node.cpp | 2 +- nano/qt/qt.cpp | 2 +- nano/qt_test/qt.cpp | 6 +- nano/rpc_test/rpc.cpp | 140 +++---- nano/secure/common.cpp | 10 +- nano/secure/common.hpp | 2 +- nano/secure/ledger.cpp | 2 +- nano/slow_test/node.cpp | 32 +- nano/test_common/system.cpp | 4 +- 29 files changed, 603 insertions(+), 603 deletions(-) diff --git a/nano/core_test/active_transactions.cpp b/nano/core_test/active_transactions.cpp index f198e11f97..cfe8355eaa 100644 --- a/nano/core_test/active_transactions.cpp +++ b/nano/core_test/active_transactions.cpp @@ -20,7 +20,7 @@ TEST (active_transactions, confirm_active) auto send = nano::send_block_builder () .previous (nano::dev::genesis->hash ()) .destination (nano::public_key ()) - .balance (nano::dev::genesis_amount - 100) + .balance (nano::dev::constants.genesis_amount - 100) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); @@ -48,7 +48,7 @@ TEST (active_transactions, confirm_active) ASSERT_FALSE (peers.empty ()); { nano::lock_guard guard (node2.rep_crawler.probable_reps_mutex); - node2.rep_crawler.probable_reps.emplace (nano::dev::genesis_key.pub, nano::dev::genesis_amount, *peers.begin ()); + node2.rep_crawler.probable_reps.emplace (nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount, *peers.begin ()); } ASSERT_TIMELY (5s, election->votes ().size () != 1); // Votes were inserted (except for not_an_account) auto confirm_req_count (election->confirmation_request_count.load ()); @@ -88,7 +88,7 @@ TEST (active_transactions, confirm_frontier) ASSERT_FALSE (peers.empty ()); { nano::lock_guard guard (node2.rep_crawler.probable_reps_mutex); - node2.rep_crawler.probable_reps.emplace (nano::dev::genesis_key.pub, nano::dev::genesis_amount, *peers.begin ()); + node2.rep_crawler.probable_reps.emplace (nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount, *peers.begin ()); } nano::state_block_builder builder; @@ -96,7 +96,7 @@ TEST (active_transactions, confirm_frontier) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - 100) + .balance (nano::dev::constants.genesis_amount - 100) .link (nano::public_key ()) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) @@ -190,7 +190,7 @@ TEST (active_transactions, inactive_votes_cache) auto send = nano::send_block_builder () .previous (latest) .destination (key.pub) - .balance (nano::dev::genesis_amount - 100) + .balance (nano::dev::constants.genesis_amount - 100) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (latest)) .build_shared (); @@ -212,7 +212,7 @@ TEST (active_transactions, inactive_votes_cache_non_final) auto send = nano::send_block_builder () .previous (latest) .destination (key.pub) - .balance (nano::dev::genesis_amount - 100) + .balance (nano::dev::constants.genesis_amount - 100) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (latest)) .build_shared (); @@ -225,7 +225,7 @@ TEST (active_transactions, inactive_votes_cache_non_final) auto election = node.active.election (send->qualified_root ()); ASSERT_NE (nullptr, election); ASSERT_FALSE (election->confirmed ()); - ASSERT_EQ (nano::dev::genesis_amount - 100, election->tally ().begin ()->first); + ASSERT_EQ (nano::dev::constants.genesis_amount - 100, election->tally ().begin ()->first); } TEST (active_transactions, inactive_votes_cache_fork) @@ -238,14 +238,14 @@ TEST (active_transactions, inactive_votes_cache_fork) auto send1 = builder.make_block () .previous (latest) .destination (key.pub) - .balance (nano::dev::genesis_amount - 100) + .balance (nano::dev::constants.genesis_amount - 100) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (latest)) .build_shared (); auto send2 = builder.make_block () .previous (latest) .destination (key.pub) - .balance (nano::dev::genesis_amount - 200) + .balance (nano::dev::constants.genesis_amount - 200) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (latest)) .build_shared (); @@ -282,7 +282,7 @@ TEST (active_transactions, inactive_votes_cache_existing_vote) auto send = builder.send () .previous (latest) .destination (key.pub) - .balance (nano::dev::genesis_amount - 100 * nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - 100 * nano::Gxrb_ratio) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (latest)) .build_shared (); @@ -339,7 +339,7 @@ TEST (active_transactions, inactive_votes_cache_multiple_votes) auto send1 = builder.send () .previous (latest) .destination (key1.pub) - .balance (nano::dev::genesis_amount - 100 * nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - 100 * nano::Gxrb_ratio) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (latest)) .build_shared (); @@ -391,14 +391,14 @@ TEST (active_transactions, inactive_votes_cache_election_start) auto send1 = send_block_builder.make_block () .previous (latest) .destination (key1.pub) - .balance (nano::dev::genesis_amount - 5000 * nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - 5000 * nano::Gxrb_ratio) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (latest)) .build_shared (); auto send2 = send_block_builder.make_block () .previous (send1->hash ()) .destination (key2.pub) - .balance (nano::dev::genesis_amount - 10000 * nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - 10000 * nano::Gxrb_ratio) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send1->hash ())) .build_shared (); @@ -495,7 +495,7 @@ TEST (active_transactions, vote_replays) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) @@ -644,7 +644,7 @@ TEST (active_transactions, republish_winner) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) @@ -661,7 +661,7 @@ TEST (active_transactions, republish_winner) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - 1 - i) + .balance (nano::dev::constants.genesis_amount - 1 - i) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) @@ -677,7 +677,7 @@ TEST (active_transactions, republish_winner) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - 2 * nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - 2 * nano::Gxrb_ratio) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) @@ -709,7 +709,7 @@ TEST (active_transactions, fork_filter_cleanup) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) @@ -727,7 +727,7 @@ TEST (active_transactions, fork_filter_cleanup) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - 1 - i) + .balance (nano::dev::constants.genesis_amount - 1 - i) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) @@ -765,7 +765,7 @@ TEST (active_transactions, fork_replacement_tally) size_t const max_blocks = 10; std::vector keys (reps_count); auto latest (nano::dev::genesis->hash ()); - auto balance (nano::dev::genesis_amount); + auto balance (nano::dev::constants.genesis_amount); auto amount (node1.minimum_principal_weight ()); nano::state_block_builder builder; @@ -934,7 +934,7 @@ TEST (active_transactions, confirm_new) auto send = nano::send_block_builder () .previous (nano::dev::genesis->hash ()) .destination (nano::public_key ()) - .balance (nano::dev::genesis_amount - 100) + .balance (nano::dev::constants.genesis_amount - 100) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); @@ -964,7 +964,7 @@ TEST (active_transactions, conflicting_block_vote_existing_election) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - 100) + .balance (nano::dev::constants.genesis_amount - 100) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) @@ -973,7 +973,7 @@ TEST (active_transactions, conflicting_block_vote_existing_election) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - 200) + .balance (nano::dev::constants.genesis_amount - 200) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) @@ -1011,7 +1011,7 @@ TEST (active_transactions, activate_account_chain) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .link (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - 1) + .balance (nano::dev::constants.genesis_amount - 1) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build (); @@ -1020,7 +1020,7 @@ TEST (active_transactions, activate_account_chain) .previous (send->hash ()) .representative (nano::dev::genesis_key.pub) .link (key.pub) - .balance (nano::dev::genesis_amount - 2) + .balance (nano::dev::constants.genesis_amount - 2) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send->hash ())) .build (); @@ -1029,7 +1029,7 @@ TEST (active_transactions, activate_account_chain) .previous (send2->hash ()) .representative (nano::dev::genesis_key.pub) .link (key.pub) - .balance (nano::dev::genesis_amount - 3) + .balance (nano::dev::constants.genesis_amount - 3) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send2->hash ())) .build (); @@ -1111,7 +1111,7 @@ TEST (active_transactions, activate_inactive) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .link (key.pub) - .balance (nano::dev::genesis_amount - 1) + .balance (nano::dev::constants.genesis_amount - 1) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); @@ -1120,7 +1120,7 @@ TEST (active_transactions, activate_inactive) .previous (send->hash ()) .representative (nano::dev::genesis_key.pub) .link (nano::keypair ().pub) - .balance (nano::dev::genesis_amount - 2) + .balance (nano::dev::constants.genesis_amount - 2) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send->hash ())) .build_shared (); @@ -1172,7 +1172,7 @@ TEST (active_transactions, pessimistic_elections) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .link (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - 1) + .balance (nano::dev::constants.genesis_amount - 1) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); @@ -1184,7 +1184,7 @@ TEST (active_transactions, pessimistic_elections) .previous (send->hash ()) .representative (nano::dev::genesis_key.pub) .link (key.pub) - .balance (nano::dev::genesis_amount - 2) + .balance (nano::dev::constants.genesis_amount - 2) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send->hash ())) .build (); @@ -1311,7 +1311,7 @@ TEST (active_transactions, list_active) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .link (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - 1) + .balance (nano::dev::constants.genesis_amount - 1) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); @@ -1323,7 +1323,7 @@ TEST (active_transactions, list_active) .previous (send->hash ()) .representative (nano::dev::genesis_key.pub) .link (key.pub) - .balance (nano::dev::genesis_amount - 2) + .balance (nano::dev::constants.genesis_amount - 2) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send->hash ())) .build_shared (); @@ -1366,7 +1366,7 @@ TEST (active_transactions, vacancy) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .link (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); @@ -1404,7 +1404,7 @@ TEST (active_transactions, fifo) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .link (key0.pub) - .balance (nano::dev::genesis_amount - 1) + .balance (nano::dev::constants.genesis_amount - 1) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); @@ -1417,7 +1417,7 @@ TEST (active_transactions, fifo) .previous (send0->hash ()) .representative (nano::dev::genesis_key.pub) .link (key1.pub) - .balance (nano::dev::genesis_amount - 2) + .balance (nano::dev::constants.genesis_amount - 2) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send0->hash ())) .build_shared (); diff --git a/nano/core_test/block_store.cpp b/nano/core_test/block_store.cpp index 9721b9ffab..85d1ad7050 100644 --- a/nano/core_test/block_store.cpp +++ b/nano/core_test/block_store.cpp @@ -1007,17 +1007,17 @@ TEST (mdb_block_store, sideband_height) auto transaction (store.tx_begin_write ()); store.initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::send_block send (nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::send_block send (nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); nano::receive_block receive (send.hash (), send.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive).code); nano::change_block change (receive.hash (), 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (receive.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, change).code); - nano::state_block state_send1 (nano::dev::genesis_key.pub, change.hash (), 0, nano::dev::genesis_amount - nano::Gxrb_ratio, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (change.hash ())); + nano::state_block state_send1 (nano::dev::genesis_key.pub, change.hash (), 0, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (change.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, state_send1).code); - nano::state_block state_send2 (nano::dev::genesis_key.pub, state_send1.hash (), 0, nano::dev::genesis_amount - 2 * nano::Gxrb_ratio, key2.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_send1.hash ())); + nano::state_block state_send2 (nano::dev::genesis_key.pub, state_send1.hash (), 0, nano::dev::constants.genesis_amount - 2 * nano::Gxrb_ratio, key2.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, state_send2).code); - nano::state_block state_send3 (nano::dev::genesis_key.pub, state_send2.hash (), 0, nano::dev::genesis_amount - 3 * nano::Gxrb_ratio, key3.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_send2.hash ())); + nano::state_block state_send3 (nano::dev::genesis_key.pub, state_send2.hash (), 0, nano::dev::constants.genesis_amount - 3 * nano::Gxrb_ratio, key3.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_send2.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, state_send3).code); nano::state_block state_open (key1.pub, 0, 0, nano::Gxrb_ratio, state_send1.hash (), key1.prv, key1.pub, *pool.generate (key1.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, state_open).code); @@ -1264,9 +1264,9 @@ TEST (mdb_block_store, upgrade_v14_v15) auto path (nano::unique_path ()); nano::network_params network_params; nano::work_pool pool (std::numeric_limits::max ()); - nano::send_block send (nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); - nano::state_block epoch (nano::dev::genesis_key.pub, send.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, network_params.ledger.epochs.link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send.hash ())); - nano::state_block state_send (nano::dev::genesis_key.pub, epoch.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch.hash ())); + nano::send_block send (nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::state_block epoch (nano::dev::genesis_key.pub, send.hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, network_params.ledger.epochs.link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send.hash ())); + nano::state_block state_send (nano::dev::genesis_key.pub, epoch.hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch.hash ())); { nano::logger_mt logger; nano::mdb_store store (logger, path); @@ -1418,9 +1418,9 @@ TEST (mdb_block_store, upgrade_v16_v17) return; } nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block block1 (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); - nano::state_block block2 (nano::dev::genesis_key.pub, block1.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio - 1, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (block1.hash ())); - nano::state_block block3 (nano::dev::genesis_key.pub, block2.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio - 2, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (block2.hash ())); + nano::state_block block1 (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::state_block block2 (nano::dev::genesis_key.pub, block1.hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio - 1, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (block1.hash ())); + nano::state_block block3 (nano::dev::genesis_key.pub, block2.hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio - 2, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (block2.hash ())); auto code = [&block1, &block2, &block3] (auto confirmation_height, nano::block_hash const & expected_cemented_frontier) { auto path (nano::unique_path ()); @@ -1485,16 +1485,16 @@ TEST (mdb_block_store, upgrade_v17_v18) nano::keypair key3; nano::network_params network_params; nano::work_pool pool (std::numeric_limits::max ()); - nano::send_block send_zero (nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); - nano::state_block state_receive_zero (nano::dev::genesis_key.pub, send_zero.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount, send_zero.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send_zero.hash ())); - nano::state_block epoch (nano::dev::genesis_key.pub, state_receive_zero.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount, network_params.ledger.epochs.link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_receive_zero.hash ())); - nano::state_block state_send (nano::dev::genesis_key.pub, epoch.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch.hash ())); - nano::state_block state_receive (nano::dev::genesis_key.pub, state_send.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount, state_send.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_send.hash ())); - nano::state_block state_change (nano::dev::genesis_key.pub, state_receive.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_receive.hash ())); - nano::state_block state_send_change (nano::dev::genesis_key.pub, state_change.hash (), key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_change.hash ())); + nano::send_block send_zero (nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::state_block state_receive_zero (nano::dev::genesis_key.pub, send_zero.hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount, send_zero.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send_zero.hash ())); + nano::state_block epoch (nano::dev::genesis_key.pub, state_receive_zero.hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount, network_params.ledger.epochs.link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_receive_zero.hash ())); + nano::state_block state_send (nano::dev::genesis_key.pub, epoch.hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch.hash ())); + nano::state_block state_receive (nano::dev::genesis_key.pub, state_send.hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount, state_send.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_send.hash ())); + nano::state_block state_change (nano::dev::genesis_key.pub, state_receive.hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_receive.hash ())); + nano::state_block state_send_change (nano::dev::genesis_key.pub, state_change.hash (), key1.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_change.hash ())); nano::state_block epoch_first (key1.pub, 0, 0, 0, network_params.ledger.epochs.link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (key1.pub)); nano::state_block state_receive2 (key1.pub, epoch_first.hash (), key1.pub, nano::Gxrb_ratio, state_send_change.hash (), key1.prv, key1.pub, *pool.generate (epoch_first.hash ())); - nano::state_block state_send2 (nano::dev::genesis_key.pub, state_send_change.hash (), key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio * 2, key2.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_send_change.hash ())); + nano::state_block state_send2 (nano::dev::genesis_key.pub, state_send_change.hash (), key1.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio * 2, key2.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_send_change.hash ())); nano::state_block state_open (key2.pub, 0, key2.pub, nano::Gxrb_ratio, state_send2.hash (), key2.prv, key2.pub, *pool.generate (key2.pub)); nano::state_block state_send_epoch_link (key2.pub, state_open.hash (), key2.pub, 0, network_params.ledger.epochs.link (nano::epoch::epoch_2), key2.prv, key2.pub, *pool.generate (state_open.hash ())); { @@ -1686,11 +1686,11 @@ TEST (mdb_block_store, upgrade_v18_v19) nano::keypair key1; nano::work_pool pool (std::numeric_limits::max ()); nano::network_params network_params; - nano::send_block send (nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::send_block send (nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); nano::receive_block receive (send.hash (), send.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send.hash ())); nano::change_block change (receive.hash (), 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (receive.hash ())); - nano::state_block state_epoch (nano::dev::genesis_key.pub, change.hash (), 0, nano::dev::genesis_amount, network_params.ledger.epochs.link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (change.hash ())); - nano::state_block state_send (nano::dev::genesis_key.pub, state_epoch.hash (), 0, nano::dev::genesis_amount - nano::Gxrb_ratio, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_epoch.hash ())); + nano::state_block state_epoch (nano::dev::genesis_key.pub, change.hash (), 0, nano::dev::constants.genesis_amount, network_params.ledger.epochs.link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (change.hash ())); + nano::state_block state_send (nano::dev::genesis_key.pub, state_epoch.hash (), 0, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_epoch.hash ())); nano::state_block state_open (key1.pub, 0, 0, nano::Gxrb_ratio, state_send.hash (), key1.prv, key1.pub, *pool.generate (key1.pub)); { diff --git a/nano/core_test/bootstrap.cpp b/nano/core_test/bootstrap.cpp index aa68bc6e74..3f78180981 100644 --- a/nano/core_test/bootstrap.cpp +++ b/nano/core_test/bootstrap.cpp @@ -250,7 +250,7 @@ TEST (bootstrap_processor, process_state) .account (nano::dev::genesis_key.pub) .previous (node0->latest (nano::dev::genesis_key.pub)) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - 100) + .balance (nano::dev::constants.genesis_amount - 100) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (0) @@ -260,7 +260,7 @@ TEST (bootstrap_processor, process_state) .account (nano::dev::genesis_key.pub) .previous (block1->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount) + .balance (nano::dev::constants.genesis_amount) .link (block1->hash ()) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (0) @@ -355,7 +355,7 @@ TEST (bootstrap_processor, DISABLED_pull_requeue_network_error) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) @@ -424,7 +424,7 @@ TEST (bootstrap_processor, push_diamond_pruning) ASSERT_EQ (nano::process_result::progress, node1->process (*open).code); // 1st bootstrap node1->bootstrap_initiator.bootstrap (node0->network.endpoint (), false); - ASSERT_TIMELY (10s, node0->balance (key.pub) == nano::dev::genesis_amount); + ASSERT_TIMELY (10s, node0->balance (key.pub) == nano::dev::constants.genesis_amount); // Process more blocks & prune old auto send2 (std::make_shared (open->hash (), nano::dev::genesis_key.pub, std::numeric_limits::max () - 100, key.prv, key.pub, *system.work.generate (open->hash ()))); ASSERT_EQ (nano::process_result::progress, node1->process (*send2).code); @@ -489,7 +489,7 @@ TEST (bootstrap_processor, lazy_hash) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node0->work_generate_blocking (nano::dev::genesis->hash ())) @@ -563,7 +563,7 @@ TEST (bootstrap_processor, lazy_hash_bootstrap_id) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node0->work_generate_blocking (nano::dev::genesis->hash ())) @@ -639,7 +639,7 @@ TEST (bootstrap_processor, lazy_hash_pruning) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node0->work_generate_blocking (nano::dev::genesis->hash ())) @@ -649,7 +649,7 @@ TEST (bootstrap_processor, lazy_hash_pruning) .account (nano::dev::genesis_key.pub) .previous (send1->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount) + .balance (nano::dev::constants.genesis_amount) .link (send1->hash ()) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node0->work_generate_blocking (send1->hash ())) @@ -659,7 +659,7 @@ TEST (bootstrap_processor, lazy_hash_pruning) .account (nano::dev::genesis_key.pub) .previous (receive1->hash ()) .representative (key1.pub) - .balance (nano::dev::genesis_amount) + .balance (nano::dev::constants.genesis_amount) .link (0) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node0->work_generate_blocking (receive1->hash ())) @@ -669,7 +669,7 @@ TEST (bootstrap_processor, lazy_hash_pruning) .account (nano::dev::genesis_key.pub) .previous (change1->hash ()) .representative (key2.pub) - .balance (nano::dev::genesis_amount) + .balance (nano::dev::constants.genesis_amount) .link (0) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node0->work_generate_blocking (change1->hash ())) @@ -679,7 +679,7 @@ TEST (bootstrap_processor, lazy_hash_pruning) .account (nano::dev::genesis_key.pub) .previous (change2->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node0->work_generate_blocking (change2->hash ())) @@ -772,7 +772,7 @@ TEST (bootstrap_processor, lazy_max_pull_count) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node0->work_generate_blocking (nano::dev::genesis->hash ())) @@ -874,7 +874,7 @@ TEST (bootstrap_processor, lazy_unclear_state_link) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) @@ -885,7 +885,7 @@ TEST (bootstrap_processor, lazy_unclear_state_link) .account (nano::dev::genesis_key.pub) .previous (send1->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - 2 * nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - 2 * nano::Gxrb_ratio) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send1->hash ())) @@ -936,7 +936,7 @@ TEST (bootstrap_processor, lazy_unclear_state_link_not_existing) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) @@ -987,7 +987,7 @@ TEST (bootstrap_processor, DISABLED_lazy_destinations) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) @@ -998,7 +998,7 @@ TEST (bootstrap_processor, DISABLED_lazy_destinations) .account (nano::dev::genesis_key.pub) .previous (send1->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - 2 * nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - 2 * nano::Gxrb_ratio) .link (key2.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send1->hash ())) @@ -1051,7 +1051,7 @@ TEST (bootstrap_processor, lazy_pruning_missing_block) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) @@ -1062,7 +1062,7 @@ TEST (bootstrap_processor, lazy_pruning_missing_block) .account (nano::dev::genesis_key.pub) .previous (send1->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - 2 * nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - 2 * nano::Gxrb_ratio) .link (key2.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send1->hash ())) @@ -1145,7 +1145,7 @@ TEST (bootstrap_processor, lazy_cancel) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node0->work_generate_blocking (nano::dev::genesis->hash ())) @@ -1184,7 +1184,7 @@ TEST (bootstrap_processor, wallet_lazy_frontier) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node0->work_generate_blocking (nano::dev::genesis->hash ())) @@ -1262,7 +1262,7 @@ TEST (bootstrap_processor, wallet_lazy_pending) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node0->work_generate_blocking (nano::dev::genesis->hash ())) @@ -1323,7 +1323,7 @@ TEST (bootstrap_processor, multiple_attempts) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node1->work_generate_blocking (nano::dev::genesis->hash ())) @@ -1443,7 +1443,7 @@ TEST (frontier_req, count) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (0) @@ -1544,7 +1544,7 @@ TEST (frontier_req, confirmed_frontier) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) .link (key_before_genesis.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (0) @@ -1556,7 +1556,7 @@ TEST (frontier_req, confirmed_frontier) .account (nano::dev::genesis_key.pub) .previous (send1->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - 2 * nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - 2 * nano::Gxrb_ratio) .link (key_after_genesis.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (0) diff --git a/nano/core_test/confirmation_height.cpp b/nano/core_test/confirmation_height.cpp index 8d3c7cab3f..8477919188 100644 --- a/nano/core_test/confirmation_height.cpp +++ b/nano/core_test/confirmation_height.cpp @@ -224,11 +224,11 @@ TEST (confirmation_height, gap_bootstrap) node_flags.confirmation_height_processor_mode = mode_a; auto & node1 = *system.add_node (node_flags); nano::keypair destination; - auto send1 (std::make_shared (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); + auto send1 (std::make_shared (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send1); - auto send2 (std::make_shared (nano::dev::genesis->account (), send1->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - 2 * nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); + auto send2 (std::make_shared (nano::dev::genesis->account (), send1->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - 2 * nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send2); - auto send3 (std::make_shared (nano::dev::genesis->account (), send2->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - 3 * nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); + auto send3 (std::make_shared (nano::dev::genesis->account (), send2->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - 3 * nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send3); auto open1 (std::make_shared (send1->hash (), destination.pub, destination.pub, destination.prv, destination.pub, 0)); node1.work_generate_blocking (*open1); @@ -303,17 +303,17 @@ TEST (confirmation_height, gap_live) node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto node = system.add_node (node_config, node_flags); node_config.peering_port = nano::get_available_port (); - node_config.receive_minimum = nano::dev::genesis_amount; // Prevent auto-receive & open1/receive1/receive2 blocks conflicts + node_config.receive_minimum = nano::dev::constants.genesis_amount; // Prevent auto-receive & open1/receive1/receive2 blocks conflicts system.add_node (node_config, node_flags); nano::keypair destination; system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); system.wallet (1)->insert_adhoc (destination.prv); - auto send1 (std::make_shared (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - 1, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); + auto send1 (std::make_shared (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - 1, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node->work_generate_blocking (*send1); - auto send2 (std::make_shared (nano::dev::genesis->account (), send1->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - 2, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); + auto send2 (std::make_shared (nano::dev::genesis->account (), send1->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - 2, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node->work_generate_blocking (*send2); - auto send3 (std::make_shared (nano::dev::genesis->account (), send2->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - 3, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); + auto send3 (std::make_shared (nano::dev::genesis->account (), send2->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - 3, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node->work_generate_blocking (*send3); auto open1 (std::make_shared (send1->hash (), destination.pub, destination.pub, destination.prv, destination.pub, 0)); @@ -476,10 +476,10 @@ TEST (confirmation_height, send_receive_self) auto node = system.add_node (node_config, node_flags); nano::block_hash latest (node->latest (nano::dev::genesis_key.pub)); - nano::send_block send1 (latest, nano::dev::genesis_key.pub, nano::dev::genesis_amount - 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); + nano::send_block send1 (latest, nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); nano::receive_block receive1 (send1.hash (), send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1.hash ())); - nano::send_block send2 (receive1.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (receive1.hash ())); - nano::send_block send3 (send2.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - 3, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send2.hash ())); + nano::send_block send2 (receive1.hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (receive1.hash ())); + nano::send_block send3 (send2.hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - 3, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send2.hash ())); nano::receive_block receive2 (send3.hash (), send2.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send3.hash ())); auto receive3 = std::make_shared (receive2.hash (), send3.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (receive2.hash ())); @@ -541,8 +541,8 @@ TEST (confirmation_height, all_block_types) nano::keypair key1; nano::keypair key2; auto & store = node->store; - nano::send_block send (latest, key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); - nano::send_block send1 (send.hash (), key2.pub, nano::dev::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send.hash ())); + nano::send_block send (latest, key1.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); + nano::send_block send1 (send.hash (), key2.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send.hash ())); nano::open_block open (send.hash (), nano::dev::genesis_key.pub, key1.pub, key1.prv, key1.pub, *system.work.generate (key1.pub)); nano::state_block state_open (key2.pub, 0, 0, nano::Gxrb_ratio, send1.hash (), key2.prv, key2.pub, *system.work.generate (key2.pub)); @@ -567,7 +567,7 @@ TEST (confirmation_height, all_block_types) nano::state_block state_send3 (key2.pub, state_send2->hash (), 0, nano::Gxrb_ratio - 1, key1.pub, key2.prv, key2.pub, *system.work.generate (state_send2->hash ())); nano::state_block state_send4 (key1.pub, state_send1.hash (), 0, nano::Gxrb_ratio - 2, nano::dev::genesis_key.pub, key1.prv, key1.pub, *system.work.generate (state_send1.hash ())); - nano::state_block state_receive3 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio * 2 + 1, state_send4.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1.hash ())); + nano::state_block state_receive3 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio * 2 + 1, state_send4.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1.hash ())); { auto transaction (store.tx_begin_write ()); @@ -653,10 +653,10 @@ TEST (confirmation_height, conflict_rollback_cemented) auto node2 = system.add_node (node_flags); ASSERT_EQ (1, node1->network.size ()); nano::keypair key1; - auto send1 (std::make_shared (nano::dev::genesis->hash (), key1.pub, nano::dev::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); + auto send1 (std::make_shared (nano::dev::genesis->hash (), key1.pub, nano::dev::constants.genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); nano::publish publish1 (send1); nano::keypair key2; - auto send2 (std::make_shared (nano::dev::genesis->hash (), key2.pub, nano::dev::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); + auto send2 (std::make_shared (nano::dev::genesis->hash (), key2.pub, nano::dev::constants.genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); nano::publish publish2 (send2); auto channel1 (node1->network.udp_channels.create (node1->network.endpoint ())); node1->network.inbound (publish1, channel1); @@ -692,7 +692,7 @@ TEST (confirmation_height, conflict_rollback_cemented) ASSERT_TIMELY (20s, sb.component ()->str ().find (rollback_log_entry) != std::string::npos); auto winner (*election->tally ().begin ()); ASSERT_EQ (*publish1.block, *winner.second); - ASSERT_EQ (nano::dev::genesis_amount - 100, winner.first); + ASSERT_EQ (nano::dev::constants.genesis_amount - 100, winner.first); ASSERT_TRUE (node1->ledger.block_or_pruned_exists (publish1.block->hash ())); ASSERT_TRUE (node2->ledger.block_or_pruned_exists (publish2.block->hash ())); ASSERT_FALSE (node2->ledger.block_or_pruned_exists (publish1.block->hash ())); @@ -725,7 +725,7 @@ TEST (confirmation_heightDeathTest, rollback_added_block) nano::write_database_queue write_database_queue (false); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - auto send = std::make_shared (nano::dev::genesis->hash (), key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + auto send = std::make_shared (nano::dev::genesis->hash (), key1.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); { auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); @@ -801,7 +801,7 @@ TEST (confirmation_heightDeathTest, modified_chain) nano::write_database_queue write_database_queue (false); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - auto send = std::make_shared (nano::dev::genesis->hash (), key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + auto send = std::make_shared (nano::dev::genesis->hash (), key1.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); { auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); @@ -871,7 +871,7 @@ TEST (confirmation_heightDeathTest, modified_chain_account_removed) nano::write_database_queue write_database_queue (false); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; - auto send = std::make_shared (nano::dev::genesis->hash (), key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + auto send = std::make_shared (nano::dev::genesis->hash (), key1.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); auto open = std::make_shared (key1.pub, 0, 0, nano::Gxrb_ratio, send->hash (), key1.prv, key1.pub, *pool.generate (key1.pub)); { auto transaction (store->tx_begin_write ()); @@ -934,8 +934,8 @@ TEST (confirmation_height, pending_observer_callbacks) nano::block_hash latest (node->latest (nano::dev::genesis_key.pub)); nano::keypair key1; - nano::send_block send (latest, key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); - auto send1 = std::make_shared (send.hash (), key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send.hash ())); + nano::send_block send (latest, key1.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); + auto send1 = std::make_shared (send.hash (), key1.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send.hash ())); { auto transaction = node->store.tx_begin_write (); @@ -976,13 +976,13 @@ TEST (confirmation_height, callback_confirmed_history) nano::block_hash latest (node->latest (nano::dev::genesis_key.pub)); nano::keypair key1; - auto send = std::make_shared (latest, key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); + auto send = std::make_shared (latest, key1.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); { auto transaction = node->store.tx_begin_write (); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, *send).code); } - auto send1 = std::make_shared (send->hash (), key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send->hash ())); + auto send1 = std::make_shared (send->hash (), key1.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send->hash ())); add_callback_stats (*node); @@ -1057,9 +1057,9 @@ TEST (confirmation_height, dependent_election) nano::block_hash latest (node->latest (nano::dev::genesis_key.pub)); nano::keypair key1; - auto send = std::make_shared (latest, key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); - auto send1 = std::make_shared (send->hash (), key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send->hash ())); - auto send2 = std::make_shared (send1->hash (), key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio * 3, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1->hash ())); + auto send = std::make_shared (latest, key1.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); + auto send1 = std::make_shared (send->hash (), key1.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send->hash ())); + auto send2 = std::make_shared (send1->hash (), key1.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio * 3, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1->hash ())); { auto transaction = node->store.tx_begin_write (); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, *send).code); @@ -1109,22 +1109,22 @@ TEST (confirmation_height, cemented_gap_below_receive) nano::keypair key1; system.wallet (0)->insert_adhoc (key1.prv); - nano::send_block send (latest, key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); - nano::send_block send1 (send.hash (), key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send.hash ())); + nano::send_block send (latest, key1.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); + nano::send_block send1 (send.hash (), key1.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send.hash ())); nano::keypair dummy_key; - nano::send_block dummy_send (send1.hash (), dummy_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio * 3, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1.hash ())); + nano::send_block dummy_send (send1.hash (), dummy_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio * 3, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1.hash ())); nano::open_block open (send.hash (), nano::dev::genesis->account (), key1.pub, key1.prv, key1.pub, *system.work.generate (key1.pub)); nano::receive_block receive1 (open.hash (), send1.hash (), key1.prv, key1.pub, *system.work.generate (open.hash ())); nano::send_block send2 (receive1.hash (), nano::dev::genesis_key.pub, nano::Gxrb_ratio, key1.prv, key1.pub, *system.work.generate (receive1.hash ())); nano::receive_block receive2 (dummy_send.hash (), send2.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (dummy_send.hash ())); - nano::send_block dummy_send1 (receive2.hash (), dummy_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio * 3, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (receive2.hash ())); + nano::send_block dummy_send1 (receive2.hash (), dummy_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio * 3, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (receive2.hash ())); nano::keypair key2; system.wallet (0)->insert_adhoc (key2.prv); - nano::send_block send3 (dummy_send1.hash (), key2.pub, nano::dev::genesis_amount - nano::Gxrb_ratio * 4, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (dummy_send1.hash ())); - nano::send_block dummy_send2 (send3.hash (), dummy_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio * 5, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send3.hash ())); + nano::send_block send3 (dummy_send1.hash (), key2.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio * 4, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (dummy_send1.hash ())); + nano::send_block dummy_send2 (send3.hash (), dummy_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio * 5, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send3.hash ())); auto open1 = std::make_shared (send3.hash (), nano::dev::genesis->account (), key2.pub, key2.prv, key2.pub, *system.work.generate (key2.pub)); @@ -1194,22 +1194,22 @@ TEST (confirmation_height, cemented_gap_below_no_cache) nano::keypair key1; system.wallet (0)->insert_adhoc (key1.prv); - nano::send_block send (latest, key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); - nano::send_block send1 (send.hash (), key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send.hash ())); + nano::send_block send (latest, key1.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); + nano::send_block send1 (send.hash (), key1.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send.hash ())); nano::keypair dummy_key; - nano::send_block dummy_send (send1.hash (), dummy_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio * 3, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1.hash ())); + nano::send_block dummy_send (send1.hash (), dummy_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio * 3, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1.hash ())); nano::open_block open (send.hash (), nano::dev::genesis->account (), key1.pub, key1.prv, key1.pub, *system.work.generate (key1.pub)); nano::receive_block receive1 (open.hash (), send1.hash (), key1.prv, key1.pub, *system.work.generate (open.hash ())); nano::send_block send2 (receive1.hash (), nano::dev::genesis_key.pub, nano::Gxrb_ratio, key1.prv, key1.pub, *system.work.generate (receive1.hash ())); nano::receive_block receive2 (dummy_send.hash (), send2.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (dummy_send.hash ())); - nano::send_block dummy_send1 (receive2.hash (), dummy_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio * 3, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (receive2.hash ())); + nano::send_block dummy_send1 (receive2.hash (), dummy_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio * 3, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (receive2.hash ())); nano::keypair key2; system.wallet (0)->insert_adhoc (key2.prv); - nano::send_block send3 (dummy_send1.hash (), key2.pub, nano::dev::genesis_amount - nano::Gxrb_ratio * 4, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (dummy_send1.hash ())); - nano::send_block dummy_send2 (send3.hash (), dummy_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio * 5, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send3.hash ())); + nano::send_block send3 (dummy_send1.hash (), key2.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio * 4, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (dummy_send1.hash ())); + nano::send_block dummy_send2 (send3.hash (), dummy_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio * 5, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send3.hash ())); auto open1 = std::make_shared (send3.hash (), nano::dev::genesis->account (), key2.pub, key2.prv, key2.pub, *system.work.generate (key2.pub)); @@ -1275,9 +1275,9 @@ TEST (confirmation_height, election_winner_details_clearing) nano::block_hash latest (node->latest (nano::dev::genesis_key.pub)); nano::keypair key1; - auto send = std::make_shared (latest, key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); - auto send1 = std::make_shared (send->hash (), key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send->hash ())); - auto send2 = std::make_shared (send1->hash (), key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio * 3, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1->hash ())); + auto send = std::make_shared (latest, key1.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); + auto send1 = std::make_shared (send->hash (), key1.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send->hash ())); + auto send2 = std::make_shared (send1->hash (), key1.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio * 3, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1->hash ())); { auto transaction = node->store.tx_begin_write (); @@ -1338,7 +1338,7 @@ TEST (confirmation_height, election_winner_details_clearing_node_process_confirm nano::system system (1); auto node = system.nodes.front (); - auto send = std::make_shared (nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ())); + auto send = std::make_shared (nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ())); // Add to election_winner_details. Use an unrealistic iteration so that it should fall into the else case and do a cleanup node->active.add_election_winner_details (send->hash (), nullptr); nano::election_status election; @@ -1365,8 +1365,8 @@ TEST (confirmation_height, unbounded_block_cache_iteration) nano::work_pool pool (std::numeric_limits::max ()); nano::logging logging; nano::keypair key1; - auto send = std::make_shared (nano::dev::genesis->hash (), key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); - auto send1 = std::make_shared (send->hash (), key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send->hash ())); + auto send = std::make_shared (nano::dev::genesis->hash (), key1.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + auto send1 = std::make_shared (send->hash (), key1.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send->hash ())); { auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); @@ -1414,7 +1414,7 @@ TEST (confirmation_height, pruned_source) nano::write_database_queue write_database_queue (false); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1, key2; - auto send1 = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - 100, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + auto send1 = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - 100, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); auto open1 = std::make_shared (key1.pub, 0, key1.pub, 100, send1->hash (), key1.prv, key1.pub, *pool.generate (key1.pub)); auto send2 = std::make_shared (key1.pub, open1->hash (), key1.pub, 50, key2.pub, key1.prv, key1.pub, *pool.generate (open1->hash ())); auto send3 = std::make_shared (key1.pub, send2->hash (), key1.pub, 25, key2.pub, key1.prv, key1.pub, *pool.generate (send2->hash ())); diff --git a/nano/core_test/confirmation_solicitor.cpp b/nano/core_test/confirmation_solicitor.cpp index 8fd7a5aa75..fe9db15e91 100644 --- a/nano/core_test/confirmation_solicitor.cpp +++ b/nano/core_test/confirmation_solicitor.cpp @@ -19,7 +19,7 @@ TEST (confirmation_solicitor, batches) auto & node2 = *system.add_node (node_flags); auto channel1 (node2.network.udp_channels.create (node1.network.endpoint ())); // Solicitor will only solicit from this representative - nano::representative representative (nano::dev::genesis_key.pub, nano::dev::genesis_amount, channel1); + nano::representative representative (nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount, channel1); std::vector representatives{ representative }; nano::confirmation_solicitor solicitor (node2.network, node2.config); solicitor.prepare (representatives); @@ -28,7 +28,7 @@ TEST (confirmation_solicitor, batches) ASSERT_EQ (channel1, representatives.front ().channel); ASSERT_EQ (nano::dev::genesis_key.pub, representatives.front ().account); ASSERT_TIMELY (3s, node2.network.size () == 1); - auto send (std::make_shared (nano::dev::genesis->hash (), nano::keypair ().pub, nano::dev::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); + auto send (std::make_shared (nano::dev::genesis->hash (), nano::keypair ().pub, nano::dev::constants.genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); send->sideband_set ({}); { nano::lock_guard guard (node2.active.mutex); @@ -63,7 +63,7 @@ TEST (confirmation_solicitor, different_hash) auto & node2 = *system.add_node (node_flags); auto channel1 (node2.network.udp_channels.create (node1.network.endpoint ())); // Solicitor will only solicit from this representative - nano::representative representative (nano::dev::genesis_key.pub, nano::dev::genesis_amount, channel1); + nano::representative representative (nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount, channel1); std::vector representatives{ representative }; nano::confirmation_solicitor solicitor (node2.network, node2.config); solicitor.prepare (representatives); @@ -72,7 +72,7 @@ TEST (confirmation_solicitor, different_hash) ASSERT_EQ (channel1, representatives.front ().channel); ASSERT_EQ (nano::dev::genesis_key.pub, representatives.front ().account); ASSERT_TIMELY (3s, node2.network.size () == 1); - auto send (std::make_shared (nano::dev::genesis->hash (), nano::keypair ().pub, nano::dev::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); + auto send (std::make_shared (nano::dev::genesis->hash (), nano::keypair ().pub, nano::dev::constants.genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); send->sideband_set ({}); auto election (std::make_shared (node2, send, nullptr, nullptr, nano::election_behavior::normal)); // Add a vote for something else, not the winner @@ -108,7 +108,7 @@ TEST (confirmation_solicitor, bypass_max_requests_cap) ASSERT_EQ (max_representatives + 1, representatives.size ()); solicitor.prepare (representatives); ASSERT_TIMELY (3s, node2.network.size () == 1); - auto send (std::make_shared (nano::dev::genesis->hash (), nano::keypair ().pub, nano::dev::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); + auto send (std::make_shared (nano::dev::genesis->hash (), nano::keypair ().pub, nano::dev::constants.genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); send->sideband_set ({}); auto election (std::make_shared (node2, send, nullptr, nullptr, nano::election_behavior::normal)); // Add a vote for something else, not the winner diff --git a/nano/core_test/election.cpp b/nano/core_test/election.cpp index ba2689f831..386eb469bf 100644 --- a/nano/core_test/election.cpp +++ b/nano/core_test/election.cpp @@ -20,7 +20,7 @@ TEST (election, quorum_minimum_flip_success) { nano::system system; nano::node_config node_config (nano::get_available_port (), system.logging); - node_config.online_weight_minimum = nano::dev::genesis_amount; + node_config.online_weight_minimum = nano::dev::constants.genesis_amount; node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto & node1 = *system.add_node (node_config); nano::keypair key1; @@ -66,7 +66,7 @@ TEST (election, quorum_minimum_flip_fail) { nano::system system; nano::node_config node_config (nano::get_available_port (), system.logging); - node_config.online_weight_minimum = nano::dev::genesis_amount; + node_config.online_weight_minimum = nano::dev::constants.genesis_amount; node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto & node1 = *system.add_node (node_config); nano::keypair key1; @@ -112,7 +112,7 @@ TEST (election, quorum_minimum_confirm_success) { nano::system system; nano::node_config node_config (nano::get_available_port (), system.logging); - node_config.online_weight_minimum = nano::dev::genesis_amount; + node_config.online_weight_minimum = nano::dev::constants.genesis_amount; node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto & node1 = *system.add_node (node_config); nano::keypair key1; @@ -145,7 +145,7 @@ TEST (election, quorum_minimum_confirm_fail) { nano::system system; nano::node_config node_config (nano::get_available_port (), system.logging); - node_config.online_weight_minimum = nano::dev::genesis_amount; + node_config.online_weight_minimum = nano::dev::constants.genesis_amount; node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto & node1 = *system.add_node (node_config); nano::keypair key1; @@ -200,7 +200,7 @@ TEST (election, quorum_minimum_update_weight_before_quorum_checks) .account (key1.pub) .previous (0) .representative (key1.pub) - .balance (nano::dev::genesis_amount - amount) + .balance (nano::dev::constants.genesis_amount - amount) .link (send1->hash ()) .work (0) .sign (key1.prv, key1.pub) diff --git a/nano/core_test/election_scheduler.cpp b/nano/core_test/election_scheduler.cpp index 10e2c94be8..2769c71fbb 100644 --- a/nano/core_test/election_scheduler.cpp +++ b/nano/core_test/election_scheduler.cpp @@ -21,7 +21,7 @@ TEST (election_scheduler, activate_one_timely) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) @@ -39,7 +39,7 @@ TEST (election_scheduler, activate_one_flush) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) @@ -65,7 +65,7 @@ TEST (election_scheduler, no_vacancy) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .link (key.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); @@ -91,7 +91,7 @@ TEST (election_scheduler, no_vacancy) .previous (send->hash ()) .representative (nano::dev::genesis_key.pub) .link (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - 2 * nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - 2 * nano::Gxrb_ratio) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send->hash ())) .build_shared (); @@ -138,7 +138,7 @@ TEST (election_scheduler, flush_vacancy) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .link (key.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); diff --git a/nano/core_test/frontiers_confirmation.cpp b/nano/core_test/frontiers_confirmation.cpp index c2335d10f7..1773b8a146 100644 --- a/nano/core_test/frontiers_confirmation.cpp +++ b/nano/core_test/frontiers_confirmation.cpp @@ -218,7 +218,7 @@ TEST (frontiers_confirmation, mode) nano::node_config node_config (nano::get_available_port (), system.logging); node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::always; auto node = system.add_node (node_config, node_flags); - nano::state_block send (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node->work_generate_blocking (nano::dev::genesis->hash ())); + nano::state_block send (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node->work_generate_blocking (nano::dev::genesis->hash ())); { auto transaction = node->store.tx_begin_write (); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, send).code); @@ -231,7 +231,7 @@ TEST (frontiers_confirmation, mode) nano::node_config node_config (nano::get_available_port (), system.logging); node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::automatic; auto node = system.add_node (node_config, node_flags); - nano::state_block send (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node->work_generate_blocking (nano::dev::genesis->hash ())); + nano::state_block send (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node->work_generate_blocking (nano::dev::genesis->hash ())); { auto transaction = node->store.tx_begin_write (); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, send).code); @@ -244,7 +244,7 @@ TEST (frontiers_confirmation, mode) nano::node_config node_config (nano::get_available_port (), system.logging); node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto node = system.add_node (node_config, node_flags); - nano::state_block send (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node->work_generate_blocking (nano::dev::genesis->hash ())); + nano::state_block send (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node->work_generate_blocking (nano::dev::genesis->hash ())); { auto transaction = node->store.tx_begin_write (); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, send).code); diff --git a/nano/core_test/gap_cache.cpp b/nano/core_test/gap_cache.cpp index 663390b62d..88b77da5ea 100644 --- a/nano/core_test/gap_cache.cpp +++ b/nano/core_test/gap_cache.cpp @@ -67,10 +67,10 @@ TEST (gap_cache, gap_bootstrap) auto & node2 (*system.nodes[1]); nano::block_hash latest (node1.latest (nano::dev::genesis_key.pub)); nano::keypair key; - auto send (std::make_shared (latest, key.pub, nano::dev::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest))); + auto send (std::make_shared (latest, key.pub, nano::dev::constants.genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest))); node1.process (*send); - ASSERT_EQ (nano::dev::genesis_amount - 100, node1.balance (nano::dev::genesis->account ())); - ASSERT_EQ (nano::dev::genesis_amount, node2.balance (nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::constants.genesis_amount - 100, node1.balance (nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::constants.genesis_amount, node2.balance (nano::dev::genesis->account ())); // Confirm send block, allowing voting on the upcoming block node1.block_confirm (send); auto election = node1.active.election (send->qualified_root ()); @@ -81,9 +81,9 @@ TEST (gap_cache, gap_bootstrap) system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto latest_block (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key.pub, 100)); ASSERT_NE (nullptr, latest_block); - ASSERT_EQ (nano::dev::genesis_amount - 200, node1.balance (nano::dev::genesis->account ())); - ASSERT_EQ (nano::dev::genesis_amount, node2.balance (nano::dev::genesis->account ())); - ASSERT_TIMELY (10s, node2.balance (nano::dev::genesis->account ()) == nano::dev::genesis_amount - 200); + ASSERT_EQ (nano::dev::constants.genesis_amount - 200, node1.balance (nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::constants.genesis_amount, node2.balance (nano::dev::genesis->account ())); + ASSERT_TIMELY (10s, node2.balance (nano::dev::genesis->account ()) == nano::dev::constants.genesis_amount - 200); } TEST (gap_cache, two_dependencies) diff --git a/nano/core_test/ledger.cpp b/nano/core_test/ledger.cpp index cebc122e98..7a03c408e1 100644 --- a/nano/core_test/ledger.cpp +++ b/nano/core_test/ledger.cpp @@ -49,9 +49,9 @@ TEST (ledger, genesis_balance) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); auto balance (ledger.account_balance (transaction, nano::dev::genesis->account ())); - ASSERT_EQ (nano::dev::genesis_amount, balance); + ASSERT_EQ (nano::dev::constants.genesis_amount, balance); auto amount (ledger.amount (transaction, nano::dev::genesis->account ())); - ASSERT_EQ (nano::dev::genesis_amount, amount); + ASSERT_EQ (nano::dev::constants.genesis_amount, amount); nano::account_info info; ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis->account (), info)); ASSERT_EQ (1, ledger.cache.account_count); @@ -74,7 +74,7 @@ TEST (ledger, process_modifies_sideband) nano::ledger ledger (*store, stats); store->initialize (store->tx_begin_write (), ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (store->tx_begin_write (), send1).code); ASSERT_EQ (send1.sideband ().timestamp, store->block.get (store->tx_begin_read (), send1.hash ())->sideband ().timestamp); } @@ -101,13 +101,13 @@ TEST (ledger, process_send) auto return1 (ledger.process (transaction, send)); ASSERT_EQ (nano::dev::genesis_key.pub, send.sideband ().account); ASSERT_EQ (2, send.sideband ().height); - ASSERT_EQ (nano::dev::genesis_amount - 50, ledger.amount (transaction, hash1)); + ASSERT_EQ (nano::dev::constants.genesis_amount - 50, ledger.amount (transaction, hash1)); ASSERT_TRUE (store->frontier.get (transaction, info1.head).is_zero ()); ASSERT_EQ (nano::dev::genesis_key.pub, store->frontier.get (transaction, hash1)); ASSERT_EQ (nano::process_result::progress, return1.code); ASSERT_EQ (nano::dev::genesis_key.pub, store->block.account_calculated (send)); ASSERT_EQ (50, ledger.account_balance (transaction, nano::dev::genesis_key.pub)); - ASSERT_EQ (nano::dev::genesis_amount - 50, ledger.account_pending (transaction, key2.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount - 50, ledger.account_pending (transaction, key2.pub)); nano::account_info info2; ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info2)); ASSERT_EQ (2, info2.block_count); @@ -123,17 +123,17 @@ TEST (ledger, process_send) auto return2 (ledger.process (transaction, open)); ASSERT_EQ (nano::process_result::progress, return2.code); ASSERT_EQ (key2.pub, open.sideband ().account); - ASSERT_EQ (nano::dev::genesis_amount - 50, open.sideband ().balance.number ()); + ASSERT_EQ (nano::dev::constants.genesis_amount - 50, open.sideband ().balance.number ()); ASSERT_EQ (1, open.sideband ().height); - ASSERT_EQ (nano::dev::genesis_amount - 50, ledger.amount (transaction, hash2)); + ASSERT_EQ (nano::dev::constants.genesis_amount - 50, ledger.amount (transaction, hash2)); ASSERT_EQ (nano::process_result::progress, return2.code); ASSERT_EQ (key2.pub, store->block.account_calculated (open)); - ASSERT_EQ (nano::dev::genesis_amount - 50, ledger.amount (transaction, hash2)); + ASSERT_EQ (nano::dev::constants.genesis_amount - 50, ledger.amount (transaction, hash2)); ASSERT_EQ (key2.pub, store->frontier.get (transaction, hash2)); - ASSERT_EQ (nano::dev::genesis_amount - 50, ledger.account_balance (transaction, key2.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount - 50, ledger.account_balance (transaction, key2.pub)); ASSERT_EQ (0, ledger.account_pending (transaction, key2.pub)); ASSERT_EQ (50, ledger.weight (nano::dev::genesis_key.pub)); - ASSERT_EQ (nano::dev::genesis_amount - 50, ledger.weight (key2.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount - 50, ledger.weight (key2.pub)); nano::account_info info3; ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info3)); auto latest2 (store->block.get (transaction, info3.head)); @@ -155,9 +155,9 @@ TEST (ledger, process_send) nano::pending_info pending1; ASSERT_FALSE (ledger.store.pending.get (transaction, nano::pending_key (key2.pub, hash1), pending1)); ASSERT_EQ (nano::dev::genesis_key.pub, pending1.source); - ASSERT_EQ (nano::dev::genesis_amount - 50, pending1.amount.number ()); + ASSERT_EQ (nano::dev::constants.genesis_amount - 50, pending1.amount.number ()); ASSERT_EQ (0, ledger.account_balance (transaction, key2.pub)); - ASSERT_EQ (nano::dev::genesis_amount - 50, ledger.account_pending (transaction, key2.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount - 50, ledger.account_pending (transaction, key2.pub)); ASSERT_EQ (50, ledger.account_balance (transaction, nano::dev::genesis_key.pub)); ASSERT_EQ (50, ledger.weight (nano::dev::genesis_key.pub)); ASSERT_EQ (0, ledger.weight (key2.pub)); @@ -165,7 +165,7 @@ TEST (ledger, process_send) ASSERT_FALSE (ledger.store.account.get (transaction, nano::dev::genesis_key.pub, info6)); ASSERT_EQ (hash1, info6.head); ASSERT_FALSE (ledger.rollback (transaction, info6.head)); - ASSERT_EQ (nano::dev::genesis_amount, ledger.weight (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount, ledger.weight (nano::dev::genesis_key.pub)); ASSERT_EQ (nano::dev::genesis_key.pub, store->frontier.get (transaction, info1.head)); ASSERT_TRUE (store->frontier.get (transaction, hash1).is_zero ()); nano::account_info info7; @@ -174,7 +174,7 @@ TEST (ledger, process_send) ASSERT_EQ (info1.head, info7.head); nano::pending_info pending2; ASSERT_TRUE (ledger.store.pending.get (transaction, nano::pending_key (key2.pub, hash1), pending2)); - ASSERT_EQ (nano::dev::genesis_amount, ledger.account_balance (transaction, nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount, ledger.account_balance (transaction, nano::dev::genesis_key.pub)); ASSERT_EQ (0, ledger.account_pending (transaction, key2.pub)); ASSERT_EQ (store->account.count (transaction), ledger.cache.account_count); } @@ -202,10 +202,10 @@ TEST (ledger, process_receive) ASSERT_EQ (nano::process_result::progress, return1.code); ASSERT_EQ (key2.pub, store->block.account_calculated (open)); ASSERT_EQ (key2.pub, open.sideband ().account); - ASSERT_EQ (nano::dev::genesis_amount - 50, open.sideband ().balance.number ()); + ASSERT_EQ (nano::dev::constants.genesis_amount - 50, open.sideband ().balance.number ()); ASSERT_EQ (1, open.sideband ().height); - ASSERT_EQ (nano::dev::genesis_amount - 50, ledger.amount (transaction, hash2)); - ASSERT_EQ (nano::dev::genesis_amount - 50, ledger.weight (key3.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount - 50, ledger.amount (transaction, hash2)); + ASSERT_EQ (nano::dev::constants.genesis_amount - 50, ledger.weight (key3.pub)); nano::send_block send2 (hash1, key2.pub, 25, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (hash1)); nano::block_hash hash3 (send2.hash ()); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); @@ -214,7 +214,7 @@ TEST (ledger, process_receive) ASSERT_EQ (key2.pub, store->frontier.get (transaction, hash2)); auto return2 (ledger.process (transaction, receive)); ASSERT_EQ (key2.pub, receive.sideband ().account); - ASSERT_EQ (nano::dev::genesis_amount - 25, receive.sideband ().balance.number ()); + ASSERT_EQ (nano::dev::constants.genesis_amount - 25, receive.sideband ().balance.number ()); ASSERT_EQ (2, receive.sideband ().height); ASSERT_EQ (25, ledger.amount (transaction, hash4)); ASSERT_TRUE (store->frontier.get (transaction, hash2).is_zero ()); @@ -224,16 +224,16 @@ TEST (ledger, process_receive) ASSERT_EQ (hash4, ledger.latest (transaction, key2.pub)); ASSERT_EQ (25, ledger.account_balance (transaction, nano::dev::genesis_key.pub)); ASSERT_EQ (0, ledger.account_pending (transaction, key2.pub)); - ASSERT_EQ (nano::dev::genesis_amount - 25, ledger.account_balance (transaction, key2.pub)); - ASSERT_EQ (nano::dev::genesis_amount - 25, ledger.weight (key3.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount - 25, ledger.account_balance (transaction, key2.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount - 25, ledger.weight (key3.pub)); ASSERT_FALSE (ledger.rollback (transaction, hash4)); ASSERT_TRUE (store->block.successor (transaction, hash2).is_zero ()); ASSERT_EQ (key2.pub, store->frontier.get (transaction, hash2)); ASSERT_TRUE (store->frontier.get (transaction, hash4).is_zero ()); ASSERT_EQ (25, ledger.account_balance (transaction, nano::dev::genesis_key.pub)); ASSERT_EQ (25, ledger.account_pending (transaction, key2.pub)); - ASSERT_EQ (nano::dev::genesis_amount - 50, ledger.account_balance (transaction, key2.pub)); - ASSERT_EQ (nano::dev::genesis_amount - 50, ledger.weight (key3.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount - 50, ledger.account_balance (transaction, key2.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount - 50, ledger.weight (key3.pub)); ASSERT_EQ (hash2, ledger.latest (transaction, key2.pub)); nano::pending_info pending1; ASSERT_FALSE (ledger.store.pending.get (transaction, nano::pending_key (key2.pub, hash3), pending1)); @@ -264,14 +264,14 @@ TEST (ledger, rollback_receiver) ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open).code); ASSERT_EQ (hash2, ledger.latest (transaction, key2.pub)); ASSERT_EQ (50, ledger.account_balance (transaction, nano::dev::genesis_key.pub)); - ASSERT_EQ (nano::dev::genesis_amount - 50, ledger.account_balance (transaction, key2.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount - 50, ledger.account_balance (transaction, key2.pub)); ASSERT_EQ (50, ledger.weight (nano::dev::genesis_key.pub)); ASSERT_EQ (0, ledger.weight (key2.pub)); - ASSERT_EQ (nano::dev::genesis_amount - 50, ledger.weight (key3.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount - 50, ledger.weight (key3.pub)); ASSERT_FALSE (ledger.rollback (transaction, hash1)); - ASSERT_EQ (nano::dev::genesis_amount, ledger.account_balance (transaction, nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount, ledger.account_balance (transaction, nano::dev::genesis_key.pub)); ASSERT_EQ (0, ledger.account_balance (transaction, key2.pub)); - ASSERT_EQ (nano::dev::genesis_amount, ledger.weight (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount, ledger.weight (nano::dev::genesis_key.pub)); ASSERT_EQ (0, ledger.weight (key2.pub)); ASSERT_EQ (0, ledger.weight (key3.pub)); nano::account_info info2; @@ -308,7 +308,7 @@ TEST (ledger, rollback_representation) nano::receive_block receive1 (open.hash (), send2.hash (), key2.prv, key2.pub, *pool.generate (open.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); ASSERT_EQ (1, ledger.weight (key3.pub)); - ASSERT_EQ (nano::dev::genesis_amount - 1, ledger.weight (key4.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount - 1, ledger.weight (key4.pub)); nano::account_info info1; ASSERT_FALSE (store->account.get (transaction, key2.pub, info1)); ASSERT_EQ (key4.pub, info1.representative); @@ -317,12 +317,12 @@ TEST (ledger, rollback_representation) ASSERT_FALSE (store->account.get (transaction, key2.pub, info2)); ASSERT_EQ (key4.pub, info2.representative); ASSERT_EQ (0, ledger.weight (key2.pub)); - ASSERT_EQ (nano::dev::genesis_amount - 50, ledger.weight (key4.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount - 50, ledger.weight (key4.pub)); ASSERT_FALSE (ledger.rollback (transaction, open.hash ())); ASSERT_EQ (1, ledger.weight (key3.pub)); ASSERT_EQ (0, ledger.weight (key4.pub)); ledger.rollback (transaction, send1.hash ()); - ASSERT_EQ (nano::dev::genesis_amount, ledger.weight (key3.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount, ledger.weight (key3.pub)); nano::account_info info3; ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info3)); ASSERT_EQ (key3.pub, info3.representative); @@ -330,7 +330,7 @@ TEST (ledger, rollback_representation) nano::account_info info4; ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info4)); ASSERT_EQ (key5.pub, info4.representative); - ASSERT_EQ (nano::dev::genesis_amount, ledger.weight (key5.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount, ledger.weight (key5.pub)); ASSERT_EQ (0, ledger.weight (key3.pub)); } @@ -344,7 +344,7 @@ TEST (ledger, receive_rollback) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::send_block send (nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::send_block send (nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); nano::receive_block receive (send.hash (), send.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive).code); @@ -396,7 +396,7 @@ TEST (ledger, weight) nano::ledger ledger (*store, stats); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - ASSERT_EQ (nano::dev::genesis_amount, ledger.weight (nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::constants.genesis_amount, ledger.weight (nano::dev::genesis->account ())); } TEST (ledger, representative_change) @@ -410,7 +410,7 @@ TEST (ledger, representative_change) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - ASSERT_EQ (nano::dev::genesis_amount, ledger.weight (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount, ledger.weight (nano::dev::genesis_key.pub)); ASSERT_EQ (0, ledger.weight (key2.pub)); nano::account_info info1; ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info1)); @@ -423,7 +423,7 @@ TEST (ledger, representative_change) ASSERT_EQ (nano::process_result::progress, return1.code); ASSERT_EQ (nano::dev::genesis_key.pub, store->block.account_calculated (block)); ASSERT_EQ (0, ledger.weight (nano::dev::genesis_key.pub)); - ASSERT_EQ (nano::dev::genesis_amount, ledger.weight (key2.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount, ledger.weight (key2.pub)); nano::account_info info2; ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info2)); ASSERT_EQ (block.hash (), info2.head); @@ -433,7 +433,7 @@ TEST (ledger, representative_change) nano::account_info info3; ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info3)); ASSERT_EQ (info1.head, info3.head); - ASSERT_EQ (nano::dev::genesis_amount, ledger.weight (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount, ledger.weight (nano::dev::genesis_key.pub)); ASSERT_EQ (0, ledger.weight (key2.pub)); } @@ -527,38 +527,38 @@ TEST (ledger, representation) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - ASSERT_EQ (nano::dev::genesis_amount, rep_weights.representation_get (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount, rep_weights.representation_get (nano::dev::genesis_key.pub)); nano::keypair key2; - nano::send_block block1 (nano::dev::genesis->hash (), key2.pub, nano::dev::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::send_block block1 (nano::dev::genesis->hash (), key2.pub, nano::dev::constants.genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block1).code); - ASSERT_EQ (nano::dev::genesis_amount - 100, rep_weights.representation_get (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount - 100, rep_weights.representation_get (nano::dev::genesis_key.pub)); nano::keypair key3; nano::open_block block2 (block1.hash (), key3.pub, key2.pub, key2.prv, key2.pub, *pool.generate (key2.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block2).code); - ASSERT_EQ (nano::dev::genesis_amount - 100, rep_weights.representation_get (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount - 100, rep_weights.representation_get (nano::dev::genesis_key.pub)); ASSERT_EQ (0, rep_weights.representation_get (key2.pub)); ASSERT_EQ (100, rep_weights.representation_get (key3.pub)); - nano::send_block block3 (block1.hash (), key2.pub, nano::dev::genesis_amount - 200, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (block1.hash ())); + nano::send_block block3 (block1.hash (), key2.pub, nano::dev::constants.genesis_amount - 200, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (block1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block3).code); - ASSERT_EQ (nano::dev::genesis_amount - 200, rep_weights.representation_get (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount - 200, rep_weights.representation_get (nano::dev::genesis_key.pub)); ASSERT_EQ (0, rep_weights.representation_get (key2.pub)); ASSERT_EQ (100, rep_weights.representation_get (key3.pub)); nano::receive_block block4 (block2.hash (), block3.hash (), key2.prv, key2.pub, *pool.generate (block2.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block4).code); - ASSERT_EQ (nano::dev::genesis_amount - 200, rep_weights.representation_get (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount - 200, rep_weights.representation_get (nano::dev::genesis_key.pub)); ASSERT_EQ (0, rep_weights.representation_get (key2.pub)); ASSERT_EQ (200, rep_weights.representation_get (key3.pub)); nano::keypair key4; nano::change_block block5 (block4.hash (), key4.pub, key2.prv, key2.pub, *pool.generate (block4.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block5).code); - ASSERT_EQ (nano::dev::genesis_amount - 200, rep_weights.representation_get (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount - 200, rep_weights.representation_get (nano::dev::genesis_key.pub)); ASSERT_EQ (0, rep_weights.representation_get (key2.pub)); ASSERT_EQ (0, rep_weights.representation_get (key3.pub)); ASSERT_EQ (200, rep_weights.representation_get (key4.pub)); nano::keypair key5; nano::send_block block6 (block5.hash (), key5.pub, 100, key2.prv, key2.pub, *pool.generate (block5.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block6).code); - ASSERT_EQ (nano::dev::genesis_amount - 200, rep_weights.representation_get (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount - 200, rep_weights.representation_get (nano::dev::genesis_key.pub)); ASSERT_EQ (0, rep_weights.representation_get (key2.pub)); ASSERT_EQ (0, rep_weights.representation_get (key3.pub)); ASSERT_EQ (100, rep_weights.representation_get (key4.pub)); @@ -566,7 +566,7 @@ TEST (ledger, representation) nano::keypair key6; nano::open_block block7 (block6.hash (), key6.pub, key5.pub, key5.prv, key5.pub, *pool.generate (key5.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block7).code); - ASSERT_EQ (nano::dev::genesis_amount - 200, rep_weights.representation_get (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount - 200, rep_weights.representation_get (nano::dev::genesis_key.pub)); ASSERT_EQ (0, rep_weights.representation_get (key2.pub)); ASSERT_EQ (0, rep_weights.representation_get (key3.pub)); ASSERT_EQ (100, rep_weights.representation_get (key4.pub)); @@ -574,7 +574,7 @@ TEST (ledger, representation) ASSERT_EQ (100, rep_weights.representation_get (key6.pub)); nano::send_block block8 (block6.hash (), key5.pub, 0, key2.prv, key2.pub, *pool.generate (block6.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block8).code); - ASSERT_EQ (nano::dev::genesis_amount - 200, rep_weights.representation_get (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount - 200, rep_weights.representation_get (nano::dev::genesis_key.pub)); ASSERT_EQ (0, rep_weights.representation_get (key2.pub)); ASSERT_EQ (0, rep_weights.representation_get (key3.pub)); ASSERT_EQ (0, rep_weights.representation_get (key4.pub)); @@ -582,7 +582,7 @@ TEST (ledger, representation) ASSERT_EQ (100, rep_weights.representation_get (key6.pub)); nano::receive_block block9 (block7.hash (), block8.hash (), key5.prv, key5.pub, *pool.generate (block7.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block9).code); - ASSERT_EQ (nano::dev::genesis_amount - 200, rep_weights.representation_get (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount - 200, rep_weights.representation_get (nano::dev::genesis_key.pub)); ASSERT_EQ (0, rep_weights.representation_get (key2.pub)); ASSERT_EQ (0, rep_weights.representation_get (key3.pub)); ASSERT_EQ (0, rep_weights.representation_get (key4.pub)); @@ -635,7 +635,7 @@ TEST (votes, check_signature) node_config.online_weight_minimum = std::numeric_limits::max (); auto & node1 = *system.add_node (node_config); nano::keypair key1; - auto send1 (std::make_shared (nano::dev::genesis->hash (), key1.pub, nano::dev::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); + auto send1 (std::make_shared (nano::dev::genesis->hash (), key1.pub, nano::dev::constants.genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send1); { auto transaction (node1.store.tx_begin_write ()); @@ -658,7 +658,7 @@ TEST (votes, add_one) nano::system system (1); auto & node1 (*system.nodes[0]); nano::keypair key1; - auto send1 (std::make_shared (nano::dev::genesis->hash (), key1.pub, nano::dev::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); + auto send1 (std::make_shared (nano::dev::genesis->hash (), key1.pub, nano::dev::constants.genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send1); auto transaction (node1.store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, node1.ledger.process (transaction, *send1).code); @@ -678,7 +678,7 @@ TEST (votes, add_one) nano::lock_guard guard (node1.active.mutex); auto winner (*election1->tally ().begin ()); ASSERT_EQ (*send1, *winner.second); - ASSERT_EQ (nano::dev::genesis_amount - 100, winner.first); + ASSERT_EQ (nano::dev::constants.genesis_amount - 100, winner.first); } TEST (votes, add_two) @@ -686,7 +686,7 @@ TEST (votes, add_two) nano::system system{ 1 }; auto & node1 = *system.nodes[0]; nano::keypair key1; - auto send1 = std::make_shared (nano::dev::genesis->hash (), key1.pub, nano::dev::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0); + auto send1 = std::make_shared (nano::dev::genesis->hash (), key1.pub, nano::dev::constants.genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0); node1.work_generate_blocking (*send1); auto transaction = node1.store.tx_begin_write (); ASSERT_EQ (nano::process_result::progress, node1.ledger.process (transaction, *send1).code); @@ -715,7 +715,7 @@ TEST (votes, add_existing) { nano::system system; nano::node_config node_config (nano::get_available_port (), system.logging); - node_config.online_weight_minimum = nano::dev::genesis_amount; + node_config.online_weight_minimum = nano::dev::constants.genesis_amount; node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto & node1 = *system.add_node (node_config); nano::keypair key1; @@ -724,7 +724,7 @@ TEST (votes, add_existing) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) // No representative, blocks can't confirm - .balance (nano::dev::genesis_amount / 2 - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount / 2 - nano::Gxrb_ratio) .link (key1.pub) .work (0) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) @@ -744,7 +744,7 @@ TEST (votes, add_existing) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) // No representative, blocks can't confirm - .balance (nano::dev::genesis_amount / 2 - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount / 2 - nano::Gxrb_ratio) .link (key2.pub) .work (0) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) @@ -1383,7 +1383,7 @@ TEST (ledger, change_representative_move_representation) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - ASSERT_EQ (nano::dev::genesis_amount, ledger.weight (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount, ledger.weight (nano::dev::genesis_key.pub)); nano::send_block send (nano::dev::genesis->hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); ASSERT_EQ (0, ledger.weight (nano::dev::genesis_key.pub)); @@ -1393,7 +1393,7 @@ TEST (ledger, change_representative_move_representation) nano::keypair key3; nano::open_block open (send.hash (), key3.pub, key1.pub, key1.prv, key1.pub, *pool.generate (key1.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open).code); - ASSERT_EQ (nano::dev::genesis_amount, ledger.weight (key3.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount, ledger.weight (key3.pub)); } TEST (ledger, send_open_receive_rollback) @@ -1409,10 +1409,10 @@ TEST (ledger, send_open_receive_rollback) nano::account_info info1; ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info1)); nano::keypair key1; - nano::send_block send1 (info1.head, key1.pub, nano::dev::genesis_amount - 50, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (info1.head)); + nano::send_block send1 (info1.head, key1.pub, nano::dev::constants.genesis_amount - 50, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (info1.head)); auto return1 (ledger.process (transaction, send1)); ASSERT_EQ (nano::process_result::progress, return1.code); - nano::send_block send2 (send1.hash (), key1.pub, nano::dev::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); + nano::send_block send2 (send1.hash (), key1.pub, nano::dev::constants.genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); auto return2 (ledger.process (transaction, send2)); ASSERT_EQ (nano::process_result::progress, return2.code); nano::keypair key2; @@ -1424,34 +1424,34 @@ TEST (ledger, send_open_receive_rollback) ASSERT_EQ (nano::process_result::progress, return5.code); nano::keypair key3; ASSERT_EQ (100, ledger.weight (key2.pub)); - ASSERT_EQ (nano::dev::genesis_amount - 100, ledger.weight (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount - 100, ledger.weight (nano::dev::genesis_key.pub)); ASSERT_EQ (0, ledger.weight (key3.pub)); nano::change_block change1 (send2.hash (), key3.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send2.hash ())); auto return6 (ledger.process (transaction, change1)); ASSERT_EQ (nano::process_result::progress, return6.code); ASSERT_EQ (100, ledger.weight (key2.pub)); ASSERT_EQ (0, ledger.weight (nano::dev::genesis_key.pub)); - ASSERT_EQ (nano::dev::genesis_amount - 100, ledger.weight (key3.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount - 100, ledger.weight (key3.pub)); ASSERT_FALSE (ledger.rollback (transaction, receive.hash ())); ASSERT_EQ (50, ledger.weight (key2.pub)); ASSERT_EQ (0, ledger.weight (nano::dev::genesis_key.pub)); - ASSERT_EQ (nano::dev::genesis_amount - 100, ledger.weight (key3.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount - 100, ledger.weight (key3.pub)); ASSERT_FALSE (ledger.rollback (transaction, open.hash ())); ASSERT_EQ (0, ledger.weight (key2.pub)); ASSERT_EQ (0, ledger.weight (nano::dev::genesis_key.pub)); - ASSERT_EQ (nano::dev::genesis_amount - 100, ledger.weight (key3.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount - 100, ledger.weight (key3.pub)); ASSERT_FALSE (ledger.rollback (transaction, change1.hash ())); ASSERT_EQ (0, ledger.weight (key2.pub)); ASSERT_EQ (0, ledger.weight (key3.pub)); - ASSERT_EQ (nano::dev::genesis_amount - 100, ledger.weight (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount - 100, ledger.weight (nano::dev::genesis_key.pub)); ASSERT_FALSE (ledger.rollback (transaction, send2.hash ())); ASSERT_EQ (0, ledger.weight (key2.pub)); ASSERT_EQ (0, ledger.weight (key3.pub)); - ASSERT_EQ (nano::dev::genesis_amount - 50, ledger.weight (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount - 50, ledger.weight (nano::dev::genesis_key.pub)); ASSERT_FALSE (ledger.rollback (transaction, send1.hash ())); ASSERT_EQ (0, ledger.weight (key2.pub)); ASSERT_EQ (0, ledger.weight (key3.pub)); - ASSERT_EQ (nano::dev::genesis_amount - 0, ledger.weight (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount - 0, ledger.weight (nano::dev::genesis_key.pub)); } TEST (ledger, bootstrap_rep_weight) @@ -1501,7 +1501,7 @@ TEST (ledger, block_destination_source) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair dest; - nano::uint128_t balance (nano::dev::genesis_amount); + nano::uint128_t balance (nano::dev::constants.genesis_amount); balance -= nano::Gxrb_ratio; nano::send_block block1 (nano::dev::genesis->hash (), dest.pub, balance, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); balance -= nano::Gxrb_ratio; @@ -1545,7 +1545,7 @@ TEST (ledger, state_account) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_EQ (nano::dev::genesis->account (), ledger.account (transaction, send1.hash ())); } @@ -1560,29 +1560,29 @@ TEST (ledger, state_send_receive) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send2 (store->block.get (transaction, send1.hash ())); ASSERT_NE (nullptr, send2); ASSERT_EQ (send1, *send2); - ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); + ASSERT_EQ (nano::dev::constants.genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, send1.hash ())); - ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::constants.genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()))); ASSERT_EQ (2, send2->sideband ().height); ASSERT_TRUE (send2->sideband ().details.is_send); ASSERT_FALSE (send2->sideband ().details.is_receive); ASSERT_FALSE (send2->sideband ().details.is_epoch); - nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); ASSERT_TRUE (store->block.exists (transaction, receive1.hash ())); auto receive2 (store->block.get (transaction, receive1.hash ())); ASSERT_NE (nullptr, receive2); ASSERT_EQ (receive1, *receive2); - ASSERT_EQ (nano::dev::genesis_amount, ledger.balance (transaction, receive1.hash ())); + ASSERT_EQ (nano::dev::constants.genesis_amount, ledger.balance (transaction, receive1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, receive1.hash ())); - ASSERT_EQ (nano::dev::genesis_amount, ledger.weight (nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::constants.genesis_amount, ledger.weight (nano::dev::genesis->account ())); ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()))); ASSERT_EQ (store->account.count (transaction), ledger.cache.account_count); ASSERT_EQ (3, receive2->sideband ().height); @@ -1601,24 +1601,24 @@ TEST (ledger, state_receive) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::send_block send1 (nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::send_block send1 (nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send2 (store->block.get (transaction, send1.hash ())); ASSERT_NE (nullptr, send2); ASSERT_EQ (send1, *send2); - ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); + ASSERT_EQ (nano::dev::constants.genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, send1.hash ())); - ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); - nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); + ASSERT_EQ (nano::dev::constants.genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); + nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); ASSERT_TRUE (store->block.exists (transaction, receive1.hash ())); auto receive2 (store->block.get (transaction, receive1.hash ())); ASSERT_NE (nullptr, receive2); ASSERT_EQ (receive1, *receive2); - ASSERT_EQ (nano::dev::genesis_amount, ledger.balance (transaction, receive1.hash ())); + ASSERT_EQ (nano::dev::constants.genesis_amount, ledger.balance (transaction, receive1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, receive1.hash ())); - ASSERT_EQ (nano::dev::genesis_amount, ledger.weight (nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::constants.genesis_amount, ledger.weight (nano::dev::genesis->account ())); ASSERT_EQ (3, receive2->sideband ().height); ASSERT_FALSE (receive2->sideband ().details.is_send); ASSERT_TRUE (receive2->sideband ().details.is_receive); @@ -1636,16 +1636,16 @@ TEST (ledger, state_rep_change) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair rep; - nano::state_block change1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), rep.pub, nano::dev::genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::state_block change1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), rep.pub, nano::dev::constants.genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, change1).code); ASSERT_TRUE (store->block.exists (transaction, change1.hash ())); auto change2 (store->block.get (transaction, change1.hash ())); ASSERT_NE (nullptr, change2); ASSERT_EQ (change1, *change2); - ASSERT_EQ (nano::dev::genesis_amount, ledger.balance (transaction, change1.hash ())); + ASSERT_EQ (nano::dev::constants.genesis_amount, ledger.balance (transaction, change1.hash ())); ASSERT_EQ (0, ledger.amount (transaction, change1.hash ())); ASSERT_EQ (0, ledger.weight (nano::dev::genesis->account ())); - ASSERT_EQ (nano::dev::genesis_amount, ledger.weight (rep.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount, ledger.weight (rep.pub)); ASSERT_EQ (2, change2->sideband ().height); ASSERT_FALSE (change2->sideband ().details.is_send); ASSERT_FALSE (change2->sideband ().details.is_receive); @@ -1663,15 +1663,15 @@ TEST (ledger, state_open) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send2 (store->block.get (transaction, send1.hash ())); ASSERT_NE (nullptr, send2); ASSERT_EQ (send1, *send2); - ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); + ASSERT_EQ (nano::dev::constants.genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, send1.hash ())); - ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::constants.genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (destination.pub, send1.hash ()))); nano::state_block open1 (destination.pub, 0, nano::dev::genesis->account (), nano::Gxrb_ratio, send1.hash (), destination.prv, destination.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open1).code); @@ -1682,7 +1682,7 @@ TEST (ledger, state_open) ASSERT_EQ (open1, *open2); ASSERT_EQ (nano::Gxrb_ratio, ledger.balance (transaction, open1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, open1.hash ())); - ASSERT_EQ (nano::dev::genesis_amount, ledger.weight (nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::constants.genesis_amount, ledger.weight (nano::dev::genesis->account ())); ASSERT_EQ (ledger.cache.account_count, store->account.count (transaction)); ASSERT_EQ (1, open2->sideband ().height); ASSERT_FALSE (open2->sideband ().details.is_send); @@ -1701,9 +1701,9 @@ TEST (ledger, send_after_state_fail) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - nano::send_block send2 (send1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - (2 * nano::Gxrb_ratio), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); + nano::send_block send2 (send1.hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - (2 * nano::Gxrb_ratio), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::block_position, ledger.process (transaction, send2).code); } @@ -1718,7 +1718,7 @@ TEST (ledger, receive_after_state_fail) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::receive_block receive1 (send1.hash (), send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::block_position, ledger.process (transaction, receive1).code); @@ -1735,7 +1735,7 @@ TEST (ledger, change_after_state_fail) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::keypair rep; nano::change_block change1 (send1.hash (), rep.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); @@ -1752,16 +1752,16 @@ TEST (ledger, state_unreceivable_fail) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::send_block send1 (nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::send_block send1 (nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send2 (store->block.get (transaction, send1.hash ())); ASSERT_NE (nullptr, send2); ASSERT_EQ (send1, *send2); - ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); + ASSERT_EQ (nano::dev::constants.genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, send1.hash ())); - ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); - nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); + ASSERT_EQ (nano::dev::constants.genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); + nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::gap_source, ledger.process (transaction, receive1).code); } @@ -1775,16 +1775,16 @@ TEST (ledger, state_receive_bad_amount_fail) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::send_block send1 (nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::send_block send1 (nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send2 (store->block.get (transaction, send1.hash ())); ASSERT_NE (nullptr, send2); ASSERT_EQ (send1, *send2); - ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); + ASSERT_EQ (nano::dev::constants.genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, send1.hash ())); - ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); - nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); + ASSERT_EQ (nano::dev::constants.genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); + nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::balance_mismatch, ledger.process (transaction, receive1).code); } @@ -1798,10 +1798,10 @@ TEST (ledger, state_no_link_amount_fail) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::keypair rep; - nano::state_block change1 (nano::dev::genesis->account (), send1.hash (), rep.pub, nano::dev::genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block change1 (nano::dev::genesis->account (), send1.hash (), rep.pub, nano::dev::constants.genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::balance_mismatch, ledger.process (transaction, change1).code); } @@ -1815,15 +1815,15 @@ TEST (ledger, state_receive_wrong_account_fail) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send2 (store->block.get (transaction, send1.hash ())); ASSERT_NE (nullptr, send2); ASSERT_EQ (send1, *send2); - ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); + ASSERT_EQ (nano::dev::constants.genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, send1.hash ())); - ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::constants.genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); nano::keypair key; nano::state_block receive1 (key.pub, 0, nano::dev::genesis->account (), nano::Gxrb_ratio, send1.hash (), key.prv, key.pub, *pool.generate (key.pub)); ASSERT_EQ (nano::process_result::unreceivable, ledger.process (transaction, receive1).code); @@ -1840,7 +1840,7 @@ TEST (ledger, state_open_state_fork) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::state_block open1 (destination.pub, 0, nano::dev::genesis->account (), nano::Gxrb_ratio, send1.hash (), destination.prv, destination.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open1).code); @@ -1860,7 +1860,7 @@ TEST (ledger, state_state_open_fork) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::open_block open1 (send1.hash (), nano::dev::genesis->account (), destination.pub, destination.prv, destination.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open1).code); @@ -1881,7 +1881,7 @@ TEST (ledger, state_open_previous_fail) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::state_block open1 (destination.pub, 1, nano::dev::genesis->account (), nano::Gxrb_ratio, send1.hash (), destination.prv, destination.pub, *pool.generate (1)); ASSERT_EQ (nano::process_result::gap_previous, ledger.process (transaction, open1).code); @@ -1898,7 +1898,7 @@ TEST (ledger, state_open_source_fail) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::state_block open1 (destination.pub, 0, nano::dev::genesis->account (), 0, 0, destination.prv, destination.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::gap_source, ledger.process (transaction, open1).code); @@ -1915,16 +1915,16 @@ TEST (ledger, state_send_change) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair rep; - nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), rep.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), rep.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send2 (store->block.get (transaction, send1.hash ())); ASSERT_NE (nullptr, send2); ASSERT_EQ (send1, *send2); - ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); + ASSERT_EQ (nano::dev::constants.genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, send1.hash ())); ASSERT_EQ (0, ledger.weight (nano::dev::genesis->account ())); - ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.weight (rep.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount - nano::Gxrb_ratio, ledger.weight (rep.pub)); ASSERT_EQ (2, send2->sideband ().height); ASSERT_TRUE (send2->sideband ().details.is_send); ASSERT_FALSE (send2->sideband ().details.is_receive); @@ -1941,26 +1941,26 @@ TEST (ledger, state_receive_change) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send2 (store->block.get (transaction, send1.hash ())); ASSERT_NE (nullptr, send2); ASSERT_EQ (send1, *send2); - ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); + ASSERT_EQ (nano::dev::constants.genesis_amount - nano::Gxrb_ratio, ledger.balance (transaction, send1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, send1.hash ())); - ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::constants.genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); nano::keypair rep; - nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), rep.pub, nano::dev::genesis_amount, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), rep.pub, nano::dev::constants.genesis_amount, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); ASSERT_TRUE (store->block.exists (transaction, receive1.hash ())); auto receive2 (store->block.get (transaction, receive1.hash ())); ASSERT_NE (nullptr, receive2); ASSERT_EQ (receive1, *receive2); - ASSERT_EQ (nano::dev::genesis_amount, ledger.balance (transaction, receive1.hash ())); + ASSERT_EQ (nano::dev::constants.genesis_amount, ledger.balance (transaction, receive1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, receive1.hash ())); ASSERT_EQ (0, ledger.weight (nano::dev::genesis->account ())); - ASSERT_EQ (nano::dev::genesis_amount, ledger.weight (rep.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount, ledger.weight (rep.pub)); ASSERT_EQ (3, receive2->sideband ().height); ASSERT_FALSE (receive2->sideband ().details.is_send); ASSERT_TRUE (receive2->sideband ().details.is_receive); @@ -1978,13 +1978,13 @@ TEST (ledger, state_open_old) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::open_block open1 (send1.hash (), nano::dev::genesis->account (), destination.pub, destination.prv, destination.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open1).code); ASSERT_EQ (nano::Gxrb_ratio, ledger.balance (transaction, open1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, open1.hash ())); - ASSERT_EQ (nano::dev::genesis_amount, ledger.weight (nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::constants.genesis_amount, ledger.weight (nano::dev::genesis->account ())); } TEST (ledger, state_receive_old) @@ -1998,9 +1998,9 @@ TEST (ledger, state_receive_old) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - nano::state_block send2 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - (2 * nano::Gxrb_ratio), destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block send2 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - (2 * nano::Gxrb_ratio), destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); nano::open_block open1 (send1.hash (), nano::dev::genesis->account (), destination.pub, destination.prv, destination.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open1).code); @@ -2008,7 +2008,7 @@ TEST (ledger, state_receive_old) ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); ASSERT_EQ (2 * nano::Gxrb_ratio, ledger.balance (transaction, receive1.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, receive1.hash ())); - ASSERT_EQ (nano::dev::genesis_amount, ledger.weight (nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::constants.genesis_amount, ledger.weight (nano::dev::genesis->account ())); } TEST (ledger, state_rollback_send) @@ -2021,22 +2021,22 @@ TEST (ledger, state_rollback_send) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send2 (store->block.get (transaction, send1.hash ())); ASSERT_NE (nullptr, send2); ASSERT_EQ (send1, *send2); - ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.account_balance (transaction, nano::dev::genesis->account ())); - ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::constants.genesis_amount - nano::Gxrb_ratio, ledger.account_balance (transaction, nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::constants.genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); nano::pending_info info; ASSERT_FALSE (store->pending.get (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()), info)); ASSERT_EQ (nano::dev::genesis->account (), info.source); ASSERT_EQ (nano::Gxrb_ratio, info.amount.number ()); ASSERT_FALSE (ledger.rollback (transaction, send1.hash ())); ASSERT_FALSE (store->block.exists (transaction, send1.hash ())); - ASSERT_EQ (nano::dev::genesis_amount, ledger.account_balance (transaction, nano::dev::genesis->account ())); - ASSERT_EQ (nano::dev::genesis_amount, ledger.weight (nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::constants.genesis_amount, ledger.account_balance (transaction, nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::constants.genesis_amount, ledger.weight (nano::dev::genesis->account ())); ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()))); ASSERT_TRUE (store->block.successor (transaction, nano::dev::genesis->hash ()).is_zero ()); ASSERT_EQ (store->account.count (transaction), ledger.cache.account_count); @@ -2052,9 +2052,9 @@ TEST (ledger, state_rollback_receive) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), receive1.hash ()))); ASSERT_FALSE (ledger.rollback (transaction, receive1.hash ())); @@ -2063,8 +2063,8 @@ TEST (ledger, state_rollback_receive) ASSERT_EQ (nano::dev::genesis->account (), info.source); ASSERT_EQ (nano::Gxrb_ratio, info.amount.number ()); ASSERT_FALSE (store->block.exists (transaction, receive1.hash ())); - ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.account_balance (transaction, nano::dev::genesis->account ())); - ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::constants.genesis_amount - nano::Gxrb_ratio, ledger.account_balance (transaction, nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::constants.genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); ASSERT_EQ (store->account.count (transaction), ledger.cache.account_count); } @@ -2079,7 +2079,7 @@ TEST (ledger, state_rollback_received_send) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key; - nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::state_block receive1 (key.pub, 0, key.pub, nano::Gxrb_ratio, send1.hash (), key.prv, key.pub, *pool.generate (key.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); @@ -2088,8 +2088,8 @@ TEST (ledger, state_rollback_received_send) ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()))); ASSERT_FALSE (store->block.exists (transaction, send1.hash ())); ASSERT_FALSE (store->block.exists (transaction, receive1.hash ())); - ASSERT_EQ (nano::dev::genesis_amount, ledger.account_balance (transaction, nano::dev::genesis->account ())); - ASSERT_EQ (nano::dev::genesis_amount, ledger.weight (nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::constants.genesis_amount, ledger.account_balance (transaction, nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::constants.genesis_amount, ledger.weight (nano::dev::genesis->account ())); ASSERT_EQ (0, ledger.account_balance (transaction, key.pub)); ASSERT_EQ (0, ledger.weight (key.pub)); ASSERT_EQ (store->account.count (transaction), ledger.cache.account_count); @@ -2106,12 +2106,12 @@ TEST (ledger, state_rep_change_rollback) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair rep; - nano::state_block change1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), rep.pub, nano::dev::genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::state_block change1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), rep.pub, nano::dev::constants.genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, change1).code); ASSERT_FALSE (ledger.rollback (transaction, change1.hash ())); ASSERT_FALSE (store->block.exists (transaction, change1.hash ())); - ASSERT_EQ (nano::dev::genesis_amount, ledger.account_balance (transaction, nano::dev::genesis->account ())); - ASSERT_EQ (nano::dev::genesis_amount, ledger.weight (nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::constants.genesis_amount, ledger.account_balance (transaction, nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::constants.genesis_amount, ledger.weight (nano::dev::genesis->account ())); ASSERT_EQ (0, ledger.weight (rep.pub)); } @@ -2126,14 +2126,14 @@ TEST (ledger, state_open_rollback) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::state_block open1 (destination.pub, 0, nano::dev::genesis->account (), nano::Gxrb_ratio, send1.hash (), destination.prv, destination.pub, *pool.generate (destination.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open1).code); ASSERT_FALSE (ledger.rollback (transaction, open1.hash ())); ASSERT_FALSE (store->block.exists (transaction, open1.hash ())); ASSERT_EQ (0, ledger.account_balance (transaction, destination.pub)); - ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::constants.genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); nano::pending_info info; ASSERT_FALSE (store->pending.get (transaction, nano::pending_key (destination.pub, send1.hash ()), info)); ASSERT_EQ (nano::dev::genesis->account (), info.source); @@ -2152,12 +2152,12 @@ TEST (ledger, state_send_change_rollback) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair rep; - nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), rep.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), rep.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_FALSE (ledger.rollback (transaction, send1.hash ())); ASSERT_FALSE (store->block.exists (transaction, send1.hash ())); - ASSERT_EQ (nano::dev::genesis_amount, ledger.account_balance (transaction, nano::dev::genesis->account ())); - ASSERT_EQ (nano::dev::genesis_amount, ledger.weight (nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::constants.genesis_amount, ledger.account_balance (transaction, nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::constants.genesis_amount, ledger.weight (nano::dev::genesis->account ())); ASSERT_EQ (0, ledger.weight (rep.pub)); ASSERT_EQ (store->account.count (transaction), ledger.cache.account_count); } @@ -2172,15 +2172,15 @@ TEST (ledger, state_receive_change_rollback) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::keypair rep; - nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), rep.pub, nano::dev::genesis_amount, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), rep.pub, nano::dev::constants.genesis_amount, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); ASSERT_FALSE (ledger.rollback (transaction, receive1.hash ())); ASSERT_FALSE (store->block.exists (transaction, receive1.hash ())); - ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.account_balance (transaction, nano::dev::genesis->account ())); - ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::constants.genesis_amount - nano::Gxrb_ratio, ledger.account_balance (transaction, nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::constants.genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); ASSERT_EQ (0, ledger.weight (rep.pub)); ASSERT_EQ (store->account.count (transaction), ledger.cache.account_count); } @@ -2196,14 +2196,14 @@ TEST (ledger, epoch_blocks_v1_general) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block epoch1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::state_block epoch1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch1).code); ASSERT_FALSE (epoch1.sideband ().details.is_send); ASSERT_FALSE (epoch1.sideband ().details.is_receive); ASSERT_TRUE (epoch1.sideband ().details.is_epoch); ASSERT_EQ (nano::epoch::epoch_1, epoch1.sideband ().details.epoch); ASSERT_EQ (nano::epoch::epoch_0, epoch1.sideband ().source_epoch); // Not used for epoch blocks - nano::state_block epoch2 (nano::dev::genesis->account (), epoch1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch1.hash ())); + nano::state_block epoch2 (nano::dev::genesis->account (), epoch1.hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch1.hash ())); ASSERT_EQ (nano::process_result::block_position, ledger.process (transaction, epoch2).code); nano::account_info genesis_info; ASSERT_FALSE (ledger.store.account.get (transaction, nano::dev::genesis->account (), genesis_info)); @@ -2221,7 +2221,7 @@ TEST (ledger, epoch_blocks_v1_general) ASSERT_EQ (nano::epoch::epoch_0, epoch1.sideband ().source_epoch); // Not used for epoch blocks nano::change_block change1 (epoch1.hash (), nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch1.hash ())); ASSERT_EQ (nano::process_result::block_position, ledger.process (transaction, change1).code); - nano::state_block send1 (nano::dev::genesis->account (), epoch1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch1.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), epoch1.hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (send1.sideband ().details.is_send); ASSERT_FALSE (send1.sideband ().details.is_receive); @@ -2248,7 +2248,7 @@ TEST (ledger, epoch_blocks_v1_general) ASSERT_EQ (0, ledger.balance (transaction, epoch4.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.balance (transaction, receive2.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, receive2.hash ())); - ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::constants.genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.weight (destination.pub)); ASSERT_FALSE (receive2.sideband ().details.is_send); ASSERT_TRUE (receive2.sideband ().details.is_receive); @@ -2266,19 +2266,19 @@ TEST (ledger, epoch_blocks_v2_general) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block epoch1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::state_block epoch1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); // Trying to upgrade from epoch 0 to epoch 2. It is a requirement epoch upgrades are sequential unless the account is unopened ASSERT_EQ (nano::process_result::block_position, ledger.process (transaction, epoch1).code); // Set it to the first epoch and it should now succeed - epoch1 = nano::state_block (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, epoch1.work); + epoch1 = nano::state_block (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, epoch1.work); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch1).code); ASSERT_EQ (nano::epoch::epoch_1, epoch1.sideband ().details.epoch); ASSERT_EQ (nano::epoch::epoch_0, epoch1.sideband ().source_epoch); // Not used for epoch blocks - nano::state_block epoch2 (nano::dev::genesis->account (), epoch1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch1.hash ())); + nano::state_block epoch2 (nano::dev::genesis->account (), epoch1.hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch2).code); ASSERT_EQ (nano::epoch::epoch_2, epoch2.sideband ().details.epoch); ASSERT_EQ (nano::epoch::epoch_0, epoch2.sideband ().source_epoch); // Not used for epoch blocks - nano::state_block epoch3 (nano::dev::genesis->account (), epoch2.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch2.hash ())); + nano::state_block epoch3 (nano::dev::genesis->account (), epoch2.hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch2.hash ())); ASSERT_EQ (nano::process_result::block_position, ledger.process (transaction, epoch3).code); nano::account_info genesis_info; ASSERT_FALSE (ledger.store.account.get (transaction, nano::dev::genesis->account (), genesis_info)); @@ -2291,7 +2291,7 @@ TEST (ledger, epoch_blocks_v2_general) ASSERT_EQ (genesis_info.epoch (), nano::epoch::epoch_1); nano::change_block change1 (epoch1.hash (), nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch1.hash ())); ASSERT_EQ (nano::process_result::block_position, ledger.process (transaction, change1).code); - nano::state_block send1 (nano::dev::genesis->account (), epoch1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch1.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), epoch1.hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_EQ (nano::epoch::epoch_1, send1.sideband ().details.epoch); ASSERT_EQ (nano::epoch::epoch_0, send1.sideband ().source_epoch); // Not used for send blocks @@ -2316,7 +2316,7 @@ TEST (ledger, epoch_blocks_v2_general) ASSERT_EQ (0, ledger.balance (transaction, epoch6.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.balance (transaction, receive2.hash ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.amount (transaction, receive2.hash ())); - ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::constants.genesis_amount - nano::Gxrb_ratio, ledger.weight (nano::dev::genesis->account ())); ASSERT_EQ (nano::Gxrb_ratio, ledger.weight (destination.pub)); } @@ -2331,11 +2331,11 @@ TEST (ledger, epoch_blocks_receive_upgrade) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - nano::state_block epoch1 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block epoch1 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch1).code); - nano::state_block send2 (nano::dev::genesis->account (), epoch1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio * 2, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch1.hash ())); + nano::state_block send2 (nano::dev::genesis->account (), epoch1.hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio * 2, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); ASSERT_EQ (nano::epoch::epoch_1, send2.sideband ().details.epoch); ASSERT_EQ (nano::epoch::epoch_0, send2.sideband ().source_epoch); // Not used for send blocks @@ -2372,14 +2372,14 @@ TEST (ledger, epoch_blocks_receive_upgrade) ASSERT_EQ (nano::process_result::unreceivable, ledger.process (transaction, open2).code); // Upgrade to epoch 2 and send to destination. Try to create an open block from an epoch 2 source block. nano::keypair destination3; - nano::state_block epoch2 (nano::dev::genesis->account (), send2.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio * 2, ledger.epoch_link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send2.hash ())); + nano::state_block epoch2 (nano::dev::genesis->account (), send2.hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio * 2, ledger.epoch_link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send2.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch2).code); - nano::state_block send4 (nano::dev::genesis->account (), epoch2.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio * 3, destination3.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch2.hash ())); + nano::state_block send4 (nano::dev::genesis->account (), epoch2.hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio * 3, destination3.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch2.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send4).code); nano::open_block open3 (send4.hash (), destination3.pub, destination3.pub, destination3.prv, destination3.pub, *pool.generate (destination3.pub)); ASSERT_EQ (nano::process_result::unreceivable, ledger.process (transaction, open3).code); // Send it to an epoch 1 account - nano::state_block send5 (nano::dev::genesis->account (), send4.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio * 4, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send4.hash ())); + nano::state_block send5 (nano::dev::genesis->account (), send4.hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio * 4, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send4.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send5).code); ASSERT_FALSE (ledger.store.account.get (transaction, destination.pub, destination_info)); ASSERT_EQ (destination_info.epoch (), nano::epoch::epoch_1); @@ -2391,7 +2391,7 @@ TEST (ledger, epoch_blocks_receive_upgrade) ASSERT_EQ (destination_info.epoch (), nano::epoch::epoch_2); // Upgrade an unopened account straight to epoch 2 nano::keypair destination4; - nano::state_block send6 (nano::dev::genesis->account (), send5.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio * 5, destination4.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send5.hash ())); + nano::state_block send6 (nano::dev::genesis->account (), send5.hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio * 5, destination4.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send5.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send6).code); nano::state_block epoch4 (destination4.pub, 0, 0, 0, ledger.epoch_link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (destination4.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch4).code); @@ -2411,17 +2411,17 @@ TEST (ledger, epoch_blocks_fork) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair destination; - nano::send_block send1 (nano::dev::genesis->hash (), nano::account (0), nano::dev::genesis_amount, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::send_block send1 (nano::dev::genesis->hash (), nano::account (0), nano::dev::constants.genesis_amount, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - nano::state_block epoch1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::state_block epoch1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::fork, ledger.process (transaction, epoch1).code); - nano::state_block epoch2 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::state_block epoch2 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::fork, ledger.process (transaction, epoch2).code); - nano::state_block epoch3 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block epoch3 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch3).code); ASSERT_EQ (nano::epoch::epoch_1, epoch3.sideband ().details.epoch); ASSERT_EQ (nano::epoch::epoch_0, epoch3.sideband ().source_epoch); // Not used for epoch state blocks - nano::state_block epoch4 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block epoch4 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::fork, ledger.process (transaction, epoch2).code); } @@ -2431,11 +2431,11 @@ TEST (ledger, successor_epoch) auto & node1 (*system.nodes[0]); nano::keypair key1; nano::work_pool pool (std::numeric_limits::max ()); - nano::send_block send1 (nano::dev::genesis->hash (), key1.pub, nano::dev::genesis_amount - 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::send_block send1 (nano::dev::genesis->hash (), key1.pub, nano::dev::constants.genesis_amount - 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); nano::state_block open (key1.pub, 0, key1.pub, 1, send1.hash (), key1.prv, key1.pub, *pool.generate (key1.pub)); nano::state_block change (key1.pub, open.hash (), key1.pub, 1, 0, key1.prv, key1.pub, *pool.generate (open.hash ())); auto open_hash = open.hash (); - nano::send_block send2 (send1.hash (), reinterpret_cast (open_hash), nano::dev::genesis_amount - 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); + nano::send_block send2 (send1.hash (), reinterpret_cast (open_hash), nano::dev::constants.genesis_amount - 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); nano::state_block epoch_open (reinterpret_cast (open_hash), 0, 0, 0, node1.ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (open.hash ())); auto transaction (node1.store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, node1.ledger.process (transaction, send1).code); @@ -2481,7 +2481,7 @@ TEST (ledger, epoch_open_pending) .account (nano::dev::genesis->account ()) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis->account ()) - .balance (nano::dev::genesis_amount - 100) + .balance (nano::dev::constants.genesis_amount - 100) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*pool.generate (nano::dev::genesis->hash ())) @@ -2508,7 +2508,7 @@ TEST (ledger, block_hash_account_conflict) .account (nano::dev::genesis->account ()) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis->account ()) - .balance (nano::dev::genesis_amount - 100) + .balance (nano::dev::constants.genesis_amount - 100) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*pool.generate (nano::dev::genesis->hash ())) @@ -2594,13 +2594,13 @@ TEST (ledger, could_fit) nano::keypair destination; // Test legacy and state change blocks could_fit nano::change_block change1 (nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); - nano::state_block change2 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::state_block change2 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_TRUE (ledger.could_fit (transaction, change1)); ASSERT_TRUE (ledger.could_fit (transaction, change2)); // Test legacy and state send nano::keypair key1; - nano::send_block send1 (change1.hash (), key1.pub, nano::dev::genesis_amount - 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (change1.hash ())); - nano::state_block send2 (nano::dev::genesis->account (), change1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - 1, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (change1.hash ())); + nano::send_block send1 (change1.hash (), key1.pub, nano::dev::constants.genesis_amount - 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (change1.hash ())); + nano::state_block send2 (nano::dev::genesis->account (), change1.hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - 1, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (change1.hash ())); ASSERT_FALSE (ledger.could_fit (transaction, send1)); ASSERT_FALSE (ledger.could_fit (transaction, send2)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, change1).code); @@ -2622,7 +2622,7 @@ TEST (ledger, could_fit) ASSERT_TRUE (ledger.could_fit (transaction, open1)); ASSERT_TRUE (ledger.could_fit (transaction, open2)); // Create another send to receive - nano::state_block send3 (nano::dev::genesis->account (), send2.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - 2, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send2.hash ())); + nano::state_block send3 (nano::dev::genesis->account (), send2.hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - 2, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send2.hash ())); // Test legacy and state receive nano::receive_block receive1 (open1.hash (), send3.hash (), key1.prv, key1.pub, *pool.generate (open1.hash ())); nano::state_block receive2 (key1.pub, open1.hash (), nano::dev::genesis->account (), 2, send3.hash (), key1.prv, key1.pub, *pool.generate (open1.hash ())); @@ -2647,7 +2647,7 @@ TEST (ledger, unchecked_epoch) nano::system system (1); auto & node1 (*system.nodes[0]); nano::keypair destination; - auto send1 (std::make_shared (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); + auto send1 (std::make_shared (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send1); auto open1 (std::make_shared (destination.pub, 0, destination.pub, nano::Gxrb_ratio, send1->hash (), destination.prv, destination.pub, 0)); node1.work_generate_blocking (*open1); @@ -2686,7 +2686,7 @@ TEST (ledger, unchecked_epoch_invalid) node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto & node1 (*system.add_node (node_config)); nano::keypair destination; - auto send1 (std::make_shared (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); + auto send1 (std::make_shared (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send1); auto open1 (std::make_shared (destination.pub, 0, destination.pub, nano::Gxrb_ratio, send1->hash (), destination.prv, destination.pub, 0)); node1.work_generate_blocking (*open1); @@ -2737,7 +2737,7 @@ TEST (ledger, unchecked_open) nano::system system (1); auto & node1 (*system.nodes[0]); nano::keypair destination; - auto send1 (std::make_shared (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); + auto send1 (std::make_shared (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send1); auto open1 (std::make_shared (send1->hash (), destination.pub, destination.pub, destination.prv, destination.pub, 0)); node1.work_generate_blocking (*open1); @@ -2773,9 +2773,9 @@ TEST (ledger, unchecked_receive) nano::system system (1); auto & node1 (*system.nodes[0]); nano::keypair destination; - auto send1 (std::make_shared (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); + auto send1 (std::make_shared (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send1); - auto send2 (std::make_shared (nano::dev::genesis->account (), send1->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - 2 * nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); + auto send2 (std::make_shared (nano::dev::genesis->account (), send1->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - 2 * nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send2); auto open1 (std::make_shared (send1->hash (), destination.pub, destination.pub, destination.prv, destination.pub, 0)); node1.work_generate_blocking (*open1); @@ -2855,7 +2855,7 @@ TEST (ledger, zero_rep) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (0) - .balance (nano::dev::genesis_amount) + .balance (nano::dev::constants.genesis_amount) .link (0) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) @@ -2863,18 +2863,18 @@ TEST (ledger, zero_rep) auto transaction (node1.store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, node1.ledger.process (transaction, *block1).code); ASSERT_EQ (0, node1.ledger.cache.rep_weights.representation_get (nano::dev::genesis_key.pub)); - ASSERT_EQ (nano::dev::genesis_amount, node1.ledger.cache.rep_weights.representation_get (0)); + ASSERT_EQ (nano::dev::constants.genesis_amount, node1.ledger.cache.rep_weights.representation_get (0)); auto block2 = builder.state () .account (nano::dev::genesis_key.pub) .previous (block1->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount) + .balance (nano::dev::constants.genesis_amount) .link (0) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (block1->hash ())) .build (); ASSERT_EQ (nano::process_result::progress, node1.ledger.process (transaction, *block2).code); - ASSERT_EQ (nano::dev::genesis_amount, node1.ledger.cache.rep_weights.representation_get (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount, node1.ledger.cache.rep_weights.representation_get (nano::dev::genesis_key.pub)); ASSERT_EQ (0, node1.ledger.cache.rep_weights.representation_get (0)); } @@ -2909,7 +2909,7 @@ TEST (ledger, work_validation) auto send = *builder.send () .previous (nano::dev::genesis->hash ()) .destination (gen.pub) - .balance (nano::dev::genesis_amount - 1) + .balance (nano::dev::constants.genesis_amount - 1) .sign (gen.prv, gen.pub) .work (0) .build (ec); @@ -2935,7 +2935,7 @@ TEST (ledger, work_validation) .account (gen.pub) .previous (change.hash ()) .representative (gen.pub) - .balance (nano::dev::genesis_amount - 1) + .balance (nano::dev::constants.genesis_amount - 1) .link (key.pub) .sign (gen.prv, gen.pub) .work (0) @@ -2987,7 +2987,7 @@ TEST (ledger, dependents_confirmed) .account (nano::dev::genesis->account ()) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis->account ()) - .balance (nano::dev::genesis_amount - 100) + .balance (nano::dev::constants.genesis_amount - 100) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*pool.generate (nano::dev::genesis->hash ())) @@ -2998,7 +2998,7 @@ TEST (ledger, dependents_confirmed) .account (nano::dev::genesis->account ()) .previous (send1->hash ()) .representative (nano::dev::genesis->account ()) - .balance (nano::dev::genesis_amount - 200) + .balance (nano::dev::constants.genesis_amount - 200) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*pool.generate (send1->hash ())) @@ -3059,7 +3059,7 @@ TEST (ledger, dependents_confirmed_pruning) .account (nano::dev::genesis->account ()) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis->account ()) - .balance (nano::dev::genesis_amount - 100) + .balance (nano::dev::constants.genesis_amount - 100) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*pool.generate (nano::dev::genesis->hash ())) @@ -3069,7 +3069,7 @@ TEST (ledger, dependents_confirmed_pruning) .account (nano::dev::genesis->account ()) .previous (send1->hash ()) .representative (nano::dev::genesis->account ()) - .balance (nano::dev::genesis_amount - 200) + .balance (nano::dev::constants.genesis_amount - 200) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*pool.generate (send1->hash ())) @@ -3110,7 +3110,7 @@ TEST (ledger, block_confirmed) .account (nano::dev::genesis->account ()) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis->account ()) - .balance (nano::dev::genesis_amount - 100) + .balance (nano::dev::constants.genesis_amount - 100) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*pool.generate (nano::dev::genesis->hash ())) @@ -3145,7 +3145,7 @@ TEST (ledger, cache) auto account_count = 1 + i; auto block_count = 1 + 2 * (i + 1) - 2; auto cemented_count = 1 + 2 * (i + 1) - 2; - auto genesis_weight = nano::dev::genesis_amount - i; + auto genesis_weight = nano::dev::constants.genesis_amount - i; auto pruned_count = i; auto cache_check = [&, i] (nano::ledger_cache const & cache_a) { @@ -3162,7 +3162,7 @@ TEST (ledger, cache) .account (nano::dev::genesis->account ()) .previous (latest) .representative (nano::dev::genesis->account ()) - .balance (nano::dev::genesis_amount - (i + 1)) + .balance (nano::dev::constants.genesis_amount - (i + 1)) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*pool.generate (latest)) @@ -3248,14 +3248,14 @@ TEST (ledger, pruning_action) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); auto send1_stored (store->block.get (transaction, send1.hash ())); ASSERT_NE (nullptr, send1_stored); ASSERT_EQ (send1, *send1_stored); ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()))); - nano::state_block send2 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block send2 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); ASSERT_TRUE (store->block.exists (transaction, send2.hash ())); // Pruning action @@ -3272,7 +3272,7 @@ TEST (ledger, pruning_action) ASSERT_TRUE (store->block.exists (transaction, nano::dev::genesis->hash ())); ASSERT_TRUE (store->block.exists (transaction, send2.hash ())); // Receiving pruned block - nano::state_block receive1 (nano::dev::genesis->account (), send2.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send2.hash ())); + nano::state_block receive1 (nano::dev::genesis->account (), send2.hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send2.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); ASSERT_TRUE (store->block.exists (transaction, receive1.hash ())); auto receive1_stored (store->block.get (transaction, receive1.hash ())); @@ -3308,10 +3308,10 @@ TEST (ledger, pruning_large_chain) auto last_hash (nano::dev::genesis->hash ()); for (auto i (0); i < send_receive_pairs; i++) { - nano::state_block send (nano::dev::genesis->account (), last_hash, nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (last_hash)); + nano::state_block send (nano::dev::genesis->account (), last_hash, nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (last_hash)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); ASSERT_TRUE (store->block.exists (transaction, send.hash ())); - nano::state_block receive (nano::dev::genesis->account (), send.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, send.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send.hash ())); + nano::state_block receive (nano::dev::genesis->account (), send.hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount, send.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive).code); ASSERT_TRUE (store->block.exists (transaction, receive.hash ())); last_hash = receive.hash (); @@ -3340,12 +3340,12 @@ TEST (ledger, pruning_source_rollback) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block epoch1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::state_block epoch1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch1).code); - nano::state_block send1 (nano::dev::genesis->account (), epoch1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch1.hash ())); + nano::state_block send1 (nano::dev::genesis->account (), epoch1.hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()))); - nano::state_block send2 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block send2 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); ASSERT_TRUE (store->block.exists (transaction, send2.hash ())); // Pruning action @@ -3361,7 +3361,7 @@ TEST (ledger, pruning_source_rollback) ASSERT_EQ (nano::Gxrb_ratio, info.amount.number ()); ASSERT_EQ (nano::epoch::epoch_1, info.epoch); // Receiving pruned block - nano::state_block receive1 (nano::dev::genesis->account (), send2.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send2.hash ())); + nano::state_block receive1 (nano::dev::genesis->account (), send2.hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send2.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); ASSERT_FALSE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()))); ASSERT_EQ (2, ledger.cache.pruned_count); @@ -3391,15 +3391,15 @@ TEST (ledger, pruning_source_rollback_legacy) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::send_block send1 (nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::send_block send1 (nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()))); nano::keypair key1; - nano::send_block send2 (send1.hash (), key1.pub, nano::dev::genesis_amount - 2 * nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); + nano::send_block send2 (send1.hash (), key1.pub, nano::dev::constants.genesis_amount - 2 * nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); ASSERT_TRUE (store->block.exists (transaction, send2.hash ())); ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (key1.pub, send2.hash ()))); - nano::send_block send3 (send2.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - 3 * nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send2.hash ())); + nano::send_block send3 (send2.hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - 3 * nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send2.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send3).code); ASSERT_TRUE (store->block.exists (transaction, send3.hash ())); ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send3.hash ()))); @@ -3469,7 +3469,7 @@ TEST (ledger, pruning_process_error) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_EQ (0, ledger.cache.pruned_count); ASSERT_EQ (2, ledger.cache.block_count); @@ -3480,7 +3480,7 @@ TEST (ledger, pruning_process_error) // Attempt to process pruned block again ASSERT_EQ (nano::process_result::old, ledger.process (transaction, send1).code); // Attept to process new block after pruned - nano::state_block send2 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block send2 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::gap_previous, ledger.process (transaction, send2).code); ASSERT_EQ (1, ledger.cache.pruned_count); ASSERT_EQ (2, ledger.cache.block_count); @@ -3498,14 +3498,14 @@ TEST (ledger, pruning_legacy_blocks) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::send_block send1 (nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::send_block send1 (nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()))); nano::receive_block receive1 (send1.hash (), send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive1).code); nano::change_block change1 (receive1.hash (), key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (receive1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, change1).code); - nano::send_block send2 (change1.hash (), key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (change1.hash ())); + nano::send_block send2 (change1.hash (), key1.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (change1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); nano::open_block open1 (send2.hash (), nano::dev::genesis->account (), key1.pub, key1.prv, key1.pub, *pool.generate (key1.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, open1).code); @@ -3542,10 +3542,10 @@ TEST (ledger, pruning_safe_functions) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); - nano::state_block send2 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block send2 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); ASSERT_TRUE (store->block.exists (transaction, send2.hash ())); // Pruning action @@ -3560,7 +3560,7 @@ TEST (ledger, pruning_safe_functions) ASSERT_EQ (0, ledger.balance_safe (transaction, send1.hash (), error)); ASSERT_TRUE (error); error = false; - ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio * 2, ledger.balance_safe (transaction, send2.hash (), error)); + ASSERT_EQ (nano::dev::constants.genesis_amount - nano::Gxrb_ratio * 2, ledger.balance_safe (transaction, send2.hash (), error)); ASSERT_FALSE (error); error = false; ASSERT_EQ (0, ledger.amount_safe (transaction, send2.hash (), error)); @@ -3584,10 +3584,10 @@ TEST (ledger, hash_root_random) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); - nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); - nano::state_block send2 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); + nano::state_block send2 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); ASSERT_TRUE (store->block.exists (transaction, send2.hash ())); // Pruning action @@ -3632,7 +3632,7 @@ TEST (ledger, migrate_lmdb_to_rocksdb) .previous (nano::dev::genesis->hash ()) .representative (0) .link (nano::account (10)) - .balance (nano::dev::genesis_amount - 100) + .balance (nano::dev::constants.genesis_amount - 100) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*pool.generate (nano::dev::genesis->hash ())) .build_shared (); @@ -3717,7 +3717,7 @@ TEST (ledger, unconfirmed_frontiers) .account (nano::dev::genesis->account ()) .previous (latest) .representative (nano::dev::genesis->account ()) - .balance (nano::dev::genesis_amount - 100) + .balance (nano::dev::constants.genesis_amount - 100) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*pool.generate (latest)) diff --git a/nano/core_test/network_filter.cpp b/nano/core_test/network_filter.cpp index 747cdff447..90f29c5dad 100644 --- a/nano/core_test/network_filter.cpp +++ b/nano/core_test/network_filter.cpp @@ -42,7 +42,7 @@ TEST (network_filter, unit) .account (nano::dev::genesis_key.pub) .previous (constants.genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - 10 * nano::xrb_ratio) + .balance (nano::dev::constants.genesis_amount - 10 * nano::xrb_ratio) .link (nano::public_key ()) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (0) @@ -72,7 +72,7 @@ TEST (network_filter, many) .account (nano::dev::genesis_key.pub) .previous (constants.genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - i * 10 * nano::xrb_ratio) + .balance (nano::dev::constants.genesis_amount - i * 10 * nano::xrb_ratio) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (0) diff --git a/nano/core_test/node.cpp b/nano/core_test/node.cpp index 23fa77de68..44486cb1f6 100644 --- a/nano/core_test/node.cpp +++ b/nano/core_test/node.cpp @@ -211,7 +211,7 @@ TEST (node, send_out_of_order) node1.process_active (send3); node1.process_active (send2); node1.process_active (send1); - ASSERT_TIMELY (10s, std::all_of (system.nodes.begin (), system.nodes.end (), [&] (std::shared_ptr const & node_a) { return node_a->balance (nano::dev::genesis_key.pub) == nano::dev::genesis_amount - node1.config.receive_minimum.number () * 3; })); + ASSERT_TIMELY (10s, std::all_of (system.nodes.begin (), system.nodes.end (), [&] (std::shared_ptr const & node_a) { return node_a->balance (nano::dev::genesis_key.pub) == nano::dev::constants.genesis_amount - node1.config.receive_minimum.number () * 3; })); } TEST (node, quick_confirm) @@ -246,7 +246,7 @@ TEST (node, node_receive_quorum) auto send = nano::send_block_builder () .previous (previous) .destination (key.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (previous)) .build_shared (); @@ -1053,7 +1053,7 @@ TEST (node, fork_publish) auto send1 = builder.make_block () .previous (nano::dev::genesis->hash ()) .destination (key1.pub) - .balance (nano::dev::genesis_amount - 100) + .balance (nano::dev::constants.genesis_amount - 100) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (0) .build_shared (); @@ -1062,7 +1062,7 @@ TEST (node, fork_publish) auto send2 = builder.make_block () .previous (nano::dev::genesis->hash ()) .destination (key2.pub) - .balance (nano::dev::genesis_amount - 100) + .balance (nano::dev::constants.genesis_amount - 100) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (0) .build_shared (); @@ -1083,7 +1083,7 @@ TEST (node, fork_publish) ASSERT_EQ (send1->hash (), existing1->second.hash); auto winner (*election->tally ().begin ()); ASSERT_EQ (*send1, *winner.second); - ASSERT_EQ (nano::dev::genesis_amount - 100, winner.first); + ASSERT_EQ (nano::dev::constants.genesis_amount - 100, winner.first); } ASSERT_TRUE (node0.expired ()); } @@ -1098,14 +1098,14 @@ TEST (node, fork_publish_inactive) auto send1 = builder.make_block () .previous (nano::dev::genesis->hash ()) .destination (key1.pub) - .balance (nano::dev::genesis_amount - 100) + .balance (nano::dev::constants.genesis_amount - 100) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); auto send2 = builder.make_block () .previous (nano::dev::genesis->hash ()) .destination (key2.pub) - .balance (nano::dev::genesis_amount - 100) + .balance (nano::dev::constants.genesis_amount - 100) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (send1->block_work ()) .build_shared (); @@ -1135,14 +1135,14 @@ TEST (node, fork_keep) auto send1 = builder.make_block () .previous (nano::dev::genesis->hash ()) .destination (key1.pub) - .balance (nano::dev::genesis_amount - 100) + .balance (nano::dev::constants.genesis_amount - 100) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); auto send2 = builder.make_block () .previous (nano::dev::genesis->hash ()) .destination (key2.pub) - .balance (nano::dev::genesis_amount - 100) + .balance (nano::dev::constants.genesis_amount - 100) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); @@ -1171,7 +1171,7 @@ TEST (node, fork_keep) // The vote should be in agreement with what we already have. auto winner (*election1->tally ().begin ()); ASSERT_EQ (*send1, *winner.second); - ASSERT_EQ (nano::dev::genesis_amount - 100, winner.first); + ASSERT_EQ (nano::dev::constants.genesis_amount - 100, winner.first); ASSERT_TRUE (node1.store.block.exists (transaction0, send1->hash ())); ASSERT_TRUE (node2.store.block.exists (transaction1, send1->hash ())); } @@ -1187,7 +1187,7 @@ TEST (node, fork_flip) auto send1 = builder.make_block () .previous (nano::dev::genesis->hash ()) .destination (key1.pub) - .balance (nano::dev::genesis_amount - 100) + .balance (nano::dev::constants.genesis_amount - 100) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); @@ -1196,7 +1196,7 @@ TEST (node, fork_flip) auto send2 = builder.make_block () .previous (nano::dev::genesis->hash ()) .destination (key2.pub) - .balance (nano::dev::genesis_amount - 100) + .balance (nano::dev::constants.genesis_amount - 100) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); @@ -1224,7 +1224,7 @@ TEST (node, fork_flip) ASSERT_TIMELY (10s, node2.ledger.block_or_pruned_exists (publish1.block->hash ())); auto winner (*election1->tally ().begin ()); ASSERT_EQ (*publish1.block, *winner.second); - ASSERT_EQ (nano::dev::genesis_amount - 100, winner.first); + ASSERT_EQ (nano::dev::constants.genesis_amount - 100, winner.first); ASSERT_TRUE (node1.ledger.block_or_pruned_exists (publish1.block->hash ())); ASSERT_TRUE (node2.ledger.block_or_pruned_exists (publish1.block->hash ())); ASSERT_FALSE (node2.ledger.block_or_pruned_exists (publish2.block->hash ())); @@ -1254,7 +1254,7 @@ TEST (node, fork_multi_flip) auto send1 = builder.make_block () .previous (nano::dev::genesis->hash ()) .destination (key1.pub) - .balance (nano::dev::genesis_amount - 100) + .balance (nano::dev::constants.genesis_amount - 100) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); @@ -1263,7 +1263,7 @@ TEST (node, fork_multi_flip) auto send2 = builder.make_block () .previous (nano::dev::genesis->hash ()) .destination (key2.pub) - .balance (nano::dev::genesis_amount - 100) + .balance (nano::dev::constants.genesis_amount - 100) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); @@ -1271,7 +1271,7 @@ TEST (node, fork_multi_flip) auto send3 = builder.make_block () .previous (publish2.block->hash ()) .destination (key2.pub) - .balance (nano::dev::genesis_amount - 100) + .balance (nano::dev::constants.genesis_amount - 100) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (publish2.block->hash ())) .build_shared (); @@ -1300,7 +1300,7 @@ TEST (node, fork_multi_flip) ASSERT_TIMELY (10s, node2.ledger.block_or_pruned_exists (publish1.block->hash ())); auto winner (*election1->tally ().begin ()); ASSERT_EQ (*publish1.block, *winner.second); - ASSERT_EQ (nano::dev::genesis_amount - 100, winner.first); + ASSERT_EQ (nano::dev::constants.genesis_amount - 100, winner.first); ASSERT_TRUE (node1.ledger.block_or_pruned_exists (publish1.block->hash ())); ASSERT_TRUE (node2.ledger.block_or_pruned_exists (publish1.block->hash ())); ASSERT_FALSE (node2.ledger.block_or_pruned_exists (publish2.block->hash ())); @@ -1329,7 +1329,7 @@ TEST (node, fork_bootstrap_flip) auto send1 = builder.make_block () .previous (latest) .destination (key1.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system0.work.generate (latest)) .build_shared (); @@ -1337,7 +1337,7 @@ TEST (node, fork_bootstrap_flip) auto send2 = builder.make_block () .previous (latest) .destination (key2.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system0.work.generate (latest)) .build_shared (); @@ -1422,7 +1422,7 @@ TEST (node, fork_open_flip) auto send1 = nano::send_block_builder () .previous (nano::dev::genesis->hash ()) .destination (key1.pub) - .balance (nano::dev::genesis_amount - 1) + .balance (nano::dev::constants.genesis_amount - 1) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); @@ -1476,7 +1476,7 @@ TEST (node, fork_open_flip) auto transaction2 (node2.store.tx_begin_read ()); auto winner (*election1->tally ().begin ()); ASSERT_EQ (*open1, *winner.second); - ASSERT_EQ (nano::dev::genesis_amount - 1, winner.first); + ASSERT_EQ (nano::dev::constants.genesis_amount - 1, winner.first); ASSERT_TRUE (node1.store.block.exists (transaction1, open1->hash ())); ASSERT_TRUE (node2.store.block.exists (transaction2, open1->hash ())); ASSERT_FALSE (node2.store.block.exists (transaction2, open2->hash ())); @@ -1503,7 +1503,7 @@ TEST (node, fork_no_vote_quorum) auto & node3 (*system.nodes[2]); system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto key4 (system.wallet (0)->deterministic_insert ()); - system.wallet (0)->send_action (nano::dev::genesis_key.pub, key4, nano::dev::genesis_amount / 4); + system.wallet (0)->send_action (nano::dev::genesis_key.pub, key4, nano::dev::constants.genesis_amount / 4); auto key1 (system.wallet (1)->deterministic_insert ()); { auto transaction (system.wallet (1)->wallets.tx_begin_write ()); @@ -1515,7 +1515,7 @@ TEST (node, fork_no_vote_quorum) ASSERT_EQ (node1.config.receive_minimum.number (), node1.weight (key1)); ASSERT_EQ (node1.config.receive_minimum.number (), node2.weight (key1)); ASSERT_EQ (node1.config.receive_minimum.number (), node3.weight (key1)); - nano::state_block send1 (nano::dev::genesis_key.pub, block->hash (), nano::dev::genesis_key.pub, (nano::dev::genesis_amount / 4) - (node1.config.receive_minimum.number () * 2), key1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (block->hash ())); + nano::state_block send1 (nano::dev::genesis_key.pub, block->hash (), nano::dev::genesis_key.pub, (nano::dev::constants.genesis_amount / 4) - (node1.config.receive_minimum.number () * 2), key1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (block->hash ())); ASSERT_EQ (nano::process_result::progress, node1.process (send1).code); ASSERT_EQ (nano::process_result::progress, node2.process (send1).code); ASSERT_EQ (nano::process_result::progress, node3.process (send1).code); @@ -1523,7 +1523,7 @@ TEST (node, fork_no_vote_quorum) auto send2 = nano::send_block_builder () .previous (block->hash ()) .destination (key2) - .balance ((nano::dev::genesis_amount / 4) - (node1.config.receive_minimum.number () * 2)) + .balance ((nano::dev::constants.genesis_amount / 4) - (node1.config.receive_minimum.number () * 2)) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (block->hash ())) .build_shared (); @@ -1566,10 +1566,10 @@ TEST (node, DISABLED_fork_pre_confirm) auto transaction (system.wallet (2)->wallets.tx_begin_write ()); system.wallet (2)->store.representative_set (transaction, key2.pub); } - auto block0 (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key1.pub, nano::dev::genesis_amount / 3)); + auto block0 (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key1.pub, nano::dev::constants.genesis_amount / 3)); ASSERT_NE (nullptr, block0); ASSERT_TIMELY (30s, node0.balance (key1.pub) != 0); - auto block1 (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key2.pub, nano::dev::genesis_amount / 3)); + auto block1 (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key2.pub, nano::dev::constants.genesis_amount / 3)); ASSERT_NE (nullptr, block1); ASSERT_TIMELY (30s, node0.balance (key2.pub) != 0); nano::keypair key3; @@ -1628,7 +1628,7 @@ TEST (node, DISABLED_fork_stale) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - nano::Mxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::Mxrb_ratio) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (0) @@ -1645,7 +1645,7 @@ TEST (node, DISABLED_fork_stale) .account (nano::dev::genesis_key.pub) .previous (send3->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - 2 * nano::Mxrb_ratio) + .balance (nano::dev::constants.genesis_amount - 2 * nano::Mxrb_ratio) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (0) @@ -1655,7 +1655,7 @@ TEST (node, DISABLED_fork_stale) .account (nano::dev::genesis_key.pub) .previous (send3->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - 2 * nano::Mxrb_ratio) + .balance (nano::dev::constants.genesis_amount - 2 * nano::Mxrb_ratio) .link (key2.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (0) @@ -1954,7 +1954,7 @@ TEST (node, bootstrap_fork_open) auto send0 = *builder.send () .previous (nano::dev::genesis->hash ()) .destination (key0.pub) - .balance (nano::dev::genesis_amount - 500) + .balance (nano::dev::constants.genesis_amount - 500) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build (); @@ -2010,7 +2010,7 @@ TEST (node, bootstrap_confirm_frontiers) auto send0 = nano::send_block_builder () .previous (nano::dev::genesis->hash ()) .destination (key0.pub) - .balance (nano::dev::genesis_amount - 500) + .balance (nano::dev::constants.genesis_amount - 500) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node0->work_generate_blocking (nano::dev::genesis->hash ())) .build_shared (); @@ -2072,7 +2072,7 @@ TEST (node, DISABLED_unconfirmed_send) ASSERT_EQ (nano::process_result::progress, node1.ledger.process (transaction, send2).code); } auto send3 (wallet1->send_action (key0.pub, nano::dev::genesis->account (), nano::Mxrb_ratio)); - ASSERT_TIMELY (10s, node0.balance (nano::dev::genesis->account ()) == nano::dev::genesis_amount); + ASSERT_TIMELY (10s, node0.balance (nano::dev::genesis->account ()) == nano::dev::constants.genesis_amount); } // Test that nodes can track nodes that have rep weight for priority broadcasting @@ -2127,7 +2127,7 @@ TEST (node, rep_weight) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - amount_not_pr) + .balance (nano::dev::constants.genesis_amount - amount_not_pr) .link (keypair1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) @@ -2147,7 +2147,7 @@ TEST (node, rep_weight) .account (nano::dev::genesis_key.pub) .previous (block1->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - amount_not_pr - amount_pr) + .balance (nano::dev::constants.genesis_amount - amount_not_pr - amount_pr) .link (keypair2.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (block1->hash ())) @@ -2208,7 +2208,7 @@ TEST (node, rep_remove) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - node.minimum_principal_weight () * 2) + .balance (nano::dev::constants.genesis_amount - node.minimum_principal_weight () * 2) .link (keypair1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) @@ -2228,7 +2228,7 @@ TEST (node, rep_remove) .account (nano::dev::genesis_key.pub) .previous (block1->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - node.minimum_principal_weight () * 4) + .balance (nano::dev::constants.genesis_amount - node.minimum_principal_weight () * 4) .link (keypair2.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (block1->hash ())) @@ -2465,11 +2465,11 @@ TEST (node, online_reps) auto vote (std::make_shared ()); ASSERT_EQ (0, node1.online_reps.online ()); node1.online_reps.observe (nano::dev::genesis_key.pub); - ASSERT_EQ (nano::dev::genesis_amount, node1.online_reps.online ()); + ASSERT_EQ (nano::dev::constants.genesis_amount, node1.online_reps.online ()); // 1 minimum, 1 maximum ASSERT_EQ (node1.config.online_weight_minimum, node1.online_reps.trended ()); node1.online_reps.sample (); - ASSERT_EQ (nano::dev::genesis_amount, node1.online_reps.trended ()); + ASSERT_EQ (nano::dev::constants.genesis_amount, node1.online_reps.trended ()); node1.online_reps.clear (); // 2 minimum, 1 maximum node1.online_reps.sample (); @@ -2495,7 +2495,7 @@ TEST (node, online_reps_rep_crawler) node1.rep_crawler.active.insert (nano::dev::genesis->hash ()); } node1.vote_processor.vote_blocking (vote, std::make_shared (node1)); - ASSERT_EQ (nano::dev::genesis_amount, node1.online_reps.online ()); + ASSERT_EQ (nano::dev::constants.genesis_amount, node1.online_reps.online ()); } } @@ -2512,7 +2512,7 @@ TEST (node, online_reps_election) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node1.work_generate_blocking (nano::dev::genesis->hash ())) @@ -2525,7 +2525,7 @@ TEST (node, online_reps_election) auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::milliseconds_since_epoch (), std::vector{ send1->hash () }); ASSERT_EQ (0, node1.online_reps.online ()); node1.vote_processor.vote_blocking (vote, std::make_shared (node1)); - ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, node1.online_reps.online ()); + ASSERT_EQ (nano::dev::constants.genesis_amount - nano::Gxrb_ratio, node1.online_reps.online ()); } TEST (node, block_confirm) @@ -2550,7 +2550,7 @@ TEST (node, block_confirm) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node1.work_generate_blocking (nano::dev::genesis->hash ())) @@ -2650,14 +2650,14 @@ TEST (node, local_votes_cache) nano::system system; nano::node_config node_config (nano::get_available_port (), system.logging); node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; - node_config.receive_minimum = nano::dev::genesis_amount; + node_config.receive_minimum = nano::dev::constants.genesis_amount; auto & node (*system.add_node (node_config)); nano::state_block_builder builder; auto send1 = builder.make_block () .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (nano::dev::genesis->hash ())) @@ -2666,7 +2666,7 @@ TEST (node, local_votes_cache) .account (nano::dev::genesis_key.pub) .previous (send1->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - 2 * nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - 2 * nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (send1->hash ())) @@ -2675,7 +2675,7 @@ TEST (node, local_votes_cache) .account (nano::dev::genesis_key.pub) .previous (send2->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - 3 * nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - 3 * nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (send2->hash ())) @@ -2743,7 +2743,7 @@ TEST (node, local_votes_cache_batch) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (nano::dev::genesis->hash ())) @@ -2755,7 +2755,7 @@ TEST (node, local_votes_cache_batch) .account (nano::dev::genesis_key.pub) .previous (send1->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - 2 * nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - 2 * nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (send1->hash ())) @@ -2820,7 +2820,7 @@ TEST (node, local_votes_cache_generate_new_vote) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (nano::dev::genesis->hash ())) @@ -2859,7 +2859,7 @@ TEST (node, local_votes_cache_fork) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node1.work_generate_blocking (nano::dev::genesis->hash ())) @@ -2868,7 +2868,7 @@ TEST (node, local_votes_cache_fork) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - 2 * nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - 2 * nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node1.work_generate_blocking (nano::dev::genesis->hash ())) @@ -2939,7 +2939,7 @@ TEST (node, vote_by_hash_bundle) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - 1) + .balance (nano::dev::constants.genesis_amount - 1) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) @@ -2951,7 +2951,7 @@ TEST (node, vote_by_hash_bundle) auto block = builder.make_block () .from (*blocks.back ()) .previous (blocks.back ()->hash ()) - .balance (nano::dev::genesis_amount - i) + .balance (nano::dev::constants.genesis_amount - i) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (blocks.back ()->hash ())) .build_shared (); @@ -3040,7 +3040,7 @@ TEST (node, vote_by_hash_epoch_block_republish) .account (nano::dev::genesis->account ()) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis->account ()) - .balance (nano::dev::genesis_amount) + .balance (nano::dev::constants.genesis_amount) .link (node1.ledger.epoch_link (nano::epoch::epoch_1)) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) @@ -3075,7 +3075,7 @@ TEST (node, epoch_conflict_confirm) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - 1) + .balance (nano::dev::constants.genesis_amount - 1) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) @@ -3102,7 +3102,7 @@ TEST (node, epoch_conflict_confirm) .account (nano::dev::genesis_key.pub) .previous (send->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - 2) + .balance (nano::dev::constants.genesis_amount - 2) .link (open->hash ()) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (send->hash ())) @@ -3207,7 +3207,7 @@ TEST (node, fork_election_invalid_block_signature) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) @@ -3216,7 +3216,7 @@ TEST (node, fork_election_invalid_block_signature) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - 2 * nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - 2 * nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) @@ -3225,7 +3225,7 @@ TEST (node, fork_election_invalid_block_signature) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - 2 * nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - 2 * nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .sign (nano::dev::genesis_key.prv, 0) // Invalid signature @@ -3256,7 +3256,7 @@ TEST (node, block_processor_signatures) .account (nano::dev::genesis_key.pub) .previous (latest) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node1.work_generate_blocking (latest)) @@ -3265,7 +3265,7 @@ TEST (node, block_processor_signatures) .account (nano::dev::genesis_key.pub) .previous (send1->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - 2 * nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - 2 * nano::Gxrb_ratio) .link (key2.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node1.work_generate_blocking (send1->hash ())) @@ -3274,7 +3274,7 @@ TEST (node, block_processor_signatures) .account (nano::dev::genesis_key.pub) .previous (send2->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - 3 * nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - 3 * nano::Gxrb_ratio) .link (key3.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node1.work_generate_blocking (send2->hash ())) @@ -3284,7 +3284,7 @@ TEST (node, block_processor_signatures) .account (nano::dev::genesis_key.pub) .previous (send3->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - 4 * nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - 4 * nano::Gxrb_ratio) .link (key3.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node1.work_generate_blocking (send3->hash ())) @@ -3295,7 +3295,7 @@ TEST (node, block_processor_signatures) .account (nano::dev::genesis_key.pub) .previous (send3->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - 5 * nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - 5 * nano::Gxrb_ratio) .link (key3.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node1.work_generate_blocking (send3->hash ())) @@ -3368,7 +3368,7 @@ TEST (node, block_processor_reject_state) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (nano::dev::genesis->hash ())) @@ -3383,7 +3383,7 @@ TEST (node, block_processor_reject_state) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - 2 * nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - 2 * nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (nano::dev::genesis->hash ())) @@ -3406,7 +3406,7 @@ TEST (node, block_processor_full) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (nano::dev::genesis->hash ())) @@ -3415,7 +3415,7 @@ TEST (node, block_processor_full) .account (nano::dev::genesis_key.pub) .previous (send1->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - 2 * nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - 2 * nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (send1->hash ())) @@ -3424,7 +3424,7 @@ TEST (node, block_processor_full) .account (nano::dev::genesis_key.pub) .previous (send2->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - 3 * nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - 3 * nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (send2->hash ())) @@ -3452,7 +3452,7 @@ TEST (node, block_processor_half_full) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (nano::dev::genesis->hash ())) @@ -3461,7 +3461,7 @@ TEST (node, block_processor_half_full) .account (nano::dev::genesis_key.pub) .previous (send1->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - 2 * nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - 2 * nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (send1->hash ())) @@ -3470,7 +3470,7 @@ TEST (node, block_processor_half_full) .account (nano::dev::genesis_key.pub) .previous (send2->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - 3 * nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - 3 * nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (send2->hash ())) @@ -3752,7 +3752,7 @@ TEST (node, bidirectional_tcp) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node1->work_generate_blocking (nano::dev::genesis->hash ())) @@ -3786,7 +3786,7 @@ TEST (node, bidirectional_tcp) .account (nano::dev::genesis_key.pub) .previous (send1->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - 2 * nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - 2 * nano::Gxrb_ratio) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node1->work_generate_blocking (send1->hash ())) @@ -3846,7 +3846,7 @@ TEST (node, aggressive_flooding) ASSERT_TIMELY (10s, std::all_of (nodes_wallets.begin (), nodes_wallets.end (), [] (auto const & node_wallet) { return node_wallet.first->rep_crawler.principal_representatives ().size () != 0; })); // Send a large amount to create a principal representative in each node - auto large_amount = (nano::dev::genesis_amount / 2) / nodes_wallets.size (); + auto large_amount = (nano::dev::constants.genesis_amount / 2) / nodes_wallets.size (); std::vector> genesis_blocks; for (auto & node_wallet : nodes_wallets) { @@ -3946,7 +3946,7 @@ TEST (node, rollback_vote_self) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .link (key.pub) - .balance (nano::dev::genesis_amount - weight) + .balance (nano::dev::constants.genesis_amount - weight) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); @@ -4035,7 +4035,7 @@ TEST (node, rollback_gap_source) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .link (key.pub) - .balance (nano::dev::genesis_amount - 1) + .balance (nano::dev::constants.genesis_amount - 1) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); @@ -4132,7 +4132,7 @@ TEST (node, dependency_graph) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .link (key1.pub) - .balance (nano::dev::genesis_amount - 1) + .balance (nano::dev::constants.genesis_amount - 1) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); @@ -4161,7 +4161,7 @@ TEST (node, dependency_graph) .from (*gen_send1) .previous (gen_send1->hash ()) .link (key1_send1->hash ()) - .balance (nano::dev::genesis_amount) + .balance (nano::dev::constants.genesis_amount) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (gen_send1->hash ())) .build (); @@ -4334,7 +4334,7 @@ TEST (node, dependency_graph_frontier) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .link (key1.pub) - .balance (nano::dev::genesis_amount - 1) + .balance (nano::dev::constants.genesis_amount - 1) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); @@ -4363,7 +4363,7 @@ TEST (node, dependency_graph_frontier) .from (*gen_send1) .previous (gen_send1->hash ()) .link (key1_send1->hash ()) - .balance (nano::dev::genesis_amount) + .balance (nano::dev::constants.genesis_amount) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (gen_send1->hash ())) .build (); @@ -4497,7 +4497,7 @@ TEST (node, deferred_dependent_elections) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .link (key.pub) - .balance (nano::dev::genesis_amount - 1) + .balance (nano::dev::constants.genesis_amount - 1) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); @@ -4671,7 +4671,7 @@ TEST (node, pruning_automatic) auto send1 = nano::send_block_builder () .previous (nano::dev::genesis->hash ()) .destination (key1.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); @@ -4723,7 +4723,7 @@ TEST (node, pruning_age) auto send1 = nano::send_block_builder () .previous (nano::dev::genesis->hash ()) .destination (key1.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); @@ -4779,7 +4779,7 @@ TEST (node, pruning_depth) auto send1 = nano::send_block_builder () .previous (nano::dev::genesis->hash ()) .destination (key1.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); diff --git a/nano/core_test/request_aggregator.cpp b/nano/core_test/request_aggregator.cpp index 525d40243c..a8ca77e15a 100644 --- a/nano/core_test/request_aggregator.cpp +++ b/nano/core_test/request_aggregator.cpp @@ -14,7 +14,7 @@ TEST (request_aggregator, one) node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto & node (*system.add_node (node_config)); system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); - auto send1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node.work_generate_blocking (nano::dev::genesis->hash ()))); + auto send1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node.work_generate_blocking (nano::dev::genesis->hash ()))); std::vector> request; request.emplace_back (send1->hash (), send1->root ()); auto channel (node.network.udp_channels.create (node.network.endpoint ())); @@ -54,7 +54,7 @@ TEST (request_aggregator, one_update) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) @@ -67,7 +67,7 @@ TEST (request_aggregator, one_update) .account (nano::dev::genesis_key.pub) .previous (send1->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - 2 * nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - 2 * nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (send1->hash ())) @@ -120,7 +120,7 @@ TEST (request_aggregator, two) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - 1) + .balance (nano::dev::constants.genesis_amount - 1) .link (key1.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (nano::dev::genesis->hash ())) @@ -132,7 +132,7 @@ TEST (request_aggregator, two) .account (nano::dev::genesis_key.pub) .previous (send1->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - 2) + .balance (nano::dev::constants.genesis_amount - 2) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*node.work_generate_blocking (send1->hash ())) @@ -190,7 +190,7 @@ TEST (request_aggregator, two_endpoints) node_config.peering_port = nano::get_available_port (); auto & node2 (*system.add_node (node_config, node_flags)); system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); - auto send1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - 1, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1.work_generate_blocking (nano::dev::genesis->hash ()))); + auto send1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - 1, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1.work_generate_blocking (nano::dev::genesis->hash ()))); std::vector> request; request.emplace_back (send1->hash (), send1->root ()); ASSERT_EQ (nano::process_result::progress, node1.ledger.process (node1.store.tx_begin_write (), *send1).code); @@ -233,7 +233,7 @@ TEST (request_aggregator, split) .account (nano::dev::genesis_key.pub) .previous (previous) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - (i + 1)) + .balance (nano::dev::constants.genesis_amount - (i + 1)) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (previous)) @@ -274,7 +274,7 @@ TEST (request_aggregator, channel_lifetime) node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto & node (*system.add_node (node_config)); system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); - auto send1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node.work_generate_blocking (nano::dev::genesis->hash ()))); + auto send1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node.work_generate_blocking (nano::dev::genesis->hash ()))); ASSERT_EQ (nano::process_result::progress, node.ledger.process (node.store.tx_begin_write (), *send1).code); std::vector> request; request.emplace_back (send1->hash (), send1->root ()); @@ -294,7 +294,7 @@ TEST (request_aggregator, channel_update) node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto & node (*system.add_node (node_config)); system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); - auto send1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node.work_generate_blocking (nano::dev::genesis->hash ()))); + auto send1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node.work_generate_blocking (nano::dev::genesis->hash ()))); ASSERT_EQ (nano::process_result::progress, node.ledger.process (node.store.tx_begin_write (), *send1).code); std::vector> request; request.emplace_back (send1->hash (), send1->root ()); @@ -322,7 +322,7 @@ TEST (request_aggregator, channel_max_queue) node_config.max_queued_requests = 1; auto & node (*system.add_node (node_config)); system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); - auto send1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node.work_generate_blocking (nano::dev::genesis->hash ()))); + auto send1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node.work_generate_blocking (nano::dev::genesis->hash ()))); ASSERT_EQ (nano::process_result::progress, node.ledger.process (node.store.tx_begin_write (), *send1).code); std::vector> request; request.emplace_back (send1->hash (), send1->root ()); @@ -339,7 +339,7 @@ TEST (request_aggregator, unique) node_config.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; auto & node (*system.add_node (node_config)); system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); - auto send1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node.work_generate_blocking (nano::dev::genesis->hash ()))); + auto send1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node.work_generate_blocking (nano::dev::genesis->hash ()))); ASSERT_EQ (nano::process_result::progress, node.ledger.process (node.store.tx_begin_write (), *send1).code); std::vector> request; request.emplace_back (send1->hash (), send1->root ()); @@ -367,7 +367,7 @@ TEST (request_aggregator, cannot_vote) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - 1) + .balance (nano::dev::constants.genesis_amount - 1) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) diff --git a/nano/core_test/system.cpp b/nano/core_test/system.cpp index 446e185f1a..015a81ddc7 100644 --- a/nano/core_test/system.cpp +++ b/nano/core_test/system.cpp @@ -29,7 +29,7 @@ TEST (system, system_genesis) for (auto & i : system.nodes) { auto transaction (i->store.tx_begin_read ()); - ASSERT_EQ (nano::dev::genesis_amount, i->ledger.account_balance (transaction, nano::dev::genesis->account ())); + ASSERT_EQ (nano::dev::constants.genesis_amount, i->ledger.account_balance (transaction, nano::dev::genesis->account ())); } } @@ -40,7 +40,7 @@ TEST (system, DISABLED_generate_send_existing) nano::thread_runner runner (system.io_ctx, node1.config.io_threads); system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::keypair stake_preserver; - auto send_block (system.wallet (0)->send_action (nano::dev::genesis->account (), stake_preserver.pub, nano::dev::genesis_amount / 3 * 2, true)); + auto send_block (system.wallet (0)->send_action (nano::dev::genesis->account (), stake_preserver.pub, nano::dev::constants.genesis_amount / 3 * 2, true)); nano::account_info info1; { auto transaction (node1.store.tx_begin_read ()); @@ -71,7 +71,7 @@ TEST (system, DISABLED_generate_send_existing) ASSERT_FALSE (node1.store.account.get (transaction, nano::dev::genesis_key.pub, info2)); } ASSERT_EQ (info1.block_count + 2, info2.block_count); - ASSERT_EQ (info2.balance, nano::dev::genesis_amount / 3); + ASSERT_EQ (info2.balance, nano::dev::constants.genesis_amount / 3); { auto transaction (node1.store.tx_begin_read ()); ASSERT_NE (node1.ledger.amount (transaction, info2.head), 0); @@ -94,7 +94,7 @@ TEST (system, DISABLED_generate_send_new) ASSERT_EQ (node1.store.account.end (), iterator1); } nano::keypair stake_preserver; - auto send_block (system.wallet (0)->send_action (nano::dev::genesis->account (), stake_preserver.pub, nano::dev::genesis_amount / 3 * 2, true)); + auto send_block (system.wallet (0)->send_action (nano::dev::genesis->account (), stake_preserver.pub, nano::dev::constants.genesis_amount / 3 * 2, true)); { auto transaction (node1.store.tx_begin_write ()); auto open_block (std::make_shared (send_block->hash (), nano::dev::genesis->account (), stake_preserver.pub, stake_preserver.prv, stake_preserver.pub, 0)); @@ -136,7 +136,7 @@ TEST (system, rep_initialize_one) nano::keypair key; system.ledger_initialization_set ({ key }); auto node = system.add_node (); - ASSERT_EQ (nano::dev::genesis_amount, node->balance (key.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount, node->balance (key.pub)); } TEST (system, rep_initialize_two) @@ -146,8 +146,8 @@ TEST (system, rep_initialize_two) nano::keypair key1; system.ledger_initialization_set ({ key0, key1 }); auto node = system.add_node (); - ASSERT_EQ (nano::dev::genesis_amount / 2, node->balance (key0.pub)); - ASSERT_EQ (nano::dev::genesis_amount / 2, node->balance (key1.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount / 2, node->balance (key0.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount / 2, node->balance (key1.pub)); } TEST (system, rep_initialize_one_reserve) @@ -156,7 +156,7 @@ TEST (system, rep_initialize_one_reserve) nano::keypair key; system.ledger_initialization_set ({ key }, nano::Gxrb_ratio); auto node = system.add_node (); - ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio, node->balance (key.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount - nano::Gxrb_ratio, node->balance (key.pub)); ASSERT_EQ (nano::Gxrb_ratio, node->balance (nano::dev::genesis_key.pub)); } @@ -167,8 +167,8 @@ TEST (system, rep_initialize_two_reserve) nano::keypair key1; system.ledger_initialization_set ({ key0, key1 }, nano::Gxrb_ratio); auto node = system.add_node (); - ASSERT_EQ ((nano::dev::genesis_amount - nano::Gxrb_ratio) / 2, node->balance (key0.pub)); - ASSERT_EQ ((nano::dev::genesis_amount - nano::Gxrb_ratio) / 2, node->balance (key1.pub)); + ASSERT_EQ ((nano::dev::constants.genesis_amount - nano::Gxrb_ratio) / 2, node->balance (key0.pub)); + ASSERT_EQ ((nano::dev::constants.genesis_amount - nano::Gxrb_ratio) / 2, node->balance (key1.pub)); } TEST (system, rep_initialize_many) @@ -178,9 +178,9 @@ TEST (system, rep_initialize_many) nano::keypair key1; system.ledger_initialization_set ({ key0, key1 }, nano::Gxrb_ratio); auto node0 = system.add_node (); - ASSERT_EQ ((nano::dev::genesis_amount - nano::Gxrb_ratio) / 2, node0->balance (key0.pub)); - ASSERT_EQ ((nano::dev::genesis_amount - nano::Gxrb_ratio) / 2, node0->balance (key1.pub)); + ASSERT_EQ ((nano::dev::constants.genesis_amount - nano::Gxrb_ratio) / 2, node0->balance (key0.pub)); + ASSERT_EQ ((nano::dev::constants.genesis_amount - nano::Gxrb_ratio) / 2, node0->balance (key1.pub)); auto node1 = system.add_node (); - ASSERT_EQ ((nano::dev::genesis_amount - nano::Gxrb_ratio) / 2, node1->balance (key0.pub)); - ASSERT_EQ ((nano::dev::genesis_amount - nano::Gxrb_ratio) / 2, node1->balance (key1.pub)); + ASSERT_EQ ((nano::dev::constants.genesis_amount - nano::Gxrb_ratio) / 2, node1->balance (key0.pub)); + ASSERT_EQ ((nano::dev::constants.genesis_amount - nano::Gxrb_ratio) / 2, node1->balance (key1.pub)); } diff --git a/nano/core_test/vote_processor.cpp b/nano/core_test/vote_processor.cpp index d3b1db2689..b81d53e5f9 100644 --- a/nano/core_test/vote_processor.cpp +++ b/nano/core_test/vote_processor.cpp @@ -255,14 +255,14 @@ TEST (vote_processor, no_broadcast_local) .account (key.pub) .representative (nano::dev::genesis_key.pub) .previous (0) - .balance (nano::dev::genesis_amount - 2 * node.config.vote_minimum.number ()) + .balance (nano::dev::constants.genesis_amount - 2 * node.config.vote_minimum.number ()) .link (send->hash ()) .sign (key.prv, key.pub) .work (*system.work.generate (key.pub)) .build (ec); ASSERT_FALSE (ec); ASSERT_EQ (nano::process_result::progress, node.process_local (open).code); - ASSERT_EQ (nano::dev::genesis_amount - node.config.vote_minimum.number (), node.weight (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount - node.config.vote_minimum.number (), node.weight (nano::dev::genesis_key.pub)); node.block_confirm (open); // Insert account in wallet system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); diff --git a/nano/core_test/voting.cpp b/nano/core_test/voting.cpp index be22842475..bf6cbedcbc 100644 --- a/nano/core_test/voting.cpp +++ b/nano/core_test/voting.cpp @@ -168,7 +168,7 @@ TEST (vote_spacing, vote_generator) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) @@ -177,7 +177,7 @@ TEST (vote_spacing, vote_generator) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio - 1) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio - 1) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) @@ -211,7 +211,7 @@ TEST (vote_spacing, rapid) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) @@ -220,7 +220,7 @@ TEST (vote_spacing, rapid) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio - 1) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio - 1) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) diff --git a/nano/core_test/wallet.cpp b/nano/core_test/wallet.cpp index 979295c72f..99a8779114 100644 --- a/nano/core_test/wallet.cpp +++ b/nano/core_test/wallet.cpp @@ -169,7 +169,7 @@ TEST (wallet, insufficient_spend_one) system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto block (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key1.pub, 500)); ASSERT_NE (nullptr, block); - ASSERT_EQ (nullptr, system.wallet (0)->send_action (nano::dev::genesis_key.pub, key1.pub, nano::dev::genesis_amount)); + ASSERT_EQ (nullptr, system.wallet (0)->send_action (nano::dev::genesis_key.pub, key1.pub, nano::dev::constants.genesis_amount)); } TEST (wallet, spend_all_one) @@ -837,7 +837,7 @@ TEST (wallet, send_race) for (auto i (1); i < 60; ++i) { ASSERT_NE (nullptr, system.wallet (0)->send_action (nano::dev::genesis_key.pub, key2.pub, nano::Gxrb_ratio)); - ASSERT_EQ (nano::dev::genesis_amount - nano::Gxrb_ratio * i, system.nodes[0]->balance (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount - nano::Gxrb_ratio * i, system.nodes[0]->balance (nano::dev::genesis_key.pub)); } } @@ -1166,7 +1166,7 @@ TEST (wallet, search_pending) .account (nano::dev::genesis->account ()) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis->account ()) - .balance (nano::dev::genesis_amount - node.config.receive_minimum.number ()) + .balance (nano::dev::constants.genesis_amount - node.config.receive_minimum.number ()) .link (nano::dev::genesis->account ()) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) @@ -1193,7 +1193,7 @@ TEST (wallet, search_pending) // Pending search should create the receive block ASSERT_EQ (2, node.ledger.cache.block_count); ASSERT_FALSE (wallet.search_pending (wallet.wallets.tx_begin_read ())); - ASSERT_TIMELY (3s, node.balance (nano::dev::genesis->account ()) == nano::dev::genesis_amount); + ASSERT_TIMELY (3s, node.balance (nano::dev::genesis->account ()) == nano::dev::constants.genesis_amount); auto receive_hash = node.ledger.latest (node.store.tx_begin_read (), nano::dev::genesis->account ()); auto receive = node.block (receive_hash); ASSERT_NE (nullptr, receive); diff --git a/nano/core_test/wallets.cpp b/nano/core_test/wallets.cpp index 114f807842..2929e15bc2 100644 --- a/nano/core_test/wallets.cpp +++ b/nano/core_test/wallets.cpp @@ -168,7 +168,7 @@ TEST (wallets, search_pending) .account (nano::dev::genesis->account ()) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis->account ()) - .balance (nano::dev::genesis_amount - node.config.receive_minimum.number ()) + .balance (nano::dev::constants.genesis_amount - node.config.receive_minimum.number ()) .link (nano::dev::genesis->account ()) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) @@ -209,7 +209,7 @@ TEST (wallets, search_pending) { node.wallets.search_pending (wallet_id); } - ASSERT_TIMELY (3s, node.balance (nano::dev::genesis->account ()) == nano::dev::genesis_amount); + ASSERT_TIMELY (3s, node.balance (nano::dev::genesis->account ()) == nano::dev::constants.genesis_amount); auto receive_hash = node.ledger.latest (node.store.tx_begin_read (), nano::dev::genesis->account ()); auto receive = node.block (receive_hash); ASSERT_NE (nullptr, receive); diff --git a/nano/core_test/websocket.cpp b/nano/core_test/websocket.cpp index 546280d1ca..1dc15e078a 100644 --- a/nano/core_test/websocket.cpp +++ b/nano/core_test/websocket.cpp @@ -83,7 +83,7 @@ TEST (websocket, confirmation) nano::keypair key; system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); - auto balance = nano::dev::genesis_amount; + auto balance = nano::dev::constants.genesis_amount; auto send_amount = node1->online_reps.delta () + 1; // Quick-confirm a block, legacy blocks should work without filtering { @@ -185,7 +185,7 @@ TEST (websocket, confirmation_options) // Confirm a state block for an in-wallet account system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::keypair key; - auto balance = nano::dev::genesis_amount; + auto balance = nano::dev::constants.genesis_amount; auto send_amount = node1->online_reps.delta () + 1; nano::block_hash previous (node1->latest (nano::dev::genesis_key.pub)); { @@ -319,7 +319,7 @@ TEST (websocket, confirmation_options_votes) // Confirm a state block for an in-wallet account system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::keypair key; - auto balance = nano::dev::genesis_amount; + auto balance = nano::dev::constants.genesis_amount; auto send_amount = node1->config.online_weight_minimum.number () + 1; nano::block_hash previous (node1->latest (nano::dev::genesis_key.pub)); { @@ -428,7 +428,7 @@ TEST (websocket, confirmation_options_update) .account (nano::dev::genesis_key.pub) .previous (previous) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (previous)) @@ -446,7 +446,7 @@ TEST (websocket, confirmation_options_update) .account (nano::dev::genesis_key.pub) .previous (previous) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - 2 * nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - 2 * nano::Gxrb_ratio) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (previous)) @@ -488,7 +488,7 @@ TEST (websocket, vote) .account (nano::dev::genesis_key.pub) .previous (previous) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - (node1->online_reps.delta () + 1)) + .balance (nano::dev::constants.genesis_amount - (node1->online_reps.delta () + 1)) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (previous)) @@ -579,7 +579,7 @@ TEST (websocket, vote_options_representatives) // Quick-confirm a block nano::keypair key; - auto balance = nano::dev::genesis_amount; + auto balance = nano::dev::constants.genesis_amount; system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto send_amount = node1->online_reps.delta () + 1; auto confirm_block = [&] () { @@ -914,7 +914,7 @@ TEST (websocket, new_unconfirmed_block) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - 1) + .balance (nano::dev::constants.genesis_amount - 1) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index 78107ffc61..9dd69a31aa 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -1045,7 +1045,7 @@ void nano::json_handler::available_supply () auto landing_balance (node.balance (nano::account ("059F68AAB29DE0D3A27443625C7EA9CDDB6517A8B76FE37727EF6A4D76832AD5"))); // Active unavailable account auto faucet_balance (node.balance (nano::account ("8E319CE6F3025E5B2DF66DA7AB1467FE48F1679C13DD43BFDB29FA2E9FC40D3B"))); // Faucet account auto burned_balance ((node.balance_pending (nano::account (0), false)).second); // Burning 0 account - auto available (nano::dev::genesis_amount - genesis_balance - landing_balance - faucet_balance - burned_balance); + auto available (nano::dev::constants.genesis_amount - genesis_balance - landing_balance - faucet_balance - burned_balance); response_l.put ("available", available.convert_to ()); response_errors (); } @@ -2335,7 +2335,7 @@ class history_visitor : public nano::block_visitor else { tree.put ("account", network_params.ledger.genesis->account ().to_account ()); - tree.put ("amount", nano::dev::genesis_amount.convert_to ()); + tree.put ("amount", nano::dev::constants.genesis_amount.convert_to ()); } } void change_block (nano::change_block const & block_a) @@ -3263,7 +3263,7 @@ void nano::json_handler::receive () bool generate_work (work == 0); // Disable work generation if "work" option is provided auto response_a (response); wallet->receive_async ( - hash, representative, nano::dev::genesis_amount, account, [response_a] (std::shared_ptr const & block_a) { + hash, representative, nano::dev::constants.genesis_amount, account, [response_a] (std::shared_ptr const & block_a) { if (block_a != nullptr) { boost::property_tree::ptree response_l; diff --git a/nano/node/node.cpp b/nano/node/node.cpp index 670f920cb4..bf740dbf6c 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -1331,7 +1331,7 @@ void nano::node::process_confirmed_data (nano::transaction const & transaction_a } else { - amount_a = nano::dev::genesis_amount; + amount_a = nano::dev::constants.genesis_amount; } if (auto state = dynamic_cast (block_a.get ())) { diff --git a/nano/qt/qt.cpp b/nano/qt/qt.cpp index 70fc464ba8..8001322621 100644 --- a/nano/qt/qt.cpp +++ b/nano/qt/qt.cpp @@ -557,7 +557,7 @@ class short_text_visitor : public nano::block_visitor else { account = params.ledger.genesis->account (); - amount = nano::dev::genesis_amount; + amount = nano::dev::constants.genesis_amount; } } void change_block (nano::change_block const & block_a) diff --git a/nano/qt_test/qt.cpp b/nano/qt_test/qt.cpp index 511cdf8fb0..4b26d8a532 100644 --- a/nano/qt_test/qt.cpp +++ b/nano/qt_test/qt.cpp @@ -562,9 +562,9 @@ TEST (history, pruned_source) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); auto latest (ledger.latest (transaction, nano::dev::genesis_key.pub)); - nano::send_block send1 (latest, nano::dev::genesis_key.pub, nano::dev::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); + nano::send_block send1 (latest, nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); - nano::send_block send2 (send1.hash (), key.pub, nano::dev::genesis_amount - 200, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1.hash ())); + nano::send_block send2 (send1.hash (), key.pub, nano::dev::constants.genesis_amount - 200, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send2).code); nano::receive_block receive (send2.hash (), send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send2.hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, receive).code); @@ -592,7 +592,7 @@ TEST (history, pruned_source) { auto transaction (store->tx_begin_write ()); auto latest (ledger.latest (transaction, nano::dev::genesis_key.pub)); - nano::state_block send (nano::dev::genesis_key.pub, latest, nano::dev::genesis_key.pub, nano::dev::genesis_amount - 200, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); + nano::state_block send (nano::dev::genesis_key.pub, latest, nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - 200, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); auto latest_key (ledger.latest (transaction, key.pub)); nano::state_block receive (key.pub, latest_key, key.pub, 200, send.hash (), key.prv, key.pub, *system.work.generate (latest_key)); diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index 49cb446cf8..c15820a5df 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -244,7 +244,7 @@ TEST (rpc, account_balance) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::genesis_amount - 1) + .balance (nano::dev::constants.genesis_amount - 1) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) @@ -408,14 +408,14 @@ TEST (rpc, send) request.put ("source", nano::dev::genesis_key.pub.to_account ()); request.put ("destination", nano::dev::genesis_key.pub.to_account ()); request.put ("amount", "100"); - ASSERT_EQ (node->balance (nano::dev::genesis_key.pub), nano::dev::genesis_amount); + ASSERT_EQ (node->balance (nano::dev::genesis_key.pub), nano::dev::constants.genesis_amount); auto response (wait_response (system, rpc, request, 10s)); std::string block_text (response.get ("block")); nano::block_hash block; ASSERT_FALSE (block.decode_hex (block_text)); ASSERT_TRUE (node->ledger.block_or_pruned_exists (block)); ASSERT_EQ (node->latest (nano::dev::genesis_key.pub), block); - ASSERT_NE (node->balance (nano::dev::genesis_key.pub), nano::dev::genesis_amount); + ASSERT_NE (node->balance (nano::dev::genesis_key.pub), nano::dev::constants.genesis_amount); } TEST (rpc, send_fail) @@ -495,18 +495,18 @@ TEST (rpc, send_idempotent) request.put ("action", "send"); request.put ("source", nano::dev::genesis_key.pub.to_account ()); request.put ("destination", nano::account (0).to_account ()); - request.put ("amount", (nano::dev::genesis_amount - (nano::dev::genesis_amount / 4)).convert_to ()); + request.put ("amount", (nano::dev::constants.genesis_amount - (nano::dev::constants.genesis_amount / 4)).convert_to ()); request.put ("id", "123abc"); auto response (wait_response (system, rpc, request)); std::string block_text (response.get ("block")); nano::block_hash block; ASSERT_FALSE (block.decode_hex (block_text)); ASSERT_TRUE (node->ledger.block_or_pruned_exists (block)); - ASSERT_EQ (node->balance (nano::dev::genesis_key.pub), nano::dev::genesis_amount / 4); + ASSERT_EQ (node->balance (nano::dev::genesis_key.pub), nano::dev::constants.genesis_amount / 4); auto response2 (wait_response (system, rpc, request)); ASSERT_EQ ("", response2.get ("error", "")); ASSERT_EQ (block_text, response2.get ("block")); - ASSERT_EQ (node->balance (nano::dev::genesis_key.pub), nano::dev::genesis_amount / 4); + ASSERT_EQ (node->balance (nano::dev::genesis_key.pub), nano::dev::constants.genesis_amount / 4); request.erase ("id"); request.put ("id", "456def"); auto response3 (wait_response (system, rpc, request)); @@ -1094,9 +1094,9 @@ TEST (rpc, history) auto receive (system.wallet (0)->receive_action (send->hash (), nano::dev::genesis_key.pub, node0->config.receive_minimum.number (), send->link ().as_account ())); ASSERT_NE (nullptr, receive); nano::genesis genesis; - nano::state_block usend (nano::dev::genesis->account (), node0->latest (nano::dev::genesis->account ()), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (node0->latest (nano::dev::genesis->account ()))); - nano::state_block ureceive (nano::dev::genesis->account (), usend.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, usend.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (usend.hash ())); - nano::state_block uchange (nano::dev::genesis->account (), ureceive.hash (), nano::keypair ().pub, nano::dev::genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (ureceive.hash ())); + nano::state_block usend (nano::dev::genesis->account (), node0->latest (nano::dev::genesis->account ()), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (node0->latest (nano::dev::genesis->account ()))); + nano::state_block ureceive (nano::dev::genesis->account (), usend.hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount, usend.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (usend.hash ())); + nano::state_block uchange (nano::dev::genesis->account (), ureceive.hash (), nano::keypair ().pub, nano::dev::constants.genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (ureceive.hash ())); { auto transaction (node0->store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, node0->ledger.process (transaction, usend).code); @@ -1135,7 +1135,7 @@ TEST (rpc, history) ASSERT_EQ (send->hash ().to_string (), std::get<3> (history_l[3])); ASSERT_EQ ("receive", std::get<0> (history_l[4])); ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), std::get<1> (history_l[4])); - ASSERT_EQ (nano::dev::genesis_amount.convert_to (), std::get<2> (history_l[4])); + ASSERT_EQ (nano::dev::constants.genesis_amount.convert_to (), std::get<2> (history_l[4])); ASSERT_EQ (genesis.hash ().to_string (), std::get<3> (history_l[4])); } @@ -1151,9 +1151,9 @@ TEST (rpc, account_history) auto receive (system.wallet (0)->receive_action (send->hash (), nano::dev::genesis_key.pub, node0->config.receive_minimum.number (), send->link ().as_account ())); ASSERT_NE (nullptr, receive); nano::genesis genesis; - nano::state_block usend (nano::dev::genesis->account (), node0->latest (nano::dev::genesis->account ()), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (node0->latest (nano::dev::genesis->account ()))); - nano::state_block ureceive (nano::dev::genesis->account (), usend.hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, usend.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (usend.hash ())); - nano::state_block uchange (nano::dev::genesis->account (), ureceive.hash (), nano::keypair ().pub, nano::dev::genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (ureceive.hash ())); + nano::state_block usend (nano::dev::genesis->account (), node0->latest (nano::dev::genesis->account ()), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (node0->latest (nano::dev::genesis->account ()))); + nano::state_block ureceive (nano::dev::genesis->account (), usend.hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount, usend.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (usend.hash ())); + nano::state_block uchange (nano::dev::genesis->account (), ureceive.hash (), nano::keypair ().pub, nano::dev::constants.genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (ureceive.hash ())); { auto transaction (node0->store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, node0->ledger.process (transaction, usend).code); @@ -1197,7 +1197,7 @@ TEST (rpc, account_history) ASSERT_EQ ("3", std::get<4> (history_l[3])); ASSERT_EQ ("receive", std::get<0> (history_l[4])); ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), std::get<1> (history_l[4])); - ASSERT_EQ (nano::dev::genesis_amount.convert_to (), std::get<2> (history_l[4])); + ASSERT_EQ (nano::dev::constants.genesis_amount.convert_to (), std::get<2> (history_l[4])); ASSERT_EQ (genesis.hash ().to_string (), std::get<3> (history_l[4])); ASSERT_EQ ("1", std::get<4> (history_l[4])); // change block (height 2) is skipped } @@ -1287,13 +1287,13 @@ TEST (rpc, history_pruning) nano::genesis genesis; auto change (std::make_shared (genesis.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work.generate (genesis.hash ()))); node0->process_active (change); - auto send (std::make_shared (change->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - node0->config.receive_minimum.number (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work.generate (change->hash ()))); + auto send (std::make_shared (change->hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - node0->config.receive_minimum.number (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work.generate (change->hash ()))); node0->process_active (send); auto receive (std::make_shared (send->hash (), send->hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work.generate (send->hash ()))); node0->process_active (receive); - auto usend (std::make_shared (nano::dev::genesis->account (), receive->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (receive->hash ()))); - auto ureceive (std::make_shared (nano::dev::genesis->account (), usend->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount, usend->hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (usend->hash ()))); - auto uchange (std::make_shared (nano::dev::genesis->account (), ureceive->hash (), nano::keypair ().pub, nano::dev::genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (ureceive->hash ()))); + auto usend (std::make_shared (nano::dev::genesis->account (), receive->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (receive->hash ()))); + auto ureceive (std::make_shared (nano::dev::genesis->account (), usend->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount, usend->hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (usend->hash ()))); + auto uchange (std::make_shared (nano::dev::genesis->account (), ureceive->hash (), nano::keypair ().pub, nano::dev::constants.genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (ureceive->hash ()))); node0->process_active (usend); node0->process_active (ureceive); node0->process_active (uchange); @@ -1498,7 +1498,7 @@ TEST (rpc, process_block_async) ASSERT_EQ (ec.message (), response.get ("error")); } - auto state_send (std::make_shared (nano::dev::genesis_key.pub, latest, nano::dev::genesis_key.pub, nano::dev::genesis_amount - 100, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest))); + auto state_send (std::make_shared (nano::dev::genesis_key.pub, latest, nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - 100, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest))); std::string json1; state_send->serialize_json (json1); request.put ("block", json1); @@ -1554,7 +1554,7 @@ TEST (rpc, process_subtype_send) auto [rpc, rpc_ctx] = add_rpc (system, node1); nano::keypair key; auto latest (node1->latest (nano::dev::genesis_key.pub)); - nano::state_block send (nano::dev::genesis->account (), latest, nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest)); + nano::state_block send (nano::dev::genesis->account (), latest, nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest)); boost::property_tree::ptree request; request.put ("action", "process"); std::string json; @@ -1580,7 +1580,7 @@ TEST (rpc, process_subtype_open) auto & node2 = *system.add_node (); nano::keypair key; auto latest (node1->latest (nano::dev::genesis_key.pub)); - auto send = std::make_shared (nano::dev::genesis->account (), latest, nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest)); + auto send = std::make_shared (nano::dev::genesis->account (), latest, nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest)); ASSERT_EQ (nano::process_result::progress, node1->process (*send).code); ASSERT_EQ (nano::process_result::progress, node2.process (*send).code); auto [rpc, rpc_ctx] = add_rpc (system, node1); @@ -1610,12 +1610,12 @@ TEST (rpc, process_subtype_receive) auto node1 = add_ipc_enabled_node (system); auto & node2 = *system.add_node (); auto latest (node1->latest (nano::dev::genesis_key.pub)); - auto send = std::make_shared (nano::dev::genesis->account (), latest, nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest)); + auto send = std::make_shared (nano::dev::genesis->account (), latest, nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest)); ASSERT_EQ (nano::process_result::progress, node1->process (*send).code); ASSERT_EQ (nano::process_result::progress, node2.process (*send).code); auto [rpc, rpc_ctx] = add_rpc (system, node1); node1->scheduler.manual (send); - nano::state_block receive (nano::dev::genesis_key.pub, send->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount, send->hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (send->hash ())); + nano::state_block receive (nano::dev::genesis_key.pub, send->hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount, send->hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (send->hash ())); boost::property_tree::ptree request; request.put ("action", "process"); std::string json; @@ -1644,7 +1644,7 @@ TEST (rpc, process_ledger_insufficient_work) auto latest (node->latest (nano::dev::genesis_key.pub)); auto min_difficulty = node->network_params.network.publish_thresholds.entry; auto max_difficulty = node->network_params.network.publish_thresholds.epoch_1; - nano::state_block send (nano::dev::genesis->account (), latest, nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, system.work_generate_limited (latest, min_difficulty, max_difficulty)); + nano::state_block send (nano::dev::genesis->account (), latest, nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, system.work_generate_limited (latest, min_difficulty, max_difficulty)); ASSERT_LT (send.difficulty (), max_difficulty); ASSERT_GE (send.difficulty (), min_difficulty); boost::property_tree::ptree request; @@ -1885,7 +1885,7 @@ TEST (rpc, search_pending) system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto wallet (node->wallets.items.begin ()->first.to_string ()); auto latest (node->latest (nano::dev::genesis_key.pub)); - nano::send_block block (latest, nano::dev::genesis_key.pub, nano::dev::genesis_amount - node->config.receive_minimum.number (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node->work_generate_blocking (latest)); + nano::send_block block (latest, nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - node->config.receive_minimum.number (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node->work_generate_blocking (latest)); { auto transaction (node->store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, block).code); @@ -1895,7 +1895,7 @@ TEST (rpc, search_pending) request.put ("action", "search_pending"); request.put ("wallet", wallet); auto response (wait_response (system, rpc, request)); - ASSERT_TIMELY (10s, node->balance (nano::dev::genesis_key.pub) == nano::dev::genesis_amount); + ASSERT_TIMELY (10s, node->balance (nano::dev::genesis_key.pub) == nano::dev::constants.genesis_amount); } TEST (rpc, version) @@ -2338,7 +2338,7 @@ TEST (rpc, block_count_pruning) node_flags.enable_pruning = true; auto node1 = add_ipc_enabled_node (system, node_config, node_flags); auto latest (node1->latest (nano::dev::genesis_key.pub)); - auto send1 (std::make_shared (latest, nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest))); + auto send1 (std::make_shared (latest, nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest))); node1->process_active (send1); auto receive1 (std::make_shared (send1->hash (), send1->hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (send1->hash ()))); node1->process_active (receive1); @@ -2886,7 +2886,7 @@ TEST (rpc, republish) request.put ("action", "republish"); request.put ("hash", send.hash ().to_string ()); auto response (wait_response (system, rpc, request)); - ASSERT_TIMELY (10s, system.nodes[1]->balance (nano::dev::genesis_key.pub) != nano::dev::genesis_amount); + ASSERT_TIMELY (10s, system.nodes[1]->balance (nano::dev::genesis_key.pub) != nano::dev::constants.genesis_amount); auto & blocks_node (response.get_child ("blocks")); std::vector blocks; for (auto i (blocks_node.begin ()), n (blocks_node.end ()); i != n; ++i) @@ -3430,7 +3430,7 @@ TEST (rpc, search_pending_all) auto node = add_ipc_enabled_node (system); system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto latest (node->latest (nano::dev::genesis_key.pub)); - nano::send_block block (latest, nano::dev::genesis_key.pub, nano::dev::genesis_amount - node->config.receive_minimum.number (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node->work_generate_blocking (latest)); + nano::send_block block (latest, nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - node->config.receive_minimum.number (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node->work_generate_blocking (latest)); { auto transaction (node->store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, block).code); @@ -3439,7 +3439,7 @@ TEST (rpc, search_pending_all) boost::property_tree::ptree request; request.put ("action", "search_pending_all"); auto response (wait_response (system, rpc, request)); - ASSERT_TIMELY (10s, node->balance (nano::dev::genesis_key.pub) == nano::dev::genesis_amount); + ASSERT_TIMELY (10s, node->balance (nano::dev::genesis_key.pub) == nano::dev::constants.genesis_amount); } TEST (rpc, wallet_republish) @@ -3783,7 +3783,7 @@ TEST (rpc, json_block_input) auto node1 = add_ipc_enabled_node (system); nano::keypair key; system.wallet (0)->insert_adhoc (key.prv); - nano::state_block send (nano::dev::genesis->account (), node1->latest (nano::dev::genesis_key.pub), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0); + nano::state_block send (nano::dev::genesis->account (), node1->latest (nano::dev::genesis_key.pub), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0); auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request; request.put ("action", "sign"); @@ -3841,7 +3841,7 @@ TEST (rpc, blocks_info) std::string account_text (blocks.second.get ("block_account")); ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), account_text); std::string amount_text (blocks.second.get ("amount")); - ASSERT_EQ (nano::dev::genesis_amount.convert_to (), amount_text); + ASSERT_EQ (nano::dev::constants.genesis_amount.convert_to (), amount_text); std::string blocks_text (blocks.second.get ("contents")); ASSERT_FALSE (blocks_text.empty ()); boost::optional pending (blocks.second.get_optional ("pending")); @@ -3849,7 +3849,7 @@ TEST (rpc, blocks_info) boost::optional source (blocks.second.get_optional ("source_account")); ASSERT_FALSE (source.is_initialized ()); std::string balance_text (blocks.second.get ("balance")); - ASSERT_EQ (nano::dev::genesis_amount.convert_to (), balance_text); + ASSERT_EQ (nano::dev::constants.genesis_amount.convert_to (), balance_text); ASSERT_TRUE (blocks.second.get ("confirmed")); // Genesis block is confirmed by default std::string successor_text (blocks.second.get ("successor")); ASSERT_EQ (nano::block_hash (0).to_string (), successor_text); // Genesis block doesn't have successor yet @@ -3960,14 +3960,14 @@ TEST (rpc, block_info_successor) std::string account_text (response.get ("block_account")); ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), account_text); std::string amount_text (response.get ("amount")); - ASSERT_EQ (nano::dev::genesis_amount.convert_to (), amount_text); + ASSERT_EQ (nano::dev::constants.genesis_amount.convert_to (), amount_text); } TEST (rpc, block_info_pruning) { nano::system system; nano::node_config node_config0 (nano::get_available_port (), system.logging); - node_config0.receive_minimum = nano::dev::genesis_amount; // Prevent auto-receive & receive1 block conflicts + node_config0.receive_minimum = nano::dev::constants.genesis_amount; // Prevent auto-receive & receive1 block conflicts auto & node0 = *system.add_node (node_config0); nano::node_config node_config1 (nano::get_available_port (), system.logging); node_config1.enable_voting = false; // Remove after allowing pruned voting @@ -3975,7 +3975,7 @@ TEST (rpc, block_info_pruning) node_flags.enable_pruning = true; auto node1 = add_ipc_enabled_node (system, node_config1, node_flags); auto latest (node1->latest (nano::dev::genesis_key.pub)); - auto send1 (std::make_shared (latest, nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest))); + auto send1 (std::make_shared (latest, nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest))); node1->process_active (send1); auto receive1 (std::make_shared (send1->hash (), send1->hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (send1->hash ()))); node1->process_active (receive1); @@ -4010,7 +4010,7 @@ TEST (rpc, block_info_pruning) ASSERT_FALSE (json_error); ASSERT_EQ (receive1->full_hash (), receive_from_json.full_hash ()); std::string balance_text (response2.get ("balance")); - ASSERT_EQ (nano::dev::genesis_amount.convert_to (), balance_text); + ASSERT_EQ (nano::dev::constants.genesis_amount.convert_to (), balance_text); ASSERT_TRUE (response2.get ("confirmed")); std::string successor_text (response2.get ("successor")); ASSERT_EQ (successor_text, nano::block_hash (0).to_string ()); // receive1 block doesn't have successor yet @@ -4020,7 +4020,7 @@ TEST (rpc, pruned_exists) { nano::system system; nano::node_config node_config0 (nano::get_available_port (), system.logging); - node_config0.receive_minimum = nano::dev::genesis_amount; // Prevent auto-receive & receive1 block conflicts + node_config0.receive_minimum = nano::dev::constants.genesis_amount; // Prevent auto-receive & receive1 block conflicts auto & node0 = *system.add_node (node_config0); nano::node_config node_config1 (nano::get_available_port (), system.logging); node_config1.enable_voting = false; // Remove after allowing pruned voting @@ -4028,7 +4028,7 @@ TEST (rpc, pruned_exists) node_flags.enable_pruning = true; auto node1 = add_ipc_enabled_node (system, node_config1, node_flags); auto latest (node1->latest (nano::dev::genesis_key.pub)); - auto send1 (std::make_shared (latest, nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest))); + auto send1 (std::make_shared (latest, nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest))); node1->process_active (send1); auto receive1 (std::make_shared (send1->hash (), send1->hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (send1->hash ()))); node1->process_active (receive1); @@ -4095,7 +4095,7 @@ TEST (rpc, ledger) auto node = add_ipc_enabled_node (system); nano::keypair key; auto latest (node->latest (nano::dev::genesis_key.pub)); - auto genesis_balance (nano::dev::genesis_amount); + auto genesis_balance (nano::dev::constants.genesis_amount); auto send_amount (genesis_balance - 100); genesis_balance -= send_amount; nano::send_block send (latest, key.pub, genesis_balance, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node->work_generate_blocking (latest)); @@ -4321,7 +4321,7 @@ TEST (rpc, block_create_state) request.put ("account", nano::dev::genesis_key.pub.to_account ()); request.put ("previous", genesis.hash ().to_string ()); request.put ("representative", nano::dev::genesis_key.pub.to_account ()); - request.put ("balance", (nano::dev::genesis_amount - nano::Gxrb_ratio).convert_to ()); + request.put ("balance", (nano::dev::constants.genesis_amount - nano::Gxrb_ratio).convert_to ()); request.put ("link", key.pub.to_account ()); request.put ("work", nano::to_string_hex (*node->work_generate_blocking (genesis.hash ()))); auto response (wait_response (system, rpc, request)); @@ -4406,7 +4406,7 @@ TEST (rpc, block_create_state_request_work) request.put ("wallet", node->wallets.items.begin ()->first.to_string ()); request.put ("account", nano::dev::genesis_key.pub.to_account ()); request.put ("representative", nano::dev::genesis_key.pub.to_account ()); - request.put ("balance", (nano::dev::genesis_amount - nano::Gxrb_ratio).convert_to ()); + request.put ("balance", (nano::dev::constants.genesis_amount - nano::Gxrb_ratio).convert_to ()); request.put ("link", key.pub.to_account ()); request.put ("previous", previous); auto response (wait_response (system, rpc, request)); @@ -4718,7 +4718,7 @@ TEST (rpc, online_reps) auto send_block (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key.pub, nano::Gxrb_ratio)); ASSERT_NE (nullptr, send_block); ASSERT_TIMELY (10s, !node2->online_reps.list ().empty ()); - ASSERT_EQ (node2->online_reps.online (), nano::dev::genesis_amount - nano::Gxrb_ratio); + ASSERT_EQ (node2->online_reps.online (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio); auto [rpc, rpc_ctx] = add_rpc (system, node2); boost::property_tree::ptree request; request.put ("action", "representatives_online"); @@ -4786,7 +4786,7 @@ TEST (rpc, confirmation_height_currently_processing) { auto transaction = node->store.tx_begin_write (); nano::keypair key1; - nano::send_block send (previous_genesis_chain_hash, key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio - 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (previous_genesis_chain_hash)); + nano::send_block send (previous_genesis_chain_hash, key1.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio - 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (previous_genesis_chain_hash)); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, send).code); previous_genesis_chain_hash = send.hash (); } @@ -4856,7 +4856,7 @@ TEST (rpc, confirmation_history) ASSERT_EQ (block->hash ().to_string (), hash); nano::amount tally_num; tally_num.decode_dec (tally); - debug_assert (tally_num == nano::dev::genesis_amount || tally_num == (nano::dev::genesis_amount - nano::Gxrb_ratio)); + debug_assert (tally_num == nano::dev::constants.genesis_amount || tally_num == (nano::dev::constants.genesis_amount - nano::Gxrb_ratio)); system.stop (); } @@ -4887,7 +4887,7 @@ TEST (rpc, confirmation_history_hash) ASSERT_EQ (send2->hash ().to_string (), hash); nano::amount tally_num; tally_num.decode_dec (tally); - debug_assert (tally_num == nano::dev::genesis_amount || tally_num == (nano::dev::genesis_amount - nano::Gxrb_ratio) || tally_num == (nano::dev::genesis_amount - 2 * nano::Gxrb_ratio) || tally_num == (nano::dev::genesis_amount - 3 * nano::Gxrb_ratio)); + debug_assert (tally_num == nano::dev::constants.genesis_amount || tally_num == (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) || tally_num == (nano::dev::constants.genesis_amount - 2 * nano::Gxrb_ratio) || tally_num == (nano::dev::constants.genesis_amount - 3 * nano::Gxrb_ratio)); system.stop (); } @@ -4897,7 +4897,7 @@ TEST (rpc, block_confirm) auto node = add_ipc_enabled_node (system); system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); nano::genesis genesis; - auto send1 (std::make_shared (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node->work_generate_blocking (genesis.hash ()))); + auto send1 (std::make_shared (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node->work_generate_blocking (genesis.hash ()))); { auto transaction (node->store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, *send1).code); @@ -5220,7 +5220,7 @@ TEST (rpc, wallet_history) // Genesis block ASSERT_EQ ("receive", std::get<0> (history_l[3])); ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), std::get<1> (history_l[3])); - ASSERT_EQ (nano::dev::genesis_amount.convert_to (), std::get<2> (history_l[3])); + ASSERT_EQ (nano::dev::constants.genesis_amount.convert_to (), std::get<2> (history_l[3])); ASSERT_EQ (nano::dev::genesis->hash ().to_string (), std::get<3> (history_l[3])); ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), std::get<4> (history_l[3])); } @@ -5230,7 +5230,7 @@ TEST (rpc, sign_hash) nano::system system; auto node1 = add_ipc_enabled_node (system); nano::keypair key; - nano::state_block send (nano::dev::genesis->account (), node1->latest (nano::dev::genesis_key.pub), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0); + nano::state_block send (nano::dev::genesis->account (), node1->latest (nano::dev::genesis_key.pub), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0); auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request; request.put ("action", "sign"); @@ -5253,7 +5253,7 @@ TEST (rpc, sign_block) auto node1 = add_ipc_enabled_node (system); nano::keypair key; system.wallet (0)->insert_adhoc (key.prv); - nano::state_block send (nano::dev::genesis->account (), node1->latest (nano::dev::genesis_key.pub), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0); + nano::state_block send (nano::dev::genesis->account (), node1->latest (nano::dev::genesis_key.pub), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0); auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request; request.put ("action", "sign"); @@ -5642,14 +5642,14 @@ TEST (rpc, epoch_upgrade) auto node = add_ipc_enabled_node (system); nano::keypair key1, key2, key3; nano::keypair epoch_signer (nano::dev::genesis_key); - auto send1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - 1, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); // to opened account + auto send1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - 1, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); // to opened account ASSERT_EQ (nano::process_result::progress, node->process (*send1).code); - auto send2 (std::make_shared (nano::dev::genesis_key.pub, send1->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - 2, key2.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1->hash ()))); // to unopened account (pending) + auto send2 (std::make_shared (nano::dev::genesis_key.pub, send1->hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - 2, key2.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1->hash ()))); // to unopened account (pending) ASSERT_EQ (nano::process_result::progress, node->process (*send2).code); - auto send3 (std::make_shared (nano::dev::genesis_key.pub, send2->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - 3, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send2->hash ()))); // to burn (0) + auto send3 (std::make_shared (nano::dev::genesis_key.pub, send2->hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - 3, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send2->hash ()))); // to burn (0) ASSERT_EQ (nano::process_result::progress, node->process (*send3).code); nano::account max_account (std::numeric_limits::max ()); - auto send4 (std::make_shared (nano::dev::genesis_key.pub, send3->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - 4, max_account, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send3->hash ()))); // to max account + auto send4 (std::make_shared (nano::dev::genesis_key.pub, send3->hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - 4, max_account, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send3->hash ()))); // to max account ASSERT_EQ (nano::process_result::progress, node->process (*send4).code); auto open (std::make_shared (key1.pub, 0, key1.pub, 1, send1->hash (), key1.prv, key1.pub, *system.work.generate (key1.pub))); ASSERT_EQ (nano::process_result::progress, node->process (*open).code); @@ -5691,9 +5691,9 @@ TEST (rpc, epoch_upgrade) rpc_ctx->io_scope->reset (); // Epoch 2 upgrade auto genesis_latest (node->latest (nano::dev::genesis_key.pub)); - auto send5 (std::make_shared (nano::dev::genesis_key.pub, genesis_latest, nano::dev::genesis_key.pub, nano::dev::genesis_amount - 5, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (genesis_latest))); // to burn (0) + auto send5 (std::make_shared (nano::dev::genesis_key.pub, genesis_latest, nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - 5, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (genesis_latest))); // to burn (0) ASSERT_EQ (nano::process_result::progress, node->process (*send5).code); - auto send6 (std::make_shared (nano::dev::genesis_key.pub, send5->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - 6, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send5->hash ()))); // to key1 (again) + auto send6 (std::make_shared (nano::dev::genesis_key.pub, send5->hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - 6, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send5->hash ()))); // to key1 (again) ASSERT_EQ (nano::process_result::progress, node->process (*send6).code); auto key1_latest (node->latest (key1.pub)); auto send7 (std::make_shared (key1.pub, key1_latest, key1.pub, 0, key3.pub, key1.prv, key1.pub, *system.work.generate (key1_latest))); // to key3 @@ -5736,14 +5736,14 @@ TEST (rpc, epoch_upgrade_multithreaded) auto node = add_ipc_enabled_node (system, node_config); nano::keypair key1, key2, key3; nano::keypair epoch_signer (nano::dev::genesis_key); - auto send1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - 1, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); // to opened account + auto send1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - 1, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); // to opened account ASSERT_EQ (nano::process_result::progress, node->process (*send1).code); - auto send2 (std::make_shared (nano::dev::genesis_key.pub, send1->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - 2, key2.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1->hash ()))); // to unopened account (pending) + auto send2 (std::make_shared (nano::dev::genesis_key.pub, send1->hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - 2, key2.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1->hash ()))); // to unopened account (pending) ASSERT_EQ (nano::process_result::progress, node->process (*send2).code); - auto send3 (std::make_shared (nano::dev::genesis_key.pub, send2->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - 3, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send2->hash ()))); // to burn (0) + auto send3 (std::make_shared (nano::dev::genesis_key.pub, send2->hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - 3, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send2->hash ()))); // to burn (0) ASSERT_EQ (nano::process_result::progress, node->process (*send3).code); nano::account max_account (std::numeric_limits::max ()); - auto send4 (std::make_shared (nano::dev::genesis_key.pub, send3->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - 4, max_account, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send3->hash ()))); // to max account + auto send4 (std::make_shared (nano::dev::genesis_key.pub, send3->hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - 4, max_account, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send3->hash ()))); // to max account ASSERT_EQ (nano::process_result::progress, node->process (*send4).code); auto open (std::make_shared (key1.pub, 0, key1.pub, 1, send1->hash (), key1.prv, key1.pub, *system.work.generate (key1.pub))); ASSERT_EQ (nano::process_result::progress, node->process (*open).code); @@ -5784,9 +5784,9 @@ TEST (rpc, epoch_upgrade_multithreaded) rpc_ctx->io_scope->reset (); // Epoch 2 upgrade auto genesis_latest (node->latest (nano::dev::genesis_key.pub)); - auto send5 (std::make_shared (nano::dev::genesis_key.pub, genesis_latest, nano::dev::genesis_key.pub, nano::dev::genesis_amount - 5, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (genesis_latest))); // to burn (0) + auto send5 (std::make_shared (nano::dev::genesis_key.pub, genesis_latest, nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - 5, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (genesis_latest))); // to burn (0) ASSERT_EQ (nano::process_result::progress, node->process (*send5).code); - auto send6 (std::make_shared (nano::dev::genesis_key.pub, send5->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - 6, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send5->hash ()))); // to key1 (again) + auto send6 (std::make_shared (nano::dev::genesis_key.pub, send5->hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - 6, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send5->hash ()))); // to key1 (again) ASSERT_EQ (nano::process_result::progress, node->process (*send6).code); auto key1_latest (node->latest (key1.pub)); auto send7 (std::make_shared (key1.pub, key1_latest, key1.pub, 0, key3.pub, key1.prv, key1.pub, *system.work.generate (key1_latest))); // to key3 @@ -5829,7 +5829,7 @@ TEST (rpc, account_lazy_start) auto node1 = system.add_node (node_flags); nano::keypair key; // Generating test chain - auto send1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); + auto send1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); ASSERT_EQ (nano::process_result::progress, node1->process (*send1).code); auto open (std::make_shared (send1->hash (), key.pub, key.pub, key.prv, key.pub, *system.work.generate (key.pub))); ASSERT_EQ (nano::process_result::progress, node1->process (*open).code); @@ -5866,7 +5866,7 @@ TEST (rpc, receive) nano::keypair key1; wallet->insert_adhoc (key1.prv); auto send1 (wallet->send_action (nano::dev::genesis_key.pub, key1.pub, node->config.receive_minimum.number (), *node->work_generate_blocking (nano::dev::genesis->hash ()))); - ASSERT_TIMELY (5s, node->balance (nano::dev::genesis_key.pub) != nano::dev::genesis_amount); + ASSERT_TIMELY (5s, node->balance (nano::dev::genesis_key.pub) != nano::dev::constants.genesis_amount); ASSERT_TIMELY (10s, !node->store.account.exists (node->store.tx_begin_read (), key1.pub)); // Send below minimum receive amount auto send2 (wallet->send_action (nano::dev::genesis_key.pub, key1.pub, node->config.receive_minimum.number () - 1, *node->work_generate_blocking (send1->hash ()))); @@ -5907,7 +5907,7 @@ TEST (rpc, receive_unopened) // Test receiving for unopened account nano::keypair key1; auto send1 (wallet->send_action (nano::dev::genesis_key.pub, key1.pub, node->config.receive_minimum.number () - 1, *node->work_generate_blocking (nano::dev::genesis->hash ()))); - ASSERT_TIMELY (5s, !node->balance (nano::dev::genesis_key.pub) != nano::dev::genesis_amount); + ASSERT_TIMELY (5s, !node->balance (nano::dev::genesis_key.pub) != nano::dev::constants.genesis_amount); ASSERT_FALSE (node->store.account.exists (node->store.tx_begin_read (), key1.pub)); ASSERT_TRUE (node->store.block.exists (node->store.tx_begin_read (), send1->hash ())); wallet->insert_adhoc (key1.prv); // should not auto receive, amount sent was lower than minimum @@ -5969,7 +5969,7 @@ TEST (rpc, receive_work_disabled) ASSERT_TRUE (worker_node.work_generation_enabled ()); auto send1 (wallet->send_action (nano::dev::genesis_key.pub, key1.pub, node->config.receive_minimum.number () - 1, *worker_node.work_generate_blocking (genesis.hash ()), false)); ASSERT_TRUE (send1 != nullptr); - ASSERT_TIMELY (5s, node->balance (nano::dev::genesis_key.pub) != nano::dev::genesis_amount); + ASSERT_TIMELY (5s, node->balance (nano::dev::genesis_key.pub) != nano::dev::constants.genesis_amount); ASSERT_FALSE (node->store.account.exists (node->store.tx_begin_read (), key1.pub)); ASSERT_TRUE (node->store.block.exists (node->store.tx_begin_read (), send1->hash ())); wallet->insert_adhoc (key1.prv); @@ -6002,7 +6002,7 @@ TEST (rpc, receive_pruned) nano::keypair key1; wallet2->insert_adhoc (key1.prv); auto send1 (wallet1->send_action (nano::dev::genesis_key.pub, key1.pub, node2->config.receive_minimum.number (), *node2->work_generate_blocking (nano::dev::genesis->hash ()))); - ASSERT_TIMELY (5s, node2->balance (nano::dev::genesis_key.pub) != nano::dev::genesis_amount); + ASSERT_TIMELY (5s, node2->balance (nano::dev::genesis_key.pub) != nano::dev::constants.genesis_amount); ASSERT_TIMELY (10s, !node2->store.account.exists (node2->store.tx_begin_read (), key1.pub)); // Send below minimum receive amount auto send2 (wallet1->send_action (nano::dev::genesis_key.pub, key1.pub, node2->config.receive_minimum.number () - 1, *node2->work_generate_blocking (send1->hash ()))); @@ -6219,8 +6219,8 @@ TEST (rpc, confirmation_active) auto [rpc, rpc_ctx] = add_rpc (system, node1); nano::genesis genesis; - auto send1 (std::make_shared (genesis.hash (), nano::public_key (), nano::dev::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (genesis.hash ()))); - auto send2 (std::make_shared (send1->hash (), nano::public_key (), nano::dev::genesis_amount - 200, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1->hash ()))); + auto send1 (std::make_shared (genesis.hash (), nano::public_key (), nano::dev::constants.genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (genesis.hash ()))); + auto send2 (std::make_shared (send1->hash (), nano::public_key (), nano::dev::constants.genesis_amount - 200, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1->hash ()))); node1->process_active (send1); node1->process_active (send2); nano::blocks_confirm (*node1, { send1, send2 }); @@ -6248,7 +6248,7 @@ TEST (rpc, confirmation_info) auto [rpc, rpc_ctx] = add_rpc (system, node1); nano::genesis genesis; - auto send (std::make_shared (genesis.hash (), nano::public_key (), nano::dev::genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (genesis.hash ()))); + auto send (std::make_shared (genesis.hash (), nano::public_key (), nano::dev::constants.genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (genesis.hash ()))); node1->process_active (send); node1->block_processor.flush (); node1->scheduler.flush (); diff --git a/nano/secure/common.cpp b/nano/secure/common.cpp index 73dcf8be9e..9ee6293853 100644 --- a/nano/secure/common.cpp +++ b/nano/secure/common.cpp @@ -81,7 +81,6 @@ std::string const test_canary_public_key_data = nano::get_env_or_default ("NANO_ } nano::keypair nano::dev::genesis_key{ dev_private_key_data }; -nano::uint128_t nano::dev::genesis_amount{ std::numeric_limits::max () }; nano::ledger_constants nano::dev::constants{ nano::networks::nano_dev_network }; std::shared_ptr & nano::dev::genesis = nano::dev::constants.genesis; @@ -118,6 +117,7 @@ nano::ledger_constants::ledger_constants (nano::networks network_a) : nano_live_genesis (parse_block_from_genesis_data (live_genesis_data)), nano_test_genesis (parse_block_from_genesis_data (test_genesis_data)), genesis (network_a == nano::networks::nano_dev_network ? nano_dev_genesis : network_a == nano::networks::nano_beta_network ? nano_beta_genesis : network_a == nano::networks::nano_test_network ? nano_test_genesis : nano_live_genesis), + genesis_amount{ std::numeric_limits::max () }, burn_account (0), nano_dev_final_votes_canary_account (dev_public_key_data), nano_beta_final_votes_canary_account (beta_canary_public_key_data), @@ -130,10 +130,10 @@ nano::ledger_constants::ledger_constants (nano::networks network_a) : nano_test_final_votes_canary_height (1), final_votes_canary_height (network_a == nano::networks::nano_dev_network ? nano_dev_final_votes_canary_height : network_a == nano::networks::nano_beta_network ? nano_beta_final_votes_canary_height : network_a == nano::networks::nano_test_network ? nano_test_final_votes_canary_height : nano_live_final_votes_canary_height) { - nano_beta_genesis->sideband_set (nano::block_sideband (nano_beta_genesis->account (), 0, nano::dev::genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); - nano_dev_genesis->sideband_set (nano::block_sideband (nano_dev_genesis->account (), 0, nano::dev::genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); - nano_live_genesis->sideband_set (nano::block_sideband (nano_live_genesis->account (), 0, nano::dev::genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); - nano_test_genesis->sideband_set (nano::block_sideband (nano_test_genesis->account (), 0, nano::dev::genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); + nano_beta_genesis->sideband_set (nano::block_sideband (nano_beta_genesis->account (), 0, nano::dev::constants.genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); + nano_dev_genesis->sideband_set (nano::block_sideband (nano_dev_genesis->account (), 0, nano::dev::constants.genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); + nano_live_genesis->sideband_set (nano::block_sideband (nano_live_genesis->account (), 0, nano::dev::constants.genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); + nano_test_genesis->sideband_set (nano::block_sideband (nano_test_genesis->account (), 0, nano::dev::constants.genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); nano::link epoch_link_v1; const char * epoch_message_v1 ("epoch v1 block"); diff --git a/nano/secure/common.hpp b/nano/secure/common.hpp index 9553adc367..23c56511b4 100644 --- a/nano/secure/common.hpp +++ b/nano/secure/common.hpp @@ -377,6 +377,7 @@ class ledger_constants std::shared_ptr nano_live_genesis; std::shared_ptr nano_test_genesis; std::shared_ptr genesis; + nano::uint128_t genesis_amount; nano::account burn_account; nano::account nano_dev_final_votes_canary_account; nano::account nano_beta_final_votes_canary_account; @@ -394,7 +395,6 @@ class ledger_constants namespace dev { extern nano::keypair genesis_key; - extern nano::uint128_t genesis_amount; extern nano::ledger_constants constants; extern std::shared_ptr & genesis; } diff --git a/nano/secure/ledger.cpp b/nano/secure/ledger.cpp index 501f2f7439..90020bee0a 100644 --- a/nano/secure/ledger.cpp +++ b/nano/secure/ledger.cpp @@ -1103,7 +1103,7 @@ nano::account nano::ledger::account_safe (nano::transaction const & transaction_ nano::uint128_t nano::ledger::amount (nano::transaction const & transaction_a, nano::account const & account_a) { release_assert (account_a == network_params.ledger.genesis->account ()); - return nano::dev::genesis_amount; + return nano::dev::constants.genesis_amount; } nano::uint128_t nano::ledger::amount (nano::transaction const & transaction_a, nano::block_hash const & hash_a) diff --git a/nano/slow_test/node.cpp b/nano/slow_test/node.cpp index adb801d104..8cec18da75 100644 --- a/nano/slow_test/node.cpp +++ b/nano/slow_test/node.cpp @@ -99,7 +99,7 @@ TEST (ledger, deep_account_compute) store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key; - auto balance (nano::dev::genesis_amount - 1); + auto balance (nano::dev::constants.genesis_amount - 1); nano::send_block send (nano::dev::genesis->hash (), key.pub, balance, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); nano::open_block open (send.hash (), nano::dev::genesis_key.pub, key.pub, key.prv, key.pub, *pool.generate (key.pub)); @@ -145,7 +145,7 @@ TEST (wallet, multithreaded_send_async) } })); } - ASSERT_TIMELY (1000s, system.nodes[0]->balance (nano::dev::genesis_key.pub) == (nano::dev::genesis_amount - 20 * 1000 * 1000)); + ASSERT_TIMELY (1000s, system.nodes[0]->balance (nano::dev::genesis_key.pub) == (nano::dev::constants.genesis_amount - 20 * 1000 * 1000)); } for (auto i (threads.begin ()), n (threads.end ()); i != n; ++i) { @@ -487,7 +487,7 @@ TEST (node, mass_vote_by_hash) std::vector> blocks; for (auto i (0); i < 10000; ++i) { - auto block (std::make_shared (nano::dev::genesis_key.pub, previous, nano::dev::genesis_key.pub, nano::dev::genesis_amount - (i + 1) * nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (previous))); + auto block (std::make_shared (nano::dev::genesis_key.pub, previous, nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - (i + 1) * nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (previous))); previous = block->hash (); blocks.push_back (block); } @@ -646,7 +646,7 @@ TEST (confirmation_height, long_chains) auto const num_blocks = nano::confirmation_height::unbounded_cutoff * 2 + 50; // First open the other account - nano::send_block send (latest, key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio + num_blocks + 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); + nano::send_block send (latest, key1.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio + num_blocks + 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); nano::open_block open (send.hash (), nano::dev::genesis->account (), key1.pub, key1.prv, key1.pub, *system.work.generate (key1.pub)); { auto transaction = node->store.tx_begin_write (); @@ -661,7 +661,7 @@ TEST (confirmation_height, long_chains) auto transaction = node->store.tx_begin_write (); for (auto i = num_blocks - 1; i > 0; --i) { - nano::send_block send (previous_genesis_chain_hash, key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio + i + 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (previous_genesis_chain_hash)); + nano::send_block send (previous_genesis_chain_hash, key1.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio + i + 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (previous_genesis_chain_hash)); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, send).code); nano::receive_block receive (previous_destination_chain_hash, send.hash (), key1.prv, key1.pub, *system.work.generate (previous_destination_chain_hash)); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, receive).code); @@ -673,11 +673,11 @@ TEST (confirmation_height, long_chains) // Send one from destination to genesis and pocket it nano::send_block send1 (previous_destination_chain_hash, nano::dev::genesis_key.pub, nano::Gxrb_ratio - 2, key1.prv, key1.pub, *system.work.generate (previous_destination_chain_hash)); - auto receive1 (std::make_shared (nano::dev::genesis_key.pub, previous_genesis_chain_hash, nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio + 1, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (previous_genesis_chain_hash))); + auto receive1 (std::make_shared (nano::dev::genesis_key.pub, previous_genesis_chain_hash, nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio + 1, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (previous_genesis_chain_hash))); // Unpocketed. Send to a non-existing account to prevent auto receives from the wallet adjusting expected confirmation height nano::keypair key2; - nano::state_block send2 (nano::dev::genesis->account (), receive1->hash (), nano::dev::genesis->account (), nano::dev::genesis_amount - nano::Gxrb_ratio, key2.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (receive1->hash ())); + nano::state_block send2 (nano::dev::genesis->account (), receive1->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, key2.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (receive1->hash ())); { auto transaction = node->store.tx_begin_write (); @@ -737,7 +737,7 @@ TEST (confirmation_height, dynamic_algorithm) std::vector> state_blocks; for (auto i = 0; i < num_blocks; ++i) { - auto send (std::make_shared (nano::dev::genesis_key.pub, latest_genesis->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - i - 1, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest_genesis->hash ()))); + auto send (std::make_shared (nano::dev::genesis_key.pub, latest_genesis->hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - i - 1, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest_genesis->hash ()))); latest_genesis = send; state_blocks.push_back (send); } @@ -793,7 +793,7 @@ TEST (confirmation_height, dynamic_algorithm_no_transition_while_pending) auto add_block_to_genesis_chain = [&] (nano::write_transaction & transaction) { static int num = 0; - auto send (std::make_shared (nano::dev::genesis_key.pub, latest_genesis, nano::dev::genesis_key.pub, nano::dev::genesis_amount - num - 1, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest_genesis))); + auto send (std::make_shared (nano::dev::genesis_key.pub, latest_genesis, nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - num - 1, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest_genesis))); latest_genesis = send->hash (); state_blocks.push_back (send); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, *send).code); @@ -872,7 +872,7 @@ TEST (confirmation_height, many_accounts_send_receive_self) nano::keypair key; keys.emplace_back (key); - nano::send_block send (latest_genesis, key.pub, nano::dev::genesis_amount - 1 - i, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest_genesis)); + nano::send_block send (latest_genesis, key.pub, nano::dev::constants.genesis_amount - 1 - i, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest_genesis)); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, send).code); auto open = std::make_shared (send.hash (), nano::dev::genesis_key.pub, key.pub, key.prv, key.pub, *system.work.generate (key.pub)); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, *open).code); @@ -992,7 +992,7 @@ TEST (confirmation_height, many_accounts_send_receive_self_no_elections) { nano::keypair key; keys.emplace_back (key); - nano::send_block send (latest_genesis, key.pub, nano::dev::genesis_amount - 1 - i, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (latest_genesis)); + nano::send_block send (latest_genesis, key.pub, nano::dev::constants.genesis_amount - 1 - i, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (latest_genesis)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); auto open = std::make_shared (send.hash (), nano::dev::genesis_key.pub, key.pub, key.prv, key.pub, *pool.generate (key.pub)); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, *open).code); @@ -1309,7 +1309,7 @@ TEST (telemetry, under_load) system.wallet (0)->insert_adhoc (key.prv); auto latest_genesis = node->latest (nano::dev::genesis_key.pub); auto num_blocks = 150000; - auto send (std::make_shared (nano::dev::genesis_key.pub, latest_genesis, nano::dev::genesis_key.pub, nano::dev::genesis_amount - num_blocks, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest_genesis))); + auto send (std::make_shared (nano::dev::genesis_key.pub, latest_genesis, nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - num_blocks, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest_genesis))); node->process_active (send); latest_genesis = send->hash (); auto open (std::make_shared (key.pub, 0, key.pub, num_blocks, send->hash (), key.prv, key.pub, *system.work.generate (key.pub))); @@ -1326,7 +1326,7 @@ TEST (telemetry, under_load) } }; - std::thread thread1 (thread_func, nano::dev::genesis_key, latest_genesis, nano::dev::genesis_amount - num_blocks); + std::thread thread1 (thread_func, nano::dev::genesis_key, latest_genesis, nano::dev::constants.genesis_amount - num_blocks); std::thread thread2 (thread_func, key, latest_key, num_blocks); ASSERT_TIMELY (200s, node1->ledger.cache.block_count == num_blocks * 2 + 3); @@ -1443,7 +1443,7 @@ TEST (telemetry, many_nodes) // Give all nodes a non-default number of blocks nano::keypair key; - nano::state_block send (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_amount - nano::Mxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ())); + nano::state_block send (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - nano::Mxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ())); for (auto node : system.nodes) { auto transaction (node->store.tx_begin_write ()); @@ -1731,7 +1731,7 @@ TEST (node, mass_block_new) auto send = builder.make_block () .account (nano::dev::genesis_key.pub) .previous (latest_genesis) - .balance (nano::dev::genesis_amount - i - 1) + .balance (nano::dev::constants.genesis_amount - i - 1) .representative (nano::dev::genesis_key.pub) .link (keys[i].pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) @@ -1829,7 +1829,7 @@ TEST (node, wallet_create_block_confirm_conflicts) auto transaction = node->store.tx_begin_write (); for (auto i = num_blocks - 1; i > 0; --i) { - nano::send_block send (latest, key1.pub, nano::dev::genesis_amount - nano::Gxrb_ratio + i + 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); + nano::send_block send (latest, key1.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio + i + 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest)); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, send).code); latest = send.hash (); } diff --git a/nano/test_common/system.cpp b/nano/test_common/system.cpp index 9fe6068ca9..2f3c2dbf7b 100644 --- a/nano/test_common/system.cpp +++ b/nano/test_common/system.cpp @@ -152,8 +152,8 @@ nano::system::~system () void nano::system::ledger_initialization_set (std::vector const & reps, nano::amount const & reserve) { nano::block_hash previous = nano::dev::genesis->hash (); - auto amount = (nano::dev::genesis_amount - reserve.number ()) / reps.size (); - auto balance = nano::dev::genesis_amount; + auto amount = (nano::dev::constants.genesis_amount - reserve.number ()) / reps.size (); + auto balance = nano::dev::constants.genesis_amount; for (auto const & i : reps) { balance -= amount; From 598d1cd70b75745324e41b9cb270eee392e7e112 Mon Sep 17 00:00:00 2001 From: Matt <48781706+starkmatt@users.noreply.github.com> Date: Mon, 26 Jul 2021 17:28:46 +1000 Subject: [PATCH 108/346] Update README.md Adding Code to fix the Readme so Logo is readable --- README.md | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/README.md b/README.md index ae0f4f13d8..bb58bd5b44 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,6 @@ -
-
+

Logo

- Logo -
-
[![Live Artifacts](https://github.com/nanocurrency/nano-node/workflows/Live/badge.svg)](https://github.com/nanocurrency/nano-node/actions?query=workflow%3ALive) [![Beta Artifacts](https://github.com/nanocurrency/nano-node/workflows/Beta/badge.svg)](https://github.com/nanocurrency/nano-node/actions?query=workflow%3ABeta) From 012105f98e54f13f0a3ef8b136b15f653ca24764 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Mon, 26 Jul 2021 10:51:30 +0100 Subject: [PATCH 109/346] Moving networking related parameters off of the node config class an on to the networking config class where they belong. --- nano/core_test/network.cpp | 4 +-- nano/lib/config.hpp | 27 +++++++++++++++++++ nano/node/bootstrap/bootstrap_connections.cpp | 2 +- nano/node/bootstrap/bootstrap_server.cpp | 2 +- nano/node/network.cpp | 8 +++--- nano/node/node.cpp | 4 +-- nano/node/socket.cpp | 2 +- nano/node/transport/tcp.cpp | 8 +++--- nano/node/transport/udp.cpp | 6 ++--- nano/secure/common.cpp | 9 ------- nano/secure/common.hpp | 12 --------- nano/test_common/system.cpp | 2 +- 12 files changed, 46 insertions(+), 40 deletions(-) diff --git a/nano/core_test/network.cpp b/nano/core_test/network.cpp index fd840137cb..abf7a9459a 100644 --- a/nano/core_test/network.cpp +++ b/nano/core_test/network.cpp @@ -904,7 +904,7 @@ TEST (network, peer_max_tcp_attempts) node_flags.disable_connection_cleanup = true; nano::system system; auto node = system.add_node (node_flags); - for (auto i (0); i < node->network_params.node.max_peers_per_ip; ++i) + for (auto i (0); i < node->network_params.network.max_peers_per_ip; ++i) { auto node2 (std::make_shared (system.io_ctx, nano::get_available_port (), nano::unique_path (), system.logging, system.work, node_flags)); node2->start (); @@ -925,7 +925,7 @@ namespace transport { nano::system system (1); auto node (system.nodes[0]); - for (auto i (0); i < node->network_params.node.max_peers_per_subnetwork; ++i) + for (auto i (0); i < node->network_params.network.max_peers_per_subnetwork; ++i) { auto address (boost::asio::ip::address_v6::v4_mapped (boost::asio::ip::address_v4 (0x7f000001 + i))); // 127.0.0.1 hex nano::endpoint endpoint (address, nano::get_available_port ()); diff --git a/nano/lib/config.hpp b/nano/lib/config.hpp index b080621340..c4c9d4c794 100644 --- a/nano/lib/config.hpp +++ b/nano/lib/config.hpp @@ -5,6 +5,7 @@ #include #include +#include #include namespace boost @@ -120,6 +121,13 @@ class network_constants default_ipc_port = is_live_network () ? 7077 : is_beta_network () ? 56000 : is_test_network () ? test_ipc_port () : 46000; default_websocket_port = is_live_network () ? 7078 : is_beta_network () ? 57000 : is_test_network () ? test_websocket_port () : 47000; request_interval_ms = is_dev_network () ? 20 : 500; + cleanup_period = is_dev_network () ? std::chrono::seconds (1) : std::chrono::seconds (60); + idle_timeout = is_dev_network () ? cleanup_period * 15 : cleanup_period * 2; + syn_cookie_cutoff = std::chrono::seconds (5); + bootstrap_interval = std::chrono::seconds (15 * 60); + max_peers_per_ip = is_dev_network () ? 10 : 5; + max_peers_per_subnetwork = max_peers_per_ip * 4; + peer_dump_interval = is_dev_network () ? std::chrono::seconds (1) : std::chrono::seconds (5 * 60); } /** Network work thresholds. Define these inline as constexpr when moving to cpp17. */ @@ -142,6 +150,25 @@ class network_constants uint16_t default_websocket_port; unsigned request_interval_ms; + std::chrono::seconds cleanup_period; + std::chrono::milliseconds cleanup_period_half () const + { + return std::chrono::duration_cast (cleanup_period) / 2; + } + std::chrono::seconds cleanup_cutoff () const + { + return cleanup_period * 5; + } + /** Default maximum idle time for a socket before it's automatically closed */ + std::chrono::seconds idle_timeout; + std::chrono::seconds syn_cookie_cutoff; + std::chrono::seconds bootstrap_interval; + /** Maximum number of peers per IP */ + size_t max_peers_per_ip; + /** Maximum number of peers per subnetwork */ + size_t max_peers_per_subnetwork; + std::chrono::seconds peer_dump_interval; + /** Returns the network this object contains values for */ nano::networks network () const { diff --git a/nano/node/bootstrap/bootstrap_connections.cpp b/nano/node/bootstrap/bootstrap_connections.cpp index aa5a8a94f7..09a4e761d1 100644 --- a/nano/node/bootstrap/bootstrap_connections.cpp +++ b/nano/node/bootstrap/bootstrap_connections.cpp @@ -97,7 +97,7 @@ void nano::bootstrap_connections::pool_connection (std::shared_ptrsocket; if (!stopped && !client_a->pending_stop && !node.network.excluded_peers.check (client_a->channel->get_tcp_endpoint ())) { - socket_l->start_timer (node.network_params.node.idle_timeout); + socket_l->start_timer (node.network_params.network.idle_timeout); // Push into idle deque if (!push_front) { diff --git a/nano/node/bootstrap/bootstrap_server.cpp b/nano/node/bootstrap/bootstrap_server.cpp index 16bc4d9c2a..8f76aa5586 100644 --- a/nano/node/bootstrap/bootstrap_server.cpp +++ b/nano/node/bootstrap/bootstrap_server.cpp @@ -146,7 +146,7 @@ void nano::bootstrap_server::stop () void nano::bootstrap_server::receive () { // Increase timeout to receive TCP header (idle server socket) - socket->set_timeout (node->network_params.node.idle_timeout); + socket->set_timeout (node->network_params.network.idle_timeout); auto this_l (shared_from_this ()); socket->async_read (receive_buffer, 8, [this_l] (boost::system::error_code const & ec, size_t size_a) { // Set remote_endpoint diff --git a/nano/node/network.cpp b/nano/node/network.cpp index f7b483b175..aab55793c7 100644 --- a/nano/node/network.cpp +++ b/nano/node/network.cpp @@ -13,7 +13,7 @@ nano::network::network (nano::node & node_a, uint16_t port_a) : id (nano::network_constants::active_network), - syn_cookies (node_a.network_params.node.max_peers_per_ip), + syn_cookies (node_a.network_params.network.max_peers_per_ip), inbound{ [this] (nano::message const & message, std::shared_ptr const & channel) { if (message.header.network == id) { @@ -745,9 +745,9 @@ void nano::network::cleanup (std::chrono::steady_clock::time_point const & cutof void nano::network::ongoing_cleanup () { - cleanup (std::chrono::steady_clock::now () - node.network_params.node.cutoff); + cleanup (std::chrono::steady_clock::now () - node.network_params.network.cleanup_cutoff ()); std::weak_ptr node_w (node.shared ()); - node.workers.add_timed_task (std::chrono::steady_clock::now () + node.network_params.node.period, [node_w] () { + node.workers.add_timed_task (std::chrono::steady_clock::now () + node.network_params.network.cleanup_period, [node_w] () { if (auto node_l = node_w.lock ()) { node_l->network.ongoing_cleanup (); @@ -772,7 +772,7 @@ void nano::network::ongoing_keepalive () flood_keepalive (0.75f); flood_keepalive_self (0.25f); std::weak_ptr node_w (node.shared ()); - node.workers.add_timed_task (std::chrono::steady_clock::now () + node.network_params.node.half_period, [node_w] () { + node.workers.add_timed_task (std::chrono::steady_clock::now () + node.network_params.network.cleanup_period_half (), [node_w] () { if (auto node_l = node_w.lock ()) { node_l->network.ongoing_keepalive (); diff --git a/nano/node/node.cpp b/nano/node/node.cpp index c28a3e57ce..73c8524c1e 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -785,7 +785,7 @@ void nano::node::ongoing_rep_calculation () void nano::node::ongoing_bootstrap () { - auto next_wakeup (network_params.node.bootstrap_interval); + auto next_wakeup = network_params.network.bootstrap_interval; if (warmed_up < 3) { // Re-attempt bootstrapping more aggressively on startup @@ -848,7 +848,7 @@ void nano::node::ongoing_peer_store () bool stored (network.tcp_channels.store_all (true)); network.udp_channels.store_all (!stored); std::weak_ptr node_w (shared_from_this ()); - workers.add_timed_task (std::chrono::steady_clock::now () + network_params.node.peer_interval, [node_w] () { + workers.add_timed_task (std::chrono::steady_clock::now () + network_params.network.peer_dump_interval, [node_w] () { if (auto node_l = node_w.lock ()) { node_l->ongoing_peer_store (); diff --git a/nano/node/socket.cpp b/nano/node/socket.cpp index c3b321ffe4..ee4f9341f5 100644 --- a/nano/node/socket.cpp +++ b/nano/node/socket.cpp @@ -269,7 +269,7 @@ void nano::server_socket::on_connection (std::functioncheckup (); - new_connection->start_timer (this_l->node.network_params.network.is_dev_network () ? std::chrono::seconds (2) : this_l->node.network_params.node.idle_timeout); + new_connection->start_timer (this_l->node.network_params.network.is_dev_network () ? std::chrono::seconds (2) : this_l->node.network_params.network.idle_timeout); this_l->node.stats.inc (nano::stat::type::tcp, nano::stat::detail::tcp_accept_success, nano::stat::dir::in); this_l->connections.push_back (new_connection); if (callback_a (new_connection, ec_a)) diff --git a/nano/node/transport/tcp.cpp b/nano/node/transport/tcp.cpp index e459a1e1f2..83b62db229 100644 --- a/nano/node/transport/tcp.cpp +++ b/nano/node/transport/tcp.cpp @@ -374,10 +374,10 @@ bool nano::transport::tcp_channels::max_ip_connections (nano::tcp_endpoint const auto const address (nano::transport::ipv4_address_or_ipv6_subnet (endpoint_a.address ())); auto const subnet (nano::transport::map_address_to_subnetwork (endpoint_a.address ())); nano::unique_lock lock (mutex); - result = channels.get ().count (address) >= node.network_params.node.max_peers_per_ip || channels.get ().count (subnet) >= node.network_params.node.max_peers_per_subnetwork; + result = channels.get ().count (address) >= node.network_params.network.max_peers_per_ip || channels.get ().count (subnet) >= node.network_params.network.max_peers_per_subnetwork; if (!result) { - result = attempts.get ().count (address) >= node.network_params.node.max_peers_per_ip || attempts.get ().count (subnet) >= node.network_params.node.max_peers_per_subnetwork; + result = attempts.get ().count (address) >= node.network_params.network.max_peers_per_ip || attempts.get ().count (subnet) >= node.network_params.network.max_peers_per_subnetwork; } } if (result) @@ -450,7 +450,7 @@ void nano::transport::tcp_channels::ongoing_keepalive () nano::unique_lock lock (mutex); // Wake up channels std::vector> send_list; - auto keepalive_sent_cutoff (channels.get ().lower_bound (std::chrono::steady_clock::now () - node.network_params.node.period)); + auto keepalive_sent_cutoff (channels.get ().lower_bound (std::chrono::steady_clock::now () - node.network_params.network.cleanup_period)); for (auto i (channels.get ().begin ()); i != keepalive_sent_cutoff; ++i) { send_list.push_back (i->channel); @@ -475,7 +475,7 @@ void nano::transport::tcp_channels::ongoing_keepalive () } } std::weak_ptr node_w (node.shared ()); - node.workers.add_timed_task (std::chrono::steady_clock::now () + node.network_params.node.half_period, [node_w] () { + node.workers.add_timed_task (std::chrono::steady_clock::now () + node.network_params.network.cleanup_period_half (), [node_w] () { if (auto node_l = node_w.lock ()) { if (!node_l->network.tcp_channels.stopped) diff --git a/nano/node/transport/udp.cpp b/nano/node/transport/udp.cpp index 370975a084..227edf4833 100644 --- a/nano/node/transport/udp.cpp +++ b/nano/node/transport/udp.cpp @@ -636,7 +636,7 @@ bool nano::transport::udp_channels::max_ip_connections (nano::endpoint const & e auto const address (nano::transport::ipv4_address_or_ipv6_subnet (endpoint_a.address ())); auto const subnet (nano::transport::map_address_to_subnetwork (endpoint_a.address ())); nano::unique_lock lock (mutex); - result = channels.get ().count (address) >= node.network_params.node.max_peers_per_ip || channels.get ().count (subnet) >= node.network_params.node.max_peers_per_subnetwork; + result = channels.get ().count (address) >= node.network_params.network.max_peers_per_ip || channels.get ().count (subnet) >= node.network_params.network.max_peers_per_subnetwork; } return result; } @@ -690,7 +690,7 @@ void nano::transport::udp_channels::ongoing_keepalive () node.network.random_fill (message.peers); std::vector> send_list; nano::unique_lock lock (mutex); - auto keepalive_cutoff (channels.get ().lower_bound (std::chrono::steady_clock::now () - node.network_params.node.period)); + auto keepalive_cutoff (channels.get ().lower_bound (std::chrono::steady_clock::now () - node.network_params.network.cleanup_period)); for (auto i (channels.get ().begin ()); i != keepalive_cutoff; ++i) { send_list.push_back (i->channel); @@ -701,7 +701,7 @@ void nano::transport::udp_channels::ongoing_keepalive () channel->send (message); } std::weak_ptr node_w (node.shared ()); - node.workers.add_timed_task (std::chrono::steady_clock::now () + node.network_params.node.period, [node_w] () { + node.workers.add_timed_task (std::chrono::steady_clock::now () + node.network_params.network.cleanup_period, [node_w] () { if (auto node_l = node_w.lock ()) { node_l->network.udp_channels.ongoing_keepalive (); diff --git a/nano/secure/common.cpp b/nano/secure/common.cpp index f1a299967c..6aa3ebccb0 100644 --- a/nano/secure/common.cpp +++ b/nano/secure/common.cpp @@ -166,19 +166,10 @@ nano::random_constants::random_constants () nano::node_constants::node_constants (nano::network_constants & network_constants) { - period = network_constants.is_dev_network () ? std::chrono::seconds (1) : std::chrono::seconds (60); - half_period = network_constants.is_dev_network () ? std::chrono::milliseconds (500) : std::chrono::milliseconds (30 * 1000); - idle_timeout = network_constants.is_dev_network () ? period * 15 : period * 2; - cutoff = period * 5; - syn_cookie_cutoff = std::chrono::seconds (5); backup_interval = std::chrono::minutes (5); - bootstrap_interval = std::chrono::seconds (15 * 60); search_pending_interval = network_constants.is_dev_network () ? std::chrono::seconds (1) : std::chrono::seconds (5 * 60); - peer_interval = search_pending_interval; unchecked_cleaning_interval = std::chrono::minutes (30); process_confirmed_interval = network_constants.is_dev_network () ? std::chrono::milliseconds (50) : std::chrono::milliseconds (500); - max_peers_per_ip = network_constants.is_dev_network () ? 10 : 5; - max_peers_per_subnetwork = max_peers_per_ip * 4; max_weight_samples = (network_constants.is_live_network () || network_constants.is_test_network ()) ? 4032 : 288; weight_period = 5 * 60; // 5 minutes } diff --git a/nano/secure/common.hpp b/nano/secure/common.hpp index 572536062b..c661965fc6 100644 --- a/nano/secure/common.hpp +++ b/nano/secure/common.hpp @@ -415,22 +415,10 @@ class node_constants { public: node_constants (nano::network_constants & network_constants); - std::chrono::seconds period; - std::chrono::milliseconds half_period; - /** Default maximum idle time for a socket before it's automatically closed */ - std::chrono::seconds idle_timeout; - std::chrono::seconds cutoff; - std::chrono::seconds syn_cookie_cutoff; std::chrono::minutes backup_interval; - std::chrono::seconds bootstrap_interval; std::chrono::seconds search_pending_interval; - std::chrono::seconds peer_interval; std::chrono::minutes unchecked_cleaning_interval; std::chrono::milliseconds process_confirmed_interval; - /** Maximum number of peers per IP */ - size_t max_peers_per_ip; - /** Maximum number of peers per subnetwork */ - size_t max_peers_per_subnetwork; /** The maximum amount of samples for a 2 week period on live or 1 day on beta */ uint64_t max_weight_samples; diff --git a/nano/test_common/system.cpp b/nano/test_common/system.cpp index 56d996cf0a..2edee0fd8d 100644 --- a/nano/test_common/system.cpp +++ b/nano/test_common/system.cpp @@ -44,7 +44,7 @@ std::shared_ptr nano::system::add_node (nano::node_config const & no nodes.push_back (node); if (nodes.size () > 1) { - debug_assert (nodes.size () - 1 <= node->network_params.node.max_peers_per_ip || node->flags.disable_max_peers_per_ip); // Check that we don't start more nodes than limit for single IP address + debug_assert (nodes.size () - 1 <= node->network_params.network.max_peers_per_ip || node->flags.disable_max_peers_per_ip); // Check that we don't start more nodes than limit for single IP address auto begin = nodes.end () - 2; for (auto i (begin), j (begin + 1), n (nodes.end ()); j != n; ++i, ++j) { From 4196e7364b56989d4f426bdc58efb8fb4cad6b59 Mon Sep 17 00:00:00 2001 From: Zach Hyatt Date: Mon, 26 Jul 2021 11:09:08 -0500 Subject: [PATCH 110/346] Remove wezrule from security policy (#3396) --- SECURITY.md | 1 - 1 file changed, 1 deletion(-) diff --git a/SECURITY.md b/SECURITY.md index 8c90d06076..74e6407f2a 100644 --- a/SECURITY.md +++ b/SECURITY.md @@ -22,7 +22,6 @@ To report security issues in the Nano protocol, please send an email to security |-----------------------|--------|-----------------| | [clemahieu](https://github.com/clemahieu) | clemahieu { at } gmail.com | [clemahieu.asc](https://github.com/nanocurrency/nano-node/blob/develop/etc/gpg/clemahieu.asc) | | [argakiig](https://github.com/argakiig) | russel { at } nano.org | [argakiig.asc](https://github.com/nanocurrency/nano-node/blob/develop/etc/gpg/argakiig.asc) | -| [wezrule](https://github.com/wezrule) | wezrule { at } hotmail.com | [wezrule.asc](https://github.com/nanocurrency/nano-node/blob/develop/etc/gpg/wezrule.asc) | | [sergiysw](https://github.com/sergiysw) | sergiysw { at } gmail.com | [sergiysw.asc](https://github.com/nanocurrency/nano-node/blob/develop/etc/gpg/sergiysw.asc) | | [zhyatt](https://github.com/zhyatt) | zach { at } nano.org | [zhyatt.asc](https://github.com/nanocurrency/nano-node/blob/develop/etc/gpg/zhyatt.asc) | From 18640c19dd33696c87a5198f8a7f8c0f567da01d Mon Sep 17 00:00:00 2001 From: Russel Waters <6511720+argakiig@users.noreply.github.com> Date: Mon, 26 Jul 2021 09:10:06 -0700 Subject: [PATCH 111/346] update clang-format checks for full history (#3395) * update clang-format checks for full history checks for clang-format 10.0.0 * no need to explicitly install as clang-format, installed versions suffice --- .github/workflows/analyzers.yml | 4 ---- ci/check-commit-format.sh | 36 +++++++++++++++++++++++++++++++-- nano/core_test/telemetry.cpp | 32 ++++++++++++++--------------- 3 files changed, 50 insertions(+), 22 deletions(-) diff --git a/.github/workflows/analyzers.yml b/.github/workflows/analyzers.yml index ac4d7d2f1e..f30a0fa356 100644 --- a/.github/workflows/analyzers.yml +++ b/.github/workflows/analyzers.yml @@ -12,10 +12,6 @@ jobs: env: DEBIAN_FRONTEND: noninteractive run: sudo apt-get install clang-format-10 - - name: Setting clang-format 10 as the default - env: - DEBIAN_FRONTEND: noninteractive - run: sudo update-alternatives --install /usr/bin/clang-format clang-format /usr/bin/clang-format-10 1000 - name: Clang Format run: ci/check-commit-format.sh diff --git a/ci/check-commit-format.sh b/ci/check-commit-format.sh index 4055ac7bd6..c69a18b418 100755 --- a/ci/check-commit-format.sh +++ b/ci/check-commit-format.sh @@ -1,12 +1,44 @@ #!/usr/bin/env bash +FOUND=0 + +# hard requirement of clang-format 10.0.0 +CF_EXECUTABLE=' + clang-format-10.0.0 + clang-format-10.0 + clang-format-10 + clang-format +' + +# check different executable strings +for executable in $CF_EXECUTABLE; do + if type -p "$executable" >/dev/null; then + clang_format="$executable" + FOUND=1 + break + fi +done + +# alert if not installed +if [ $FOUND == 0 ]; then + echo "clang-format not found, please install 10.0.0 first" + exit 1 +fi + +# check if old version is found +if ! "$clang_format" --version | grep '10.0.0' &>/dev/null; then + echo "clang-format version 10.0.0 is required, please update it" + exit 1 +fi + + REPO_ROOT=$(git rev-parse --show-toplevel) "${REPO_ROOT}/ci/update-clang-format" -RESULT=$(python $REPO_ROOT/ci/git-clang-format.py --diff -f --commit HEAD~1 --extensions "hpp,cpp") +RESULT=$(python $REPO_ROOT/ci/git-clang-format.py --diff --extensions "hpp,cpp") if [ "$RESULT" != "no modified files to format" ] && [ "$RESULT" != "clang-format did not modify any files" ]; then - python $REPO_ROOT/ci/git-clang-format.py --diff -f --commit HEAD~1 --extensions "hpp,cpp" + python $REPO_ROOT/ci/git-clang-format.py --diff --extensions "hpp,cpp" echo echo "Code formatting differs from expected - please run ci/clang-format-all.sh" exit 1 diff --git a/nano/core_test/telemetry.cpp b/nano/core_test/telemetry.cpp index 3f1d7a2264..6c841ce5d8 100644 --- a/nano/core_test/telemetry.cpp +++ b/nano/core_test/telemetry.cpp @@ -555,14 +555,14 @@ TEST (telemetry, remove_peer_different_genesis) // Possible TSAN issue in the future if something else uses this, but will only appear in tests. nano::state_block_builder builder; auto junk = builder - .account (nano::dev::genesis_key.pub) - .previous (0) - .representative (nano::dev::genesis_key.pub) - .balance (0) - .link (0) - .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (0) - .build_shared (); + .account (nano::dev::genesis_key.pub) + .previous (0) + .representative (nano::dev::genesis_key.pub) + .balance (0) + .link (0) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) + .work (0) + .build_shared (); node1->network_params.ledger.genesis = junk; node1->start (); system.nodes.push_back (node1); @@ -593,14 +593,14 @@ TEST (telemetry, remove_peer_different_genesis_udp) auto node1 (std::make_shared (system.io_ctx, nano::get_available_port (), nano::unique_path (), system.logging, system.work, node_flags)); nano::state_block_builder builder; auto junk = builder - .account (nano::dev::genesis_key.pub) - .previous (0) - .representative (nano::dev::genesis_key.pub) - .balance (0) - .link (0) - .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (0) - .build_shared (); + .account (nano::dev::genesis_key.pub) + .previous (0) + .representative (nano::dev::genesis_key.pub) + .balance (0) + .link (0) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) + .work (0) + .build_shared (); node1->network_params.ledger.genesis = junk; node1->start (); system.nodes.push_back (node1); From 88c87f7587678f3ee19a00150f09b9f3f2e682f7 Mon Sep 17 00:00:00 2001 From: Shryder Date: Mon, 26 Jul 2021 17:00:48 +0000 Subject: [PATCH 112/346] Update RPC & QT Wallet to the new units #3386 (#3392) * Remove knano and mnano references from QT wallet #3386 --- nano/node/json_handler.cpp | 43 +++++++++++++++++++++++++++++++++-- nano/node/json_handler.hpp | 2 ++ nano/qt/qt.cpp | 46 +++++++++----------------------------- nano/qt/qt.hpp | 2 -- nano/qt_test/qt.cpp | 2 +- nano/rpc_test/rpc.cpp | 8 +++---- 6 files changed, 59 insertions(+), 44 deletions(-) diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index 9dd69a31aa..603d4450d9 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -105,11 +105,11 @@ void nano::json_handler::process_request (bool unsafe_a) { mnano_to_raw (nano::kxrb_ratio); } - else if (action == "nano_from_raw" || action == "rai_from_raw") + else if (action == "rai_from_raw") { mnano_from_raw (nano::xrb_ratio); } - else if (action == "nano_to_raw" || action == "rai_to_raw") + else if (action == "rai_to_raw") { mnano_to_raw (nano::xrb_ratio); } @@ -121,6 +121,14 @@ void nano::json_handler::process_request (bool unsafe_a) { mnano_to_raw (); } + else if (action == "nano_to_raw") + { + nano_to_raw (); + } + else if (action == "raw_to_nano") + { + raw_to_nano (); + } else if (action == "password_valid") { password_valid (); @@ -2731,6 +2739,7 @@ void nano::json_handler::ledger () void nano::json_handler::mnano_from_raw (nano::uint128_t ratio) { auto amount (amount_impl ()); + response_l.put ("deprecated", "1"); if (!ec) { auto result (amount.number () / ratio); @@ -2742,6 +2751,7 @@ void nano::json_handler::mnano_from_raw (nano::uint128_t ratio) void nano::json_handler::mnano_to_raw (nano::uint128_t ratio) { auto amount (amount_impl ()); + response_l.put ("deprecated", "1"); if (!ec) { auto result (amount.number () * ratio); @@ -2757,6 +2767,35 @@ void nano::json_handler::mnano_to_raw (nano::uint128_t ratio) response_errors (); } +void nano::json_handler::nano_to_raw () +{ + auto amount (amount_impl ()); + if (!ec) + { + auto result (amount.number () * nano::Mxrb_ratio); + if (result > amount.number ()) + { + response_l.put ("amount", result.convert_to ()); + } + else + { + ec = nano::error_common::invalid_amount_big; + } + } + response_errors (); +} + +void nano::json_handler::raw_to_nano () +{ + auto amount (amount_impl ()); + if (!ec) + { + auto result (amount.number () / nano::Mxrb_ratio); + response_l.put ("amount", result.convert_to ()); + } + response_errors (); +} + /* * @warning This is an internal/diagnostic RPC, do not rely on its interface being stable */ diff --git a/nano/node/json_handler.hpp b/nano/node/json_handler.hpp index 67c6380110..eb743d4b56 100644 --- a/nano/node/json_handler.hpp +++ b/nano/node/json_handler.hpp @@ -75,6 +75,8 @@ class json_handler : public std::enable_shared_from_this void ledger (); void mnano_to_raw (nano::uint128_t = nano::Mxrb_ratio); void mnano_from_raw (nano::uint128_t = nano::Mxrb_ratio); + void nano_to_raw (); + void raw_to_nano (); void node_id (); void node_id_delete (); void password_change (); diff --git a/nano/qt/qt.cpp b/nano/qt/qt.cpp index 8001322621..d0a91e87f9 100644 --- a/nano/qt/qt.cpp +++ b/nano/qt/qt.cpp @@ -1458,16 +1458,8 @@ void nano_qt::wallet::change_rendering_ratio (nano::uint128_t const & rendering_ std::string nano_qt::wallet::format_balance (nano::uint128_t const & balance) const { auto balance_str = nano::amount (balance).format_balance (rendering_ratio, 3, false); - auto unit = std::string ("NANO"); - if (rendering_ratio == nano::kxrb_ratio) - { - unit = std::string ("knano"); - } - else if (rendering_ratio == nano::xrb_ratio) - { - unit = std::string ("nano"); - } - else if (rendering_ratio == nano::raw_ratio) + auto unit = std::string ("nano"); + if (rendering_ratio == nano::raw_ratio) { unit = std::string ("raw"); } @@ -1751,8 +1743,6 @@ nano_qt::advanced_actions::advanced_actions (nano_qt::wallet & wallet_a) : scale_layout (new QHBoxLayout), scale_label (new QLabel ("Scale:")), ratio_group (new QButtonGroup), - mnano_unit (new QRadioButton ("Mnano")), - knano_unit (new QRadioButton ("knano")), nano_unit (new QRadioButton ("nano")), raw_unit (new QRadioButton ("raw")), back (new QPushButton ("Back")), @@ -1775,17 +1765,11 @@ nano_qt::advanced_actions::advanced_actions (nano_qt::wallet & wallet_a) : peers_back (new QPushButton ("Back")), wallet (wallet_a) { - ratio_group->addButton (mnano_unit); - ratio_group->addButton (knano_unit); ratio_group->addButton (nano_unit); ratio_group->addButton (raw_unit); - ratio_group->setId (mnano_unit, 0); - ratio_group->setId (knano_unit, 1); ratio_group->setId (nano_unit, 2); ratio_group->setId (raw_unit, 3); scale_layout->addWidget (scale_label); - scale_layout->addWidget (mnano_unit); - scale_layout->addWidget (knano_unit); scale_layout->addWidget (nano_unit); scale_layout->addWidget (raw_unit); scale_window->setLayout (scale_layout); @@ -1839,25 +1823,11 @@ nano_qt::advanced_actions::advanced_actions (nano_qt::wallet & wallet_a) : layout->addWidget (back); window->setLayout (layout); - QObject::connect (mnano_unit, &QRadioButton::toggled, [this] () { - if (mnano_unit->isChecked ()) - { - QSettings ().setValue (saved_ratio_key, ratio_group->id (mnano_unit)); - this->wallet.change_rendering_ratio (nano::Mxrb_ratio); - } - }); - QObject::connect (knano_unit, &QRadioButton::toggled, [this] () { - if (knano_unit->isChecked ()) - { - QSettings ().setValue (saved_ratio_key, ratio_group->id (knano_unit)); - this->wallet.change_rendering_ratio (nano::kxrb_ratio); - } - }); QObject::connect (nano_unit, &QRadioButton::toggled, [this] () { if (nano_unit->isChecked ()) { QSettings ().setValue (saved_ratio_key, ratio_group->id (nano_unit)); - this->wallet.change_rendering_ratio (nano::xrb_ratio); + this->wallet.change_rendering_ratio (nano::Mxrb_ratio); } }); QObject::connect (raw_unit, &QRadioButton::toggled, [this] () { @@ -1867,17 +1837,23 @@ nano_qt::advanced_actions::advanced_actions (nano_qt::wallet & wallet_a) : this->wallet.change_rendering_ratio (nano::raw_ratio); } }); - auto selected_ratio_id (QSettings ().value (saved_ratio_key, ratio_group->id (mnano_unit)).toInt ()); + auto selected_ratio_id (QSettings ().value (saved_ratio_key, ratio_group->id (nano_unit)).toInt ()); auto selected_ratio_button = ratio_group->button (selected_ratio_id); debug_assert (selected_ratio_button != nullptr); + // Make sure value is not out of bounds + if (selected_ratio_id < 0 || selected_ratio_id > 1) + { + QSettings ().setValue (saved_ratio_key, 0); + selected_ratio_id = 0; + } if (selected_ratio_button) { selected_ratio_button->click (); } else { - mnano_unit->click (); + nano_unit->click (); } QObject::connect (wallet_refresh, &QPushButton::released, [this] () { this->wallet.accounts.refresh (); diff --git a/nano/qt/qt.hpp b/nano/qt/qt.hpp index 4147dbc95d..fd94052bbd 100644 --- a/nano/qt/qt.hpp +++ b/nano/qt/qt.hpp @@ -66,8 +66,6 @@ class advanced_actions QHBoxLayout * scale_layout; QLabel * scale_label; QButtonGroup * ratio_group; - QRadioButton * mnano_unit; - QRadioButton * knano_unit; QRadioButton * nano_unit; QRadioButton * raw_unit; QPushButton * back; diff --git a/nano/qt_test/qt.cpp b/nano/qt_test/qt.cpp index 4b26d8a532..2e75bacac7 100644 --- a/nano/qt_test/qt.cpp +++ b/nano/qt_test/qt.cpp @@ -104,7 +104,7 @@ TEST (wallet, startup_balance) wallet->needs_balance_refresh = true; wallet->start (); wallet->application.processEvents (QEventLoop::AllEvents); - ASSERT_EQ ("Balance: 0 NANO", wallet->self.balance_label->text ().toStdString ()); + ASSERT_EQ ("Balance: 0 nano", wallet->self.balance_label->text ().toStdString ()); } TEST (wallet, select_account) diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index c15820a5df..ae0dc837dc 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -2465,17 +2465,17 @@ TEST (rpc, nano_to_raw) request1.put ("action", "nano_to_raw"); request1.put ("amount", "1"); auto response1 (wait_response (system, rpc, request1)); - ASSERT_EQ (nano::xrb_ratio.convert_to (), response1.get ("amount")); + ASSERT_EQ (nano::Mxrb_ratio.convert_to (), response1.get ("amount")); } -TEST (rpc, nano_from_raw) +TEST (rpc, raw_to_nano) { nano::system system; auto node1 = add_ipc_enabled_node (system); auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request1; - request1.put ("action", "nano_from_raw"); - request1.put ("amount", nano::xrb_ratio.convert_to ()); + request1.put ("action", "raw_to_nano"); + request1.put ("amount", nano::Mxrb_ratio.convert_to ()); auto response1 (wait_response (system, rpc, request1)); ASSERT_EQ ("1", response1.get ("amount")); } From e3563a95db40e499cc4381b91eef78b15f89113b Mon Sep 17 00:00:00 2001 From: clemahieu Date: Tue, 27 Jul 2021 10:06:34 +0100 Subject: [PATCH 113/346] Passing nano::ledger_constants in to nano::ledger rather than it being statically initialized. (#3402) --- nano/core_test/block_store.cpp | 20 +-- nano/core_test/confirmation_height.cpp | 10 +- nano/core_test/ledger.cpp | 200 ++++++++++++------------- nano/core_test/processor_service.cpp | 4 +- nano/node/blockprocessor.cpp | 2 +- nano/node/node.cpp | 4 +- nano/qt_test/qt.cpp | 4 +- nano/secure/ledger.cpp | 31 ++-- nano/secure/ledger.hpp | 4 +- nano/slow_test/node.cpp | 4 +- 10 files changed, 142 insertions(+), 141 deletions(-) diff --git a/nano/core_test/block_store.cpp b/nano/core_test/block_store.cpp index 85d1ad7050..544e1de1b3 100644 --- a/nano/core_test/block_store.cpp +++ b/nano/core_test/block_store.cpp @@ -663,7 +663,7 @@ TEST (mdb_block_store, supported_version_upgrades) { nano::mdb_store store (logger, path); nano::stat stats; - nano::ledger ledger (store, stats); + nano::ledger ledger (store, stats, nano::dev::constants); auto transaction (store.tx_begin_write ()); store.initialize (transaction, ledger.cache); // Lower the database to the max version unsupported for upgrades @@ -681,7 +681,7 @@ TEST (mdb_block_store, supported_version_upgrades) { nano::mdb_store store (logger, path1); nano::stat stats; - nano::ledger ledger (store, stats); + nano::ledger ledger (store, stats, nano::dev::constants); auto transaction (store.tx_begin_write ()); store.initialize (transaction, ledger.cache); // Lower the database version to the minimum version supported for upgrade. @@ -1003,7 +1003,7 @@ TEST (mdb_block_store, sideband_height) nano::mdb_store store (logger, nano::unique_path ()); ASSERT_FALSE (store.init_error ()); nano::stat stat; - nano::ledger ledger (store, stat); + nano::ledger ledger (store, stat, nano::dev::constants); auto transaction (store.tx_begin_write ()); store.initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -1271,7 +1271,7 @@ TEST (mdb_block_store, upgrade_v14_v15) nano::logger_mt logger; nano::mdb_store store (logger, path); nano::stat stats; - nano::ledger ledger (store, stats); + nano::ledger ledger (store, stats, nano::dev::constants); auto transaction (store.tx_begin_write ()); store.initialize (transaction, ledger.cache); nano::account_info account_info; @@ -1378,7 +1378,7 @@ TEST (mdb_block_store, upgrade_v15_v16) nano::logger_mt logger; nano::mdb_store store (logger, path); nano::stat stats; - nano::ledger ledger (store, stats); + nano::ledger ledger (store, stats, nano::dev::constants); auto transaction (store.tx_begin_write ()); store.initialize (transaction, ledger.cache); // The representation table should get removed after, so readd it so that we can later confirm this actually happens @@ -1429,7 +1429,7 @@ TEST (mdb_block_store, upgrade_v16_v17) nano::logger_mt logger; nano::mdb_store store (logger, path); nano::stat stats; - nano::ledger ledger (store, stats); + nano::ledger ledger (store, stats, nano::dev::constants); auto transaction (store.tx_begin_write ()); store.initialize (transaction, ledger.cache); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block1).code); @@ -1502,7 +1502,7 @@ TEST (mdb_block_store, upgrade_v17_v18) nano::mdb_store store (logger, path); auto transaction (store.tx_begin_write ()); nano::stat stats; - nano::ledger ledger (store, stats); + nano::ledger ledger (store, stats, nano::dev::constants); store.initialize (transaction, ledger.cache); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send_zero).code); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, state_receive_zero).code); @@ -1697,7 +1697,7 @@ TEST (mdb_block_store, upgrade_v18_v19) nano::logger_mt logger; nano::mdb_store store (logger, path); nano::stat stats; - nano::ledger ledger (store, stats); + nano::ledger ledger (store, stats, nano::dev::constants); auto transaction (store.tx_begin_write ()); store.initialize (transaction, ledger.cache); @@ -1779,7 +1779,7 @@ TEST (mdb_block_store, upgrade_v19_v20) nano::stat stats; { nano::mdb_store store (logger, path); - nano::ledger ledger (store, stats); + nano::ledger ledger (store, stats, nano::dev::constants); auto transaction (store.tx_begin_write ()); store.initialize (transaction, ledger.cache); // Delete pruned table @@ -1808,7 +1808,7 @@ TEST (mdb_block_store, upgrade_v20_v21) nano::stat stats; { nano::mdb_store store (logger, path); - nano::ledger ledger (store, stats); + nano::ledger ledger (store, stats, nano::dev::constants); auto transaction (store.tx_begin_write ()); store.initialize (transaction, ledger.cache); // Delete pruned table diff --git a/nano/core_test/confirmation_height.cpp b/nano/core_test/confirmation_height.cpp index 8477919188..356f812025 100644 --- a/nano/core_test/confirmation_height.cpp +++ b/nano/core_test/confirmation_height.cpp @@ -721,7 +721,7 @@ TEST (confirmation_heightDeathTest, rollback_added_block) auto store = nano::make_store (logger, path); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); nano::write_database_queue write_database_queue (false); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; @@ -797,7 +797,7 @@ TEST (confirmation_heightDeathTest, modified_chain) auto store = nano::make_store (logger, path); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); nano::write_database_queue write_database_queue (false); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; @@ -867,7 +867,7 @@ TEST (confirmation_heightDeathTest, modified_chain_account_removed) auto store = nano::make_store (logger, path); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); nano::write_database_queue write_database_queue (false); nano::work_pool pool (std::numeric_limits::max ()); nano::keypair key1; @@ -1359,7 +1359,7 @@ TEST (confirmation_height, unbounded_block_cache_iteration) auto store = nano::make_store (logger, path); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); nano::write_database_queue write_database_queue (false); boost::latch initialized_latch{ 0 }; nano::work_pool pool (std::numeric_limits::max ()); @@ -1409,7 +1409,7 @@ TEST (confirmation_height, pruned_source) auto store = nano::make_store (logger, path); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); ledger.pruning = true; nano::write_database_queue write_database_queue (false); nano::work_pool pool (std::numeric_limits::max ()); diff --git a/nano/core_test/ledger.cpp b/nano/core_test/ledger.cpp index 7a03c408e1..ce45a8614d 100644 --- a/nano/core_test/ledger.cpp +++ b/nano/core_test/ledger.cpp @@ -21,7 +21,7 @@ TEST (ledger, store_error) nano::mdb_store store (logger, boost::filesystem::path ("///")); ASSERT_TRUE (store.init_error ()); nano::stat stats; - nano::ledger ledger (store, stats); + nano::ledger ledger (store, stats, nano::dev::constants); } // Ledger can be initialized and returns a basic query for an empty account @@ -31,7 +31,7 @@ TEST (ledger, empty) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); nano::account account; auto transaction (store->tx_begin_read ()); auto balance (ledger.account_balance (transaction, account)); @@ -45,7 +45,7 @@ TEST (ledger, genesis_balance) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); auto balance (ledger.account_balance (transaction, nano::dev::genesis->account ())); @@ -71,7 +71,7 @@ TEST (ledger, process_modifies_sideband) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); store->initialize (store->tx_begin_write (), ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); @@ -86,7 +86,7 @@ TEST (ledger, process_send) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -185,7 +185,7 @@ TEST (ledger, process_receive) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -248,7 +248,7 @@ TEST (ledger, rollback_receiver) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -287,7 +287,7 @@ TEST (ledger, rollback_representation) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -340,7 +340,7 @@ TEST (ledger, receive_rollback) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -357,7 +357,7 @@ TEST (ledger, process_duplicate) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -379,7 +379,7 @@ TEST (ledger, representative_genesis) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); auto latest (ledger.latest (transaction, nano::dev::genesis_key.pub)); @@ -393,7 +393,7 @@ TEST (ledger, weight) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); ASSERT_EQ (nano::dev::constants.genesis_amount, ledger.weight (nano::dev::genesis->account ())); @@ -405,7 +405,7 @@ TEST (ledger, representative_change) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); nano::keypair key2; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); @@ -443,7 +443,7 @@ TEST (ledger, send_fork) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); nano::keypair key2; nano::keypair key3; auto transaction (store->tx_begin_write ()); @@ -463,7 +463,7 @@ TEST (ledger, receive_fork) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); nano::keypair key2; nano::keypair key3; auto transaction (store->tx_begin_write ()); @@ -489,7 +489,7 @@ TEST (ledger, open_fork) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); nano::keypair key2; nano::keypair key3; auto transaction (store->tx_begin_write ()); @@ -522,7 +522,7 @@ TEST (ledger, representation) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto & rep_weights = ledger.cache.rep_weights; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); @@ -596,7 +596,7 @@ TEST (ledger, double_open) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -615,7 +615,7 @@ TEST (ledger, double_receive) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -893,7 +893,7 @@ TEST (ledger, fail_change_old) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_FALSE (store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -911,7 +911,7 @@ TEST (ledger, fail_change_gap_previous) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_FALSE (store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -927,7 +927,7 @@ TEST (ledger, fail_change_bad_signature) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_FALSE (store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -943,7 +943,7 @@ TEST (ledger, fail_change_fork) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_FALSE (store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -963,7 +963,7 @@ TEST (ledger, fail_send_old) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_FALSE (store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -981,7 +981,7 @@ TEST (ledger, fail_send_gap_previous) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_FALSE (store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -997,7 +997,7 @@ TEST (ledger, fail_send_bad_signature) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_FALSE (store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -1013,7 +1013,7 @@ TEST (ledger, fail_send_negative_spend) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_FALSE (store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -1031,7 +1031,7 @@ TEST (ledger, fail_send_fork) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_FALSE (store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -1049,7 +1049,7 @@ TEST (ledger, fail_open_old) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_FALSE (store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -1067,7 +1067,7 @@ TEST (ledger, fail_open_gap_source) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_FALSE (store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -1083,7 +1083,7 @@ TEST (ledger, fail_open_bad_signature) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_FALSE (store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -1101,7 +1101,7 @@ TEST (ledger, fail_open_fork_previous) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_FALSE (store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -1123,7 +1123,7 @@ TEST (ledger, fail_open_account_mismatch) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_FALSE (store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -1142,7 +1142,7 @@ TEST (ledger, fail_receive_old) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_FALSE (store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -1164,7 +1164,7 @@ TEST (ledger, fail_receive_gap_source) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_FALSE (store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -1189,7 +1189,7 @@ TEST (ledger, fail_receive_overreceive) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_FALSE (store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -1211,7 +1211,7 @@ TEST (ledger, fail_receive_bad_signature) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_FALSE (store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -1236,7 +1236,7 @@ TEST (ledger, fail_receive_gap_previous_opened) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_FALSE (store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -1261,7 +1261,7 @@ TEST (ledger, fail_receive_gap_previous_unopened) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_FALSE (store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -1283,7 +1283,7 @@ TEST (ledger, fail_receive_fork_previous) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_FALSE (store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -1312,7 +1312,7 @@ TEST (ledger, fail_receive_received_source) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_FALSE (store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -1347,7 +1347,7 @@ TEST (ledger, latest_empty) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_FALSE (store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); nano::keypair key; auto transaction (store->tx_begin_read ()); auto latest (ledger.latest (transaction, key.pub)); @@ -1360,7 +1360,7 @@ TEST (ledger, latest_root) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_FALSE (store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -1378,7 +1378,7 @@ TEST (ledger, change_representative_move_representation) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); nano::keypair key1; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); @@ -1402,7 +1402,7 @@ TEST (ledger, send_open_receive_rollback) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -1460,7 +1460,7 @@ TEST (ledger, bootstrap_rep_weight) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); nano::account_info info1; nano::keypair key2; nano::work_pool pool (std::numeric_limits::max ()); @@ -1496,7 +1496,7 @@ TEST (ledger, block_destination_source) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -1541,7 +1541,7 @@ TEST (ledger, state_account) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -1556,7 +1556,7 @@ TEST (ledger, state_send_receive) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -1597,7 +1597,7 @@ TEST (ledger, state_receive) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -1631,7 +1631,7 @@ TEST (ledger, state_rep_change) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -1658,7 +1658,7 @@ TEST (ledger, state_open) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -1697,7 +1697,7 @@ TEST (ledger, send_after_state_fail) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -1714,7 +1714,7 @@ TEST (ledger, receive_after_state_fail) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -1731,7 +1731,7 @@ TEST (ledger, change_after_state_fail) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -1748,7 +1748,7 @@ TEST (ledger, state_unreceivable_fail) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -1771,7 +1771,7 @@ TEST (ledger, state_receive_bad_amount_fail) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -1794,7 +1794,7 @@ TEST (ledger, state_no_link_amount_fail) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -1811,7 +1811,7 @@ TEST (ledger, state_receive_wrong_account_fail) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -1835,7 +1835,7 @@ TEST (ledger, state_open_state_fork) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -1855,7 +1855,7 @@ TEST (ledger, state_state_open_fork) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -1876,7 +1876,7 @@ TEST (ledger, state_open_previous_fail) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -1893,7 +1893,7 @@ TEST (ledger, state_open_source_fail) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -1910,7 +1910,7 @@ TEST (ledger, state_send_change) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -1937,7 +1937,7 @@ TEST (ledger, state_receive_change) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -1973,7 +1973,7 @@ TEST (ledger, state_open_old) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -1993,7 +1993,7 @@ TEST (ledger, state_receive_old) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -2017,7 +2017,7 @@ TEST (ledger, state_rollback_send) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -2048,7 +2048,7 @@ TEST (ledger, state_rollback_receive) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -2074,7 +2074,7 @@ TEST (ledger, state_rollback_received_send) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -2101,7 +2101,7 @@ TEST (ledger, state_rep_change_rollback) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -2121,7 +2121,7 @@ TEST (ledger, state_open_rollback) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -2147,7 +2147,7 @@ TEST (ledger, state_send_change_rollback) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -2168,7 +2168,7 @@ TEST (ledger, state_receive_change_rollback) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -2191,7 +2191,7 @@ TEST (ledger, epoch_blocks_v1_general) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -2261,7 +2261,7 @@ TEST (ledger, epoch_blocks_v2_general) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -2326,7 +2326,7 @@ TEST (ledger, epoch_blocks_receive_upgrade) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -2406,7 +2406,7 @@ TEST (ledger, epoch_blocks_fork) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -2587,7 +2587,7 @@ TEST (ledger, could_fit) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -2823,7 +2823,7 @@ TEST (ledger, confirmation_height_not_updated) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -2884,7 +2884,7 @@ TEST (ledger, work_validation) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); store->initialize (store->tx_begin_write (), ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::block_builder builder; @@ -2977,7 +2977,7 @@ TEST (ledger, dependents_confirmed) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_FALSE (store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); ASSERT_TRUE (ledger.dependents_confirmed (transaction, *nano::dev::genesis)); @@ -3049,7 +3049,7 @@ TEST (ledger, dependents_confirmed_pruning) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_FALSE (store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); ledger.pruning = true; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); @@ -3100,7 +3100,7 @@ TEST (ledger, block_confirmed) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_FALSE (store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); ASSERT_TRUE (ledger.block_confirmed (transaction, nano::dev::genesis->hash ())); @@ -3132,7 +3132,7 @@ TEST (ledger, cache) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); store->initialize (store->tx_begin_write (), ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); nano::block_builder builder; @@ -3184,7 +3184,7 @@ TEST (ledger, cache) ++block_count; --genesis_weight; cache_check (ledger.cache); - cache_check (nano::ledger (*store, stats).cache); + cache_check (nano::ledger (*store, stats, nano::dev::constants).cache); { auto transaction (store->tx_begin_write ()); @@ -3194,7 +3194,7 @@ TEST (ledger, cache) ++block_count; ++account_count; cache_check (ledger.cache); - cache_check (nano::ledger (*store, stats).cache); + cache_check (nano::ledger (*store, stats, nano::dev::constants).cache); { auto transaction (store->tx_begin_write ()); @@ -3209,7 +3209,7 @@ TEST (ledger, cache) ++cemented_count; cache_check (ledger.cache); - cache_check (nano::ledger (*store, stats).cache); + cache_check (nano::ledger (*store, stats, nano::dev::constants).cache); { auto transaction (store->tx_begin_write ()); @@ -3224,7 +3224,7 @@ TEST (ledger, cache) ++cemented_count; cache_check (ledger.cache); - cache_check (nano::ledger (*store, stats).cache); + cache_check (nano::ledger (*store, stats, nano::dev::constants).cache); { auto transaction (store->tx_begin_write ()); @@ -3233,7 +3233,7 @@ TEST (ledger, cache) } ++pruned_count; cache_check (ledger.cache); - cache_check (nano::ledger (*store, stats).cache); + cache_check (nano::ledger (*store, stats, nano::dev::constants).cache); } } @@ -3243,7 +3243,7 @@ TEST (ledger, pruning_action) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); ledger.pruning = true; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); @@ -3299,7 +3299,7 @@ TEST (ledger, pruning_large_chain) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); ledger.pruning = true; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); @@ -3335,7 +3335,7 @@ TEST (ledger, pruning_source_rollback) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); ledger.pruning = true; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); @@ -3386,7 +3386,7 @@ TEST (ledger, pruning_source_rollback_legacy) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); ledger.pruning = true; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); @@ -3464,7 +3464,7 @@ TEST (ledger, pruning_process_error) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); ledger.pruning = true; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); @@ -3492,7 +3492,7 @@ TEST (ledger, pruning_legacy_blocks) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); ledger.pruning = true; nano::keypair key1; auto transaction (store->tx_begin_write ()); @@ -3537,7 +3537,7 @@ TEST (ledger, pruning_safe_functions) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); ledger.pruning = true; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); @@ -3579,7 +3579,7 @@ TEST (ledger, hash_root_random) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); ledger.pruning = true; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); @@ -3624,7 +3624,7 @@ TEST (ledger, migrate_lmdb_to_rocksdb) uint16_t port = 100; nano::mdb_store store (logger, path / "data.ldb"); nano::stat stats; - nano::ledger ledger (store, stats); + nano::ledger ledger (store, stats, nano::dev::constants); nano::work_pool pool (std::numeric_limits::max ()); auto send = nano::state_block_builder () @@ -3703,7 +3703,7 @@ TEST (ledger, unconfirmed_frontiers) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); store->initialize (store->tx_begin_write (), ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); diff --git a/nano/core_test/processor_service.cpp b/nano/core_test/processor_service.cpp index aa5b98d6a7..54a6fc52b6 100644 --- a/nano/core_test/processor_service.cpp +++ b/nano/core_test/processor_service.cpp @@ -13,7 +13,7 @@ TEST (processor_service, bad_send_signature) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_FALSE (store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -31,7 +31,7 @@ TEST (processor_service, bad_receive_signature) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_FALSE (store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); diff --git a/nano/node/blockprocessor.cpp b/nano/node/blockprocessor.cpp index 4fb0d03086..666df9dfea 100644 --- a/nano/node/blockprocessor.cpp +++ b/nano/node/blockprocessor.cpp @@ -29,7 +29,7 @@ nano::block_processor::block_processor (nano::node & node_a, nano::write_databas next_log (std::chrono::steady_clock::now ()), node (node_a), write_database_queue (write_database_queue_a), - state_block_signature_verification (node.checker, node.ledger.network_params.ledger.epochs, node.config, node.logger, node.flags.block_processor_verification_size) + state_block_signature_verification (node.checker, node.ledger.constants.epochs, node.config, node.logger, node.flags.block_processor_verification_size) { state_block_signature_verification.blocks_verified_callback = [this] (std::deque & items, std::vector const & verifications, std::vector const & hashes, std::vector const & blocks_signatures) { this->process_verified_state_blocks (items, verifications, hashes, blocks_signatures); diff --git a/nano/node/node.cpp b/nano/node/node.cpp index 1086cba480..759c0220a0 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -100,7 +100,7 @@ nano::node::node (boost::asio::io_context & io_ctx_a, boost::filesystem::path co wallets_store_impl (std::make_unique (application_path_a / "wallets.ldb", config_a.lmdb_config)), wallets_store (*wallets_store_impl), gap_cache (*this), - ledger (store, stats, flags_a.generate_cache), + ledger (store, stats, network_params.ledger, flags_a.generate_cache), checker (config.signature_checker_threads), network (*this, config.peering_port), telemetry (std::make_shared (network, workers, observers.telemetry, stats, network_params, flags.disable_ongoing_telemetry_requests)), @@ -1318,7 +1318,7 @@ void nano::node::process_confirmed_data (nano::transaction const & transaction_a bool error (false); auto previous_balance (ledger.balance_safe (transaction_a, previous, error)); auto block_balance (store.block.balance_calculated (block_a)); - if (hash_a != ledger.network_params.ledger.genesis->account ()) + if (hash_a != ledger.constants.genesis->account ()) { if (!error) { diff --git a/nano/qt_test/qt.cpp b/nano/qt_test/qt.cpp index 2e75bacac7..8763f59213 100644 --- a/nano/qt_test/qt.cpp +++ b/nano/qt_test/qt.cpp @@ -516,7 +516,7 @@ TEST (history, short_text) auto store = nano::make_store (system.nodes[0]->logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::genesis genesis; - nano::ledger ledger (*store, system.nodes[0]->stats); + nano::ledger ledger (*store, system.nodes[0]->stats, nano::dev::constants); { auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); @@ -554,7 +554,7 @@ TEST (history, pruned_source) auto store = nano::make_store (system.nodes[0]->logger, nano::unique_path ()); ASSERT_TRUE (!store->init_error ()); nano::genesis genesis; - nano::ledger ledger (*store, system.nodes[0]->stats); + nano::ledger ledger (*store, system.nodes[0]->stats, nano::dev::constants); ledger.pruning = true; nano::block_hash next_pruning; // Basic pruning for legacy blocks. Previous block is pruned, source is pruned diff --git a/nano/secure/ledger.cpp b/nano/secure/ledger.cpp index 90020bee0a..1c35dee883 100644 --- a/nano/secure/ledger.cpp +++ b/nano/secure/ledger.cpp @@ -436,7 +436,7 @@ void ledger_processor::epoch_block_impl (nano::state_block & block_a) } if (result.code == nano::process_result::progress) { - auto epoch = ledger.network_params.ledger.epochs.epoch (block_a.hashables.link); + auto epoch = ledger.constants.epochs.epoch (block_a.hashables.link); // Must be an epoch for an unopened account or the epoch upgrade must be sequential auto is_valid_epoch_upgrade = account_error ? static_cast> (epoch) > 0 : nano::epochs::is_sequential (info.epoch (), epoch); result.code = is_valid_epoch_upgrade ? nano::process_result::progress : nano::process_result::block_position; @@ -690,7 +690,7 @@ void ledger_processor::open_block (nano::open_block & block_a) result.code = ledger.store.pending.get (transaction, key, pending) ? nano::process_result::unreceivable : nano::process_result::progress; // Has this source already been received (Malformed) if (result.code == nano::process_result::progress) { - result.code = block_a.hashables.account == ledger.network_params.ledger.burn_account ? nano::process_result::opened_burn_account : nano::process_result::progress; // Is it burning 0 account? (Malicious) + result.code = block_a.hashables.account == ledger.constants.burn_account ? nano::process_result::opened_burn_account : nano::process_result::progress; // Is it burning 0 account? (Malicious) if (result.code == nano::process_result::progress) { result.code = pending.epoch == nano::epoch::epoch_0 ? nano::process_result::progress : nano::process_result::unreceivable; // Are we receiving a state-only send? (Malformed) @@ -736,10 +736,11 @@ ledger_processor::ledger_processor (nano::ledger & ledger_a, nano::write_transac } } // namespace -nano::ledger::ledger (nano::store & store_a, nano::stat & stat_a, nano::generate_cache const & generate_cache_a) : - store (store_a), - stats (stat_a), - check_bootstrap_weights (true) +nano::ledger::ledger (nano::store & store_a, nano::stat & stat_a, nano::ledger_constants & constants, nano::generate_cache const & generate_cache_a) : + constants{ constants }, + store{ store_a }, + stats{ stat_a }, + check_bootstrap_weights{ true } { if (!store.init_error ()) { @@ -787,9 +788,9 @@ void nano::ledger::initialize (nano::generate_cache const & generate_cache_a) // Final votes requirement for confirmation canary block nano::confirmation_height_info confirmation_height_info; - if (!store.confirmation_height.get (transaction, network_params.ledger.final_votes_canary_account, confirmation_height_info)) + if (!store.confirmation_height.get (transaction, constants.final_votes_canary_account, confirmation_height_info)) { - cache.final_votes_confirmation_canary = (confirmation_height_info.height >= network_params.ledger.final_votes_canary_height); + cache.final_votes_confirmation_canary = (confirmation_height_info.height >= constants.final_votes_canary_height); } } @@ -862,7 +863,7 @@ nano::uint128_t nano::ledger::account_pending (nano::transaction const & transac nano::process_return nano::ledger::process (nano::write_transaction const & transaction_a, nano::block & block_a, nano::signature_verification verification) { - debug_assert (!nano::work_validate_entry (block_a) || network_params.network.is_dev_network ()); + debug_assert (!nano::work_validate_entry (block_a) || constants.genesis == nano::dev::genesis); ledger_processor processor (*this, transaction_a, verification); block_a.visit (processor); if (processor.result.code == nano::process_result::progress) @@ -1102,7 +1103,7 @@ nano::account nano::ledger::account_safe (nano::transaction const & transaction_ // Return amount decrease or increase for block nano::uint128_t nano::ledger::amount (nano::transaction const & transaction_a, nano::account const & account_a) { - release_assert (account_a == network_params.ledger.genesis->account ()); + release_assert (account_a == constants.genesis->account ()); return nano::dev::constants.genesis_amount; } @@ -1181,7 +1182,7 @@ bool nano::ledger::dependents_confirmed (nano::transaction const & transaction_a bool nano::ledger::is_epoch_link (nano::link const & link_a) const { - return network_params.ledger.epochs.is_epoch_link (link_a); + return constants.epochs.is_epoch_link (link_a); } class dependent_block_visitor : public nano::block_visitor @@ -1204,7 +1205,7 @@ class dependent_block_visitor : public nano::block_visitor } void open_block (nano::open_block const & block_a) override { - if (block_a.source () != ledger.network_params.ledger.genesis->account ()) + if (block_a.source () != ledger.constants.genesis->account ()) { result[0] = block_a.source (); } @@ -1237,12 +1238,12 @@ std::array nano::ledger::dependent_blocks (nano::transactio nano::account const & nano::ledger::epoch_signer (nano::link const & link_a) const { - return network_params.ledger.epochs.signer (network_params.ledger.epochs.epoch (link_a)); + return constants.epochs.signer (constants.epochs.epoch (link_a)); } nano::link const & nano::ledger::epoch_link (nano::epoch epoch_a) const { - return network_params.ledger.epochs.link (epoch_a); + return constants.epochs.link (epoch_a); } void nano::ledger::update_account (nano::write_transaction const & transaction_a, nano::account const & account_a, nano::account_info const & old_a, nano::account_info const & new_a) @@ -1342,7 +1343,7 @@ uint64_t nano::ledger::pruning_action (nano::write_transaction & transaction_a, { uint64_t pruned_count (0); nano::block_hash hash (hash_a); - while (!hash.is_zero () && hash != network_params.ledger.genesis->hash ()) + while (!hash.is_zero () && hash != constants.genesis->hash ()) { auto block (store.block.get (transaction_a, hash)); if (block != nullptr) diff --git a/nano/secure/ledger.hpp b/nano/secure/ledger.hpp index 21b092f633..a27ee1be97 100644 --- a/nano/secure/ledger.hpp +++ b/nano/secure/ledger.hpp @@ -26,7 +26,7 @@ class uncemented_info class ledger final { public: - ledger (nano::store &, nano::stat &, nano::generate_cache const & = nano::generate_cache ()); + ledger (nano::store &, nano::stat &, nano::ledger_constants & constants, nano::generate_cache const & = nano::generate_cache ()); nano::account account (nano::transaction const &, nano::block_hash const &) const; nano::account account_safe (nano::transaction const &, nano::block_hash const &, bool &) const; nano::uint128_t amount (nano::transaction const &, nano::account const &); @@ -68,7 +68,7 @@ class ledger final std::multimap> unconfirmed_frontiers () const; bool migrate_lmdb_to_rocksdb (boost::filesystem::path const &) const; static nano::uint128_t const unit; - nano::network_params network_params; + nano::ledger_constants & constants; nano::store & store; nano::ledger_cache cache; nano::stat & stats; diff --git a/nano/slow_test/node.cpp b/nano/slow_test/node.cpp index 8cec18da75..6758e977ca 100644 --- a/nano/slow_test/node.cpp +++ b/nano/slow_test/node.cpp @@ -94,7 +94,7 @@ TEST (ledger, deep_account_compute) auto store = nano::make_store (logger, nano::unique_path ()); ASSERT_FALSE (store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); nano::work_pool pool (std::numeric_limits::max ()); @@ -966,7 +966,7 @@ TEST (confirmation_height, many_accounts_send_receive_self_no_elections) auto store = nano::make_store (logger, path); ASSERT_TRUE (!store->init_error ()); nano::stat stats; - nano::ledger ledger (*store, stats); + nano::ledger ledger (*store, stats, nano::dev::constants); nano::write_database_queue write_database_queue (false); nano::work_pool pool (std::numeric_limits::max ()); std::atomic stopped{ false }; From 3e7a53192aacea0fb90a306bf6561dd4cf9970e2 Mon Sep 17 00:00:00 2001 From: Zach Hyatt Date: Wed, 28 Jul 2021 17:16:35 -0500 Subject: [PATCH 114/346] Fix typo on CLI online_weight_clear success message (#3405) --- nano/node/cli.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nano/node/cli.cpp b/nano/node/cli.cpp index e72153fd2c..5c891ecee8 100644 --- a/nano/node/cli.cpp +++ b/nano/node/cli.cpp @@ -528,7 +528,7 @@ std::error_code nano::handle_node_options (boost::program_options::variables_map { auto transaction (node.node->store.tx_begin_write ()); node.node->store.online_weight.clear (transaction); - std::cout << "Onine weight records are removed" << std::endl; + std::cout << "Online weight records are removed" << std::endl; } else { From 92781249075d22bed8bbccdf2c901205fa39c36b Mon Sep 17 00:00:00 2001 From: clemahieu Date: Thu, 29 Jul 2021 01:10:53 +0100 Subject: [PATCH 115/346] Changing nano::block_store_partial to hold nano::ledger_constants by reference rather than statically instantiating it. More work on reducing dependency on static initialization. (#3403) --- nano/core_test/block_store.cpp | 140 +++++++++--------- nano/core_test/confirmation_height.cpp | 10 +- nano/core_test/ledger.cpp | 192 ++++++++++++------------- nano/core_test/node.cpp | 2 +- nano/core_test/processor_service.cpp | 4 +- nano/node/lmdb/lmdb.cpp | 5 +- nano/node/lmdb/lmdb.hpp | 2 +- nano/node/node.cpp | 8 +- nano/node/rocksdb/rocksdb.cpp | 6 +- nano/node/rocksdb/rocksdb.hpp | 3 +- nano/qt_test/qt.cpp | 4 +- nano/secure/ledger.cpp | 2 +- nano/secure/store.hpp | 2 +- nano/secure/store_partial.hpp | 20 +-- nano/slow_test/node.cpp | 8 +- 15 files changed, 207 insertions(+), 201 deletions(-) diff --git a/nano/core_test/block_store.cpp b/nano/core_test/block_store.cpp index 544e1de1b3..530a57c966 100644 --- a/nano/core_test/block_store.cpp +++ b/nano/core_test/block_store.cpp @@ -34,7 +34,7 @@ void write_block_w_sideband_v18 (nano::mdb_store & store_a, MDB_dbi database, na TEST (block_store, construction) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); } @@ -109,7 +109,7 @@ TEST (block_store, sideband_serialization) TEST (block_store, add_item) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::open_block block (0, 1, 0, nano::keypair ().prv, 0, 0); block.sideband_set ({}); @@ -132,7 +132,7 @@ TEST (block_store, add_item) TEST (block_store, clear_successor) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::open_block block1 (0, 1, 0, nano::keypair ().prv, 0, 0); block1.sideband_set ({}); @@ -164,7 +164,7 @@ TEST (block_store, clear_successor) TEST (block_store, add_nonempty_block) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::keypair key1; nano::open_block block (0, 1, 0, nano::keypair ().prv, 0, 0); @@ -183,7 +183,7 @@ TEST (block_store, add_nonempty_block) TEST (block_store, add_two_items) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::keypair key1; nano::open_block block (0, 1, 1, nano::keypair ().prv, 0, 0); @@ -214,7 +214,7 @@ TEST (block_store, add_two_items) TEST (block_store, add_receive) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::keypair key1; nano::keypair key2; @@ -236,7 +236,7 @@ TEST (block_store, add_receive) TEST (block_store, add_pending) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::keypair key1; nano::pending_key key2 (0, 0); @@ -254,7 +254,7 @@ TEST (block_store, add_pending) TEST (block_store, pending_iterator) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); auto transaction (store->tx_begin_write ()); ASSERT_EQ (store->pending.end (), store->pending.begin (transaction)); @@ -279,7 +279,7 @@ TEST (block_store, pending_iterator) TEST (block_store, pending_iterator_comparison) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; auto transaction (store->tx_begin_write ()); @@ -322,7 +322,7 @@ TEST (block_store, pending_iterator_comparison) TEST (block_store, genesis) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::ledger_cache ledger_cache; auto transaction (store->tx_begin_write ()); @@ -350,7 +350,7 @@ TEST (block_store, genesis) TEST (bootstrap, simple) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); auto block1 (std::make_shared (0, 1, 2, nano::keypair ().prv, 4, 5)); auto transaction (store->tx_begin_write ()); @@ -373,7 +373,7 @@ TEST (unchecked, multiple) return; } nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); auto block1 (std::make_shared (4, 1, 2, nano::keypair ().prv, 4, 5)); auto transaction (store->tx_begin_write ()); @@ -390,7 +390,7 @@ TEST (unchecked, multiple) TEST (unchecked, double_put) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); auto block1 (std::make_shared (4, 1, 2, nano::keypair ().prv, 4, 5)); auto transaction (store->tx_begin_write ()); @@ -405,7 +405,7 @@ TEST (unchecked, double_put) TEST (unchecked, multiple_get) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); auto block1 (std::make_shared (4, 1, 2, nano::keypair ().prv, 4, 5)); auto block2 (std::make_shared (3, 1, 2, nano::keypair ().prv, 4, 5)); @@ -456,7 +456,7 @@ TEST (unchecked, multiple_get) TEST (block_store, empty_accounts) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); auto transaction (store->tx_begin_read ()); auto begin (store->account.begin (transaction)); @@ -467,7 +467,7 @@ TEST (block_store, empty_accounts) TEST (block_store, one_block) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::open_block block1 (0, 1, 0, nano::keypair ().prv, 0, 0); block1.sideband_set ({}); @@ -479,7 +479,7 @@ TEST (block_store, one_block) TEST (block_store, empty_bootstrap) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); auto transaction (store->tx_begin_read ()); auto begin (store->unchecked.begin (transaction)); @@ -490,7 +490,7 @@ TEST (block_store, empty_bootstrap) TEST (block_store, one_bootstrap) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); auto block1 (std::make_shared (0, 1, 2, nano::keypair ().prv, 4, 5)); auto transaction (store->tx_begin_write ()); @@ -511,7 +511,7 @@ TEST (block_store, one_bootstrap) TEST (block_store, unchecked_begin_search) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::keypair key0; nano::send_block block1 (0, 1, 2, key0.prv, key0.pub, 3); @@ -521,7 +521,7 @@ TEST (block_store, unchecked_begin_search) TEST (block_store, frontier_retrieval) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::account account1 (0); nano::account_info info1 (0, 0, 0, 0, 0, 0, nano::epoch::epoch_0); @@ -536,7 +536,7 @@ TEST (block_store, frontier_retrieval) TEST (block_store, one_account) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::account account (0); nano::block_hash hash (0); @@ -563,7 +563,7 @@ TEST (block_store, one_account) TEST (block_store, two_block) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::open_block block1 (0, 1, 1, nano::keypair ().prv, 0, 0); block1.sideband_set ({}); @@ -586,7 +586,7 @@ TEST (block_store, two_block) TEST (block_store, two_account) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::account account1 (1); nano::block_hash hash1 (2); @@ -628,7 +628,7 @@ TEST (block_store, two_account) TEST (block_store, latest_find) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::account account1 (1); nano::block_hash hash1 (2); @@ -661,7 +661,7 @@ TEST (mdb_block_store, supported_version_upgrades) auto path (nano::unique_path ()); nano::logger_mt logger; { - nano::mdb_store store (logger, path); + nano::mdb_store store (logger, path, nano::dev::constants); nano::stat stats; nano::ledger ledger (store, stats, nano::dev::constants); auto transaction (store.tx_begin_write ()); @@ -672,14 +672,14 @@ TEST (mdb_block_store, supported_version_upgrades) // Upgrade should fail { - nano::mdb_store store (logger, path); + nano::mdb_store store (logger, path, nano::dev::constants); ASSERT_TRUE (store.init_error ()); } auto path1 (nano::unique_path ()); // Now try with the minimum version { - nano::mdb_store store (logger, path1); + nano::mdb_store store (logger, path1, nano::dev::constants); nano::stat stats; nano::ledger ledger (store, stats, nano::dev::constants); auto transaction (store.tx_begin_write ()); @@ -695,7 +695,7 @@ TEST (mdb_block_store, supported_version_upgrades) // Upgrade should work { - nano::mdb_store store (logger, path1); + nano::mdb_store store (logger, path1, nano::dev::constants); ASSERT_FALSE (store.init_error ()); } } @@ -708,7 +708,7 @@ TEST (mdb_block_store, bad_path) return; } nano::logger_mt logger; - nano::mdb_store store (logger, boost::filesystem::path ("///")); + nano::mdb_store store (logger, boost::filesystem::path ("///"), nano::dev::constants); ASSERT_TRUE (store.init_error ()); } @@ -721,14 +721,14 @@ TEST (block_store, DISABLED_already_open) // File can be shared file.open (path.string ().c_str ()); ASSERT_TRUE (file.is_open ()); nano::logger_mt logger; - auto store = nano::make_store (logger, path); + auto store = nano::make_store (logger, path, nano::dev::constants); ASSERT_TRUE (store->init_error ()); } TEST (block_store, roots) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::send_block send_block (0, 1, 2, nano::keypair ().prv, 4, 5); ASSERT_EQ (send_block.hashables.previous, send_block.root ()); @@ -743,7 +743,7 @@ TEST (block_store, roots) TEST (block_store, pending_exists) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::pending_key two (2, 0); nano::pending_info pending; @@ -756,7 +756,7 @@ TEST (block_store, pending_exists) TEST (block_store, latest_exists) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::account two (2); nano::account_info info; @@ -770,7 +770,7 @@ TEST (block_store, latest_exists) TEST (block_store, large_iteration) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); std::unordered_set accounts1; for (auto i (0); i < 1000; ++i) @@ -809,7 +809,7 @@ TEST (block_store, large_iteration) TEST (block_store, frontier) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); auto transaction (store->tx_begin_write ()); nano::block_hash hash (100); @@ -824,7 +824,7 @@ TEST (block_store, frontier) TEST (block_store, block_replace) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::send_block send1 (0, 0, 0, nano::keypair ().prv, 0, 1); send1.sideband_set ({}); @@ -841,7 +841,7 @@ TEST (block_store, block_replace) TEST (block_store, block_count) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); { auto transaction (store->tx_begin_write ()); @@ -858,7 +858,7 @@ TEST (block_store, block_count) TEST (block_store, account_count) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); { auto transaction (store->tx_begin_write ()); @@ -874,7 +874,7 @@ TEST (block_store, account_count) TEST (block_store, cemented_count_cache) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); auto transaction (store->tx_begin_write ()); nano::ledger_cache ledger_cache; @@ -885,7 +885,7 @@ TEST (block_store, cemented_count_cache) TEST (block_store, block_random) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); { nano::ledger_cache ledger_cache; auto transaction (store->tx_begin_write ()); @@ -900,7 +900,7 @@ TEST (block_store, block_random) TEST (block_store, pruned_random) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::open_block block (0, 1, 0, nano::keypair ().prv, 0, 0); block.sideband_set ({}); @@ -921,7 +921,7 @@ TEST (block_store, DISABLED_change_dupsort) // Unchecked is no longer dupsort ta { auto path (nano::unique_path ()); nano::logger_mt logger; - nano::mdb_store store (logger, path); + nano::mdb_store store (logger, path, nano::dev::constants); auto transaction (store.tx_begin_write ()); ASSERT_EQ (0, mdb_drop (store.env.tx (transaction), store.unchecked_handle, 1)); ASSERT_EQ (0, mdb_dbi_open (store.env.tx (transaction), "unchecked", MDB_CREATE, &store.unchecked_handle)); @@ -961,7 +961,7 @@ TEST (block_store, DISABLED_change_dupsort) // Unchecked is no longer dupsort ta TEST (block_store, state_block) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_FALSE (store->init_error ()); nano::keypair key1; nano::state_block block1 (1, nano::dev::genesis->hash (), 3, 4, 6, key1.prv, key1.pub, 7); @@ -1000,7 +1000,7 @@ TEST (mdb_block_store, sideband_height) nano::keypair key1; nano::keypair key2; nano::keypair key3; - nano::mdb_store store (logger, nano::unique_path ()); + nano::mdb_store store (logger, nano::unique_path (), nano::dev::constants); ASSERT_FALSE (store.init_error ()); nano::stat stat; nano::ledger ledger (store, stat, nano::dev::constants); @@ -1060,7 +1060,7 @@ TEST (mdb_block_store, sideband_height) TEST (block_store, peers) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::endpoint_key endpoint (boost::asio::ip::address_v6::any ().to_bytes (), 100); @@ -1158,7 +1158,7 @@ TEST (block_store, endpoint_key_byte_order) TEST (block_store, online_weight) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_FALSE (store->init_error ()); { auto transaction (store->tx_begin_write ()); @@ -1193,7 +1193,7 @@ TEST (block_store, online_weight) TEST (block_store, pruned_blocks) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::keypair key1; @@ -1269,7 +1269,7 @@ TEST (mdb_block_store, upgrade_v14_v15) nano::state_block state_send (nano::dev::genesis_key.pub, epoch.hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch.hash ())); { nano::logger_mt logger; - nano::mdb_store store (logger, path); + nano::mdb_store store (logger, path, nano::dev::constants); nano::stat stats; nano::ledger ledger (store, stats, nano::dev::constants); auto transaction (store.tx_begin_write ()); @@ -1323,7 +1323,7 @@ TEST (mdb_block_store, upgrade_v14_v15) // Now do the upgrade nano::logger_mt logger; - nano::mdb_store store (logger, path); + nano::mdb_store store (logger, path, nano::dev::constants); ASSERT_FALSE (store.init_error ()); auto transaction (store.tx_begin_read ()); @@ -1376,7 +1376,7 @@ TEST (mdb_block_store, upgrade_v15_v16) nano::mdb_val value; { nano::logger_mt logger; - nano::mdb_store store (logger, path); + nano::mdb_store store (logger, path, nano::dev::constants); nano::stat stats; nano::ledger ledger (store, stats, nano::dev::constants); auto transaction (store.tx_begin_write ()); @@ -1397,7 +1397,7 @@ TEST (mdb_block_store, upgrade_v15_v16) // Now do the upgrade nano::logger_mt logger; - nano::mdb_store store (logger, path); + nano::mdb_store store (logger, path, nano::dev::constants); ASSERT_FALSE (store.init_error ()); auto transaction (store.tx_begin_read ()); @@ -1427,7 +1427,7 @@ TEST (mdb_block_store, upgrade_v16_v17) nano::mdb_val value; { nano::logger_mt logger; - nano::mdb_store store (logger, path); + nano::mdb_store store (logger, path, nano::dev::constants); nano::stat stats; nano::ledger ledger (store, stats, nano::dev::constants); auto transaction (store.tx_begin_write ()); @@ -1450,7 +1450,7 @@ TEST (mdb_block_store, upgrade_v16_v17) // Now do the upgrade nano::logger_mt logger; - nano::mdb_store store (logger, path); + nano::mdb_store store (logger, path, nano::dev::constants); ASSERT_FALSE (store.init_error ()); auto transaction (store.tx_begin_read ()); @@ -1499,7 +1499,7 @@ TEST (mdb_block_store, upgrade_v17_v18) nano::state_block state_send_epoch_link (key2.pub, state_open.hash (), key2.pub, 0, network_params.ledger.epochs.link (nano::epoch::epoch_2), key2.prv, key2.pub, *pool.generate (state_open.hash ())); { nano::logger_mt logger; - nano::mdb_store store (logger, path); + nano::mdb_store store (logger, path, nano::dev::constants); auto transaction (store.tx_begin_write ()); nano::stat stats; nano::ledger ledger (store, stats, nano::dev::constants); @@ -1552,7 +1552,7 @@ TEST (mdb_block_store, upgrade_v17_v18) // Now do the upgrade nano::logger_mt logger; - nano::mdb_store store (logger, path); + nano::mdb_store store (logger, path, nano::dev::constants); ASSERT_FALSE (store.init_error ()); auto transaction (store.tx_begin_read ()); @@ -1695,7 +1695,7 @@ TEST (mdb_block_store, upgrade_v18_v19) { nano::logger_mt logger; - nano::mdb_store store (logger, path); + nano::mdb_store store (logger, path, nano::dev::constants); nano::stat stats; nano::ledger ledger (store, stats, nano::dev::constants); auto transaction (store.tx_begin_write ()); @@ -1730,7 +1730,7 @@ TEST (mdb_block_store, upgrade_v18_v19) // Now do the upgrade nano::logger_mt logger; - nano::mdb_store store (logger, path); + nano::mdb_store store (logger, path, nano::dev::constants); ASSERT_FALSE (store.init_error ()); auto transaction (store.tx_begin_read ()); @@ -1778,7 +1778,7 @@ TEST (mdb_block_store, upgrade_v19_v20) nano::logger_mt logger; nano::stat stats; { - nano::mdb_store store (logger, path); + nano::mdb_store store (logger, path, nano::dev::constants); nano::ledger ledger (store, stats, nano::dev::constants); auto transaction (store.tx_begin_write ()); store.initialize (transaction, ledger.cache); @@ -1787,7 +1787,7 @@ TEST (mdb_block_store, upgrade_v19_v20) store.version.put (transaction, 19); } // Upgrading should create the table - nano::mdb_store store (logger, path); + nano::mdb_store store (logger, path, nano::dev::constants); ASSERT_FALSE (store.init_error ()); ASSERT_NE (store.pruned_handle, 0); @@ -1807,7 +1807,7 @@ TEST (mdb_block_store, upgrade_v20_v21) nano::logger_mt logger; nano::stat stats; { - nano::mdb_store store (logger, path); + nano::mdb_store store (logger, path, nano::dev::constants); nano::ledger ledger (store, stats, nano::dev::constants); auto transaction (store.tx_begin_write ()); store.initialize (transaction, ledger.cache); @@ -1816,7 +1816,7 @@ TEST (mdb_block_store, upgrade_v20_v21) store.version.put (transaction, 20); } // Upgrading should create the table - nano::mdb_store store (logger, path); + nano::mdb_store store (logger, path, nano::dev::constants); ASSERT_FALSE (store.init_error ()); ASSERT_NE (store.final_votes_handle, 0); @@ -1850,7 +1850,7 @@ TEST (mdb_block_store, upgrade_backup) { nano::logger_mt logger; - nano::mdb_store store (logger, path); + nano::mdb_store store (logger, path, nano::dev::constants); auto transaction (store.tx_begin_write ()); store.version.put (transaction, 14); } @@ -1858,7 +1858,7 @@ TEST (mdb_block_store, upgrade_backup) // Now do the upgrade and confirm that backup is saved nano::logger_mt logger; - nano::mdb_store store (logger, path, nano::txn_tracking_config{}, std::chrono::seconds (5), nano::lmdb_config{}, true); + nano::mdb_store store (logger, path, nano::dev::constants, nano::txn_tracking_config{}, std::chrono::seconds (5), nano::lmdb_config{}, true); ASSERT_FALSE (store.init_error ()); auto transaction (store.tx_begin_read ()); ASSERT_LT (14, store.version.get (transaction)); @@ -1875,7 +1875,7 @@ TEST (block_store, confirmation_height) } auto path (nano::unique_path ()); nano::logger_mt logger; - auto store = nano::make_store (logger, path); + auto store = nano::make_store (logger, path, nano::dev::constants); nano::account account1 (0); nano::account account2 (1); @@ -1921,7 +1921,7 @@ TEST (block_store, final_vote) } auto path (nano::unique_path ()); nano::logger_mt logger; - auto store = nano::make_store (logger, path); + auto store = nano::make_store (logger, path, nano::dev::constants); { auto qualified_root = nano::dev::genesis->qualified_root (); @@ -1947,7 +1947,7 @@ TEST (block_store, incompatible_version) auto path (nano::unique_path ()); nano::logger_mt logger; { - auto store = nano::make_store (logger, path); + auto store = nano::make_store (logger, path, nano::dev::constants); ASSERT_FALSE (store->init_error ()); // Put version to an unreachable number so that it should always be incompatible @@ -1957,7 +1957,7 @@ TEST (block_store, incompatible_version) // Now try and read it, should give an error { - auto store = nano::make_store (logger, path, true); + auto store = nano::make_store (logger, path, nano::dev::constants, true); ASSERT_TRUE (store->init_error ()); auto transaction = store->tx_begin_read (); @@ -1969,7 +1969,7 @@ TEST (block_store, incompatible_version) TEST (block_store, reset_renew_existing_transaction) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::keypair key1; @@ -2006,7 +2006,7 @@ TEST (block_store, rocksdb_force_test_env_variable) constexpr auto env_var = "TEST_USE_ROCKSDB"; auto value = std::getenv (env_var); - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); auto mdb_cast = dynamic_cast (store.get ()); if (value && boost::lexical_cast (value) == 1) @@ -2026,7 +2026,7 @@ TEST (rocksdb_block_store, tombstone_count) if (nano::rocksdb_config::using_rocksdb_in_tests ()) { nano::logger_mt logger; - auto store = std::make_unique (logger, nano::unique_path ()); + auto store = std::make_unique (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); auto transaction = store->tx_begin_write (); auto block1 (std::make_shared (0, 1, 2, nano::keypair ().prv, 4, 5)); diff --git a/nano/core_test/confirmation_height.cpp b/nano/core_test/confirmation_height.cpp index 356f812025..a8d758e04d 100644 --- a/nano/core_test/confirmation_height.cpp +++ b/nano/core_test/confirmation_height.cpp @@ -718,7 +718,7 @@ TEST (confirmation_heightDeathTest, rollback_added_block) nano::logger_mt logger; nano::logging logging; auto path (nano::unique_path ()); - auto store = nano::make_store (logger, path); + auto store = nano::make_store (logger, path, nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -794,7 +794,7 @@ TEST (confirmation_heightDeathTest, modified_chain) nano::logging logging; nano::logger_mt logger; auto path (nano::unique_path ()); - auto store = nano::make_store (logger, path); + auto store = nano::make_store (logger, path, nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -864,7 +864,7 @@ TEST (confirmation_heightDeathTest, modified_chain_account_removed) nano::logging logging; nano::logger_mt logger; auto path (nano::unique_path ()); - auto store = nano::make_store (logger, path); + auto store = nano::make_store (logger, path, nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -1356,7 +1356,7 @@ TEST (confirmation_height, unbounded_block_cache_iteration) } nano::logger_mt logger; auto path (nano::unique_path ()); - auto store = nano::make_store (logger, path); + auto store = nano::make_store (logger, path, nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -1406,7 +1406,7 @@ TEST (confirmation_height, pruned_source) nano::logger_mt logger; nano::logging logging; auto path (nano::unique_path ()); - auto store = nano::make_store (logger, path); + auto store = nano::make_store (logger, path, nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); diff --git a/nano/core_test/ledger.cpp b/nano/core_test/ledger.cpp index ce45a8614d..829c444a44 100644 --- a/nano/core_test/ledger.cpp +++ b/nano/core_test/ledger.cpp @@ -18,7 +18,7 @@ TEST (ledger, store_error) return; } nano::logger_mt logger; - nano::mdb_store store (logger, boost::filesystem::path ("///")); + nano::mdb_store store (logger, boost::filesystem::path ("///"), nano::dev::constants); ASSERT_TRUE (store.init_error ()); nano::stat stats; nano::ledger ledger (store, stats, nano::dev::constants); @@ -28,7 +28,7 @@ TEST (ledger, store_error) TEST (ledger, empty) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -42,7 +42,7 @@ TEST (ledger, empty) TEST (ledger, genesis_balance) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -68,7 +68,7 @@ TEST (ledger, genesis_balance) TEST (ledger, process_modifies_sideband) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -83,7 +83,7 @@ TEST (ledger, process_modifies_sideband) TEST (ledger, process_send) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -182,7 +182,7 @@ TEST (ledger, process_send) TEST (ledger, process_receive) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -245,7 +245,7 @@ TEST (ledger, process_receive) TEST (ledger, rollback_receiver) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -284,7 +284,7 @@ TEST (ledger, rollback_receiver) TEST (ledger, rollback_representation) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -337,7 +337,7 @@ TEST (ledger, rollback_representation) TEST (ledger, receive_rollback) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -354,7 +354,7 @@ TEST (ledger, receive_rollback) TEST (ledger, process_duplicate) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -376,7 +376,7 @@ TEST (ledger, process_duplicate) TEST (ledger, representative_genesis) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -390,7 +390,7 @@ TEST (ledger, representative_genesis) TEST (ledger, weight) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -402,7 +402,7 @@ TEST (ledger, weight) TEST (ledger, representative_change) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -440,7 +440,7 @@ TEST (ledger, representative_change) TEST (ledger, send_fork) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -460,7 +460,7 @@ TEST (ledger, send_fork) TEST (ledger, receive_fork) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -486,7 +486,7 @@ TEST (ledger, receive_fork) TEST (ledger, open_fork) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -519,7 +519,7 @@ TEST (ledger, representation_changes) TEST (ledger, representation) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -593,7 +593,7 @@ TEST (ledger, representation) TEST (ledger, double_open) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -612,7 +612,7 @@ TEST (ledger, double_open) TEST (ledger, double_receive) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -890,7 +890,7 @@ TEST (ledger, successor) TEST (ledger, fail_change_old) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -908,7 +908,7 @@ TEST (ledger, fail_change_old) TEST (ledger, fail_change_gap_previous) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -924,7 +924,7 @@ TEST (ledger, fail_change_gap_previous) TEST (ledger, fail_change_bad_signature) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -940,7 +940,7 @@ TEST (ledger, fail_change_bad_signature) TEST (ledger, fail_change_fork) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -960,7 +960,7 @@ TEST (ledger, fail_change_fork) TEST (ledger, fail_send_old) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -978,7 +978,7 @@ TEST (ledger, fail_send_old) TEST (ledger, fail_send_gap_previous) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -994,7 +994,7 @@ TEST (ledger, fail_send_gap_previous) TEST (ledger, fail_send_bad_signature) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -1010,7 +1010,7 @@ TEST (ledger, fail_send_bad_signature) TEST (ledger, fail_send_negative_spend) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -1028,7 +1028,7 @@ TEST (ledger, fail_send_negative_spend) TEST (ledger, fail_send_fork) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -1046,7 +1046,7 @@ TEST (ledger, fail_send_fork) TEST (ledger, fail_open_old) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -1064,7 +1064,7 @@ TEST (ledger, fail_open_old) TEST (ledger, fail_open_gap_source) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -1080,7 +1080,7 @@ TEST (ledger, fail_open_gap_source) TEST (ledger, fail_open_bad_signature) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -1098,7 +1098,7 @@ TEST (ledger, fail_open_bad_signature) TEST (ledger, fail_open_fork_previous) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -1120,7 +1120,7 @@ TEST (ledger, fail_open_fork_previous) TEST (ledger, fail_open_account_mismatch) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -1139,7 +1139,7 @@ TEST (ledger, fail_open_account_mismatch) TEST (ledger, fail_receive_old) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -1161,7 +1161,7 @@ TEST (ledger, fail_receive_old) TEST (ledger, fail_receive_gap_source) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -1186,7 +1186,7 @@ TEST (ledger, fail_receive_gap_source) TEST (ledger, fail_receive_overreceive) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -1208,7 +1208,7 @@ TEST (ledger, fail_receive_overreceive) TEST (ledger, fail_receive_bad_signature) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -1233,7 +1233,7 @@ TEST (ledger, fail_receive_bad_signature) TEST (ledger, fail_receive_gap_previous_opened) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -1258,7 +1258,7 @@ TEST (ledger, fail_receive_gap_previous_opened) TEST (ledger, fail_receive_gap_previous_unopened) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -1280,7 +1280,7 @@ TEST (ledger, fail_receive_gap_previous_unopened) TEST (ledger, fail_receive_fork_previous) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -1309,7 +1309,7 @@ TEST (ledger, fail_receive_fork_previous) TEST (ledger, fail_receive_received_source) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -1344,7 +1344,7 @@ TEST (ledger, fail_receive_received_source) TEST (ledger, latest_empty) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -1357,7 +1357,7 @@ TEST (ledger, latest_empty) TEST (ledger, latest_root) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -1375,7 +1375,7 @@ TEST (ledger, latest_root) TEST (ledger, change_representative_move_representation) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -1399,7 +1399,7 @@ TEST (ledger, change_representative_move_representation) TEST (ledger, send_open_receive_rollback) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -1457,7 +1457,7 @@ TEST (ledger, send_open_receive_rollback) TEST (ledger, bootstrap_rep_weight) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -1493,7 +1493,7 @@ TEST (ledger, bootstrap_rep_weight) TEST (ledger, block_destination_source) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -1538,7 +1538,7 @@ TEST (ledger, block_destination_source) TEST (ledger, state_account) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -1553,7 +1553,7 @@ TEST (ledger, state_account) TEST (ledger, state_send_receive) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -1594,7 +1594,7 @@ TEST (ledger, state_send_receive) TEST (ledger, state_receive) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -1628,7 +1628,7 @@ TEST (ledger, state_receive) TEST (ledger, state_rep_change) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -1655,7 +1655,7 @@ TEST (ledger, state_rep_change) TEST (ledger, state_open) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -1694,7 +1694,7 @@ TEST (ledger, state_open) TEST (ledger, send_after_state_fail) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -1711,7 +1711,7 @@ TEST (ledger, send_after_state_fail) TEST (ledger, receive_after_state_fail) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -1728,7 +1728,7 @@ TEST (ledger, receive_after_state_fail) TEST (ledger, change_after_state_fail) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -1745,7 +1745,7 @@ TEST (ledger, change_after_state_fail) TEST (ledger, state_unreceivable_fail) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -1768,7 +1768,7 @@ TEST (ledger, state_unreceivable_fail) TEST (ledger, state_receive_bad_amount_fail) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -1791,7 +1791,7 @@ TEST (ledger, state_receive_bad_amount_fail) TEST (ledger, state_no_link_amount_fail) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -1808,7 +1808,7 @@ TEST (ledger, state_no_link_amount_fail) TEST (ledger, state_receive_wrong_account_fail) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -1832,7 +1832,7 @@ TEST (ledger, state_receive_wrong_account_fail) TEST (ledger, state_open_state_fork) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -1852,7 +1852,7 @@ TEST (ledger, state_open_state_fork) TEST (ledger, state_state_open_fork) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -1873,7 +1873,7 @@ TEST (ledger, state_state_open_fork) TEST (ledger, state_open_previous_fail) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -1890,7 +1890,7 @@ TEST (ledger, state_open_previous_fail) TEST (ledger, state_open_source_fail) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -1907,7 +1907,7 @@ TEST (ledger, state_open_source_fail) TEST (ledger, state_send_change) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -1934,7 +1934,7 @@ TEST (ledger, state_send_change) TEST (ledger, state_receive_change) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -1970,7 +1970,7 @@ TEST (ledger, state_receive_change) TEST (ledger, state_open_old) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -1990,7 +1990,7 @@ TEST (ledger, state_open_old) TEST (ledger, state_receive_old) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -2014,7 +2014,7 @@ TEST (ledger, state_receive_old) TEST (ledger, state_rollback_send) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -2045,7 +2045,7 @@ TEST (ledger, state_rollback_send) TEST (ledger, state_rollback_receive) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -2071,7 +2071,7 @@ TEST (ledger, state_rollback_receive) TEST (ledger, state_rollback_received_send) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -2098,7 +2098,7 @@ TEST (ledger, state_rollback_received_send) TEST (ledger, state_rep_change_rollback) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -2118,7 +2118,7 @@ TEST (ledger, state_rep_change_rollback) TEST (ledger, state_open_rollback) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -2144,7 +2144,7 @@ TEST (ledger, state_open_rollback) TEST (ledger, state_send_change_rollback) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -2165,7 +2165,7 @@ TEST (ledger, state_send_change_rollback) TEST (ledger, state_receive_change_rollback) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -2188,7 +2188,7 @@ TEST (ledger, state_receive_change_rollback) TEST (ledger, epoch_blocks_v1_general) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -2258,7 +2258,7 @@ TEST (ledger, epoch_blocks_v1_general) TEST (ledger, epoch_blocks_v2_general) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -2323,7 +2323,7 @@ TEST (ledger, epoch_blocks_v2_general) TEST (ledger, epoch_blocks_receive_upgrade) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -2403,7 +2403,7 @@ TEST (ledger, epoch_blocks_receive_upgrade) TEST (ledger, epoch_blocks_fork) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -2584,7 +2584,7 @@ TEST (ledger, block_hash_account_conflict) TEST (ledger, could_fit) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -2820,7 +2820,7 @@ TEST (ledger, unchecked_receive) TEST (ledger, confirmation_height_not_updated) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -2881,7 +2881,7 @@ TEST (ledger, zero_rep) TEST (ledger, work_validation) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -2974,7 +2974,7 @@ TEST (ledger, dependents_confirmed) { nano::block_builder builder; nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -3046,7 +3046,7 @@ TEST (ledger, dependents_confirmed_pruning) { nano::block_builder builder; nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -3097,7 +3097,7 @@ TEST (ledger, block_confirmed) { nano::block_builder builder; nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -3129,7 +3129,7 @@ TEST (ledger, block_confirmed) TEST (ledger, cache) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -3240,7 +3240,7 @@ TEST (ledger, cache) TEST (ledger, pruning_action) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -3296,7 +3296,7 @@ TEST (ledger, pruning_action) TEST (ledger, pruning_large_chain) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -3332,7 +3332,7 @@ TEST (ledger, pruning_large_chain) TEST (ledger, pruning_source_rollback) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -3383,7 +3383,7 @@ TEST (ledger, pruning_source_rollback) TEST (ledger, pruning_source_rollback_legacy) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -3461,7 +3461,7 @@ TEST (ledger, pruning_source_rollback_legacy) TEST (ledger, pruning_process_error) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -3489,7 +3489,7 @@ TEST (ledger, pruning_process_error) TEST (ledger, pruning_legacy_blocks) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -3534,7 +3534,7 @@ TEST (ledger, pruning_legacy_blocks) TEST (ledger, pruning_safe_functions) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -3576,7 +3576,7 @@ TEST (ledger, pruning_safe_functions) TEST (ledger, hash_root_random) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -3622,7 +3622,7 @@ TEST (ledger, migrate_lmdb_to_rocksdb) nano::logger_mt logger; boost::asio::ip::address_v6 address (boost::asio::ip::make_address_v6 ("::ffff:127.0.0.1")); uint16_t port = 100; - nano::mdb_store store (logger, path / "data.ldb"); + nano::mdb_store store (logger, path / "data.ldb", nano::dev::constants); nano::stat stats; nano::ledger ledger (store, stats, nano::dev::constants); nano::work_pool pool (std::numeric_limits::max ()); @@ -3664,7 +3664,7 @@ TEST (ledger, migrate_lmdb_to_rocksdb) auto error = ledger.migrate_lmdb_to_rocksdb (path); ASSERT_FALSE (error); - nano::rocksdb_store rocksdb_store (logger, path / "rocksdb"); + nano::rocksdb_store rocksdb_store (logger, path / "rocksdb", nano::dev::constants); auto rocksdb_transaction (rocksdb_store.tx_begin_read ()); nano::pending_info pending_info; @@ -3700,7 +3700,7 @@ TEST (ledger, migrate_lmdb_to_rocksdb) TEST (ledger, unconfirmed_frontiers) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); diff --git a/nano/core_test/node.cpp b/nano/core_test/node.cpp index 44486cb1f6..e1f5535035 100644 --- a/nano/core_test/node.cpp +++ b/nano/core_test/node.cpp @@ -3692,7 +3692,7 @@ TEST (node, dont_write_lock_node) std::promise finished_promise; std::thread ([&path, &write_lock_held_promise, &finished_promise] () { nano::logger_mt logger; - auto store = nano::make_store (logger, path, false, true); + auto store = nano::make_store (logger, path, nano::dev::constants, false, true); { nano::ledger_cache ledger_cache; auto transaction (store->tx_begin_write ()); diff --git a/nano/core_test/processor_service.cpp b/nano/core_test/processor_service.cpp index 54a6fc52b6..2135a9b534 100644 --- a/nano/core_test/processor_service.cpp +++ b/nano/core_test/processor_service.cpp @@ -10,7 +10,7 @@ TEST (processor_service, bad_send_signature) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -28,7 +28,7 @@ TEST (processor_service, bad_send_signature) TEST (processor_service, bad_receive_signature) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); diff --git a/nano/node/lmdb/lmdb.cpp b/nano/node/lmdb/lmdb.cpp index 224070faf8..f7a1145dd8 100644 --- a/nano/node/lmdb/lmdb.cpp +++ b/nano/node/lmdb/lmdb.cpp @@ -40,9 +40,10 @@ void mdb_val::convert_buffer_to_value () } } -nano::mdb_store::mdb_store (nano::logger_mt & logger_a, boost::filesystem::path const & path_a, nano::txn_tracking_config const & txn_tracking_config_a, std::chrono::milliseconds block_processor_batch_max_time_a, nano::lmdb_config const & lmdb_config_a, bool backup_before_upgrade_a) : +nano::mdb_store::mdb_store (nano::logger_mt & logger_a, boost::filesystem::path const & path_a, nano::ledger_constants & constants, nano::txn_tracking_config const & txn_tracking_config_a, std::chrono::milliseconds block_processor_batch_max_time_a, nano::lmdb_config const & lmdb_config_a, bool backup_before_upgrade_a) : // clang-format off store_partial{ + constants, block_store_partial, frontier_store_partial, account_store_partial, @@ -551,7 +552,7 @@ void nano::mdb_store::upgrade_v17_to_v18 (nano::write_transaction const & transa { prev_balance = block_balance_v18 (transaction_a, block->hashables.previous); } - if (block->hashables.balance == prev_balance && network_params.ledger.epochs.is_epoch_link (block->hashables.link)) + if (block->hashables.balance == prev_balance && constants.epochs.is_epoch_link (block->hashables.link)) { is_epoch = true; } diff --git a/nano/node/lmdb/lmdb.hpp b/nano/node/lmdb/lmdb.hpp index 2f0f51c188..d0d32483be 100644 --- a/nano/node/lmdb/lmdb.hpp +++ b/nano/node/lmdb/lmdb.hpp @@ -69,7 +69,7 @@ class mdb_store : public store_partial friend class nano::unchecked_mdb_store; public: - mdb_store (nano::logger_mt &, boost::filesystem::path const &, nano::txn_tracking_config const & txn_tracking_config_a = nano::txn_tracking_config{}, std::chrono::milliseconds block_processor_batch_max_time_a = std::chrono::milliseconds (5000), nano::lmdb_config const & lmdb_config_a = nano::lmdb_config{}, bool backup_before_upgrade = false); + mdb_store (nano::logger_mt &, boost::filesystem::path const &, nano::ledger_constants & constants, nano::txn_tracking_config const & txn_tracking_config_a = nano::txn_tracking_config{}, std::chrono::milliseconds block_processor_batch_max_time_a = std::chrono::milliseconds (5000), nano::lmdb_config const & lmdb_config_a = nano::lmdb_config{}, bool backup_before_upgrade = false); nano::write_transaction tx_begin_write (std::vector const & tables_requiring_lock = {}, std::vector const & tables_no_lock = {}) override; nano::read_transaction tx_begin_read () const override; diff --git a/nano/node/node.cpp b/nano/node/node.cpp index 759c0220a0..189d9355ac 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -95,7 +95,7 @@ nano::node::node (boost::asio::io_context & io_ctx_a, boost::filesystem::path co work (work_a), distributed_work (*this), logger (config_a.logging.min_time_between_log_output), - store_impl (nano::make_store (logger, application_path_a, flags.read_only, true, config_a.rocksdb_config, config_a.diagnostics_config.txn_tracking, config_a.block_processor_batch_max_time, config_a.lmdb_config, config_a.backup_before_upgrade)), + store_impl (nano::make_store (logger, application_path_a, network_params.ledger, flags.read_only, true, config_a.rocksdb_config, config_a.diagnostics_config.txn_tracking, config_a.block_processor_batch_max_time, config_a.lmdb_config, config_a.backup_before_upgrade)), store (*store_impl), wallets_store_impl (std::make_unique (application_path_a / "wallets.ldb", config_a.lmdb_config)), wallets_store (*wallets_store_impl), @@ -1819,12 +1819,12 @@ nano::node_flags const & nano::inactive_node_flag_defaults () return node_flags; } -std::unique_ptr nano::make_store (nano::logger_mt & logger, boost::filesystem::path const & path, bool read_only, bool add_db_postfix, nano::rocksdb_config const & rocksdb_config, nano::txn_tracking_config const & txn_tracking_config_a, std::chrono::milliseconds block_processor_batch_max_time_a, nano::lmdb_config const & lmdb_config_a, bool backup_before_upgrade) +std::unique_ptr nano::make_store (nano::logger_mt & logger, boost::filesystem::path const & path, nano::ledger_constants & constants, bool read_only, bool add_db_postfix, nano::rocksdb_config const & rocksdb_config, nano::txn_tracking_config const & txn_tracking_config_a, std::chrono::milliseconds block_processor_batch_max_time_a, nano::lmdb_config const & lmdb_config_a, bool backup_before_upgrade) { if (rocksdb_config.enable) { - return std::make_unique (logger, add_db_postfix ? path / "rocksdb" : path, rocksdb_config, read_only); + return std::make_unique (logger, add_db_postfix ? path / "rocksdb" : path, constants, rocksdb_config, read_only); } - return std::make_unique (logger, add_db_postfix ? path / "data.ldb" : path, txn_tracking_config_a, block_processor_batch_max_time_a, lmdb_config_a, backup_before_upgrade); + return std::make_unique (logger, add_db_postfix ? path / "data.ldb" : path, constants, txn_tracking_config_a, block_processor_batch_max_time_a, lmdb_config_a, backup_before_upgrade); } diff --git a/nano/node/rocksdb/rocksdb.cpp b/nano/node/rocksdb/rocksdb.cpp index 955c786d07..75af898932 100644 --- a/nano/node/rocksdb/rocksdb.cpp +++ b/nano/node/rocksdb/rocksdb.cpp @@ -63,9 +63,10 @@ void rocksdb_val::convert_buffer_to_value () } } -nano::rocksdb_store::rocksdb_store (nano::logger_mt & logger_a, boost::filesystem::path const & path_a, nano::rocksdb_config const & rocksdb_config_a, bool open_read_only_a) : +nano::rocksdb_store::rocksdb_store (nano::logger_mt & logger_a, boost::filesystem::path const & path_a, nano::ledger_constants & constants, nano::rocksdb_config const & rocksdb_config_a, bool open_read_only_a) : // clang-format off store_partial{ + constants, block_store_partial, frontier_store_partial, account_store_partial, @@ -91,6 +92,7 @@ nano::rocksdb_store::rocksdb_store (nano::logger_mt & logger_a, boost::filesyste final_vote_store_partial{ *this }, version_rocksdb_store{ *this }, logger{ logger_a }, + constants{ constants }, rocksdb_config{ rocksdb_config_a }, max_block_write_batch_num_m{ nano::narrow_cast (blocks_memtable_size_bytes () / (2 * (sizeof (nano::block_type) + nano::state_block::size + nano::block_sideband::size (nano::block_type::state)))) }, cf_name_table_map{ create_cf_name_table_map () } @@ -856,7 +858,7 @@ bool nano::rocksdb_store::copy_db (boost::filesystem::path const & destination_p // Open it so that it flushes all WAL files if (status.ok ()) { - nano::rocksdb_store rocksdb_store (logger, destination_path.string (), rocksdb_config, false); + nano::rocksdb_store rocksdb_store (logger, destination_path.string (), constants, rocksdb_config, false); return !rocksdb_store.init_error (); } return false; diff --git a/nano/node/rocksdb/rocksdb.hpp b/nano/node/rocksdb/rocksdb.hpp index ecfb2101b4..34cec98213 100644 --- a/nano/node/rocksdb/rocksdb.hpp +++ b/nano/node/rocksdb/rocksdb.hpp @@ -73,7 +73,7 @@ class rocksdb_store : public store_partial friend class nano::unchecked_rocksdb_store; friend class nano::version_rocksdb_store; - explicit rocksdb_store (nano::logger_mt &, boost::filesystem::path const &, nano::rocksdb_config const & = nano::rocksdb_config{}, bool open_read_only = false); + explicit rocksdb_store (nano::logger_mt &, boost::filesystem::path const &, nano::ledger_constants & constants, nano::rocksdb_config const & = nano::rocksdb_config{}, bool open_read_only = false); nano::write_transaction tx_begin_write (std::vector const & tables_requiring_lock = {}, std::vector const & tables_no_lock = {}) override; nano::read_transaction tx_begin_read () const override; @@ -113,6 +113,7 @@ class rocksdb_store : public store_partial private: bool error{ false }; nano::logger_mt & logger; + nano::ledger_constants & constants; // Optimistic transactions are used in write mode rocksdb::OptimisticTransactionDB * optimistic_db = nullptr; std::unique_ptr db; diff --git a/nano/qt_test/qt.cpp b/nano/qt_test/qt.cpp index 8763f59213..89593417f2 100644 --- a/nano/qt_test/qt.cpp +++ b/nano/qt_test/qt.cpp @@ -513,7 +513,7 @@ TEST (history, short_text) account = system.account (transaction, 0); } auto wallet (std::make_shared (*test_application, processor, *system.nodes[0], system.wallet (0), account)); - auto store = nano::make_store (system.nodes[0]->logger, nano::unique_path ()); + auto store = nano::make_store (system.nodes[0]->logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::genesis genesis; nano::ledger ledger (*store, system.nodes[0]->stats, nano::dev::constants); @@ -551,7 +551,7 @@ TEST (history, pruned_source) account = system.account (transaction, 0); } auto wallet (std::make_shared (*test_application, processor, *system.nodes[0], system.wallet (0), account)); - auto store = nano::make_store (system.nodes[0]->logger, nano::unique_path ()); + auto store = nano::make_store (system.nodes[0]->logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::genesis genesis; nano::ledger ledger (*store, system.nodes[0]->stats, nano::dev::constants); diff --git a/nano/secure/ledger.cpp b/nano/secure/ledger.cpp index 1c35dee883..04ef32d13f 100644 --- a/nano/secure/ledger.cpp +++ b/nano/secure/ledger.cpp @@ -1417,7 +1417,7 @@ bool nano::ledger::migrate_lmdb_to_rocksdb (boost::filesystem::path const & data // Open rocksdb database nano::rocksdb_config rocksdb_config; rocksdb_config.enable = true; - auto rocksdb_store = nano::make_store (logger, data_path_a, false, true, rocksdb_config); + auto rocksdb_store = nano::make_store (logger, data_path_a, nano::dev::constants, false, true, rocksdb_config); if (!rocksdb_store->init_error ()) { diff --git a/nano/secure/store.hpp b/nano/secure/store.hpp index 6909b789f3..5dbbf8f85c 100644 --- a/nano/secure/store.hpp +++ b/nano/secure/store.hpp @@ -869,7 +869,7 @@ class store virtual std::string vendor_get () const = 0; }; -std::unique_ptr make_store (nano::logger_mt & logger, boost::filesystem::path const & path, bool open_read_only = false, bool add_db_postfix = false, nano::rocksdb_config const & rocksdb_config = nano::rocksdb_config{}, nano::txn_tracking_config const & txn_tracking_config_a = nano::txn_tracking_config{}, std::chrono::milliseconds block_processor_batch_max_time_a = std::chrono::milliseconds (5000), nano::lmdb_config const & lmdb_config_a = nano::lmdb_config{}, bool backup_before_upgrade = false); +std::unique_ptr make_store (nano::logger_mt & logger, boost::filesystem::path const & path, nano::ledger_constants & constants, bool open_read_only = false, bool add_db_postfix = false, nano::rocksdb_config const & rocksdb_config = nano::rocksdb_config{}, nano::txn_tracking_config const & txn_tracking_config_a = nano::txn_tracking_config{}, std::chrono::milliseconds block_processor_batch_max_time_a = std::chrono::milliseconds (5000), nano::lmdb_config const & lmdb_config_a = nano::lmdb_config{}, bool backup_before_upgrade = false); } namespace std diff --git a/nano/secure/store_partial.hpp b/nano/secure/store_partial.hpp index 58de2fb313..a22deecf87 100644 --- a/nano/secure/store_partial.hpp +++ b/nano/secure/store_partial.hpp @@ -72,6 +72,7 @@ class store_partial : public store public: // clang-format off store_partial ( + nano::ledger_constants & constants, nano::block_store_partial & block_store_partial_a, nano::frontier_store_partial & frontier_store_partial_a, nano::account_store_partial & account_store_partial_a, @@ -83,6 +84,7 @@ class store_partial : public store nano::confirmation_height_store_partial & confirmation_height_store_partial_a, nano::final_vote_store_partial & final_vote_store_partial_a, nano::version_store_partial & version_store_partial_a) : + constants{ constants }, store{ block_store_partial_a, frontier_store_partial_a, @@ -105,18 +107,18 @@ class store_partial : public store */ void initialize (nano::write_transaction const & transaction_a, nano::ledger_cache & ledger_cache_a) override { - debug_assert (network_params.ledger.genesis->has_sideband ()); + debug_assert (constants.genesis->has_sideband ()); debug_assert (account.begin (transaction_a) == account.end ()); - auto hash_l (network_params.ledger.genesis->hash ()); - block.put (transaction_a, hash_l, *network_params.ledger.genesis); + auto hash_l (constants.genesis->hash ()); + block.put (transaction_a, hash_l, *constants.genesis); ++ledger_cache_a.block_count; - confirmation_height.put (transaction_a, network_params.ledger.genesis->account (), nano::confirmation_height_info{ 1, network_params.ledger.genesis->hash () }); + confirmation_height.put (transaction_a, constants.genesis->account (), nano::confirmation_height_info{ 1, constants.genesis->hash () }); ++ledger_cache_a.cemented_count; - ledger_cache_a.final_votes_confirmation_canary = (network_params.ledger.final_votes_canary_account == network_params.ledger.genesis->account () && 1 >= network_params.ledger.final_votes_canary_height); - account.put (transaction_a, network_params.ledger.genesis->account (), { hash_l, network_params.ledger.genesis->account (), network_params.ledger.genesis->hash (), std::numeric_limits::max (), nano::seconds_since_epoch (), 1, nano::epoch::epoch_0 }); + ledger_cache_a.final_votes_confirmation_canary = (constants.final_votes_canary_account == constants.genesis->account () && 1 >= constants.final_votes_canary_height); + account.put (transaction_a, constants.genesis->account (), { hash_l, constants.genesis->account (), constants.genesis->hash (), std::numeric_limits::max (), nano::seconds_since_epoch (), 1, nano::epoch::epoch_0 }); ++ledger_cache_a.account_count; - ledger_cache_a.rep_weights.representation_put (network_params.ledger.genesis->account (), std::numeric_limits::max ()); - frontier.put (transaction_a, hash_l, network_params.ledger.genesis->account ()); + ledger_cache_a.rep_weights.representation_put (constants.genesis->account (), std::numeric_limits::max ()); + frontier.put (transaction_a, hash_l, constants.genesis->account ()); } bool root_exists (nano::transaction const & transaction_a, nano::root const & root_a) override @@ -132,7 +134,7 @@ class store_partial : public store int const minimum_version{ 14 }; protected: - nano::network_params network_params; + nano::ledger_constants & constants; int const version_number{ 21 }; template diff --git a/nano/slow_test/node.cpp b/nano/slow_test/node.cpp index 6758e977ca..c04b4c6cb4 100644 --- a/nano/slow_test/node.cpp +++ b/nano/slow_test/node.cpp @@ -91,7 +91,7 @@ TEST (system, receive_while_synchronizing) TEST (ledger, deep_account_compute) { nano::logger_mt logger; - auto store = nano::make_store (logger, nano::unique_path ()); + auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_FALSE (store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); @@ -424,7 +424,7 @@ TEST (store, pruned_load) constexpr auto batch_size = 20; boost::unordered_set hashes; { - auto store = nano::make_store (logger, path); + auto store = nano::make_store (logger, path, nano::dev::constants); ASSERT_FALSE (store->init_error ()); for (auto i (0); i < num_pruned / batch_size; ++i) { @@ -453,7 +453,7 @@ TEST (store, pruned_load) } // Reinitialize store { - auto store = nano::make_store (logger, path); + auto store = nano::make_store (logger, path, nano::dev::constants); ASSERT_FALSE (store->init_error ()); auto transaction (store->tx_begin_read ()); ASSERT_EQ (expected_result, store->pruned.count (transaction)); @@ -963,7 +963,7 @@ TEST (confirmation_height, many_accounts_send_receive_self_no_elections) nano::logger_mt logger; nano::logging logging; auto path (nano::unique_path ()); - auto store = nano::make_store (logger, path); + auto store = nano::make_store (logger, path, nano::dev::constants); ASSERT_TRUE (!store->init_error ()); nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); From 4d1119c45fb894850eec460719c3467ca0d3d97b Mon Sep 17 00:00:00 2001 From: clemahieu Date: Thu, 29 Jul 2021 13:10:29 +0100 Subject: [PATCH 116/346] Removing static mutex for the random pool and replacing the random pool with a thread_local version so it is thread safe. (#3408) --- nano/crypto_lib/random_pool.cpp | 7 +------ nano/crypto_lib/random_pool.hpp | 3 +-- nano/crypto_lib/random_pool_shuffle.hpp | 1 - 3 files changed, 2 insertions(+), 9 deletions(-) diff --git a/nano/crypto_lib/random_pool.cpp b/nano/crypto_lib/random_pool.cpp index 4b57d14ff8..398466dc7b 100644 --- a/nano/crypto_lib/random_pool.cpp +++ b/nano/crypto_lib/random_pool.cpp @@ -2,31 +2,26 @@ #include -std::mutex nano::random_pool::mutex; - void nano::random_pool::generate_block (unsigned char * output, size_t size) { auto & pool = get_pool (); - std::lock_guard guard (mutex); pool.GenerateBlock (output, size); } unsigned nano::random_pool::generate_word32 (unsigned min, unsigned max) { auto & pool = get_pool (); - std::lock_guard guard (mutex); return pool.GenerateWord32 (min, max); } unsigned char nano::random_pool::generate_byte () { auto & pool = get_pool (); - std::lock_guard guard (mutex); return pool.GenerateByte (); } CryptoPP::AutoSeededRandomPool & nano::random_pool::get_pool () { - static CryptoPP::AutoSeededRandomPool pool; + static thread_local CryptoPP::AutoSeededRandomPool pool; return pool; } diff --git a/nano/crypto_lib/random_pool.hpp b/nano/crypto_lib/random_pool.hpp index 2afd591fc5..eddfcc0c90 100644 --- a/nano/crypto_lib/random_pool.hpp +++ b/nano/crypto_lib/random_pool.hpp @@ -22,10 +22,9 @@ class random_pool random_pool & operator= (random_pool const &) = delete; private: - static std::mutex mutex; static CryptoPP::AutoSeededRandomPool & get_pool (); template friend void random_pool_shuffle (Iter begin, Iter end); }; -} \ No newline at end of file +} diff --git a/nano/crypto_lib/random_pool_shuffle.hpp b/nano/crypto_lib/random_pool_shuffle.hpp index 0033481041..e718f0473b 100644 --- a/nano/crypto_lib/random_pool_shuffle.hpp +++ b/nano/crypto_lib/random_pool_shuffle.hpp @@ -9,7 +9,6 @@ namespace nano template void random_pool_shuffle (Iter begin, Iter end) { - std::lock_guard guard (random_pool::mutex); random_pool::get_pool ().Shuffle (begin, end); } } From 1ecefdd5d0ed6f0fdd72a7dd6680ba64a2e26d30 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Wed, 28 Jul 2021 20:19:59 +0100 Subject: [PATCH 117/346] Changing nano::node to hold nano::network_params by reference rather than initializing it statically. --- nano/node/node.cpp | 1 + nano/node/node.hpp | 2 +- nano/node/nodeconfig.cpp | 11 ++++++----- nano/node/nodeconfig.hpp | 2 +- nano/secure/common.cpp | 3 ++- nano/secure/common.hpp | 3 ++- 6 files changed, 13 insertions(+), 9 deletions(-) diff --git a/nano/node/node.cpp b/nano/node/node.cpp index 189d9355ac..8571373e28 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -89,6 +89,7 @@ nano::node::node (boost::asio::io_context & io_ctx_a, boost::filesystem::path co io_ctx (io_ctx_a), node_initialized_latch (1), config (config_a), + network_params{ config.network_params }, stats (config.stat_config), workers (std::max (3u, config.io_threads / 4), nano::thread_role::name::worker), flags (flags_a), diff --git a/nano/node/node.hpp b/nano/node/node.hpp index f23eee41cb..1d9172983a 100644 --- a/nano/node/node.hpp +++ b/nano/node/node.hpp @@ -154,8 +154,8 @@ class node final : public std::enable_shared_from_this nano::write_database_queue write_database_queue; boost::asio::io_context & io_ctx; boost::latch node_initialized_latch; - nano::network_params network_params; nano::node_config config; + nano::network_params & network_params; nano::stat stats; nano::thread_pool workers; std::shared_ptr websocket_server; diff --git a/nano/node/nodeconfig.cpp b/nano/node/nodeconfig.cpp index 15afe8f1c0..724f9371ae 100644 --- a/nano/node/nodeconfig.cpp +++ b/nano/node/nodeconfig.cpp @@ -21,14 +21,15 @@ const std::string default_test_peer_network = nano::get_env_or_default ("NANO_TE } nano::node_config::node_config () : - node_config (0, nano::logging ()) + node_config (0, nano::logging (), nano::dev::network_params) { } -nano::node_config::node_config (uint16_t peering_port_a, nano::logging const & logging_a) : - peering_port (peering_port_a), - logging (logging_a), - external_address (boost::asio::ip::address_v6{}.to_string ()) +nano::node_config::node_config (uint16_t peering_port_a, nano::logging const & logging_a, nano::network_params network_params) : + network_params{ network_params }, + peering_port{ peering_port_a }, + logging{ logging_a }, + external_address{ boost::asio::ip::address_v6{}.to_string () } { // The default constructor passes 0 to indicate we should use the default port, // which is determined at node startup based on active network. diff --git a/nano/node/nodeconfig.hpp b/nano/node/nodeconfig.hpp index b70a427559..626a673631 100644 --- a/nano/node/nodeconfig.hpp +++ b/nano/node/nodeconfig.hpp @@ -35,7 +35,7 @@ class node_config { public: node_config (); - node_config (uint16_t, nano::logging const &); + node_config (uint16_t, nano::logging const &, nano::network_params network_params = nano::dev::network_params); nano::error serialize_json (nano::jsonconfig &) const; nano::error deserialize_json (bool &, nano::jsonconfig &); nano::error serialize_toml (nano::tomlconfig &) const; diff --git a/nano/secure/common.cpp b/nano/secure/common.cpp index 4a52d205c4..442a675982 100644 --- a/nano/secure/common.cpp +++ b/nano/secure/common.cpp @@ -81,7 +81,8 @@ std::string const test_canary_public_key_data = nano::get_env_or_default ("NANO_ } nano::keypair nano::dev::genesis_key{ dev_private_key_data }; -nano::ledger_constants nano::dev::constants{ nano::networks::nano_dev_network }; +nano::network_params nano::dev::network_params{ nano::networks::nano_dev_network }; +nano::ledger_constants & nano::dev::constants{ network_params.ledger }; std::shared_ptr & nano::dev::genesis = nano::dev::constants.genesis; nano::network_params::network_params () : diff --git a/nano/secure/common.hpp b/nano/secure/common.hpp index 76acb28c28..c5499d9046 100644 --- a/nano/secure/common.hpp +++ b/nano/secure/common.hpp @@ -395,7 +395,8 @@ class ledger_constants namespace dev { extern nano::keypair genesis_key; - extern nano::ledger_constants constants; + extern nano::network_params network_params; + extern nano::ledger_constants & constants; extern std::shared_ptr & genesis; } From df2a81159c48f922962bbe07dcbd1af7a05172a8 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Wed, 28 Jul 2021 23:52:33 +0100 Subject: [PATCH 118/346] Removing nano::genesis class. --- nano/nano_node/entry.cpp | 1 - nano/node/node.cpp | 3 +-- nano/qt_test/qt.cpp | 2 -- nano/rpc_test/rpc.cpp | 52 +++++++++++++++------------------------- nano/secure/common.cpp | 12 ---------- nano/secure/common.hpp | 8 ------- 6 files changed, 20 insertions(+), 58 deletions(-) diff --git a/nano/nano_node/entry.cpp b/nano/nano_node/entry.cpp index 0addd89aeb..6f3fc93670 100644 --- a/nano/nano_node/entry.cpp +++ b/nano/nano_node/entry.cpp @@ -1786,7 +1786,6 @@ int main (int argc, char * const * argv) node_flags.read_only = false; nano::update_flags (node_flags, vm); nano::inactive_node node (nano::unique_path (), node_flags); - nano::genesis genesis; auto begin (std::chrono::high_resolution_clock::now ()); uint64_t block_count (0); size_t count (0); diff --git a/nano/node/node.cpp b/nano/node/node.cpp index 8571373e28..d1791eab8e 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -345,7 +345,6 @@ nano::node::node (boost::asio::io_context & io_ctx_a, boost::filesystem::path co is_initialized = (store.account.begin (transaction) != store.account.end ()); } - nano::genesis genesis; if (!is_initialized && !flags.read_only) { auto transaction (store.tx_begin_write ({ tables::accounts, tables::blocks, tables::confirmation_height, tables::frontiers })); @@ -353,7 +352,7 @@ nano::node::node (boost::asio::io_context & io_ctx_a, boost::filesystem::path co store.initialize (transaction, ledger.cache); } - if (!ledger.block_or_pruned_exists (genesis.hash ())) + if (!ledger.block_or_pruned_exists (config.network_params.ledger.genesis->hash ())) { std::stringstream ss; ss << "Genesis block not found. This commonly indicates a configuration issue, check that the --network or --data_path command line arguments are correct, " diff --git a/nano/qt_test/qt.cpp b/nano/qt_test/qt.cpp index 89593417f2..bbadd1ca15 100644 --- a/nano/qt_test/qt.cpp +++ b/nano/qt_test/qt.cpp @@ -515,7 +515,6 @@ TEST (history, short_text) auto wallet (std::make_shared (*test_application, processor, *system.nodes[0], system.wallet (0), account)); auto store = nano::make_store (system.nodes[0]->logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); - nano::genesis genesis; nano::ledger ledger (*store, system.nodes[0]->stats, nano::dev::constants); { auto transaction (store->tx_begin_write ()); @@ -553,7 +552,6 @@ TEST (history, pruned_source) auto wallet (std::make_shared (*test_application, processor, *system.nodes[0], system.wallet (0), account)); auto store = nano::make_store (system.nodes[0]->logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); - nano::genesis genesis; nano::ledger ledger (*store, system.nodes[0]->stats, nano::dev::constants); ledger.pruning = true; nano::block_hash next_pruning; diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index ae0dc837dc..65cf278986 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -897,10 +897,9 @@ TEST (rpc, block_account) nano::system system; auto node = add_ipc_enabled_node (system); auto [rpc, rpc_ctx] = add_rpc (system, node); - nano::genesis genesis; boost::property_tree::ptree request; request.put ("action", "block_account"); - request.put ("hash", genesis.hash ().to_string ()); + request.put ("hash", nano::dev::genesis->hash ().to_string ()); auto response (wait_response (system, rpc, request)); std::string account_text (response.get ("account")); nano::account account; @@ -1093,7 +1092,6 @@ TEST (rpc, history) ASSERT_NE (nullptr, send); auto receive (system.wallet (0)->receive_action (send->hash (), nano::dev::genesis_key.pub, node0->config.receive_minimum.number (), send->link ().as_account ())); ASSERT_NE (nullptr, receive); - nano::genesis genesis; nano::state_block usend (nano::dev::genesis->account (), node0->latest (nano::dev::genesis->account ()), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (node0->latest (nano::dev::genesis->account ()))); nano::state_block ureceive (nano::dev::genesis->account (), usend.hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount, usend.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (usend.hash ())); nano::state_block uchange (nano::dev::genesis->account (), ureceive.hash (), nano::keypair ().pub, nano::dev::constants.genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (ureceive.hash ())); @@ -1136,7 +1134,7 @@ TEST (rpc, history) ASSERT_EQ ("receive", std::get<0> (history_l[4])); ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), std::get<1> (history_l[4])); ASSERT_EQ (nano::dev::constants.genesis_amount.convert_to (), std::get<2> (history_l[4])); - ASSERT_EQ (genesis.hash ().to_string (), std::get<3> (history_l[4])); + ASSERT_EQ (nano::dev::genesis->hash ().to_string (), std::get<3> (history_l[4])); } TEST (rpc, account_history) @@ -1150,7 +1148,6 @@ TEST (rpc, account_history) ASSERT_NE (nullptr, send); auto receive (system.wallet (0)->receive_action (send->hash (), nano::dev::genesis_key.pub, node0->config.receive_minimum.number (), send->link ().as_account ())); ASSERT_NE (nullptr, receive); - nano::genesis genesis; nano::state_block usend (nano::dev::genesis->account (), node0->latest (nano::dev::genesis->account ()), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (node0->latest (nano::dev::genesis->account ()))); nano::state_block ureceive (nano::dev::genesis->account (), usend.hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount, usend.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (usend.hash ())); nano::state_block uchange (nano::dev::genesis->account (), ureceive.hash (), nano::keypair ().pub, nano::dev::constants.genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work_generate_blocking (ureceive.hash ())); @@ -1198,7 +1195,7 @@ TEST (rpc, account_history) ASSERT_EQ ("receive", std::get<0> (history_l[4])); ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), std::get<1> (history_l[4])); ASSERT_EQ (nano::dev::constants.genesis_amount.convert_to (), std::get<2> (history_l[4])); - ASSERT_EQ (genesis.hash ().to_string (), std::get<3> (history_l[4])); + ASSERT_EQ (nano::dev::genesis->hash ().to_string (), std::get<3> (history_l[4])); ASSERT_EQ ("1", std::get<4> (history_l[4])); // change block (height 2) is skipped } // Test count and reverse @@ -1284,8 +1281,7 @@ TEST (rpc, history_pruning) nano::node_flags node_flags; node_flags.enable_pruning = true; auto node0 = add_ipc_enabled_node (system, node_config, node_flags); - nano::genesis genesis; - auto change (std::make_shared (genesis.hash (), nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work.generate (genesis.hash ()))); + auto change (std::make_shared (nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work.generate (nano::dev::genesis->hash ()))); node0->process_active (change); auto send (std::make_shared (change->hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - node0->config.receive_minimum.number (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node0->work.generate (change->hash ()))); node0->process_active (send); @@ -2873,7 +2869,6 @@ TEST (rpc, republish) { nano::system system; nano::keypair key; - nano::genesis genesis; auto node1 = add_ipc_enabled_node (system); system.add_node (); auto latest (node1->latest (nano::dev::genesis_key.pub)); @@ -2896,7 +2891,7 @@ TEST (rpc, republish) ASSERT_EQ (1, blocks.size ()); ASSERT_EQ (send.hash (), blocks[0]); - request.put ("hash", genesis.hash ().to_string ()); + request.put ("hash", nano::dev::genesis->hash ().to_string ()); request.put ("count", 1); auto response1 (wait_response (system, rpc, request)); blocks_node = response1.get_child ("blocks"); @@ -2906,7 +2901,7 @@ TEST (rpc, republish) blocks.push_back (nano::block_hash (i->second.get (""))); } ASSERT_EQ (1, blocks.size ()); - ASSERT_EQ (genesis.hash (), blocks[0]); + ASSERT_EQ (nano::dev::genesis->hash (), blocks[0]); request.put ("hash", open.hash ().to_string ()); request.put ("sources", 2); @@ -2918,7 +2913,7 @@ TEST (rpc, republish) blocks.push_back (nano::block_hash (i->second.get (""))); } ASSERT_EQ (3, blocks.size ()); - ASSERT_EQ (genesis.hash (), blocks[0]); + ASSERT_EQ (nano::dev::genesis->hash (), blocks[0]); ASSERT_EQ (send.hash (), blocks[1]); ASSERT_EQ (open.hash (), blocks[2]); } @@ -3446,7 +3441,6 @@ TEST (rpc, wallet_republish) { nano::system system; auto node1 = add_ipc_enabled_node (system); - nano::genesis genesis; nano::keypair key; while (key.pub < nano::dev::genesis_key.pub) { @@ -3624,7 +3618,6 @@ TEST (rpc, account_info) { nano::system system; nano::keypair key; - nano::genesis genesis; auto node1 = add_ipc_enabled_node (system); auto [rpc, rpc_ctx] = add_rpc (system, node1); @@ -3651,7 +3644,7 @@ TEST (rpc, account_info) auto time (nano::seconds_since_epoch ()); { auto transaction = node1->store.tx_begin_write (); - node1->store.confirmation_height.put (transaction, nano::dev::genesis_key.pub, { 1, genesis.hash () }); + node1->store.confirmation_height.put (transaction, nano::dev::genesis_key.pub, { 1, nano::dev::genesis->hash () }); } rpc_ctx->io_scope->renew (); @@ -3661,9 +3654,9 @@ TEST (rpc, account_info) std::string frontier (response.get ("frontier")); ASSERT_EQ (send.hash ().to_string (), frontier); std::string open_block (response.get ("open_block")); - ASSERT_EQ (genesis.hash ().to_string (), open_block); + ASSERT_EQ (nano::dev::genesis->hash ().to_string (), open_block); std::string representative_block (response.get ("representative_block")); - ASSERT_EQ (genesis.hash ().to_string (), representative_block); + ASSERT_EQ (nano::dev::genesis->hash ().to_string (), representative_block); std::string balance (response.get ("balance")); ASSERT_EQ ("100", balance); std::string modified_timestamp (response.get ("modified_timestamp")); @@ -3673,7 +3666,7 @@ TEST (rpc, account_info) std::string confirmation_height (response.get ("confirmation_height")); ASSERT_EQ ("1", confirmation_height); std::string confirmation_height_frontier (response.get ("confirmation_height_frontier")); - ASSERT_EQ (genesis.hash ().to_string (), confirmation_height_frontier); + ASSERT_EQ (nano::dev::genesis->hash ().to_string (), confirmation_height_frontier); ASSERT_EQ (0, response.get ("account_version")); boost::optional weight (response.get_optional ("weight")); ASSERT_FALSE (weight.is_initialized ()); @@ -4311,7 +4304,6 @@ TEST (rpc, block_create_state) nano::system system; auto node = add_ipc_enabled_node (system); nano::keypair key; - nano::genesis genesis; system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; @@ -4319,11 +4311,11 @@ TEST (rpc, block_create_state) request.put ("type", "state"); request.put ("wallet", node->wallets.items.begin ()->first.to_string ()); request.put ("account", nano::dev::genesis_key.pub.to_account ()); - request.put ("previous", genesis.hash ().to_string ()); + request.put ("previous", nano::dev::genesis->hash ().to_string ()); request.put ("representative", nano::dev::genesis_key.pub.to_account ()); request.put ("balance", (nano::dev::constants.genesis_amount - nano::Gxrb_ratio).convert_to ()); request.put ("link", key.pub.to_account ()); - request.put ("work", nano::to_string_hex (*node->work_generate_blocking (genesis.hash ()))); + request.put ("work", nano::to_string_hex (*node->work_generate_blocking (nano::dev::genesis->hash ()))); auto response (wait_response (system, rpc, request)); std::string state_hash (response.get ("hash")); auto state_text (response.get ("block")); @@ -4344,7 +4336,6 @@ TEST (rpc, block_create_state_open) nano::system system; auto node = add_ipc_enabled_node (system); nano::keypair key; - nano::genesis genesis; system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); auto send_block (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key.pub, nano::Gxrb_ratio)); ASSERT_NE (nullptr, send_block); @@ -4896,8 +4887,7 @@ TEST (rpc, block_confirm) nano::system system; auto node = add_ipc_enabled_node (system); system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); - nano::genesis genesis; - auto send1 (std::make_shared (nano::dev::genesis_key.pub, genesis.hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node->work_generate_blocking (genesis.hash ()))); + auto send1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node->work_generate_blocking (nano::dev::genesis->hash ()))); { auto transaction (node->store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, node->ledger.process (transaction, *send1).code); @@ -4934,16 +4924,15 @@ TEST (rpc, block_confirm_confirmed) config.callback_target = "/"; config.logging.init (path); auto node = add_ipc_enabled_node (system, config); - nano::genesis genesis; { auto transaction (node->store.tx_begin_read ()); - ASSERT_TRUE (node->ledger.block_confirmed (transaction, genesis.hash ())); + ASSERT_TRUE (node->ledger.block_confirmed (transaction, nano::dev::genesis->hash ())); } ASSERT_EQ (0, node->stats.count (nano::stat::type::error, nano::stat::detail::http_callback, nano::stat::dir::out)); auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "block_confirm"); - request.put ("hash", genesis.hash ().to_string ()); + request.put ("hash", nano::dev::genesis->hash ().to_string ()); auto response (wait_response (system, rpc, request)); ASSERT_EQ ("1", response.get ("started")); // Check confirmation history @@ -5965,9 +5954,8 @@ TEST (rpc, receive_work_disabled) node->wallets.items.begin ()->first.encode_hex (wallet_text); wallet->insert_adhoc (nano::dev::genesis_key.prv); nano::keypair key1; - nano::genesis genesis; ASSERT_TRUE (worker_node.work_generation_enabled ()); - auto send1 (wallet->send_action (nano::dev::genesis_key.pub, key1.pub, node->config.receive_minimum.number () - 1, *worker_node.work_generate_blocking (genesis.hash ()), false)); + auto send1 (wallet->send_action (nano::dev::genesis_key.pub, key1.pub, node->config.receive_minimum.number () - 1, *worker_node.work_generate_blocking (nano::dev::genesis->hash ()), false)); ASSERT_TRUE (send1 != nullptr); ASSERT_TIMELY (5s, node->balance (nano::dev::genesis_key.pub) != nano::dev::constants.genesis_amount); ASSERT_FALSE (node->store.account.exists (node->store.tx_begin_read (), key1.pub)); @@ -6218,8 +6206,7 @@ TEST (rpc, confirmation_active) auto node1 (system.add_node (node_config, node_flags)); auto [rpc, rpc_ctx] = add_rpc (system, node1); - nano::genesis genesis; - auto send1 (std::make_shared (genesis.hash (), nano::public_key (), nano::dev::constants.genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (genesis.hash ()))); + auto send1 (std::make_shared (nano::dev::genesis->hash (), nano::public_key (), nano::dev::constants.genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); auto send2 (std::make_shared (send1->hash (), nano::public_key (), nano::dev::constants.genesis_amount - 200, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1->hash ()))); node1->process_active (send1); node1->process_active (send2); @@ -6247,8 +6234,7 @@ TEST (rpc, confirmation_info) auto node1 = add_ipc_enabled_node (system); auto [rpc, rpc_ctx] = add_rpc (system, node1); - nano::genesis genesis; - auto send (std::make_shared (genesis.hash (), nano::public_key (), nano::dev::constants.genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (genesis.hash ()))); + auto send (std::make_shared (nano::dev::genesis->hash (), nano::public_key (), nano::dev::constants.genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); node1->process_active (send); node1->block_processor.flush (); node1->scheduler.flush (); diff --git a/nano/secure/common.cpp b/nano/secure/common.cpp index 442a675982..a440f93b07 100644 --- a/nano/secure/common.cpp +++ b/nano/secure/common.cpp @@ -813,18 +813,6 @@ std::unique_ptr nano::collect_container_info (vo return composite; } -nano::genesis::genesis () -{ - static nano::network_params network_params; - open = network_params.ledger.genesis; - debug_assert (open != nullptr); -} - -nano::block_hash nano::genesis::hash () const -{ - return open->hash (); -} - nano::wallet_id nano::random_wallet_id () { nano::wallet_id wallet_id; diff --git a/nano/secure/common.hpp b/nano/secure/common.hpp index c5499d9046..101502e97b 100644 --- a/nano/secure/common.hpp +++ b/nano/secure/common.hpp @@ -334,14 +334,6 @@ enum class tally_result confirm }; -class genesis final -{ -public: - genesis (); - nano::block_hash hash () const; - std::shared_ptr open; -}; - class network_params; /** Protocol versions whose value may depend on the active network */ From cf80f891cd76e7a37959e393afaef23454f2eac0 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Thu, 29 Jul 2021 00:44:09 +0100 Subject: [PATCH 119/346] Passing in kdf_work value instead of obtaining it statically. --- nano/core_test/wallet.cpp | 38 +++++++++++++++++++------------------- nano/node/cli.cpp | 2 +- nano/node/wallet.cpp | 4 ++-- nano/node/wallet.hpp | 5 +++++ nano/rpc_test/rpc.cpp | 2 +- 5 files changed, 28 insertions(+), 23 deletions(-) diff --git a/nano/core_test/wallet.cpp b/nano/core_test/wallet.cpp index 99a8779114..5eae9b3fc9 100644 --- a/nano/core_test/wallet.cpp +++ b/nano/core_test/wallet.cpp @@ -17,7 +17,7 @@ TEST (wallet, no_special_keys_accounts) nano::mdb_env env (init, nano::unique_path ()); ASSERT_FALSE (init); auto transaction (env.tx_begin_write ()); - nano::kdf kdf; + nano::kdf kdf{ nano::dev::network_params.kdf_work }; nano::wallet_store wallet (init, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (init); nano::keypair key1; @@ -38,7 +38,7 @@ TEST (wallet, no_key) nano::mdb_env env (init, nano::unique_path ()); ASSERT_FALSE (init); auto transaction (env.tx_begin_write ()); - nano::kdf kdf; + nano::kdf kdf{ nano::dev::network_params.kdf_work }; nano::wallet_store wallet (init, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (init); nano::keypair key1; @@ -53,7 +53,7 @@ TEST (wallet, fetch_locked) nano::mdb_env env (init, nano::unique_path ()); ASSERT_FALSE (init); auto transaction (env.tx_begin_write ()); - nano::kdf kdf; + nano::kdf kdf{ nano::dev::network_params.kdf_work }; nano::wallet_store wallet (init, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_TRUE (wallet.valid_password (transaction)); nano::keypair key1; @@ -75,7 +75,7 @@ TEST (wallet, retrieval) nano::mdb_env env (init, nano::unique_path ()); ASSERT_FALSE (init); auto transaction (env.tx_begin_write ()); - nano::kdf kdf; + nano::kdf kdf{ nano::dev::network_params.kdf_work }; nano::wallet_store wallet (init, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (init); nano::keypair key1; @@ -97,7 +97,7 @@ TEST (wallet, empty_iteration) nano::mdb_env env (init, nano::unique_path ()); ASSERT_FALSE (init); auto transaction (env.tx_begin_write ()); - nano::kdf kdf; + nano::kdf kdf{ nano::dev::network_params.kdf_work }; nano::wallet_store wallet (init, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (init); auto i (wallet.begin (transaction)); @@ -111,7 +111,7 @@ TEST (wallet, one_item_iteration) nano::mdb_env env (init, nano::unique_path ()); ASSERT_FALSE (init); auto transaction (env.tx_begin_write ()); - nano::kdf kdf; + nano::kdf kdf{ nano::dev::network_params.kdf_work }; nano::wallet_store wallet (init, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (init); nano::keypair key1; @@ -137,7 +137,7 @@ TEST (wallet, two_item_iteration) ASSERT_NE (key1.pub, key2.pub); std::unordered_set pubs; std::unordered_set prvs; - nano::kdf kdf; + nano::kdf kdf{ nano::dev::network_params.kdf_work }; { auto transaction (env.tx_begin_write ()); nano::wallet_store wallet (init, kdf, transaction, nano::dev::genesis->account (), 1, "0"); @@ -277,7 +277,7 @@ TEST (wallet, find_none) nano::mdb_env env (init, nano::unique_path ()); ASSERT_FALSE (init); auto transaction (env.tx_begin_write ()); - nano::kdf kdf; + nano::kdf kdf{ nano::dev::network_params.kdf_work }; nano::wallet_store wallet (init, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (init); nano::account account (1000); @@ -290,7 +290,7 @@ TEST (wallet, find_existing) nano::mdb_env env (init, nano::unique_path ()); ASSERT_FALSE (init); auto transaction (env.tx_begin_write ()); - nano::kdf kdf; + nano::kdf kdf{ nano::dev::network_params.kdf_work }; nano::wallet_store wallet (init, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (init); nano::keypair key1; @@ -309,7 +309,7 @@ TEST (wallet, rekey) nano::mdb_env env (init, nano::unique_path ()); ASSERT_FALSE (init); auto transaction (env.tx_begin_write ()); - nano::kdf kdf; + nano::kdf kdf{ nano::dev::network_params.kdf_work }; nano::wallet_store wallet (init, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (init); nano::raw_key password; @@ -381,7 +381,7 @@ TEST (wallet, hash_password) nano::mdb_env env (init, nano::unique_path ()); ASSERT_FALSE (init); auto transaction (env.tx_begin_write ()); - nano::kdf kdf; + nano::kdf kdf{ nano::dev::network_params.kdf_work }; nano::wallet_store wallet (init, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (init); nano::raw_key hash1; @@ -430,7 +430,7 @@ TEST (wallet, reopen_default_password) nano::mdb_env env (init, nano::unique_path ()); auto transaction (env.tx_begin_write ()); ASSERT_FALSE (init); - nano::kdf kdf; + nano::kdf kdf{ nano::dev::network_params.kdf_work }; { nano::wallet_store wallet (init, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (init); @@ -466,7 +466,7 @@ TEST (wallet, representative) nano::mdb_env env (error, nano::unique_path ()); ASSERT_FALSE (error); auto transaction (env.tx_begin_write ()); - nano::kdf kdf; + nano::kdf kdf{ nano::dev::network_params.kdf_work }; nano::wallet_store wallet (error, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (error); ASSERT_FALSE (wallet.is_representative (transaction)); @@ -487,7 +487,7 @@ TEST (wallet, serialize_json_empty) nano::mdb_env env (error, nano::unique_path ()); ASSERT_FALSE (error); auto transaction (env.tx_begin_write ()); - nano::kdf kdf; + nano::kdf kdf{ nano::dev::network_params.kdf_work }; nano::wallet_store wallet1 (error, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (error); std::string serialized; @@ -512,7 +512,7 @@ TEST (wallet, serialize_json_one) nano::mdb_env env (error, nano::unique_path ()); ASSERT_FALSE (error); auto transaction (env.tx_begin_write ()); - nano::kdf kdf; + nano::kdf kdf{ nano::dev::network_params.kdf_work }; nano::wallet_store wallet1 (error, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (error); nano::keypair key; @@ -541,7 +541,7 @@ TEST (wallet, serialize_json_password) nano::mdb_env env (error, nano::unique_path ()); ASSERT_FALSE (error); auto transaction (env.tx_begin_write ()); - nano::kdf kdf; + nano::kdf kdf{ nano::dev::network_params.kdf_work }; nano::wallet_store wallet1 (error, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (error); nano::keypair key; @@ -574,7 +574,7 @@ TEST (wallet_store, move) nano::mdb_env env (error, nano::unique_path ()); ASSERT_FALSE (error); auto transaction (env.tx_begin_write ()); - nano::kdf kdf; + nano::kdf kdf{ nano::dev::network_params.kdf_work }; nano::wallet_store wallet1 (error, kdf, transaction, nano::dev::genesis->account (), 1, "0"); ASSERT_FALSE (error); nano::keypair key1; @@ -732,7 +732,7 @@ TEST (wallet, deterministic_keys) nano::mdb_env env (init, nano::unique_path ()); ASSERT_FALSE (init); auto transaction (env.tx_begin_write ()); - nano::kdf kdf; + nano::kdf kdf{ nano::dev::network_params.kdf_work }; nano::wallet_store wallet (init, kdf, transaction, nano::dev::genesis->account (), 1, "0"); auto key1 = wallet.deterministic_key (transaction, 0); auto key2 = wallet.deterministic_key (transaction, 0); @@ -775,7 +775,7 @@ TEST (wallet, reseed) nano::mdb_env env (init, nano::unique_path ()); ASSERT_FALSE (init); auto transaction (env.tx_begin_write ()); - nano::kdf kdf; + nano::kdf kdf{ nano::dev::network_params.kdf_work }; nano::wallet_store wallet (init, kdf, transaction, nano::dev::genesis->account (), 1, "0"); nano::raw_key seed1; seed1 = 1; diff --git a/nano/node/cli.cpp b/nano/node/cli.cpp index 5c891ecee8..a7c855f58b 100644 --- a/nano/node/cli.cpp +++ b/nano/node/cli.cpp @@ -702,7 +702,7 @@ std::error_code nano::handle_node_options (boost::program_options::variables_map nano::raw_key junk1; junk1.clear (); nano::uint256_union junk2 (0); - nano::kdf kdf; + nano::kdf kdf{ inactive_node->node->config.network_params.kdf_work}; kdf.phs (junk1, "", junk2); std::cout << "Testing time retrieval latency... " << std::flush; nano::timer timer (nano::timer_state::started); diff --git a/nano/node/wallet.cpp b/nano/node/wallet.cpp index d2d2e05289..654d311231 100644 --- a/nano/node/wallet.cpp +++ b/nano/node/wallet.cpp @@ -651,9 +651,8 @@ void nano::wallet_store::version_put (nano::transaction const & transaction_a, u void nano::kdf::phs (nano::raw_key & result_a, std::string const & password_a, nano::uint256_union const & salt_a) { - static nano::network_params network_params; nano::lock_guard lock (mutex); - auto success (argon2_hash (1, network_params.kdf_work, 1, password_a.data (), password_a.size (), salt_a.bytes.data (), salt_a.bytes.size (), result_a.bytes.data (), result_a.bytes.size (), NULL, 0, Argon2_d, 0x10)); + auto success (argon2_hash (1, kdf_work, 1, password_a.data (), password_a.size (), salt_a.bytes.data (), salt_a.bytes.size (), result_a.bytes.data (), result_a.bytes.size (), NULL, 0, Argon2_d, 0x10)); debug_assert (success == 0); (void)success; } @@ -1336,6 +1335,7 @@ void nano::wallets::do_wallet_actions () nano::wallets::wallets (bool error_a, nano::node & node_a) : observer ([] (bool) {}), + kdf{ node_a.config.network_params.kdf_work }, node (node_a), env (boost::polymorphic_downcast (node_a.wallets_store_impl.get ())->environment), stopped (false), diff --git a/nano/node/wallet.hpp b/nano/node/wallet.hpp index d0db01e762..25940a9881 100644 --- a/nano/node/wallet.hpp +++ b/nano/node/wallet.hpp @@ -34,8 +34,13 @@ class fan final class kdf final { public: + kdf (unsigned & kdf_work) : + kdf_work{ kdf_work } + { + } void phs (nano::raw_key &, std::string const &, nano::uint256_union const &); nano::mutex mutex; + unsigned & kdf_work; }; enum class key_type { diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index 65cf278986..3bde45eda3 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -829,7 +829,7 @@ TEST (rpc, wallet_export) bool error (false); rpc_ctx->io_scope->reset (); auto transaction (node->wallets.tx_begin_write ()); - nano::kdf kdf; + nano::kdf kdf{ nano::dev::network_params.kdf_work }; nano::wallet_store store (error, kdf, transaction, nano::dev::genesis->account (), 1, "0", wallet_json); ASSERT_FALSE (error); ASSERT_TRUE (store.exists (transaction, nano::dev::genesis_key.pub)); From 4eefdccca2063b3d80a3ae5b8f1bf2546c4d93da Mon Sep 17 00:00:00 2001 From: clemahieu Date: Thu, 29 Jul 2021 00:54:41 +0100 Subject: [PATCH 120/346] Changing nano::wallets::network_params to a reference rather than initializing it statically. --- nano/node/wallet.cpp | 1 + nano/node/wallet.hpp | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/nano/node/wallet.cpp b/nano/node/wallet.cpp index 654d311231..5ee5f952e9 100644 --- a/nano/node/wallet.cpp +++ b/nano/node/wallet.cpp @@ -1334,6 +1334,7 @@ void nano::wallets::do_wallet_actions () } nano::wallets::wallets (bool error_a, nano::node & node_a) : + network_params{ node_a.config.network_params }, observer ([] (bool) {}), kdf{ node_a.config.network_params.kdf_work }, node (node_a), diff --git a/nano/node/wallet.hpp b/nano/node/wallet.hpp index 25940a9881..49e47669b9 100644 --- a/nano/node/wallet.hpp +++ b/nano/node/wallet.hpp @@ -216,7 +216,7 @@ class wallets final void split_if_needed (nano::transaction &, nano::store &); void move_table (std::string const &, MDB_txn *, MDB_txn *); std::unordered_map> get_wallets (); - nano::network_params network_params; + nano::network_params & network_params; std::function observer; std::unordered_map> items; std::multimap, std::function>, std::greater> actions; From cc302192427bb350eb2e90941cd6b1c3fe1288f9 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Thu, 29 Jul 2021 10:20:29 +0100 Subject: [PATCH 121/346] Using FQN to reference network_params. --- nano/secure/common.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nano/secure/common.cpp b/nano/secure/common.cpp index a440f93b07..b7bfaa7b78 100644 --- a/nano/secure/common.cpp +++ b/nano/secure/common.cpp @@ -82,7 +82,7 @@ std::string const test_canary_public_key_data = nano::get_env_or_default ("NANO_ nano::keypair nano::dev::genesis_key{ dev_private_key_data }; nano::network_params nano::dev::network_params{ nano::networks::nano_dev_network }; -nano::ledger_constants & nano::dev::constants{ network_params.ledger }; +nano::ledger_constants & nano::dev::constants{ nano::dev::network_params.ledger }; std::shared_ptr & nano::dev::genesis = nano::dev::constants.genesis; nano::network_params::network_params () : From e0387c569964d78e2236d6881ec72e4c29b09b9c Mon Sep 17 00:00:00 2001 From: clemahieu Date: Thu, 29 Jul 2021 15:57:00 +0100 Subject: [PATCH 122/346] Fixing cycle in initialization order of nano::dev::constants.genesis_amount. --- nano/secure/common.cpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/nano/secure/common.cpp b/nano/secure/common.cpp index b7bfaa7b78..6ab960325d 100644 --- a/nano/secure/common.cpp +++ b/nano/secure/common.cpp @@ -131,10 +131,10 @@ nano::ledger_constants::ledger_constants (nano::networks network_a) : nano_test_final_votes_canary_height (1), final_votes_canary_height (network_a == nano::networks::nano_dev_network ? nano_dev_final_votes_canary_height : network_a == nano::networks::nano_beta_network ? nano_beta_final_votes_canary_height : network_a == nano::networks::nano_test_network ? nano_test_final_votes_canary_height : nano_live_final_votes_canary_height) { - nano_beta_genesis->sideband_set (nano::block_sideband (nano_beta_genesis->account (), 0, nano::dev::constants.genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); - nano_dev_genesis->sideband_set (nano::block_sideband (nano_dev_genesis->account (), 0, nano::dev::constants.genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); - nano_live_genesis->sideband_set (nano::block_sideband (nano_live_genesis->account (), 0, nano::dev::constants.genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); - nano_test_genesis->sideband_set (nano::block_sideband (nano_test_genesis->account (), 0, nano::dev::constants.genesis_amount, 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); + nano_beta_genesis->sideband_set (nano::block_sideband (nano_beta_genesis->account (), 0, std::numeric_limits::max (), 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); + nano_dev_genesis->sideband_set (nano::block_sideband (nano_dev_genesis->account (), 0, std::numeric_limits::max (), 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); + nano_live_genesis->sideband_set (nano::block_sideband (nano_live_genesis->account (), 0, std::numeric_limits::max (), 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); + nano_test_genesis->sideband_set (nano::block_sideband (nano_test_genesis->account (), 0, std::numeric_limits::max (), 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); nano::link epoch_link_v1; const char * epoch_message_v1 ("epoch v1 block"); From 95b7cf96ddf881f43858279ff2b739319a91d795 Mon Sep 17 00:00:00 2001 From: Russel Waters <6511720+argakiig@users.noreply.github.com> Date: Thu, 29 Jul 2021 14:33:51 -0700 Subject: [PATCH 123/346] remove errexit ghcr.io has some edgecase rules, and isnt required for CI, just convenient at times (#3407) --- ci/build-docker-image.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ci/build-docker-image.sh b/ci/build-docker-image.sh index 060dc78bbd..8a8a08e5d3 100755 --- a/ci/build-docker-image.sh +++ b/ci/build-docker-image.sh @@ -1,5 +1,5 @@ #!/bin/bash -set -eu +set -u if [ "$#" -lt 2 ]; then echo 'Usage: build-docker-image.sh [...]' >&2 From fcbcb5bddc091594ef32cf4a2586567e8989b84d Mon Sep 17 00:00:00 2001 From: Shryder Date: Fri, 30 Jul 2021 12:13:31 +0000 Subject: [PATCH 124/346] Add deprecation output to "history" RPC (#3397) (#3398) --- nano/node/json_handler.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index 603d4450d9..2760bc3e34 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -94,6 +94,7 @@ void nano::json_handler::process_request (bool unsafe_a) } else if (action == "history") { + response_l.put ("deprecated", "1"); request.put ("head", request.get ("hash")); account_history (); } From 4dede6d970693d9924b6f76434ddd66dfd57aa80 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Sun, 1 Aug 2021 09:14:56 +0100 Subject: [PATCH 125/346] Removing unused variable. --- nano/node/voting.hpp | 1 - 1 file changed, 1 deletion(-) diff --git a/nano/node/voting.hpp b/nano/node/voting.hpp index ed53cd3f2a..51267aad32 100644 --- a/nano/node/voting.hpp +++ b/nano/node/voting.hpp @@ -148,7 +148,6 @@ class vote_generator final static size_t constexpr max_requests{ 2048 }; std::deque requests; std::deque candidates; - nano::network_params network_params; std::atomic stopped{ false }; bool started{ false }; std::thread thread; From e2cd9c756c743ed8807337a12101c8b30789cc67 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Sun, 1 Aug 2021 10:04:58 +0100 Subject: [PATCH 126/346] Removing unnecessary is_dev_network checks and removing unused reference to network_params. --- nano/node/confirmation_height_bounded.cpp | 21 +++++++++------------ nano/node/confirmation_height_bounded.hpp | 1 - 2 files changed, 9 insertions(+), 13 deletions(-) diff --git a/nano/node/confirmation_height_bounded.cpp b/nano/node/confirmation_height_bounded.cpp index 90d89ce7df..8a84f1ef99 100644 --- a/nano/node/confirmation_height_bounded.cpp +++ b/nano/node/confirmation_height_bounded.cpp @@ -459,18 +459,15 @@ void nano::confirmation_height_bounded::cement_blocks (nano::write_guard & scope } // Update the maximum amount of blocks to write next time based on the time it took to cement this batch. - if (!network_params.network.is_dev_network ()) + if (time_spent_cementing > maximum_batch_write_time) { - if (time_spent_cementing > maximum_batch_write_time) - { - // Reduce (unless we have hit a floor) - batch_write_size = std::max (minimum_batch_write_size, batch_write_size - amount_to_change); - } - else if (time_spent_cementing < maximum_batch_write_time_increase_cutoff) - { - // Increase amount of blocks written for next batch if the time for writing this one is sufficiently lower than the max time to warrant changing - batch_write_size += amount_to_change; - } + // Reduce (unless we have hit a floor) + batch_write_size = std::max (minimum_batch_write_size, batch_write_size - amount_to_change); + } + else if (time_spent_cementing < maximum_batch_write_time_increase_cutoff) + { + // Increase amount of blocks written for next batch if the time for writing this one is sufficiently lower than the max time to warrant changing + batch_write_size += amount_to_change; } scoped_write_guard_a.release (); @@ -538,7 +535,7 @@ void nano::confirmation_height_bounded::cement_blocks (nano::write_guard & scope // Bail if there was an error. This indicates that there was a fatal issue with the ledger // (the blocks probably got rolled back when they shouldn't have). release_assert (!error); - if (!network_params.network.is_dev_network () && time_spent_cementing > maximum_batch_write_time) + if (time_spent_cementing > maximum_batch_write_time) { // Reduce (unless we have hit a floor) batch_write_size = std::max (minimum_batch_write_size, batch_write_size - amount_to_change); diff --git a/nano/node/confirmation_height_bounded.hpp b/nano/node/confirmation_height_bounded.hpp index 80bc56a8df..0938d861f4 100644 --- a/nano/node/confirmation_height_bounded.hpp +++ b/nano/node/confirmation_height_bounded.hpp @@ -128,7 +128,6 @@ class confirmation_height_bounded final std::function> const &)> notify_observers_callback; std::function notify_block_already_cemented_observers_callback; std::function awaiting_processing_size_callback; - nano::network_params network_params; friend std::unique_ptr collect_container_info (confirmation_height_bounded &, std::string const & name_a); }; From 02d8673de36e6d099e312e88da93c379b7185df2 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Sun, 1 Aug 2021 12:02:16 +0100 Subject: [PATCH 127/346] Removing unused usages of nano::network_params --- nano/core_test/block_store.cpp | 13 +++++-------- nano/core_test/fakes/work_peer.hpp | 1 - nano/core_test/message.cpp | 13 ++++++------- nano/core_test/voting.cpp | 3 +-- nano/lib/lmdbconfig.cpp | 1 - nano/node/json_handler.cpp | 5 ++--- nano/node/nodeconfig.cpp | 1 - nano/node/portmapping.cpp | 14 +++++++------- nano/node/portmapping.hpp | 1 - nano/node/wallet.hpp | 1 - nano/qt/qt.cpp | 5 ++--- nano/slow_test/node.cpp | 3 +-- 12 files changed, 24 insertions(+), 37 deletions(-) diff --git a/nano/core_test/block_store.cpp b/nano/core_test/block_store.cpp index 530a57c966..55202988df 100644 --- a/nano/core_test/block_store.cpp +++ b/nano/core_test/block_store.cpp @@ -1262,10 +1262,9 @@ TEST (mdb_block_store, upgrade_v14_v15) } // Extract confirmation height to a separate database auto path (nano::unique_path ()); - nano::network_params network_params; nano::work_pool pool (std::numeric_limits::max ()); nano::send_block send (nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); - nano::state_block epoch (nano::dev::genesis_key.pub, send.hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, network_params.ledger.epochs.link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send.hash ())); + nano::state_block epoch (nano::dev::genesis_key.pub, send.hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::network_params.ledger.epochs.link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send.hash ())); nano::state_block state_send (nano::dev::genesis_key.pub, epoch.hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch.hash ())); { nano::logger_mt logger; @@ -1483,20 +1482,19 @@ TEST (mdb_block_store, upgrade_v17_v18) nano::keypair key1; nano::keypair key2; nano::keypair key3; - nano::network_params network_params; nano::work_pool pool (std::numeric_limits::max ()); nano::send_block send_zero (nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); nano::state_block state_receive_zero (nano::dev::genesis_key.pub, send_zero.hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount, send_zero.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send_zero.hash ())); - nano::state_block epoch (nano::dev::genesis_key.pub, state_receive_zero.hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount, network_params.ledger.epochs.link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_receive_zero.hash ())); + nano::state_block epoch (nano::dev::genesis_key.pub, state_receive_zero.hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount, nano::dev::network_params.ledger.epochs.link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_receive_zero.hash ())); nano::state_block state_send (nano::dev::genesis_key.pub, epoch.hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch.hash ())); nano::state_block state_receive (nano::dev::genesis_key.pub, state_send.hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount, state_send.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_send.hash ())); nano::state_block state_change (nano::dev::genesis_key.pub, state_receive.hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_receive.hash ())); nano::state_block state_send_change (nano::dev::genesis_key.pub, state_change.hash (), key1.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_change.hash ())); - nano::state_block epoch_first (key1.pub, 0, 0, 0, network_params.ledger.epochs.link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (key1.pub)); + nano::state_block epoch_first (key1.pub, 0, 0, 0, nano::dev::network_params.ledger.epochs.link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (key1.pub)); nano::state_block state_receive2 (key1.pub, epoch_first.hash (), key1.pub, nano::Gxrb_ratio, state_send_change.hash (), key1.prv, key1.pub, *pool.generate (epoch_first.hash ())); nano::state_block state_send2 (nano::dev::genesis_key.pub, state_send_change.hash (), key1.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio * 2, key2.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_send_change.hash ())); nano::state_block state_open (key2.pub, 0, key2.pub, nano::Gxrb_ratio, state_send2.hash (), key2.prv, key2.pub, *pool.generate (key2.pub)); - nano::state_block state_send_epoch_link (key2.pub, state_open.hash (), key2.pub, 0, network_params.ledger.epochs.link (nano::epoch::epoch_2), key2.prv, key2.pub, *pool.generate (state_open.hash ())); + nano::state_block state_send_epoch_link (key2.pub, state_open.hash (), key2.pub, 0, nano::dev::network_params.ledger.epochs.link (nano::epoch::epoch_2), key2.prv, key2.pub, *pool.generate (state_open.hash ())); { nano::logger_mt logger; nano::mdb_store store (logger, path, nano::dev::constants); @@ -1685,11 +1683,10 @@ TEST (mdb_block_store, upgrade_v18_v19) auto path (nano::unique_path ()); nano::keypair key1; nano::work_pool pool (std::numeric_limits::max ()); - nano::network_params network_params; nano::send_block send (nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); nano::receive_block receive (send.hash (), send.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send.hash ())); nano::change_block change (receive.hash (), 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (receive.hash ())); - nano::state_block state_epoch (nano::dev::genesis_key.pub, change.hash (), 0, nano::dev::constants.genesis_amount, network_params.ledger.epochs.link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (change.hash ())); + nano::state_block state_epoch (nano::dev::genesis_key.pub, change.hash (), 0, nano::dev::constants.genesis_amount, nano::dev::network_params.ledger.epochs.link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (change.hash ())); nano::state_block state_send (nano::dev::genesis_key.pub, state_epoch.hash (), 0, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_epoch.hash ())); nano::state_block state_open (key1.pub, 0, 0, nano::Gxrb_ratio, state_send.hash (), key1.prv, key1.pub, *pool.generate (key1.pub)); diff --git a/nano/core_test/fakes/work_peer.hpp b/nano/core_test/fakes/work_peer.hpp index aa874bec5e..0345266943 100644 --- a/nano/core_test/fakes/work_peer.hpp +++ b/nano/core_test/fakes/work_peer.hpp @@ -146,7 +146,6 @@ class work_peer_connection : public std::enable_shared_from_this work_a) { auto result = work_a.value_or (0); auto result_difficulty (nano::work_difficulty (this_l->version, hash, result)); - static nano::network_params params; ptree::ptree message_l; message_l.put ("work", nano::to_string_hex (result)); message_l.put ("difficulty", nano::to_string_hex (result_difficulty)); diff --git a/nano/core_test/message.cpp b/nano/core_test/message.cpp index c2954399c2..8ef0e1773f 100644 --- a/nano/core_test/message.cpp +++ b/nano/core_test/message.cpp @@ -44,7 +44,6 @@ TEST (message, keepalive_deserialize) TEST (message, publish_serialization) { - nano::network_params params; nano::publish publish (std::make_shared (0, 1, 2, nano::keypair ().prv, 4, 5)); publish.header.network = nano::networks::nano_dev_network; ASSERT_EQ (nano::block_type::send, publish.header.block_type ()); @@ -56,9 +55,9 @@ TEST (message, publish_serialization) ASSERT_EQ (8, bytes.size ()); ASSERT_EQ (0x52, bytes[0]); ASSERT_EQ (0x41, bytes[1]); - ASSERT_EQ (params.protocol.protocol_version, bytes[2]); - ASSERT_EQ (params.protocol.protocol_version, bytes[3]); - ASSERT_EQ (params.protocol.protocol_version_min (), bytes[4]); + ASSERT_EQ (nano::dev::network_params.protocol.protocol_version, bytes[2]); + ASSERT_EQ (nano::dev::network_params.protocol.protocol_version, bytes[3]); + ASSERT_EQ (nano::dev::network_params.protocol.protocol_version_min (), bytes[4]); ASSERT_EQ (static_cast (nano::message_type::publish), bytes[5]); ASSERT_EQ (0x00, bytes[6]); // extensions ASSERT_EQ (static_cast (nano::block_type::send), bytes[7]); @@ -66,9 +65,9 @@ TEST (message, publish_serialization) auto error (false); nano::message_header header (error, stream); ASSERT_FALSE (error); - ASSERT_EQ (params.protocol.protocol_version_min (), header.version_min ()); - ASSERT_EQ (params.protocol.protocol_version, header.version_using); - ASSERT_EQ (params.protocol.protocol_version, header.version_max); + ASSERT_EQ (nano::dev::network_params.protocol.protocol_version_min (), header.version_min ()); + ASSERT_EQ (nano::dev::network_params.protocol.protocol_version, header.version_using); + ASSERT_EQ (nano::dev::network_params.protocol.protocol_version, header.version_max); ASSERT_EQ (nano::message_type::publish, header.type); } diff --git a/nano/core_test/voting.cpp b/nano/core_test/voting.cpp index bf6cbedcbc..8f52473efa 100644 --- a/nano/core_test/voting.cpp +++ b/nano/core_test/voting.cpp @@ -11,8 +11,7 @@ namespace nano { TEST (local_vote_history, basic) { - nano::network_params params; - nano::local_vote_history history{ params.voting }; + nano::local_vote_history history{ nano::dev::network_params.voting }; ASSERT_FALSE (history.exists (1)); ASSERT_FALSE (history.exists (2)); ASSERT_TRUE (history.votes (1).empty ()); diff --git a/nano/lib/lmdbconfig.cpp b/nano/lib/lmdbconfig.cpp index 603cd53bd2..a4387fcaa8 100644 --- a/nano/lib/lmdbconfig.cpp +++ b/nano/lib/lmdbconfig.cpp @@ -31,7 +31,6 @@ nano::error nano::lmdb_config::serialize_toml (nano::tomlconfig & toml) const nano::error nano::lmdb_config::deserialize_toml (nano::tomlconfig & toml) { - static nano::network_params params; auto default_max_databases = max_databases; toml.get_optional ("max_databases", max_databases); toml.get_optional ("map_size", map_size); diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index 603d4450d9..4e48879433 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -2326,7 +2326,7 @@ class history_visitor : public nano::block_visitor // Report opens as a receive tree.put ("type", "receive"); } - if (block_a.hashables.source != network_params.ledger.genesis->account ()) + if (block_a.hashables.source != handler.node.ledger.constants.genesis->account ()) { bool error_or_pruned (false); auto amount (handler.node.ledger.amount_safe (transaction, hash, error_or_pruned).convert_to ()); @@ -2342,7 +2342,7 @@ class history_visitor : public nano::block_visitor } else { - tree.put ("account", network_params.ledger.genesis->account ().to_account ()); + tree.put ("account", handler.node.ledger.constants.genesis->account ().to_account ()); tree.put ("amount", nano::dev::constants.genesis_amount.convert_to ()); } } @@ -2455,7 +2455,6 @@ class history_visitor : public nano::block_visitor nano::transaction & transaction; boost::property_tree::ptree & tree; nano::block_hash const & hash; - nano::network_params network_params; std::vector const & accounts_filter; }; } diff --git a/nano/node/nodeconfig.cpp b/nano/node/nodeconfig.cpp index 724f9371ae..e594ed4159 100644 --- a/nano/node/nodeconfig.cpp +++ b/nano/node/nodeconfig.cpp @@ -378,7 +378,6 @@ nano::error nano::node_config::deserialize_toml (nano::tomlconfig & toml) } // Validate ranges - nano::network_params network_params; if (election_hint_weight_percent < 5 || election_hint_weight_percent > 50) { toml.get_error ().set ("election_hint_weight_percent must be a number between 5 and 50"); diff --git a/nano/node/portmapping.cpp b/nano/node/portmapping.cpp index 35c31896c8..efb09f0c6f 100644 --- a/nano/node/portmapping.cpp +++ b/nano/node/portmapping.cpp @@ -50,7 +50,7 @@ std::string nano::port_mapping::to_string () void nano::port_mapping::refresh_devices () { - if (!network_params.network.is_dev_network ()) + if (!node.network_params.network.is_dev_network ()) { upnp_state upnp_l; int discover_error_l = 0; @@ -96,7 +96,7 @@ nano::endpoint nano::port_mapping::external_address () void nano::port_mapping::refresh_mapping () { - debug_assert (!network_params.network.is_dev_network ()); + debug_assert (!node.network_params.network.is_dev_network ()); if (on) { nano::lock_guard guard_l (mutex); @@ -106,8 +106,8 @@ void nano::port_mapping::refresh_mapping () // We don't map the RPC port because, unless RPC authentication was added, this would almost always be a security risk for (auto & protocol : protocols | boost::adaptors::filtered ([] (auto const & p) { return p.enabled; })) { - auto upnp_description = std::string ("Nano Node (") + network_params.network.get_current_network_as_string () + ")"; - auto add_port_mapping_error_l (UPNP_AddPortMapping (upnp.urls.controlURL, upnp.data.first.servicetype, config_port_l.c_str (), node_port_l.c_str (), address.to_string ().c_str (), upnp_description.c_str (), protocol.name, nullptr, std::to_string (network_params.portmapping.lease_duration.count ()).c_str ())); + auto upnp_description = std::string ("Nano Node (") + node.network_params.network.get_current_network_as_string () + ")"; + auto add_port_mapping_error_l (UPNP_AddPortMapping (upnp.urls.controlURL, upnp.data.first.servicetype, config_port_l.c_str (), node_port_l.c_str (), address.to_string ().c_str (), upnp_description.c_str (), protocol.name, nullptr, std::to_string (node.network_params.portmapping.lease_duration.count ()).c_str ())); if (add_port_mapping_error_l == UPNPCOMMAND_SUCCESS) { @@ -128,7 +128,7 @@ void nano::port_mapping::refresh_mapping () bool nano::port_mapping::check_lost_or_old_mapping () { // Long discovery time and fast setup/teardown make this impractical for testing - debug_assert (!network_params.network.is_dev_network ()); + debug_assert (!node.network_params.network.is_dev_network ()); bool result_l (false); nano::lock_guard guard_l (mutex); auto node_port_l (std::to_string (node.network.endpoint ().port ())); @@ -141,7 +141,7 @@ bool nano::port_mapping::check_lost_or_old_mapping () remaining_mapping_duration_l.fill (0); auto verify_port_mapping_error_l (UPNP_GetSpecificPortMappingEntry (upnp.urls.controlURL, upnp.data.first.servicetype, config_port_l.c_str (), protocol.name, nullptr, int_client_l.data (), int_port_l.data (), nullptr, nullptr, remaining_mapping_duration_l.data ())); auto remaining_from_port_mapping = std::atoi (remaining_mapping_duration_l.data ()); - auto lease_duration = network_params.portmapping.lease_duration.count (); + auto lease_duration = node.network_params.portmapping.lease_duration.count (); auto lease_duration_divided_by_two = (lease_duration / 2); auto recent_lease = (remaining_from_port_mapping >= lease_duration_divided_by_two); if (verify_port_mapping_error_l != UPNPCOMMAND_SUCCESS) @@ -178,7 +178,7 @@ bool nano::port_mapping::check_lost_or_old_mapping () void nano::port_mapping::check_mapping_loop () { - auto health_check_period = network_params.portmapping.health_check_period; + auto health_check_period = node.network_params.portmapping.health_check_period; refresh_devices (); diff --git a/nano/node/portmapping.hpp b/nano/node/portmapping.hpp index f1dedc4906..e5e8539e62 100644 --- a/nano/node/portmapping.hpp +++ b/nano/node/portmapping.hpp @@ -58,7 +58,6 @@ class port_mapping std::string get_config_port (std::string const &); upnp_state upnp; nano::node & node; - nano::network_params network_params; boost::asio::ip::address_v4 address; std::array protocols; uint64_t check_count{ 0 }; diff --git a/nano/node/wallet.hpp b/nano/node/wallet.hpp index 49e47669b9..b7e69d09c0 100644 --- a/nano/node/wallet.hpp +++ b/nano/node/wallet.hpp @@ -157,7 +157,6 @@ class wallet final : public std::enable_shared_from_this nano::public_key change_seed (nano::transaction const & transaction_a, nano::raw_key const & prv_a, uint32_t count = 0); void deterministic_restore (nano::transaction const & transaction_a); bool live (); - nano::network_params network_params; std::unordered_set free_accounts; std::function lock_observer; nano::wallet_store store; diff --git a/nano/qt/qt.cpp b/nano/qt/qt.cpp index d0a91e87f9..7fa6eac0e8 100644 --- a/nano/qt/qt.cpp +++ b/nano/qt/qt.cpp @@ -542,9 +542,8 @@ class short_text_visitor : public nano::block_visitor } void open_block (nano::open_block const & block_a) { - static nano::network_params params; type = "Receive"; - if (block_a.hashables.source != params.ledger.genesis->account ()) + if (block_a.hashables.source != ledger.constants.genesis->account ()) { bool error_or_pruned (false); account = ledger.account_safe (transaction, block_a.hashables.source, error_or_pruned); @@ -556,7 +555,7 @@ class short_text_visitor : public nano::block_visitor } else { - account = params.ledger.genesis->account (); + account = ledger.constants.genesis->account (); amount = nano::dev::constants.genesis_amount; } } diff --git a/nano/slow_test/node.cpp b/nano/slow_test/node.cpp index c04b4c6cb4..faadc0f426 100644 --- a/nano/slow_test/node.cpp +++ b/nano/slow_test/node.cpp @@ -1476,7 +1476,6 @@ TEST (telemetry, many_nodes) } // Check the metrics - nano::network_params params; for (auto & data : telemetry_datas) { ASSERT_EQ (data.unchecked_count, 0); @@ -1484,7 +1483,7 @@ TEST (telemetry, many_nodes) ASSERT_LE (data.peer_count, 9U); ASSERT_EQ (data.account_count, 1); ASSERT_TRUE (data.block_count == 2); - ASSERT_EQ (data.protocol_version, params.protocol.protocol_version); + ASSERT_EQ (data.protocol_version, nano::dev::network_params.protocol.protocol_version); ASSERT_GE (data.bandwidth_cap, 100000); ASSERT_LT (data.bandwidth_cap, 100000 + system.nodes.size ()); ASSERT_EQ (data.major_version, nano::get_major_node_version ()); From 957ebe10b9cda0cd331ccba9d5bf4e018533c0ce Mon Sep 17 00:00:00 2001 From: Russel Waters <6511720+argakiig@users.noreply.github.com> Date: Mon, 2 Aug 2021 06:22:15 -0700 Subject: [PATCH 128/346] Network selector (#3410) * fixes regression allowing for networks to honor build and runtime selection * clang-format --- nano/node/cli.cpp | 2 +- nano/node/nodeconfig.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/nano/node/cli.cpp b/nano/node/cli.cpp index a7c855f58b..290f6cf279 100644 --- a/nano/node/cli.cpp +++ b/nano/node/cli.cpp @@ -702,7 +702,7 @@ std::error_code nano::handle_node_options (boost::program_options::variables_map nano::raw_key junk1; junk1.clear (); nano::uint256_union junk2 (0); - nano::kdf kdf{ inactive_node->node->config.network_params.kdf_work}; + nano::kdf kdf{ inactive_node->node->config.network_params.kdf_work }; kdf.phs (junk1, "", junk2); std::cout << "Testing time retrieval latency... " << std::flush; nano::timer timer (nano::timer_state::started); diff --git a/nano/node/nodeconfig.cpp b/nano/node/nodeconfig.cpp index 724f9371ae..192960c4ca 100644 --- a/nano/node/nodeconfig.cpp +++ b/nano/node/nodeconfig.cpp @@ -21,7 +21,7 @@ const std::string default_test_peer_network = nano::get_env_or_default ("NANO_TE } nano::node_config::node_config () : - node_config (0, nano::logging (), nano::dev::network_params) + node_config (0, nano::logging (), nano::network_params{ nano::network_constants::active_network }) { } From 49d66153faef0c41dfaba8d51a3429f7c86fcef7 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Tue, 3 Aug 2021 10:17:52 +0100 Subject: [PATCH 129/346] Removing unnecessary checks for is_dev_network in confirmation height process and remove the subsequently unused instance of nano::network_params that was instantiated statically. --- nano/node/confirmation_height_processor.cpp | 1 - nano/node/confirmation_height_processor.hpp | 1 - nano/node/confirmation_height_unbounded.cpp | 4 ++-- nano/node/confirmation_height_unbounded.hpp | 1 - 4 files changed, 2 insertions(+), 5 deletions(-) diff --git a/nano/node/confirmation_height_processor.cpp b/nano/node/confirmation_height_processor.cpp index 8c99a59a22..ca5999c84a 100644 --- a/nano/node/confirmation_height_processor.cpp +++ b/nano/node/confirmation_height_processor.cpp @@ -128,7 +128,6 @@ void nano::confirmation_height_processor::run (confirmation_height_mode mode_a) else { // Pausing is only utilised in some tests to help prevent it processing added blocks until required. - debug_assert (network_params.network.is_dev_network ()); original_block = nullptr; condition.wait (lk); } diff --git a/nano/node/confirmation_height_processor.hpp b/nano/node/confirmation_height_processor.hpp index 22d8c26006..bf0672e05b 100644 --- a/nano/node/confirmation_height_processor.hpp +++ b/nano/node/confirmation_height_processor.hpp @@ -91,7 +91,6 @@ class confirmation_height_processor final nano::write_database_queue & write_database_queue; /** The maximum amount of blocks to write at once. This is dynamically modified by the bounded processor based on previous write performance **/ uint64_t batch_write_size{ 16384 }; - nano::network_params network_params; confirmation_height_unbounded unbounded_processor; confirmation_height_bounded bounded_processor; diff --git a/nano/node/confirmation_height_unbounded.cpp b/nano/node/confirmation_height_unbounded.cpp index 827897ac6e..7f49ff4d0e 100644 --- a/nano/node/confirmation_height_unbounded.cpp +++ b/nano/node/confirmation_height_unbounded.cpp @@ -381,8 +381,8 @@ void nano::confirmation_height_unbounded::cement_blocks (nano::write_guard & sco if (pending.height > confirmation_height) { auto block = ledger.store.block.get (transaction, pending.hash); - debug_assert (network_params.network.is_dev_network () || ledger.pruning || block != nullptr); - debug_assert (network_params.network.is_dev_network () || ledger.pruning || block->sideband ().height == pending.height); + debug_assert (ledger.pruning || block != nullptr); + debug_assert (ledger.pruning || block->sideband ().height == pending.height); if (!block) { diff --git a/nano/node/confirmation_height_unbounded.hpp b/nano/node/confirmation_height_unbounded.hpp index 2d4e213acc..99de177461 100644 --- a/nano/node/confirmation_height_unbounded.hpp +++ b/nano/node/confirmation_height_unbounded.hpp @@ -95,7 +95,6 @@ class confirmation_height_unbounded final void collect_unconfirmed_receive_and_sources_for_account (uint64_t, uint64_t, std::shared_ptr const &, nano::block_hash const &, nano::account const &, nano::read_transaction const &, std::vector &, std::vector &, std::vector &, std::shared_ptr original_block); void prepare_iterated_blocks_for_cementing (preparation_data &); - nano::network_params network_params; nano::ledger & ledger; nano::write_database_queue & write_database_queue; std::chrono::milliseconds batch_separate_pending_min_time; From 2068e044411fb3618abb0187c52e0f96364bacc0 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Tue, 3 Aug 2021 10:18:36 +0100 Subject: [PATCH 130/346] Rewrite reset_confirmation_heights to use a reference to ledger_constants --- nano/node/cli.cpp | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/nano/node/cli.cpp b/nano/node/cli.cpp index a7c855f58b..0f807df2dd 100644 --- a/nano/node/cli.cpp +++ b/nano/node/cli.cpp @@ -9,7 +9,7 @@ namespace { -void reset_confirmation_heights (nano::write_transaction const & transaction, nano::store & store); +void reset_confirmation_heights (nano::write_transaction const & transaction, nano::ledger_constants & constants, nano::store & store); bool is_using_rocksdb (boost::filesystem::path const & data_path, boost::program_options::variables_map const & vm, std::error_code & ec); } @@ -236,7 +236,7 @@ bool copy_database (boost::filesystem::path const & data_path, boost::program_op } if (vm.count ("confirmation_height_clear")) { - reset_confirmation_heights (store.tx_begin_write (), store); + reset_confirmation_heights (store.tx_begin_write (), node.node->network_params.ledger, store); } if (vm.count ("final_vote_clear")) { @@ -601,7 +601,7 @@ std::error_code nano::handle_node_options (boost::program_options::variables_map else { auto transaction (node.node->store.tx_begin_write ()); - reset_confirmation_heights (transaction, node.node->store); + reset_confirmation_heights (transaction, node.node->network_params.ledger, node.node->store); std::cout << "Confirmation heights of all accounts (except genesis which is set to 1) are set to 0" << std::endl; } } @@ -1300,14 +1300,13 @@ std::unique_ptr nano::default_inactive_node (boost::filesys namespace { -void reset_confirmation_heights (nano::write_transaction const & transaction, nano::store & store) +void reset_confirmation_heights (nano::write_transaction const & transaction, nano::ledger_constants & constants, nano::store & store) { // First do a clean sweep store.confirmation_height.clear (transaction); // Then make sure the confirmation height of the genesis account open block is 1 - nano::network_params network_params; - store.confirmation_height.put (transaction, network_params.ledger.genesis->account (), { 1, network_params.ledger.genesis->hash () }); + store.confirmation_height.put (transaction, constants.genesis->account (), { 1, constants.genesis->hash () }); } bool is_using_rocksdb (boost::filesystem::path const & data_path, boost::program_options::variables_map const & vm, std::error_code & ec) From 4a737c4bee1868e0584ba194ce88a35c15c3fa95 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Tue, 3 Aug 2021 12:38:42 +0100 Subject: [PATCH 131/346] Converting node_id_handshake from unnecessarily using channel::send_buffer to using channel::send --- nano/core_test/telemetry.cpp | 4 ++-- nano/node/transport/tcp.cpp | 3 +-- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/nano/core_test/telemetry.cpp b/nano/core_test/telemetry.cpp index 6c841ce5d8..e0b414229d 100644 --- a/nano/core_test/telemetry.cpp +++ b/nano/core_test/telemetry.cpp @@ -572,8 +572,8 @@ TEST (telemetry, remove_peer_different_genesis) ASSERT_TIMELY (1s, 0 == node0->network.size ()); ASSERT_TIMELY (1s, 0 == node1->network.size ()); - ASSERT_EQ (node0->stats.count (nano::stat::type::message, nano::stat::detail::node_id_handshake, nano::stat::dir::out), 1); - ASSERT_EQ (node1->stats.count (nano::stat::type::message, nano::stat::detail::node_id_handshake, nano::stat::dir::out), 1); + ASSERT_GE (node0->stats.count (nano::stat::type::message, nano::stat::detail::node_id_handshake, nano::stat::dir::out), 1); + ASSERT_GE (node1->stats.count (nano::stat::type::message, nano::stat::detail::node_id_handshake, nano::stat::dir::out), 1); nano::lock_guard guard (node0->network.excluded_peers.mutex); ASSERT_EQ (1, node0->network.excluded_peers.peers.get ().count (node1->network.endpoint ().address ())); diff --git a/nano/node/transport/tcp.cpp b/nano/node/transport/tcp.cpp index 83b62db229..69f2cf7631 100644 --- a/nano/node/transport/tcp.cpp +++ b/nano/node/transport/tcp.cpp @@ -572,7 +572,6 @@ void nano::transport::tcp_channels::start_tcp (nano::endpoint const & endpoint_a // TCP node ID handshake auto cookie (node_l->network.syn_cookies.assign (endpoint_a)); nano::node_id_handshake message (cookie, boost::none); - auto bytes = message.to_shared_const_buffer (); if (node_l->config.logging.network_node_id_handshake_logging ()) { node_l->logger.try_log (boost::str (boost::format ("Node ID handshake request sent with node ID %1% to %2%: query %3%") % node_l->node_id.pub.to_node_id () % endpoint_a % (*cookie).to_string ())); @@ -581,7 +580,7 @@ void nano::transport::tcp_channels::start_tcp (nano::endpoint const & endpoint_a std::shared_ptr> receive_buffer (std::make_shared> ()); receive_buffer->resize (256); node_l->network.tcp_channels.push_node_id_handshake_socket (socket); - channel->send_buffer (bytes, [node_w, channel, endpoint_a, receive_buffer, callback_a] (boost::system::error_code const & ec, size_t size_a) { + channel->send (message, [node_w, channel, endpoint_a, receive_buffer, callback_a] (boost::system::error_code const & ec, size_t size_a) { if (auto node_l = node_w.lock ()) { if (!ec) From fe97b2e898e1df84ce1a0742054ad4ec35296ae3 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Tue, 3 Aug 2021 13:45:06 +0100 Subject: [PATCH 132/346] Removing the version_min_m member from nano::message_header as unnecessary. Serializing this version number to/from the message_header the same as the other two version_max and version_using. --- nano/core_test/message.cpp | 2 +- nano/node/common.cpp | 11 +++-------- nano/node/common.hpp | 7 ++----- 3 files changed, 6 insertions(+), 14 deletions(-) diff --git a/nano/core_test/message.cpp b/nano/core_test/message.cpp index 8ef0e1773f..579df6ce81 100644 --- a/nano/core_test/message.cpp +++ b/nano/core_test/message.cpp @@ -65,7 +65,7 @@ TEST (message, publish_serialization) auto error (false); nano::message_header header (error, stream); ASSERT_FALSE (error); - ASSERT_EQ (nano::dev::network_params.protocol.protocol_version_min (), header.version_min ()); + ASSERT_EQ (nano::dev::network_params.protocol.protocol_version_min (), header.version_min); ASSERT_EQ (nano::dev::network_params.protocol.protocol_version, header.version_using); ASSERT_EQ (nano::dev::network_params.protocol.protocol_version, header.version_max); ASSERT_EQ (nano::message_type::publish, header.type); diff --git a/nano/node/common.cpp b/nano/node/common.cpp index f845bf62e7..1b7827a789 100644 --- a/nano/node/common.cpp +++ b/nano/node/common.cpp @@ -53,6 +53,7 @@ nano::message_header::message_header (nano::message_type type_a) : network (nano::network_constants::active_network), version_max (get_protocol_constants ().protocol_version), version_using (get_protocol_constants ().protocol_version), + version_min (get_protocol_constants ().protocol_version_min ()), type (type_a) { } @@ -71,7 +72,7 @@ void nano::message_header::serialize (nano::stream & stream_a) const nano::write (stream_a, boost::endian::native_to_big (static_cast (network))); nano::write (stream_a, version_max); nano::write (stream_a, version_using); - nano::write (stream_a, get_protocol_constants ().protocol_version_min ()); + nano::write (stream_a, version_min); nano::write (stream_a, type); nano::write (stream_a, static_cast (extensions.to_ullong ())); } @@ -87,7 +88,7 @@ bool nano::message_header::deserialize (nano::stream & stream_a) network = static_cast (boost::endian::big_to_native (network_bytes)); nano::read (stream_a, version_max); nano::read (stream_a, version_using); - nano::read (stream_a, version_min_m); + nano::read (stream_a, version_min); nano::read (stream_a, type); uint16_t extensions_l; nano::read (stream_a, extensions_l); @@ -101,12 +102,6 @@ bool nano::message_header::deserialize (nano::stream & stream_a) return error; } -uint8_t nano::message_header::version_min () const -{ - debug_assert (version_min_m != std::numeric_limits::max ()); - return version_min_m; -} - nano::message::message (nano::message_type type_a) : header (type_a) { diff --git a/nano/node/common.hpp b/nano/node/common.hpp index 2d1517e72d..5f4e51c260 100644 --- a/nano/node/common.hpp +++ b/nano/node/common.hpp @@ -198,14 +198,12 @@ class message_header final nano::networks network; uint8_t version_max; uint8_t version_using; - -private: - uint8_t version_min_m{ std::numeric_limits::max () }; + uint8_t version_min; public: nano::message_type type; std::bitset<16> extensions; - static size_t constexpr size = sizeof (nano::networks) + sizeof (version_max) + sizeof (version_using) + sizeof (version_min_m) + sizeof (type) + sizeof (/* extensions */ uint16_t); + static size_t constexpr size = sizeof (nano::networks) + sizeof (version_max) + sizeof (version_using) + sizeof (version_min) + sizeof (type) + sizeof (/* extensions */ uint16_t); void flag_set (uint8_t); static uint8_t constexpr bulk_pull_count_present_flag = 0; @@ -216,7 +214,6 @@ class message_header final static uint8_t constexpr node_id_handshake_response_flag = 1; bool node_id_handshake_is_query () const; bool node_id_handshake_is_response () const; - uint8_t version_min () const; /** Size of the payload in bytes. For some messages, the payload size is based on header flags. */ size_t payload_length_bytes () const; From 7b7a10586747fcb6b7bc701ed63e91c4f46d8eb3 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Tue, 3 Aug 2021 14:21:53 +0100 Subject: [PATCH 133/346] Passing nano::protocol_constants in to message_parser rather than referencing it statically. --- nano/core_test/message_parser.cpp | 15 ++++++++++----- nano/node/common.cpp | 8 ++++---- nano/node/common.hpp | 3 ++- nano/node/transport/udp.cpp | 2 +- 4 files changed, 17 insertions(+), 11 deletions(-) diff --git a/nano/core_test/message_parser.cpp b/nano/core_test/message_parser.cpp index 5d54e1736d..ac73dbeaaf 100644 --- a/nano/core_test/message_parser.cpp +++ b/nano/core_test/message_parser.cpp @@ -67,7 +67,8 @@ TEST (message_parser, exact_confirm_ack_size) nano::network_filter filter (1); nano::block_uniquer block_uniquer; nano::vote_uniquer vote_uniquer (block_uniquer); - nano::message_parser parser (filter, block_uniquer, vote_uniquer, visitor, system.work); + nano::protocol_constants protocol; + nano::message_parser parser (filter, block_uniquer, vote_uniquer, visitor, system.work, protocol); auto block (std::make_shared (1, 1, 2, nano::keypair ().prv, 4, *system.work.generate (nano::root (1)))); auto vote (std::make_shared (0, nano::keypair ().prv, 0, std::move (block))); nano::confirm_ack message (vote); @@ -101,7 +102,8 @@ TEST (message_parser, exact_confirm_req_size) nano::network_filter filter (1); nano::block_uniquer block_uniquer; nano::vote_uniquer vote_uniquer (block_uniquer); - nano::message_parser parser (filter, block_uniquer, vote_uniquer, visitor, system.work); + nano::protocol_constants protocol; + nano::message_parser parser (filter, block_uniquer, vote_uniquer, visitor, system.work, protocol); auto block (std::make_shared (1, 1, 2, nano::keypair ().prv, 4, *system.work.generate (nano::root (1)))); nano::confirm_req message (std::move (block)); std::vector bytes; @@ -134,7 +136,8 @@ TEST (message_parser, exact_confirm_req_hash_size) nano::network_filter filter (1); nano::block_uniquer block_uniquer; nano::vote_uniquer vote_uniquer (block_uniquer); - nano::message_parser parser (filter, block_uniquer, vote_uniquer, visitor, system.work); + nano::protocol_constants protocol; + nano::message_parser parser (filter, block_uniquer, vote_uniquer, visitor, system.work, protocol); nano::send_block block (1, 1, 2, nano::keypair ().prv, 4, *system.work.generate (nano::root (1))); nano::confirm_req message (block.hash (), block.root ()); std::vector bytes; @@ -167,7 +170,8 @@ TEST (message_parser, exact_publish_size) nano::network_filter filter (1); nano::block_uniquer block_uniquer; nano::vote_uniquer vote_uniquer (block_uniquer); - nano::message_parser parser (filter, block_uniquer, vote_uniquer, visitor, system.work); + nano::protocol_constants protocol; + nano::message_parser parser (filter, block_uniquer, vote_uniquer, visitor, system.work, protocol); auto block (std::make_shared (1, 1, 2, nano::keypair ().prv, 4, *system.work.generate (nano::root (1)))); nano::publish message (std::move (block)); std::vector bytes; @@ -200,7 +204,8 @@ TEST (message_parser, exact_keepalive_size) nano::network_filter filter (1); nano::block_uniquer block_uniquer; nano::vote_uniquer vote_uniquer (block_uniquer); - nano::message_parser parser (filter, block_uniquer, vote_uniquer, visitor, system.work); + nano::protocol_constants protocol; + nano::message_parser parser (filter, block_uniquer, vote_uniquer, visitor, system.work, protocol); nano::keepalive message; std::vector bytes; { diff --git a/nano/node/common.cpp b/nano/node/common.cpp index 1b7827a789..c7a929fcab 100644 --- a/nano/node/common.cpp +++ b/nano/node/common.cpp @@ -327,19 +327,19 @@ std::string nano::message_parser::status_string () return "[unknown parse_status]"; } -nano::message_parser::message_parser (nano::network_filter & publish_filter_a, nano::block_uniquer & block_uniquer_a, nano::vote_uniquer & vote_uniquer_a, nano::message_visitor & visitor_a, nano::work_pool & pool_a) : +nano::message_parser::message_parser (nano::network_filter & publish_filter_a, nano::block_uniquer & block_uniquer_a, nano::vote_uniquer & vote_uniquer_a, nano::message_visitor & visitor_a, nano::work_pool & pool_a, nano::protocol_constants const & protocol) : publish_filter (publish_filter_a), block_uniquer (block_uniquer_a), vote_uniquer (vote_uniquer_a), visitor (visitor_a), pool (pool_a), - status (parse_status::success) + status (parse_status::success), + protocol{ protocol } { } void nano::message_parser::deserialize_buffer (uint8_t const * buffer_a, size_t size_a) { - static nano::network_constants network_constants; status = parse_status::success; auto error (false); if (size_a <= max_safe_udp_message_size) @@ -349,7 +349,7 @@ void nano::message_parser::deserialize_buffer (uint8_t const * buffer_a, size_t nano::message_header header (error, stream); if (!error) { - if (header.version_using < get_protocol_constants ().protocol_version_min ()) + if (header.version_using < protocol.protocol_version_min ()) { status = parse_status::outdated_version; } diff --git a/nano/node/common.hpp b/nano/node/common.hpp index 5f4e51c260..547b5c0e1b 100644 --- a/nano/node/common.hpp +++ b/nano/node/common.hpp @@ -255,7 +255,7 @@ class message_parser final outdated_version, duplicate_publish_message }; - message_parser (nano::network_filter &, nano::block_uniquer &, nano::vote_uniquer &, nano::message_visitor &, nano::work_pool &); + message_parser (nano::network_filter &, nano::block_uniquer &, nano::vote_uniquer &, nano::message_visitor &, nano::work_pool &, nano::protocol_constants const & protocol); void deserialize_buffer (uint8_t const *, size_t); void deserialize_keepalive (nano::stream &, nano::message_header const &); void deserialize_publish (nano::stream &, nano::message_header const &, nano::uint128_t const & = 0); @@ -271,6 +271,7 @@ class message_parser final nano::message_visitor & visitor; nano::work_pool & pool; parse_status status; + nano::protocol_constants const & protocol; std::string status_string (); static const size_t max_safe_udp_message_size; }; diff --git a/nano/node/transport/udp.cpp b/nano/node/transport/udp.cpp index 227edf4833..3eaffd97cb 100644 --- a/nano/node/transport/udp.cpp +++ b/nano/node/transport/udp.cpp @@ -541,7 +541,7 @@ void nano::transport::udp_channels::receive_action (nano::message_buffer * data_ if (allowed_sender) { udp_message_visitor visitor (node, data_a->endpoint, sink); - nano::message_parser parser (node.network.publish_filter, node.block_uniquer, node.vote_uniquer, visitor, node.work); + nano::message_parser parser (node.network.publish_filter, node.block_uniquer, node.vote_uniquer, visitor, node.work, node.network_params.protocol); parser.deserialize_buffer (data_a->buffer, data_a->size); if (parser.status == nano::message_parser::parse_status::success) { From abdfe158655b6c1fa9e56c3bf877cc73b03495d4 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Wed, 4 Aug 2021 00:03:27 +0100 Subject: [PATCH 134/346] Sending message via nano::channel::send rather than directly via send_buffer. --- nano/node/transport/tcp.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/nano/node/transport/tcp.cpp b/nano/node/transport/tcp.cpp index 69f2cf7631..e6f6366e00 100644 --- a/nano/node/transport/tcp.cpp +++ b/nano/node/transport/tcp.cpp @@ -670,12 +670,11 @@ void nano::transport::tcp_channels::start_tcp_receive_node_id (std::shared_ptrset_last_packet_received (std::chrono::steady_clock::now ()); boost::optional> response (std::make_pair (node_l->node_id.pub, nano::sign_message (node_l->node_id.prv, node_l->node_id.pub, *message.query))); nano::node_id_handshake response_message (boost::none, response); - auto bytes = response_message.to_shared_const_buffer (); if (node_l->config.logging.network_node_id_handshake_logging ()) { node_l->logger.try_log (boost::str (boost::format ("Node ID handshake response sent with node ID %1% to %2%: query %3%") % node_l->node_id.pub.to_node_id () % endpoint_a % (*message.query).to_string ())); } - channel_a->send_buffer (bytes, [node_w, channel_a, endpoint_a, callback_a, cleanup_and_udp_fallback] (boost::system::error_code const & ec, size_t size_a) { + channel_a->send (response_message, [node_w, channel_a, endpoint_a, callback_a, cleanup_and_udp_fallback] (boost::system::error_code const & ec, size_t size_a) { if (auto node_l = node_w.lock ()) { if (!ec && channel_a) From 240b1f894df4ab712831b6cdbf69db8bce316476 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Wed, 4 Aug 2021 00:05:10 +0100 Subject: [PATCH 135/346] Moving message header version assignment to nano::channel::send rather than on message header construction. This separates the assignment of protocol-specific information, specifically the version numbers, from the logic of creating messages. --- nano/core_test/message.cpp | 15 +++++++++------ nano/core_test/network.cpp | 7 +++---- nano/node/bootstrap/bootstrap_server.cpp | 3 +++ nano/node/common.cpp | 12 ------------ nano/node/network.cpp | 2 +- nano/node/network.hpp | 2 +- nano/node/transport/transport.cpp | 5 ++++- nano/node/transport/transport.hpp | 2 +- 8 files changed, 22 insertions(+), 26 deletions(-) diff --git a/nano/core_test/message.cpp b/nano/core_test/message.cpp index 579df6ce81..266f0f141e 100644 --- a/nano/core_test/message.cpp +++ b/nano/core_test/message.cpp @@ -46,6 +46,9 @@ TEST (message, publish_serialization) { nano::publish publish (std::make_shared (0, 1, 2, nano::keypair ().prv, 4, 5)); publish.header.network = nano::networks::nano_dev_network; + publish.header.version_max = 6; + publish.header.version_using = 5; + publish.header.version_min = 4; ASSERT_EQ (nano::block_type::send, publish.header.block_type ()); std::vector bytes; { @@ -55,9 +58,9 @@ TEST (message, publish_serialization) ASSERT_EQ (8, bytes.size ()); ASSERT_EQ (0x52, bytes[0]); ASSERT_EQ (0x41, bytes[1]); - ASSERT_EQ (nano::dev::network_params.protocol.protocol_version, bytes[2]); - ASSERT_EQ (nano::dev::network_params.protocol.protocol_version, bytes[3]); - ASSERT_EQ (nano::dev::network_params.protocol.protocol_version_min (), bytes[4]); + ASSERT_EQ (6, bytes[2]); + ASSERT_EQ (5, bytes[3]); + ASSERT_EQ (4, bytes[4]); ASSERT_EQ (static_cast (nano::message_type::publish), bytes[5]); ASSERT_EQ (0x00, bytes[6]); // extensions ASSERT_EQ (static_cast (nano::block_type::send), bytes[7]); @@ -65,9 +68,9 @@ TEST (message, publish_serialization) auto error (false); nano::message_header header (error, stream); ASSERT_FALSE (error); - ASSERT_EQ (nano::dev::network_params.protocol.protocol_version_min (), header.version_min); - ASSERT_EQ (nano::dev::network_params.protocol.protocol_version, header.version_using); - ASSERT_EQ (nano::dev::network_params.protocol.protocol_version, header.version_max); + ASSERT_EQ (4, header.version_min); + ASSERT_EQ (5, header.version_using); + ASSERT_EQ (6, header.version_max); ASSERT_EQ (nano::message_type::publish, header.type); } diff --git a/nano/core_test/network.cpp b/nano/core_test/network.cpp index f1e17ac656..53e81d257b 100644 --- a/nano/core_test/network.cpp +++ b/nano/core_test/network.cpp @@ -839,12 +839,11 @@ TEST (tcp_listener, tcp_listener_timeout_node_id_handshake) auto socket (std::make_shared (*node0)); auto cookie (node0->network.syn_cookies.assign (nano::transport::map_tcp_to_endpoint (node0->bootstrap.endpoint ()))); nano::node_id_handshake node_id_handshake (cookie, boost::none); - auto input (node_id_handshake.to_shared_const_buffer ()); - socket->async_connect (node0->bootstrap.endpoint (), [&input, socket] (boost::system::error_code const & ec) { + auto channel = std::make_shared (*node0, socket); + socket->async_connect (node0->bootstrap.endpoint (), [&node_id_handshake, channel] (boost::system::error_code const & ec) { ASSERT_FALSE (ec); - socket->async_write (input, [&input] (boost::system::error_code const & ec, size_t size_a) { + channel->send (node_id_handshake, [] (boost::system::error_code const & ec, size_t size_a) { ASSERT_FALSE (ec); - ASSERT_EQ (input.size (), size_a); }); }); ASSERT_TIMELY (5s, node0->stats.count (nano::stat::type::message, nano::stat::detail::node_id_handshake) != 0); diff --git a/nano/node/bootstrap/bootstrap_server.cpp b/nano/node/bootstrap/bootstrap_server.cpp index 8f76aa5586..ea519aa47d 100644 --- a/nano/node/bootstrap/bootstrap_server.cpp +++ b/nano/node/bootstrap/bootstrap_server.cpp @@ -670,6 +670,9 @@ class request_response_visitor : public nano::message_visitor debug_assert (!nano::validate_message (response->first, *message_a.query, response->second)); auto cookie (connection->node->network.syn_cookies.assign (nano::transport::map_tcp_to_endpoint (connection->remote_endpoint))); nano::node_id_handshake response_message (cookie, response); + response_message.header.version_max = connection->node->network_params.protocol.protocol_version; + response_message.header.version_using = connection->node->network_params.protocol.protocol_version; + response_message.header.version_min = connection->node->network_params.protocol.protocol_version_min (); auto shared_const_buffer = response_message.to_shared_const_buffer (); connection->socket->async_write (shared_const_buffer, [connection = std::weak_ptr (connection)] (boost::system::error_code const & ec, size_t size_a) { if (auto connection_l = connection.lock ()) diff --git a/nano/node/common.cpp b/nano/node/common.cpp index c7a929fcab..4807b19bf7 100644 --- a/nano/node/common.cpp +++ b/nano/node/common.cpp @@ -21,15 +21,6 @@ std::chrono::seconds constexpr nano::telemetry_cache_cutoffs::dev; std::chrono::seconds constexpr nano::telemetry_cache_cutoffs::beta; std::chrono::seconds constexpr nano::telemetry_cache_cutoffs::live; -namespace -{ -nano::protocol_constants const & get_protocol_constants () -{ - static nano::network_params params; - return params.protocol; -} -} - uint64_t nano::ip_address_hash_raw (boost::asio::ip::address const & ip_a, uint16_t port) { static nano::random_constants constants; @@ -51,9 +42,6 @@ uint64_t nano::ip_address_hash_raw (boost::asio::ip::address const & ip_a, uint1 nano::message_header::message_header (nano::message_type type_a) : network (nano::network_constants::active_network), - version_max (get_protocol_constants ().protocol_version), - version_using (get_protocol_constants ().protocol_version), - version_min (get_protocol_constants ().protocol_version_min ()), type (type_a) { } diff --git a/nano/node/network.cpp b/nano/node/network.cpp index aab55793c7..22c92e4ab8 100644 --- a/nano/node/network.cpp +++ b/nano/node/network.cpp @@ -180,7 +180,7 @@ void nano::network::send_node_id_handshake (std::shared_ptrsend (message); } -void nano::network::flood_message (nano::message const & message_a, nano::buffer_drop_policy const drop_policy_a, float const scale_a) +void nano::network::flood_message (nano::message & message_a, nano::buffer_drop_policy const drop_policy_a, float const scale_a) { for (auto & i : list (fanout (scale_a))) { diff --git a/nano/node/network.hpp b/nano/node/network.hpp index 60223c4f49..598f62e5ad 100644 --- a/nano/node/network.hpp +++ b/nano/node/network.hpp @@ -123,7 +123,7 @@ class network final nano::networks id; void start (); void stop (); - void flood_message (nano::message const &, nano::buffer_drop_policy const = nano::buffer_drop_policy::limiter, float const = 1.0f); + void flood_message (nano::message &, nano::buffer_drop_policy const = nano::buffer_drop_policy::limiter, float const = 1.0f); void flood_keepalive (float const scale_a = 1.0f) { nano::keepalive message; diff --git a/nano/node/transport/transport.cpp b/nano/node/transport/transport.cpp index 3f8fd72e92..e40c1c2ca9 100644 --- a/nano/node/transport/transport.cpp +++ b/nano/node/transport/transport.cpp @@ -100,8 +100,11 @@ nano::transport::channel::channel (nano::node & node_a) : set_network_version (node_a.network_params.protocol.protocol_version); } -void nano::transport::channel::send (nano::message const & message_a, std::function const & callback_a, nano::buffer_drop_policy drop_policy_a) +void nano::transport::channel::send (nano::message & message_a, std::function const & callback_a, nano::buffer_drop_policy drop_policy_a) { + message_a.header.version_max = node.network_params.protocol.protocol_version; + message_a.header.version_using = node.network_params.protocol.protocol_version; + message_a.header.version_min = node.network_params.protocol.protocol_version_min (); callback_visitor visitor; message_a.visit (visitor); auto buffer (message_a.to_shared_const_buffer ()); diff --git a/nano/node/transport/transport.hpp b/nano/node/transport/transport.hpp index b38672ae21..bcee287eef 100644 --- a/nano/node/transport/transport.hpp +++ b/nano/node/transport/transport.hpp @@ -47,7 +47,7 @@ namespace transport virtual ~channel () = default; virtual size_t hash_code () const = 0; virtual bool operator== (nano::transport::channel const &) const = 0; - void send (nano::message const & message_a, std::function const & callback_a = nullptr, nano::buffer_drop_policy policy_a = nano::buffer_drop_policy::limiter); + void send (nano::message & message_a, std::function const & callback_a = nullptr, nano::buffer_drop_policy policy_a = nano::buffer_drop_policy::limiter); virtual void send_buffer (nano::shared_const_buffer const &, std::function const & = nullptr, nano::buffer_drop_policy = nano::buffer_drop_policy::limiter) = 0; virtual std::string to_string () const = 0; virtual nano::endpoint get_endpoint () const = 0; From 5ece01af9a48d8065747ea99023181997e307147 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Wed, 4 Aug 2021 00:17:26 +0100 Subject: [PATCH 136/346] Removing unused variables. --- nano/node/common.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/nano/node/common.cpp b/nano/node/common.cpp index 4807b19bf7..cd15eb08d1 100644 --- a/nano/node/common.cpp +++ b/nano/node/common.cpp @@ -56,7 +56,6 @@ nano::message_header::message_header (bool & error_a, nano::stream & stream_a) void nano::message_header::serialize (nano::stream & stream_a) const { - static nano::network_params network_params; nano::write (stream_a, boost::endian::native_to_big (static_cast (network))); nano::write (stream_a, version_max); nano::write (stream_a, version_using); @@ -70,7 +69,6 @@ bool nano::message_header::deserialize (nano::stream & stream_a) auto error (false); try { - static nano::network_params network_params; uint16_t network_bytes; nano::read (stream_a, network_bytes); network = static_cast (boost::endian::big_to_native (network_bytes)); From 0f2c738afffa9ecc870c5e49cd8057f89efe8d31 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Wed, 4 Aug 2021 00:36:42 +0100 Subject: [PATCH 137/346] Removing unused references to nano::network_params and replacing a statically instantiated dev network params with the version available in the nano::dev namespace. --- nano/nano_node/entry.cpp | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/nano/nano_node/entry.cpp b/nano/nano_node/entry.cpp index 6f3fc93670..4c9900cf3e 100644 --- a/nano/nano_node/entry.cpp +++ b/nano/nano_node/entry.cpp @@ -887,8 +887,6 @@ int main (int argc, char * const * argv) } else if (vm.count ("debug_profile_process")) { - nano::network_constants::set_active_network (nano::networks::nano_dev_network); - nano::network_params dev_params; nano::block_builder builder; size_t num_accounts (100000); size_t num_iterations (5); // 100,000 * 5 * 2 = 1,000,000 blocks @@ -1004,8 +1002,6 @@ int main (int argc, char * const * argv) } else if (vm.count ("debug_profile_votes")) { - nano::network_constants::set_active_network (nano::networks::nano_dev_network); - nano::network_params dev_params; nano::block_builder builder; size_t num_elections (40000); size_t num_representatives (25); @@ -1112,8 +1108,6 @@ int main (int argc, char * const * argv) } else if (vm.count ("debug_profile_frontiers_confirmation")) { - nano::force_nano_dev_network (); - nano::network_params dev_params; nano::block_builder builder; size_t count (32 * 1024); auto count_it = vm.find ("count"); @@ -1172,7 +1166,7 @@ int main (int argc, char * const * argv) .balance (genesis_balance) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*work.generate (nano::work_version::work_1, genesis_latest, dev_params.network.publish_thresholds.epoch_1)) + .work (*work.generate (nano::work_version::work_1, genesis_latest, nano::dev::network_params.network.publish_thresholds.epoch_1)) .build (); genesis_latest = send->hash (); @@ -1184,7 +1178,7 @@ int main (int argc, char * const * argv) .balance (1) .link (genesis_latest) .sign (key.prv, key.pub) - .work (*work.generate (nano::work_version::work_1, key.pub, dev_params.network.publish_thresholds.epoch_1)) + .work (*work.generate (nano::work_version::work_1, key.pub, nano::dev::network_params.network.publish_thresholds.epoch_1)) .build (); blocks.push_back (std::move (send)); From 624674a237383d389a61211b8a856dcd8411aa90 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Wed, 4 Aug 2021 00:46:02 +0100 Subject: [PATCH 138/346] Replacing static network_params with a default inactive node. --- nano/nano_node/entry.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nano/nano_node/entry.cpp b/nano/nano_node/entry.cpp index 4c9900cf3e..a5585ca582 100644 --- a/nano/nano_node/entry.cpp +++ b/nano/nano_node/entry.cpp @@ -440,14 +440,14 @@ int main (int argc, char * const * argv) } else if (vm.count ("debug_profile_kdf")) { - nano::network_params network_params; + auto inactive_node = nano::default_inactive_node (data_path, vm); nano::uint256_union result; nano::uint256_union salt (0); std::string password (""); while (true) { auto begin1 (std::chrono::high_resolution_clock::now ()); - auto success (argon2_hash (1, network_params.kdf_work, 1, password.data (), password.size (), salt.bytes.data (), salt.bytes.size (), result.bytes.data (), result.bytes.size (), NULL, 0, Argon2_d, 0x10)); + auto success (argon2_hash (1, inactive_node->node->network_params.kdf_work, 1, password.data (), password.size (), salt.bytes.data (), salt.bytes.size (), result.bytes.data (), result.bytes.size (), NULL, 0, Argon2_d, 0x10)); (void)success; auto end1 (std::chrono::high_resolution_clock::now ()); std::cerr << boost::str (boost::format ("Derivation time: %1%us\n") % std::chrono::duration_cast (end1 - begin1).count ()); From 0d4f505bf018bdee3b0322cac026af668c7dd182 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Wed, 4 Aug 2021 01:29:54 +0100 Subject: [PATCH 139/346] Threading is_state_epoch through block callbacks and removing static instantiation of network parameters to test if a state block is an epoch. --- nano/core_test/confirmation_height.cpp | 2 +- nano/core_test/node.cpp | 2 +- nano/node/active_transactions.cpp | 10 ++++++---- nano/node/ipc/flatbuffers_util.cpp | 9 ++++----- nano/node/ipc/flatbuffers_util.hpp | 4 ++-- nano/node/ipc/ipc_broker.cpp | 4 ++-- nano/node/json_handler.cpp | 4 +++- nano/node/node.cpp | 20 +++++++++++++------- nano/node/node.hpp | 2 +- nano/node/node_observers.hpp | 2 +- nano/qt/qt.cpp | 2 +- 11 files changed, 35 insertions(+), 26 deletions(-) diff --git a/nano/core_test/confirmation_height.cpp b/nano/core_test/confirmation_height.cpp index a8d758e04d..644e1cf601 100644 --- a/nano/core_test/confirmation_height.cpp +++ b/nano/core_test/confirmation_height.cpp @@ -12,7 +12,7 @@ namespace { void add_callback_stats (nano::node & node, std::vector * observer_order = nullptr, nano::mutex * mutex = nullptr) { - node.observers.blocks.add ([&stats = node.stats, observer_order, mutex] (nano::election_status const & status_a, std::vector const &, nano::account const &, nano::amount const &, bool) { + node.observers.blocks.add ([&stats = node.stats, observer_order, mutex] (nano::election_status const & status_a, std::vector const &, nano::account const &, nano::amount const &, bool, bool) { stats.inc (nano::stat::type::http_callback, nano::stat::detail::http_callback, nano::stat::dir::out); if (mutex) { diff --git a/nano/core_test/node.cpp b/nano/core_test/node.cpp index e1f5535035..591c24416f 100644 --- a/nano/core_test/node.cpp +++ b/nano/core_test/node.cpp @@ -1486,7 +1486,7 @@ TEST (node, coherent_observer) { nano::system system (1); auto & node1 (*system.nodes[0]); - node1.observers.blocks.add ([&node1] (nano::election_status const & status_a, std::vector const &, nano::account const &, nano::uint128_t const &, bool) { + node1.observers.blocks.add ([&node1] (nano::election_status const & status_a, std::vector const &, nano::account const &, nano::uint128_t const &, bool, bool) { auto transaction (node1.store.tx_begin_read ()); ASSERT_TRUE (node1.store.block.exists (transaction, status_a.winner->hash ())); }); diff --git a/nano/node/active_transactions.cpp b/nano/node/active_transactions.cpp index 10f9c16a98..2a8f8907ba 100644 --- a/nano/node/active_transactions.cpp +++ b/nano/node/active_transactions.cpp @@ -183,9 +183,10 @@ void nano::active_transactions::block_cemented_callback (std::shared_ptrhash (), account, amount, is_state_send, pending_account); - node.observers.blocks.notify (nano::election_status{ block_a, 0, 0, std::chrono::duration_cast (std::chrono::system_clock::now ().time_since_epoch ()), std::chrono::duration_values::zero (), 0, 1, 0, nano::election_status_type::inactive_confirmation_height }, {}, account, amount, is_state_send); + node.process_confirmed_data (transaction, block_a, block_a->hash (), account, amount, is_state_send, is_state_epoch, pending_account); + node.observers.blocks.notify (nano::election_status{ block_a, 0, 0, std::chrono::duration_cast (std::chrono::system_clock::now ().time_since_epoch ()), std::chrono::duration_values::zero (), 0, 1, 0, nano::election_status_type::inactive_confirmation_height }, {}, account, amount, is_state_send, is_state_epoch); } else { @@ -208,15 +209,16 @@ void nano::active_transactions::block_cemented_callback (std::shared_ptrstatus.type = *election_status_type; election->status.confirmation_request_count = election->confirmation_request_count; status_l = election->status; election_lk.unlock (); auto votes (election->votes_with_weight ()); - node.observers.blocks.notify (status_l, votes, account, amount, is_state_send); + node.observers.blocks.notify (status_l, votes, account, amount, is_state_send, is_state_epoch); if (amount > 0) { node.observers.account_balance.notify (account, false); diff --git a/nano/node/ipc/flatbuffers_util.cpp b/nano/node/ipc/flatbuffers_util.cpp index 20813943d3..8cf1fe5e40 100644 --- a/nano/node/ipc/flatbuffers_util.cpp +++ b/nano/node/ipc/flatbuffers_util.cpp @@ -3,9 +3,8 @@ #include #include -std::unique_ptr nano::ipc::flatbuffers_builder::from (nano::state_block const & block_a, nano::amount const & amount_a, bool is_state_send_a) +std::unique_ptr nano::ipc::flatbuffers_builder::from (nano::state_block const & block_a, nano::amount const & amount_a, bool is_state_send_a, bool is_state_epoch_a) { - static nano::network_params params; auto block (std::make_unique ()); block->account = block_a.account ().to_account (); block->hash = block_a.hash ().to_string (); @@ -25,7 +24,7 @@ std::unique_ptr nano::ipc::flatbuffers_builder::from (nano { block->subtype = nanoapi::BlockSubType::BlockSubType_change; } - else if (amount_a == 0 && params.ledger.epochs.is_epoch_link (block_a.link ())) + else if (amount_a == 0 && is_state_epoch_a) { block->subtype = nanoapi::BlockSubType::BlockSubType_epoch; } @@ -82,14 +81,14 @@ std::unique_ptr nano::ipc::flatbuffers_builder::from (nan return block; } -nanoapi::BlockUnion nano::ipc::flatbuffers_builder::block_to_union (nano::block const & block_a, nano::amount const & amount_a, bool is_state_send_a) +nanoapi::BlockUnion nano::ipc::flatbuffers_builder::block_to_union (nano::block const & block_a, nano::amount const & amount_a, bool is_state_send_a, bool is_state_epoch_a) { nanoapi::BlockUnion u; switch (block_a.type ()) { case nano::block_type::state: { - u.Set (*from (dynamic_cast (block_a), amount_a, is_state_send_a)); + u.Set (*from (dynamic_cast (block_a), amount_a, is_state_send_a, is_state_epoch_a)); break; } case nano::block_type::send: diff --git a/nano/node/ipc/flatbuffers_util.hpp b/nano/node/ipc/flatbuffers_util.hpp index c1236a9413..2e7f8fcf1a 100644 --- a/nano/node/ipc/flatbuffers_util.hpp +++ b/nano/node/ipc/flatbuffers_util.hpp @@ -21,8 +21,8 @@ namespace ipc class flatbuffers_builder { public: - static nanoapi::BlockUnion block_to_union (nano::block const & block_a, nano::amount const & amount_a, bool is_state_send_a = false); - static std::unique_ptr from (nano::state_block const & block_a, nano::amount const & amount_a, bool is_state_send_a); + static nanoapi::BlockUnion block_to_union (nano::block const & block_a, nano::amount const & amount_a, bool is_state_send_a = false, bool is_state_epoch_a = false); + static std::unique_ptr from (nano::state_block const & block_a, nano::amount const & amount_a, bool is_state_send_a, bool is_state_epoch_a); static std::unique_ptr from (nano::send_block const & block_a); static std::unique_ptr from (nano::receive_block const & block_a); static std::unique_ptr from (nano::open_block const & block_a); diff --git a/nano/node/ipc/ipc_broker.cpp b/nano/node/ipc/ipc_broker.cpp index b3af919fdc..77712bfc0a 100644 --- a/nano/node/ipc/ipc_broker.cpp +++ b/nano/node/ipc/ipc_broker.cpp @@ -22,7 +22,7 @@ std::shared_ptr nano::ipc::subscriber::get_parser (nano::ip void nano::ipc::broker::start () { - node.observers.blocks.add ([this_l = shared_from_this ()] (nano::election_status const & status_a, std::vector const & votes_a, nano::account const & account_a, nano::amount const & amount_a, bool is_state_send_a) { + node.observers.blocks.add ([this_l = shared_from_this ()] (nano::election_status const & status_a, std::vector const & votes_a, nano::account const & account_a, nano::amount const & amount_a, bool is_state_send_a, bool is_state_epoch_a) { debug_assert (status_a.type != nano::election_status_type::ongoing); try @@ -51,7 +51,7 @@ void nano::ipc::broker::start () break; }; confirmation->confirmation_type = nanoapi::TopicConfirmationType::TopicConfirmationType_active_quorum; - confirmation->block = nano::ipc::flatbuffers_builder::block_to_union (*status_a.winner, amount_a, is_state_send_a); + confirmation->block = nano::ipc::flatbuffers_builder::block_to_union (*status_a.winner, amount_a, is_state_send_a, is_state_epoch_a); confirmation->election_info = std::make_unique (); confirmation->election_info->duration = status_a.election_duration.count (); confirmation->election_info->time = status_a.election_end.count (); diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index 4e48879433..5951683d7e 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -1138,14 +1138,16 @@ void nano::json_handler::block_confirm () bool error_or_pruned (false); auto amount (node.ledger.amount_safe (transaction, hash, error_or_pruned)); bool is_state_send (false); + bool is_state_epoch (false); if (!error_or_pruned) { if (auto state = dynamic_cast (block_l.get ())) { is_state_send = node.ledger.is_send (transaction, *state); + is_state_epoch = amount == 0 && node.ledger.is_epoch_link (state->link ()); } } - node.observers.blocks.notify (status, {}, account, amount, is_state_send); + node.observers.blocks.notify (status, {}, account, amount, is_state_send, is_state_epoch); } response_l.put ("started", "1"); } diff --git a/nano/node/node.cpp b/nano/node/node.cpp index d1791eab8e..9d29cb0e7f 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -149,12 +149,12 @@ nano::node::node (boost::asio::io_context & io_ctx_a, boost::filesystem::path co }; if (!config.callback_address.empty ()) { - observers.blocks.add ([this] (nano::election_status const & status_a, std::vector const & votes_a, nano::account const & account_a, nano::amount const & amount_a, bool is_state_send_a) { + observers.blocks.add ([this] (nano::election_status const & status_a, std::vector const & votes_a, nano::account const & account_a, nano::amount const & amount_a, bool is_state_send_a, bool is_state_epoch_a) { auto block_a (status_a.winner); if ((status_a.type == nano::election_status_type::active_confirmed_quorum || status_a.type == nano::election_status_type::active_confirmation_height) && this->block_arrival.recent (block_a->hash ())) { auto node_l (shared_from_this ()); - background ([node_l, block_a, account_a, amount_a, is_state_send_a] () { + background ([node_l, block_a, account_a, amount_a, is_state_send_a, is_state_epoch_a] () { boost::property_tree::ptree event; event.add ("account", account_a.to_account ()); event.add ("hash", block_a->hash ().to_string ()); @@ -174,8 +174,9 @@ nano::node::node (boost::asio::io_context & io_ctx_a, boost::filesystem::path co { event.add ("subtype", "change"); } - else if (amount_a == 0 && node_l->ledger.is_epoch_link (block_a->link ())) + else if (is_state_epoch_a) { + debug_assert (amount_a == 0 && node_l->ledger.is_epoch_link (block_a->link ())); event.add ("subtype", "epoch"); } else @@ -211,7 +212,7 @@ nano::node::node (boost::asio::io_context & io_ctx_a, boost::filesystem::path co } if (websocket_server) { - observers.blocks.add ([this] (nano::election_status const & status_a, std::vector const & votes_a, nano::account const & account_a, nano::amount const & amount_a, bool is_state_send_a) { + observers.blocks.add ([this] (nano::election_status const & status_a, std::vector const & votes_a, nano::account const & account_a, nano::amount const & amount_a, bool is_state_send_a, bool is_state_epoch_a) { debug_assert (status_a.type != nano::election_status_type::ongoing); if (this->websocket_server->any_subscriber (nano::websocket::topic::confirmation)) @@ -228,8 +229,9 @@ nano::node::node (boost::asio::io_context & io_ctx_a, boost::filesystem::path co { subtype = "change"; } - else if (amount_a == 0 && this->ledger.is_epoch_link (block_a->link ())) + else if (is_state_epoch_a) { + debug_assert (amount_a == 0 && this->ledger.is_epoch_link (block_a->link ())); subtype = "epoch"; } else @@ -259,7 +261,7 @@ nano::node::node (boost::asio::io_context & io_ctx_a, boost::filesystem::path co }); } // Add block confirmation type stats regardless of http-callback and websocket subscriptions - observers.blocks.add ([this] (nano::election_status const & status_a, std::vector const & votes_a, nano::account const & account_a, nano::amount const & amount_a, bool is_state_send_a) { + observers.blocks.add ([this] (nano::election_status const & status_a, std::vector const & votes_a, nano::account const & account_a, nano::amount const & amount_a, bool is_state_send_a, bool is_state_epoch_a) { debug_assert (status_a.type != nano::election_status_type::ongoing); switch (status_a.type) { @@ -1305,7 +1307,7 @@ void nano::node::receive_confirmed (nano::transaction const & block_transaction_ } } -void nano::node::process_confirmed_data (nano::transaction const & transaction_a, std::shared_ptr const & block_a, nano::block_hash const & hash_a, nano::account & account_a, nano::uint128_t & amount_a, bool & is_state_send_a, nano::account & pending_account_a) +void nano::node::process_confirmed_data (nano::transaction const & transaction_a, std::shared_ptr const & block_a, nano::block_hash const & hash_a, nano::account & account_a, nano::uint128_t & amount_a, bool & is_state_send_a, bool & is_state_epoch_a, nano::account & pending_account_a) { // Faster account calculation account_a = block_a->account (); @@ -1339,6 +1341,10 @@ void nano::node::process_confirmed_data (nano::transaction const & transaction_a { is_state_send_a = true; } + if (amount_a == 0 && network_params.ledger.epochs.is_epoch_link (state->link ())) + { + is_state_epoch_a = true; + } pending_account_a = state->hashables.link.as_account (); } if (auto send = dynamic_cast (block_a.get ())) diff --git a/nano/node/node.hpp b/nano/node/node.hpp index 1d9172983a..3bd4edf834 100644 --- a/nano/node/node.hpp +++ b/nano/node/node.hpp @@ -100,7 +100,7 @@ class node final : public std::enable_shared_from_this std::shared_ptr shared (); int store_version (); void receive_confirmed (nano::transaction const & block_transaction_a, nano::block_hash const & hash_a, nano::account const & destination_a); - void process_confirmed_data (nano::transaction const &, std::shared_ptr const &, nano::block_hash const &, nano::account &, nano::uint128_t &, bool &, nano::account &); + void process_confirmed_data (nano::transaction const &, std::shared_ptr const &, nano::block_hash const &, nano::account &, nano::uint128_t &, bool &, bool &, nano::account &); void process_confirmed (nano::election_status const &, uint64_t = 0); void process_active (std::shared_ptr const &); nano::process_return process (nano::block &); diff --git a/nano/node/node_observers.hpp b/nano/node/node_observers.hpp index 78c0f0e032..cea357eb10 100644 --- a/nano/node/node_observers.hpp +++ b/nano/node/node_observers.hpp @@ -11,7 +11,7 @@ class telemetry; class node_observers final { public: - using blocks_t = nano::observer_set const &, nano::account const &, nano::uint128_t const &, bool>; + using blocks_t = nano::observer_set const &, nano::account const &, nano::uint128_t const &, bool, bool>; blocks_t blocks; nano::observer_set wallet; nano::observer_set, std::shared_ptr, nano::vote_code> vote; diff --git a/nano/qt/qt.cpp b/nano/qt/qt.cpp index 7fa6eac0e8..3b43176f52 100644 --- a/nano/qt/qt.cpp +++ b/nano/qt/qt.cpp @@ -1289,7 +1289,7 @@ void nano_qt::wallet::start () this_l->push_main_stack (this_l->send_blocks_window); } }); - node.observers.blocks.add ([this_w] (nano::election_status const & status_a, std::vector const & votes_a, nano::account const & account_a, nano::uint128_t const & amount_a, bool) { + node.observers.blocks.add ([this_w] (nano::election_status const & status_a, std::vector const & votes_a, nano::account const & account_a, nano::uint128_t const & amount_a, bool, bool) { if (auto this_l = this_w.lock ()) { this_l->application.postEvent (&this_l->processor, new eventloop_event ([this_w, status_a, account_a] () { From 20828e615c0e42ecda7acda94cceafb1c8b49625 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Wed, 4 Aug 2021 01:36:37 +0100 Subject: [PATCH 140/346] Removing default constructor for nano::network_params that uses static information to determine network. --- nano/secure/common.cpp | 5 ----- nano/secure/common.hpp | 3 --- 2 files changed, 8 deletions(-) diff --git a/nano/secure/common.cpp b/nano/secure/common.cpp index 6ab960325d..8fcbd2e071 100644 --- a/nano/secure/common.cpp +++ b/nano/secure/common.cpp @@ -85,11 +85,6 @@ nano::network_params nano::dev::network_params{ nano::networks::nano_dev_network nano::ledger_constants & nano::dev::constants{ nano::dev::network_params.ledger }; std::shared_ptr & nano::dev::genesis = nano::dev::constants.genesis; -nano::network_params::network_params () : - network_params (network_constants::active_network) -{ -} - nano::network_params::network_params (nano::networks network_a) : network (network_a), ledger (network), voting (network), node (network), portmapping (network), bootstrap (network) { diff --git a/nano/secure/common.hpp b/nano/secure/common.hpp index 101502e97b..7f7ab74914 100644 --- a/nano/secure/common.hpp +++ b/nano/secure/common.hpp @@ -453,9 +453,6 @@ class bootstrap_constants class network_params { public: - /** Populate values based on the current active network */ - network_params (); - /** Populate values based on \p network_a */ network_params (nano::networks network_a); From 7230b1fad97f6bfcda4dcb9d6e320797b1388f07 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Thu, 5 Aug 2021 13:10:34 +0100 Subject: [PATCH 141/346] Merging protocol_constants in to network_constants. --- nano/core_test/bootstrap.cpp | 24 ++++++++++++------------ nano/core_test/message_parser.cpp | 20 ++++++++++---------- nano/core_test/network.cpp | 14 +++++++------- nano/core_test/node.cpp | 12 ++++++------ nano/core_test/peer_container.cpp | 8 ++++---- nano/core_test/telemetry.cpp | 4 ++-- nano/lib/config.hpp | 4 ++++ nano/node/bootstrap/bootstrap.cpp | 2 +- nano/node/bootstrap/bootstrap_server.cpp | 6 +++--- nano/node/common.cpp | 6 +++--- nano/node/common.hpp | 5 +++-- nano/node/json_handler.cpp | 2 +- nano/node/network.cpp | 4 ++-- nano/node/repcrawler.cpp | 6 +++--- nano/node/repcrawler.hpp | 4 ++-- nano/node/telemetry.cpp | 2 +- nano/node/transport/tcp.cpp | 8 ++++---- nano/node/transport/transport.cpp | 10 +++++----- nano/node/transport/udp.cpp | 8 ++++---- nano/rpc_test/rpc.cpp | 16 ++++++++-------- nano/secure/common.cpp | 5 ----- nano/secure/common.hpp | 19 ------------------- nano/slow_test/node.cpp | 2 +- nano/test_common/system.cpp | 2 +- nano/test_common/telemetry.cpp | 2 +- 25 files changed, 88 insertions(+), 107 deletions(-) diff --git a/nano/core_test/bootstrap.cpp b/nano/core_test/bootstrap.cpp index 3f78180981..96f19a7abd 100644 --- a/nano/core_test/bootstrap.cpp +++ b/nano/core_test/bootstrap.cpp @@ -533,7 +533,7 @@ TEST (bootstrap_processor, lazy_hash) node0->block_processor.flush (); // Start lazy bootstrap with last block in chain known auto node1 (std::make_shared (system.io_ctx, nano::get_available_port (), nano::unique_path (), system.logging, system.work)); - node1->network.udp_channels.insert (node0->network.endpoint (), node1->network_params.protocol.protocol_version); + node1->network.udp_channels.insert (node0->network.endpoint (), node1->network_params.network.protocol_version); node1->bootstrap_initiator.bootstrap_lazy (receive2->hash (), true); { auto lazy_attempt (node1->bootstrap_initiator.current_lazy_attempt ()); @@ -607,7 +607,7 @@ TEST (bootstrap_processor, lazy_hash_bootstrap_id) node0->block_processor.flush (); // Start lazy bootstrap with last block in chain known auto node1 (std::make_shared (system.io_ctx, nano::get_available_port (), nano::unique_path (), system.logging, system.work)); - node1->network.udp_channels.insert (node0->network.endpoint (), node1->network_params.protocol.protocol_version); + node1->network.udp_channels.insert (node0->network.endpoint (), node1->network_params.network.protocol_version); node1->bootstrap_initiator.bootstrap_lazy (receive2->hash (), true, true, "123456"); { auto lazy_attempt (node1->bootstrap_initiator.current_lazy_attempt ()); @@ -745,7 +745,7 @@ TEST (bootstrap_processor, lazy_hash_pruning) ASSERT_EQ (5, node1->ledger.cache.block_count); ASSERT_EQ (3, node1->ledger.cache.pruned_count); // Start lazy bootstrap with last block in chain known - node1->network.udp_channels.insert (node0->network.endpoint (), node1->network_params.protocol.protocol_version); + node1->network.udp_channels.insert (node0->network.endpoint (), node1->network_params.network.protocol_version); node1->bootstrap_initiator.bootstrap_lazy (receive3->hash (), true); // Check processed blocks ASSERT_TIMELY (10s, node1->ledger.cache.block_count == 9); @@ -848,7 +848,7 @@ TEST (bootstrap_processor, lazy_max_pull_count) node0->block_processor.flush (); // Start lazy bootstrap with last block in chain known auto node1 (std::make_shared (system.io_ctx, nano::get_available_port (), nano::unique_path (), system.logging, system.work)); - node1->network.udp_channels.insert (node0->network.endpoint (), node1->network_params.protocol.protocol_version); + node1->network.udp_channels.insert (node0->network.endpoint (), node1->network_params.network.protocol_version); node1->bootstrap_initiator.bootstrap_lazy (change3->hash ()); // Check processed blocks ASSERT_TIMELY (10s, node1->block (change3->hash ())); @@ -906,7 +906,7 @@ TEST (bootstrap_processor, lazy_unclear_state_link) ASSERT_EQ (nano::process_result::progress, node1->process (*receive).code); // Start lazy bootstrap with last block in chain known auto node2 = system.add_node (nano::node_config (nano::get_available_port (), system.logging), node_flags); - node2->network.udp_channels.insert (node1->network.endpoint (), node1->network_params.protocol.protocol_version); + node2->network.udp_channels.insert (node1->network.endpoint (), node1->network_params.network.protocol_version); node2->bootstrap_initiator.bootstrap_lazy (receive->hash ()); // Check processed blocks ASSERT_TIMELY (10s, !node2->bootstrap_initiator.in_progress ()); @@ -958,7 +958,7 @@ TEST (bootstrap_processor, lazy_unclear_state_link_not_existing) // Start lazy bootstrap with last block in chain known auto node2 = system.add_node (nano::node_config (nano::get_available_port (), system.logging), node_flags); - node2->network.udp_channels.insert (node1->network.endpoint (), node1->network_params.protocol.protocol_version); + node2->network.udp_channels.insert (node1->network.endpoint (), node1->network_params.network.protocol_version); node2->bootstrap_initiator.bootstrap_lazy (send2->hash ()); // Check processed blocks ASSERT_TIMELY (15s, !node2->bootstrap_initiator.in_progress ()); @@ -1020,7 +1020,7 @@ TEST (bootstrap_processor, DISABLED_lazy_destinations) // Start lazy bootstrap with last block in sender chain auto node2 = system.add_node (nano::node_config (nano::get_available_port (), system.logging), node_flags); - node2->network.udp_channels.insert (node1->network.endpoint (), node1->network_params.protocol.protocol_version); + node2->network.udp_channels.insert (node1->network.endpoint (), node1->network_params.network.protocol_version); node2->bootstrap_initiator.bootstrap_lazy (send2->hash ()); // Check processed blocks ASSERT_TIMELY (10s, !node2->bootstrap_initiator.in_progress ()); @@ -1098,7 +1098,7 @@ TEST (bootstrap_processor, lazy_pruning_missing_block) // Start lazy bootstrap with last block in sender chain config.peering_port = nano::get_available_port (); auto node2 (std::make_shared (system.io_ctx, nano::unique_path (), config, system.work, node_flags, 1)); - node2->network.udp_channels.insert (node1->network.endpoint (), node1->network_params.protocol.protocol_version); + node2->network.udp_channels.insert (node1->network.endpoint (), node1->network_params.network.protocol_version); node2->bootstrap_initiator.bootstrap_lazy (send2->hash ()); // Check processed blocks auto lazy_attempt (node2->bootstrap_initiator.current_lazy_attempt ()); @@ -1153,7 +1153,7 @@ TEST (bootstrap_processor, lazy_cancel) // Start lazy bootstrap with last block in chain known auto node1 (std::make_shared (system.io_ctx, nano::get_available_port (), nano::unique_path (), system.logging, system.work)); - node1->network.udp_channels.insert (node0->network.endpoint (), node1->network_params.protocol.protocol_version); + node1->network.udp_channels.insert (node0->network.endpoint (), node1->network_params.network.protocol_version); node1->bootstrap_initiator.bootstrap_lazy (send1->hash (), true); // Start "confirmed" block bootstrap { auto lazy_attempt (node1->bootstrap_initiator.current_lazy_attempt ()); @@ -1228,7 +1228,7 @@ TEST (bootstrap_processor, wallet_lazy_frontier) node0->block_processor.flush (); // Start wallet lazy bootstrap auto node1 (std::make_shared (system.io_ctx, nano::get_available_port (), nano::unique_path (), system.logging, system.work)); - node1->network.udp_channels.insert (node0->network.endpoint (), node1->network_params.protocol.protocol_version); + node1->network.udp_channels.insert (node0->network.endpoint (), node1->network_params.network.protocol_version); auto wallet (node1->wallets.create (nano::random_wallet_id ())); ASSERT_NE (nullptr, wallet); wallet->insert_adhoc (key2.prv); @@ -1295,7 +1295,7 @@ TEST (bootstrap_processor, wallet_lazy_pending) node0->block_processor.flush (); // Start wallet lazy bootstrap auto node1 (std::make_shared (system.io_ctx, nano::get_available_port (), nano::unique_path (), system.logging, system.work)); - node1->network.udp_channels.insert (node0->network.endpoint (), node1->network_params.protocol.protocol_version); + node1->network.udp_channels.insert (node0->network.endpoint (), node1->network_params.network.protocol_version); auto wallet (node1->wallets.create (nano::random_wallet_id ())); ASSERT_NE (nullptr, wallet); wallet->insert_adhoc (key2.prv); @@ -1369,7 +1369,7 @@ TEST (bootstrap_processor, multiple_attempts) nano::node_config node_config (nano::get_available_port (), system.logging); node_config.bootstrap_initiator_threads = 3; auto node2 (std::make_shared (system.io_ctx, nano::unique_path (), node_config, system.work)); - node2->network.udp_channels.insert (node1->network.endpoint (), node2->network_params.protocol.protocol_version); + node2->network.udp_channels.insert (node1->network.endpoint (), node2->network_params.network.protocol_version); node2->bootstrap_initiator.bootstrap_lazy (receive2->hash (), true); node2->bootstrap_initiator.bootstrap (); auto lazy_attempt (node2->bootstrap_initiator.current_lazy_attempt ()); diff --git a/nano/core_test/message_parser.cpp b/nano/core_test/message_parser.cpp index ac73dbeaaf..5918940e9e 100644 --- a/nano/core_test/message_parser.cpp +++ b/nano/core_test/message_parser.cpp @@ -67,8 +67,8 @@ TEST (message_parser, exact_confirm_ack_size) nano::network_filter filter (1); nano::block_uniquer block_uniquer; nano::vote_uniquer vote_uniquer (block_uniquer); - nano::protocol_constants protocol; - nano::message_parser parser (filter, block_uniquer, vote_uniquer, visitor, system.work, protocol); + nano::network_constants network; + nano::message_parser parser (filter, block_uniquer, vote_uniquer, visitor, system.work, network); auto block (std::make_shared (1, 1, 2, nano::keypair ().prv, 4, *system.work.generate (nano::root (1)))); auto vote (std::make_shared (0, nano::keypair ().prv, 0, std::move (block))); nano::confirm_ack message (vote); @@ -102,8 +102,8 @@ TEST (message_parser, exact_confirm_req_size) nano::network_filter filter (1); nano::block_uniquer block_uniquer; nano::vote_uniquer vote_uniquer (block_uniquer); - nano::protocol_constants protocol; - nano::message_parser parser (filter, block_uniquer, vote_uniquer, visitor, system.work, protocol); + nano::network_constants network; + nano::message_parser parser (filter, block_uniquer, vote_uniquer, visitor, system.work, network); auto block (std::make_shared (1, 1, 2, nano::keypair ().prv, 4, *system.work.generate (nano::root (1)))); nano::confirm_req message (std::move (block)); std::vector bytes; @@ -136,8 +136,8 @@ TEST (message_parser, exact_confirm_req_hash_size) nano::network_filter filter (1); nano::block_uniquer block_uniquer; nano::vote_uniquer vote_uniquer (block_uniquer); - nano::protocol_constants protocol; - nano::message_parser parser (filter, block_uniquer, vote_uniquer, visitor, system.work, protocol); + nano::network_constants network; + nano::message_parser parser (filter, block_uniquer, vote_uniquer, visitor, system.work, network); nano::send_block block (1, 1, 2, nano::keypair ().prv, 4, *system.work.generate (nano::root (1))); nano::confirm_req message (block.hash (), block.root ()); std::vector bytes; @@ -170,8 +170,8 @@ TEST (message_parser, exact_publish_size) nano::network_filter filter (1); nano::block_uniquer block_uniquer; nano::vote_uniquer vote_uniquer (block_uniquer); - nano::protocol_constants protocol; - nano::message_parser parser (filter, block_uniquer, vote_uniquer, visitor, system.work, protocol); + nano::network_constants network; + nano::message_parser parser (filter, block_uniquer, vote_uniquer, visitor, system.work, network); auto block (std::make_shared (1, 1, 2, nano::keypair ().prv, 4, *system.work.generate (nano::root (1)))); nano::publish message (std::move (block)); std::vector bytes; @@ -204,8 +204,8 @@ TEST (message_parser, exact_keepalive_size) nano::network_filter filter (1); nano::block_uniquer block_uniquer; nano::vote_uniquer vote_uniquer (block_uniquer); - nano::protocol_constants protocol; - nano::message_parser parser (filter, block_uniquer, vote_uniquer, visitor, system.work, protocol); + nano::network_constants network; + nano::message_parser parser (filter, block_uniquer, vote_uniquer, visitor, system.work, network); nano::keepalive message; std::vector bytes; { diff --git a/nano/core_test/network.cpp b/nano/core_test/network.cpp index 53e81d257b..8f06af1fa4 100644 --- a/nano/core_test/network.cpp +++ b/nano/core_test/network.cpp @@ -85,7 +85,7 @@ TEST (network, send_node_id_handshake) system.nodes.push_back (node1); auto initial (node0->stats.count (nano::stat::type::message, nano::stat::detail::node_id_handshake, nano::stat::dir::in)); auto initial_node1 (node1->stats.count (nano::stat::type::message, nano::stat::detail::node_id_handshake, nano::stat::dir::in)); - auto channel (std::make_shared (node0->network.udp_channels, node1->network.endpoint (), node1->network_params.protocol.protocol_version)); + auto channel (std::make_shared (node0->network.udp_channels, node1->network.endpoint (), node1->network_params.network.protocol_version)); node0->network.send_keepalive (channel); ASSERT_EQ (0, node0->network.size ()); ASSERT_EQ (0, node1->network.size ()); @@ -305,7 +305,7 @@ TEST (network, send_insufficient_work_udp) auto & node2 = *system.add_node (node_flags); auto block (std::make_shared (0, 1, 20, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); nano::publish publish (block); - nano::transport::channel_udp channel (node1.network.udp_channels, node2.network.endpoint (), node1.network_params.protocol.protocol_version); + nano::transport::channel_udp channel (node1.network.udp_channels, node2.network.endpoint (), node1.network_params.network.protocol_version); channel.send (publish, [] (boost::system::error_code const & ec, size_t size) {}); ASSERT_EQ (0, node1.stats.count (nano::stat::type::error, nano::stat::detail::insufficient_work)); ASSERT_TIMELY (10s, node2.stats.count (nano::stat::type::error, nano::stat::detail::insufficient_work) != 0); @@ -878,14 +878,14 @@ TEST (network, replace_port) node1->start (); system.nodes.push_back (node1); auto wrong_endpoint = nano::endpoint (node1->network.endpoint ().address (), nano::get_available_port ()); - auto channel0 (node0->network.udp_channels.insert (wrong_endpoint, node1->network_params.protocol.protocol_version)); + auto channel0 (node0->network.udp_channels.insert (wrong_endpoint, node1->network_params.network.protocol_version)); ASSERT_NE (nullptr, channel0); node0->network.udp_channels.modify (channel0, [&node1] (std::shared_ptr const & channel_a) { channel_a->set_node_id (node1->node_id.pub); }); auto peers_list (node0->network.list (std::numeric_limits::max ())); ASSERT_EQ (peers_list[0]->get_node_id (), node1->node_id.pub); - auto channel1 (std::make_shared (node0->network.udp_channels, node1->network.endpoint (), node1->network_params.protocol.protocol_version)); + auto channel1 (std::make_shared (node0->network.udp_channels, node1->network.endpoint (), node1->network_params.network.protocol_version)); ASSERT_EQ (node0->network.udp_channels.size (), 1); node0->network.send_keepalive (channel1); // On handshake, the channel is replaced @@ -941,7 +941,7 @@ TEST (network, duplicate_detection) node_flags.disable_udp = false; auto & node0 (*system.add_node (node_flags)); auto & node1 (*system.add_node (node_flags)); - auto udp_channel (std::make_shared (node0.network.udp_channels, node1.network.endpoint (), node1.network_params.protocol.protocol_version)); + auto udp_channel (std::make_shared (node0.network.udp_channels, node1.network.endpoint (), node1.network_params.network.protocol_version)); nano::publish publish (nano::dev::genesis); // Publish duplicate detection through UDP @@ -1206,7 +1206,7 @@ TEST (network, cleanup_purge) node1.network.cleanup (test_start); ASSERT_EQ (0, node1.network.size ()); - node1.network.udp_channels.insert (node2->network.endpoint (), node1.network_params.protocol.protocol_version); + node1.network.udp_channels.insert (node2->network.endpoint (), node1.network_params.network.protocol_version); ASSERT_EQ (1, node1.network.size ()); node1.network.cleanup (test_start); ASSERT_EQ (1, node1.network.size ()); @@ -1239,7 +1239,7 @@ TEST (network, loopback_channel) ASSERT_EQ (channel1.get_type (), nano::transport::transport_type::loopback); ASSERT_EQ (channel1.get_endpoint (), node1.network.endpoint ()); ASSERT_EQ (channel1.get_tcp_endpoint (), nano::transport::map_endpoint_to_tcp (node1.network.endpoint ())); - ASSERT_EQ (channel1.get_network_version (), node1.network_params.protocol.protocol_version); + ASSERT_EQ (channel1.get_network_version (), node1.network_params.network.protocol_version); ASSERT_EQ (channel1.get_node_id (), node1.node_id.pub); ASSERT_EQ (channel1.get_node_id_optional ().value_or (0), node1.node_id.pub); nano::transport::channel_loopback channel2 (node2); diff --git a/nano/core_test/node.cpp b/nano/core_test/node.cpp index 591c24416f..6f6331698d 100644 --- a/nano/core_test/node.cpp +++ b/nano/core_test/node.cpp @@ -536,12 +536,12 @@ TEST (node, connect_after_junk) auto node1 (std::make_shared (system.io_ctx, nano::get_available_port (), nano::unique_path (), system.logging, system.work, node_flags)); std::vector junk_buffer; junk_buffer.push_back (0); - auto channel1 (std::make_shared (node1->network.udp_channels, node0->network.endpoint (), node1->network_params.protocol.protocol_version)); + auto channel1 (std::make_shared (node1->network.udp_channels, node0->network.endpoint (), node1->network_params.network.protocol_version)); channel1->send_buffer (nano::shared_const_buffer (std::move (junk_buffer)), [] (boost::system::error_code const &, size_t) {}); ASSERT_TIMELY (10s, node0->stats.count (nano::stat::type::error) != 0); node1->start (); system.nodes.push_back (node1); - auto channel2 (std::make_shared (node1->network.udp_channels, node0->network.endpoint (), node1->network_params.protocol.protocol_version)); + auto channel2 (std::make_shared (node1->network.udp_channels, node0->network.endpoint (), node1->network_params.network.protocol_version)); node1->network.send_keepalive (channel2); ASSERT_TIMELY (10s, !node1->network.empty ()); node1->stop (); @@ -1020,7 +1020,7 @@ TEST (node_flags, disable_udp) ASSERT_EQ (nano::endpoint (boost::asio::ip::address_v6::loopback (), 0), node2->network.udp_channels.get_local_endpoint ()); ASSERT_NE (nano::endpoint (boost::asio::ip::address_v6::loopback (), 0), node2->network.endpoint ()); // Send UDP message - auto channel (std::make_shared (node1->network.udp_channels, node2->network.endpoint (), node2->network_params.protocol.protocol_version)); + auto channel (std::make_shared (node1->network.udp_channels, node2->network.endpoint (), node2->network_params.network.protocol_version)); node1->network.send_keepalive (channel); std::this_thread::sleep_for (std::chrono::milliseconds (500)); // Check empty network @@ -1618,7 +1618,7 @@ TEST (node, DISABLED_fork_stale) auto & node1 (*system1.nodes[0]); auto & node2 (*system2.nodes[0]); node2.bootstrap_initiator.bootstrap (node1.network.endpoint (), false); - std::shared_ptr channel (std::make_shared (node2.network.udp_channels, node1.network.endpoint (), node2.network_params.protocol.protocol_version)); + std::shared_ptr channel (std::make_shared (node2.network.udp_channels, node1.network.endpoint (), node2.network_params.network.protocol_version)); auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, std::vector ()); node2.rep_crawler.response (channel, vote); nano::keypair key1; @@ -2252,8 +2252,8 @@ TEST (node, rep_remove) } // Add inactive UDP representative channel nano::endpoint endpoint0 (boost::asio::ip::address_v6::loopback (), nano::get_available_port ()); - std::shared_ptr channel0 (std::make_shared (node.network.udp_channels, endpoint0, node.network_params.protocol.protocol_version)); - auto channel_udp = node.network.udp_channels.insert (endpoint0, node.network_params.protocol.protocol_version); + std::shared_ptr channel0 (std::make_shared (node.network.udp_channels, endpoint0, node.network_params.network.protocol_version)); + auto channel_udp = node.network.udp_channels.insert (endpoint0, node.network_params.network.protocol_version); auto vote1 = std::make_shared (keypair1.pub, keypair1.prv, 0, nano::dev::genesis); ASSERT_FALSE (node.rep_crawler.response (channel0, vote1)); ASSERT_TIMELY (5s, node.rep_crawler.representative_count () == 1); diff --git a/nano/core_test/peer_container.cpp b/nano/core_test/peer_container.cpp index c4150cf9dc..3a4c29908e 100644 --- a/nano/core_test/peer_container.cpp +++ b/nano/core_test/peer_container.cpp @@ -22,9 +22,9 @@ TEST (peer_container, no_recontact) ASSERT_EQ (0, network.size ()); network.channel_observer = [&observed_peer] (std::shared_ptr const &) { ++observed_peer; }; node1.network.disconnect_observer = [&observed_disconnect] () { observed_disconnect = true; }; - auto channel (network.udp_channels.insert (endpoint1, node1.network_params.protocol.protocol_version)); + auto channel (network.udp_channels.insert (endpoint1, node1.network_params.network.protocol_version)); ASSERT_EQ (1, network.size ()); - ASSERT_EQ (channel, network.udp_channels.insert (endpoint1, node1.network_params.protocol.protocol_version)); + ASSERT_EQ (channel, network.udp_channels.insert (endpoint1, node1.network_params.network.protocol_version)); node1.network.cleanup (std::chrono::steady_clock::now () + std::chrono::seconds (5)); ASSERT_TRUE (network.empty ()); ASSERT_EQ (1, observed_peer); @@ -126,7 +126,7 @@ TEST (peer_container, list_fanout) auto list1 (node.network.list (node.network.fanout ())); ASSERT_TRUE (list1.empty ()); auto add_peer = [&node] (const uint16_t port_a) { - ASSERT_NE (nullptr, node.network.udp_channels.insert (nano::endpoint (boost::asio::ip::address_v6::loopback (), port_a), node.network_params.protocol.protocol_version)); + ASSERT_NE (nullptr, node.network.udp_channels.insert (nano::endpoint (boost::asio::ip::address_v6::loopback (), port_a), node.network_params.network.protocol_version)); }; add_peer (9998); ASSERT_EQ (1, node.network.size ()); @@ -161,7 +161,7 @@ TEST (peer_container, reachout) auto & node1 = *system.add_node (node_flags); nano::endpoint endpoint0 (boost::asio::ip::address_v6::loopback (), nano::get_available_port ()); // Make sure having been contacted by them already indicates we shouldn't reach out - node1.network.udp_channels.insert (endpoint0, node1.network_params.protocol.protocol_version); + node1.network.udp_channels.insert (endpoint0, node1.network_params.network.protocol_version); ASSERT_TRUE (node1.network.reachout (endpoint0)); nano::endpoint endpoint1 (boost::asio::ip::address_v6::loopback (), nano::get_available_port ()); ASSERT_FALSE (node1.network.reachout (endpoint1)); diff --git a/nano/core_test/telemetry.cpp b/nano/core_test/telemetry.cpp index e0b414229d..d44bbf7157 100644 --- a/nano/core_test/telemetry.cpp +++ b/nano/core_test/telemetry.cpp @@ -604,8 +604,8 @@ TEST (telemetry, remove_peer_different_genesis_udp) node1->network_params.ledger.genesis = junk; node1->start (); system.nodes.push_back (node1); - auto channel0 (std::make_shared (node1->network.udp_channels, node0->network.endpoint (), node0->network_params.protocol.protocol_version)); - auto channel1 (std::make_shared (node0->network.udp_channels, node1->network.endpoint (), node1->network_params.protocol.protocol_version)); + auto channel0 (std::make_shared (node1->network.udp_channels, node0->network.endpoint (), node0->network_params.network.protocol_version)); + auto channel1 (std::make_shared (node0->network.udp_channels, node1->network.endpoint (), node1->network_params.network.protocol_version)); node0->network.send_keepalive (channel1); node1->network.send_keepalive (channel0); diff --git a/nano/lib/config.hpp b/nano/lib/config.hpp index c4c9d4c794..720a35ef11 100644 --- a/nano/lib/config.hpp +++ b/nano/lib/config.hpp @@ -240,6 +240,10 @@ class network_constants /** Initial value is ACTIVE_NETWORK compile flag, but can be overridden by a CLI flag */ static nano::networks active_network; + /** Current protocol version */ + uint8_t const protocol_version = 0x12; + /** Minimum accepted protocol version */ + uint8_t const protocol_version_min = 0x12; }; std::string get_config_path (boost::filesystem::path const & data_path); diff --git a/nano/node/bootstrap/bootstrap.cpp b/nano/node/bootstrap/bootstrap.cpp index aa88655636..17caf5328a 100644 --- a/nano/node/bootstrap/bootstrap.cpp +++ b/nano/node/bootstrap/bootstrap.cpp @@ -55,7 +55,7 @@ void nano::bootstrap_initiator::bootstrap (nano::endpoint const & endpoint_a, bo { if (!node.flags.disable_udp) { - node.network.udp_channels.insert (nano::transport::map_endpoint_to_v6 (endpoint_a), node.network_params.protocol.protocol_version); + node.network.udp_channels.insert (nano::transport::map_endpoint_to_v6 (endpoint_a), node.network_params.network.protocol_version); } else if (!node.flags.disable_tcp_realtime) { diff --git a/nano/node/bootstrap/bootstrap_server.cpp b/nano/node/bootstrap/bootstrap_server.cpp index ea519aa47d..022cf89366 100644 --- a/nano/node/bootstrap/bootstrap_server.cpp +++ b/nano/node/bootstrap/bootstrap_server.cpp @@ -670,9 +670,9 @@ class request_response_visitor : public nano::message_visitor debug_assert (!nano::validate_message (response->first, *message_a.query, response->second)); auto cookie (connection->node->network.syn_cookies.assign (nano::transport::map_tcp_to_endpoint (connection->remote_endpoint))); nano::node_id_handshake response_message (cookie, response); - response_message.header.version_max = connection->node->network_params.protocol.protocol_version; - response_message.header.version_using = connection->node->network_params.protocol.protocol_version; - response_message.header.version_min = connection->node->network_params.protocol.protocol_version_min (); + response_message.header.version_max = connection->node->network_params.network.protocol_version; + response_message.header.version_using = connection->node->network_params.network.protocol_version; + response_message.header.version_min = connection->node->network_params.network.protocol_version_min; auto shared_const_buffer = response_message.to_shared_const_buffer (); connection->socket->async_write (shared_const_buffer, [connection = std::weak_ptr (connection)] (boost::system::error_code const & ec, size_t size_a) { if (auto connection_l = connection.lock ()) diff --git a/nano/node/common.cpp b/nano/node/common.cpp index cd15eb08d1..1b84a7a2c3 100644 --- a/nano/node/common.cpp +++ b/nano/node/common.cpp @@ -313,14 +313,14 @@ std::string nano::message_parser::status_string () return "[unknown parse_status]"; } -nano::message_parser::message_parser (nano::network_filter & publish_filter_a, nano::block_uniquer & block_uniquer_a, nano::vote_uniquer & vote_uniquer_a, nano::message_visitor & visitor_a, nano::work_pool & pool_a, nano::protocol_constants const & protocol) : +nano::message_parser::message_parser (nano::network_filter & publish_filter_a, nano::block_uniquer & block_uniquer_a, nano::vote_uniquer & vote_uniquer_a, nano::message_visitor & visitor_a, nano::work_pool & pool_a, nano::network_constants const & network) : publish_filter (publish_filter_a), block_uniquer (block_uniquer_a), vote_uniquer (vote_uniquer_a), visitor (visitor_a), pool (pool_a), status (parse_status::success), - protocol{ protocol } + network{ network } { } @@ -335,7 +335,7 @@ void nano::message_parser::deserialize_buffer (uint8_t const * buffer_a, size_t nano::message_header header (error, stream); if (!error) { - if (header.version_using < protocol.protocol_version_min ()) + if (header.version_using < network.protocol_version_min) { status = parse_status::outdated_version; } diff --git a/nano/node/common.hpp b/nano/node/common.hpp index 547b5c0e1b..c185fe7286 100644 --- a/nano/node/common.hpp +++ b/nano/node/common.hpp @@ -236,6 +236,7 @@ class message nano::message_header header; }; class work_pool; +class network_constants; class message_parser final { public: @@ -255,7 +256,7 @@ class message_parser final outdated_version, duplicate_publish_message }; - message_parser (nano::network_filter &, nano::block_uniquer &, nano::vote_uniquer &, nano::message_visitor &, nano::work_pool &, nano::protocol_constants const & protocol); + message_parser (nano::network_filter &, nano::block_uniquer &, nano::vote_uniquer &, nano::message_visitor &, nano::work_pool &, nano::network_constants const & protocol); void deserialize_buffer (uint8_t const *, size_t); void deserialize_keepalive (nano::stream &, nano::message_header const &); void deserialize_publish (nano::stream &, nano::message_header const &, nano::uint128_t const & = 0); @@ -271,7 +272,7 @@ class message_parser final nano::message_visitor & visitor; nano::work_pool & pool; parse_status status; - nano::protocol_constants const & protocol; + nano::network_constants const & network; std::string status_string (); static const size_t max_safe_udp_message_size; }; diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index 5951683d7e..bf6972525b 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -4182,7 +4182,7 @@ void nano::json_handler::version () { response_l.put ("rpc_version", "1"); response_l.put ("store_version", std::to_string (node.store_version ())); - response_l.put ("protocol_version", std::to_string (node.network_params.protocol.protocol_version)); + response_l.put ("protocol_version", std::to_string (node.network_params.network.protocol_version)); response_l.put ("node_vendor", boost::str (boost::format ("Nano %1%") % NANO_VERSION_STRING)); response_l.put ("store_vendor", node.store.vendor_get ()); response_l.put ("network", node.network_params.network.get_current_network_as_string ()); diff --git a/nano/node/network.cpp b/nano/node/network.cpp index 22c92e4ab8..b3e284653a 100644 --- a/nano/node/network.cpp +++ b/nano/node/network.cpp @@ -699,11 +699,11 @@ nano::tcp_endpoint nano::network::bootstrap_peer (bool lazy_bootstrap) bool use_udp_peer (nano::random_pool::generate_word32 (0, 1)); if (use_udp_peer || tcp_channels.size () == 0) { - result = udp_channels.bootstrap_peer (node.network_params.protocol.protocol_version_min ()); + result = udp_channels.bootstrap_peer (node.network_params.network.protocol_version_min); } if (result == nano::tcp_endpoint (boost::asio::ip::address_v6::any (), 0)) { - result = tcp_channels.bootstrap_peer (node.network_params.protocol.protocol_version_min ()); + result = tcp_channels.bootstrap_peer (node.network_params.network.protocol_version_min); } return result; } diff --git a/nano/node/repcrawler.cpp b/nano/node/repcrawler.cpp index 9061f8f52a..700be05f37 100644 --- a/nano/node/repcrawler.cpp +++ b/nano/node/repcrawler.cpp @@ -324,9 +324,9 @@ void nano::rep_crawler::update_weights () } } -std::vector nano::rep_crawler::representatives (size_t count_a, nano::uint128_t const weight_a, boost::optional const & opt_version_min_a) +std::vector nano::rep_crawler::representatives (size_t count_a, nano::uint128_t const weight_a, boost::optional const & opt_version_min_a) { - auto version_min (opt_version_min_a.value_or (node.network_params.protocol.protocol_version_min ())); + auto version_min (opt_version_min_a.value_or (node.network_params.network.protocol_version_min)); std::vector result; nano::lock_guard lock (probable_reps_mutex); for (auto i (probable_reps.get ().begin ()), n (probable_reps.get ().end ()); i != n && result.size () < count_a; ++i) @@ -339,7 +339,7 @@ std::vector nano::rep_crawler::representatives (size_t cou return result; } -std::vector nano::rep_crawler::principal_representatives (size_t count_a, boost::optional const & opt_version_min_a) +std::vector nano::rep_crawler::principal_representatives (size_t count_a, boost::optional const & opt_version_min_a) { return representatives (count_a, node.minimum_principal_weight (), opt_version_min_a); } diff --git a/nano/node/repcrawler.hpp b/nano/node/repcrawler.hpp index 678fe08b4f..cfe7fb9821 100644 --- a/nano/node/repcrawler.hpp +++ b/nano/node/repcrawler.hpp @@ -106,10 +106,10 @@ class rep_crawler final nano::uint128_t total_weight () const; /** Request a list of the top \p count_a known representatives in descending order of weight, with at least \p weight_a voting weight, and optionally with a minimum version \p opt_version_min_a */ - std::vector representatives (size_t count_a = std::numeric_limits::max (), nano::uint128_t const weight_a = 0, boost::optional const & opt_version_min_a = boost::none); + std::vector representatives (size_t count_a = std::numeric_limits::max (), nano::uint128_t const weight_a = 0, boost::optional const & opt_version_min_a = boost::none); /** Request a list of the top \p count_a known principal representatives in descending order of weight, optionally with a minimum version \p opt_version_min_a */ - std::vector principal_representatives (size_t count_a = std::numeric_limits::max (), boost::optional const & opt_version_min_a = boost::none); + std::vector principal_representatives (size_t count_a = std::numeric_limits::max (), boost::optional const & opt_version_min_a = boost::none); /** Request a list of the top \p count_a known representative endpoints. */ std::vector> representative_endpoints (size_t count_a); diff --git a/nano/node/telemetry.cpp b/nano/node/telemetry.cpp index 84a6c288ef..e6ed593ac1 100644 --- a/nano/node/telemetry.cpp +++ b/nano/node/telemetry.cpp @@ -631,7 +631,7 @@ nano::telemetry_data nano::local_telemetry_data (nano::ledger const & ledger_a, telemetry_data.block_count = ledger_a.cache.block_count; telemetry_data.cemented_count = ledger_a.cache.cemented_count; telemetry_data.bandwidth_cap = bandwidth_limit_a; - telemetry_data.protocol_version = network_params_a.protocol.protocol_version; + telemetry_data.protocol_version = network_params_a.network.protocol_version; telemetry_data.uptime = std::chrono::duration_cast (std::chrono::steady_clock::now () - statup_time_a).count (); telemetry_data.unchecked_count = ledger_a.store.unchecked.count (ledger_a.store.tx_begin_read ()); telemetry_data.genesis_block = network_params_a.ledger.genesis->hash (); diff --git a/nano/node/transport/tcp.cpp b/nano/node/transport/tcp.cpp index e6f6366e00..85aabe3ecf 100644 --- a/nano/node/transport/tcp.cpp +++ b/nano/node/transport/tcp.cpp @@ -292,7 +292,7 @@ void nano::transport::tcp_channels::process_messages () void nano::transport::tcp_channels::process_message (nano::message const & message_a, nano::tcp_endpoint const & endpoint_a, nano::account const & node_id_a, std::shared_ptr const & socket_a) { auto type_a = socket_a->type (); - if (!stopped && message_a.header.version_using >= protocol_constants ().protocol_version_min ()) + if (!stopped && message_a.header.version_using >= node.network_params.network.protocol_version_min) { auto channel (node.network.find_channel (nano::transport::map_tcp_to_endpoint (endpoint_a))); if (channel) @@ -433,7 +433,7 @@ void nano::transport::tcp_channels::purge (std::chrono::steady_clock::time_point attempts.get ().erase (attempts.get ().begin (), attempts_cutoff); // Check if any tcp channels belonging to old protocol versions which may still be alive due to async operations - auto lower_bound = channels.get ().lower_bound (node.network_params.protocol.protocol_version_min ()); + auto lower_bound = channels.get ().lower_bound (node.network_params.network.protocol_version_min); channels.get ().erase (channels.get ().begin (), lower_bound); // Cleanup any sockets which may still be existing from failed node id handshakes @@ -467,7 +467,7 @@ void nano::transport::tcp_channels::ongoing_keepalive () size_t random_count (std::min (static_cast (6), static_cast (std::ceil (std::sqrt (node.network.udp_channels.size ()))))); for (auto i (0); i <= random_count; ++i) { - auto tcp_endpoint (node.network.udp_channels.bootstrap_peer (node.network_params.protocol.protocol_version_min ())); + auto tcp_endpoint (node.network.udp_channels.bootstrap_peer (node.network_params.network.protocol_version_min)); if (tcp_endpoint != invalid_endpoint && find_channel (tcp_endpoint) == nullptr && !node.network.excluded_peers.check (tcp_endpoint)) { start_tcp (nano::transport::map_tcp_to_endpoint (tcp_endpoint)); @@ -646,7 +646,7 @@ void nano::transport::tcp_channels::start_tcp_receive_node_id (std::shared_ptr= node_l->network_params.protocol.protocol_version_min ()) + if (header.version_using >= node_l->network_params.network.protocol_version_min) { nano::node_id_handshake message (error, stream, header); if (!error && message.response && message.query) diff --git a/nano/node/transport/transport.cpp b/nano/node/transport/transport.cpp index e40c1c2ca9..2ec3eb6840 100644 --- a/nano/node/transport/transport.cpp +++ b/nano/node/transport/transport.cpp @@ -97,14 +97,14 @@ boost::asio::ip::address nano::transport::ipv4_address_or_ipv6_subnet (boost::as nano::transport::channel::channel (nano::node & node_a) : node (node_a) { - set_network_version (node_a.network_params.protocol.protocol_version); + set_network_version (node_a.network_params.network.protocol_version); } void nano::transport::channel::send (nano::message & message_a, std::function const & callback_a, nano::buffer_drop_policy drop_policy_a) { - message_a.header.version_max = node.network_params.protocol.protocol_version; - message_a.header.version_using = node.network_params.protocol.protocol_version; - message_a.header.version_min = node.network_params.protocol.protocol_version_min (); + message_a.header.version_max = node.network_params.network.protocol_version; + message_a.header.version_using = node.network_params.network.protocol_version; + message_a.header.version_min = node.network_params.network.protocol_version_min; callback_visitor visitor; message_a.visit (visitor); auto buffer (message_a.to_shared_const_buffer ()); @@ -138,7 +138,7 @@ nano::transport::channel_loopback::channel_loopback (nano::node & node_a) : channel (node_a), endpoint (node_a.network.endpoint ()) { set_node_id (node_a.node_id.pub); - set_network_version (node_a.network_params.protocol.protocol_version); + set_network_version (node_a.network_params.network.protocol_version); } size_t nano::transport::channel_loopback::hash_code () const diff --git a/nano/node/transport/udp.cpp b/nano/node/transport/udp.cpp index 3eaffd97cb..c46fce6859 100644 --- a/nano/node/transport/udp.cpp +++ b/nano/node/transport/udp.cpp @@ -388,7 +388,7 @@ class udp_message_visitor : public nano::message_visitor else if (!node.network.tcp_channels.find_channel (nano::transport::map_endpoint_to_tcp (endpoint))) { // Don't start connection if TCP channel to same IP:port exists - find_channel = std::make_shared (node.network.udp_channels, endpoint, node.network_params.protocol.protocol_version); + find_channel = std::make_shared (node.network.udp_channels, endpoint, node.network_params.network.protocol_version); node.network.send_node_id_handshake (find_channel, *cookie, boost::none); } } @@ -500,7 +500,7 @@ class udp_message_visitor : public nano::message_visitor auto find_channel (node.network.udp_channels.channel (endpoint)); if (!find_channel) { - find_channel = std::make_shared (node.network.udp_channels, endpoint, node.network_params.protocol.protocol_version); + find_channel = std::make_shared (node.network.udp_channels, endpoint, node.network_params.network.protocol_version); } node.network.send_node_id_handshake (find_channel, out_query, out_respond_to); } @@ -541,7 +541,7 @@ void nano::transport::udp_channels::receive_action (nano::message_buffer * data_ if (allowed_sender) { udp_message_visitor visitor (node, data_a->endpoint, sink); - nano::message_parser parser (node.network.publish_filter, node.block_uniquer, node.vote_uniquer, visitor, node.work, node.network_params.protocol); + nano::message_parser parser (node.network.publish_filter, node.block_uniquer, node.vote_uniquer, visitor, node.work, node.network_params.network); parser.deserialize_buffer (data_a->buffer, data_a->size); if (parser.status == nano::message_parser::parse_status::success) { @@ -625,7 +625,7 @@ void nano::transport::udp_channels::process_packets () std::shared_ptr nano::transport::udp_channels::create (nano::endpoint const & endpoint_a) { - return std::make_shared (*this, endpoint_a, node.network_params.protocol.protocol_version); + return std::make_shared (*this, endpoint_a, node.network_params.network.protocol_version); } bool nano::transport::udp_channels::max_ip_connections (nano::endpoint const & endpoint_a) diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index 3bde45eda3..f28bd6f23f 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -1688,18 +1688,18 @@ TEST (rpc, peers) auto port = nano::get_available_port (); system.add_node (nano::node_config (port, system.logging)); nano::endpoint endpoint (boost::asio::ip::make_address_v6 ("fc00::1"), 4000); - node->network.udp_channels.insert (endpoint, node->network_params.protocol.protocol_version); + node->network.udp_channels.insert (endpoint, node->network_params.network.protocol_version); auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "peers"); auto response (wait_response (system, rpc, request)); auto & peers_node (response.get_child ("peers")); ASSERT_EQ (2, peers_node.size ()); - ASSERT_EQ (std::to_string (node->network_params.protocol.protocol_version), peers_node.get ((boost::format ("[::1]:%1%") % port).str ())); + ASSERT_EQ (std::to_string (node->network_params.network.protocol_version), peers_node.get ((boost::format ("[::1]:%1%") % port).str ())); // Previously "[::ffff:80.80.80.80]:4000", but IPv4 address cause "No such node thrown in the test body" issue with peers_node.get std::stringstream endpoint_text; endpoint_text << endpoint; - ASSERT_EQ (std::to_string (node->network_params.protocol.protocol_version), peers_node.get (endpoint_text.str ())); + ASSERT_EQ (std::to_string (node->network_params.network.protocol_version), peers_node.get (endpoint_text.str ())); } TEST (rpc, peers_node_id) @@ -1709,7 +1709,7 @@ TEST (rpc, peers_node_id) auto port = nano::get_available_port (); system.add_node (nano::node_config (port, system.logging)); nano::endpoint endpoint (boost::asio::ip::make_address_v6 ("fc00::1"), 4000); - node->network.udp_channels.insert (endpoint, node->network_params.protocol.protocol_version); + node->network.udp_channels.insert (endpoint, node->network_params.network.protocol_version); auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "peers"); @@ -1718,12 +1718,12 @@ TEST (rpc, peers_node_id) auto & peers_node (response.get_child ("peers")); ASSERT_EQ (2, peers_node.size ()); auto tree1 (peers_node.get_child ((boost::format ("[::1]:%1%") % port).str ())); - ASSERT_EQ (std::to_string (node->network_params.protocol.protocol_version), tree1.get ("protocol_version")); + ASSERT_EQ (std::to_string (node->network_params.network.protocol_version), tree1.get ("protocol_version")); ASSERT_EQ (system.nodes[1]->node_id.pub.to_node_id (), tree1.get ("node_id")); std::stringstream endpoint_text; endpoint_text << endpoint; auto tree2 (peers_node.get_child (endpoint_text.str ())); - ASSERT_EQ (std::to_string (node->network_params.protocol.protocol_version), tree2.get ("protocol_version")); + ASSERT_EQ (std::to_string (node->network_params.network.protocol_version), tree2.get ("protocol_version")); ASSERT_EQ ("", tree2.get ("node_id")); } @@ -1909,7 +1909,7 @@ TEST (rpc, version) auto transaction (node1->store.tx_begin_read ()); ASSERT_EQ (std::to_string (node1->store.version.get (transaction)), response1.json.get ("store_version")); } - ASSERT_EQ (std::to_string (node1->network_params.protocol.protocol_version), response1.json.get ("protocol_version")); + ASSERT_EQ (std::to_string (node1->network_params.network.protocol_version), response1.json.get ("protocol_version")); ASSERT_EQ (boost::str (boost::format ("Nano %1%") % NANO_VERSION_STRING), response1.json.get ("node_vendor")); ASSERT_EQ (node1->store.vendor_get (), response1.json.get ("store_vendor")); auto network_label (node1->network_params.network.get_current_network_as_string ()); @@ -5828,7 +5828,7 @@ TEST (rpc, account_lazy_start) node_config.ipc_config.transport_tcp.enabled = true; node_config.ipc_config.transport_tcp.port = nano::get_available_port (); auto node2 = system.add_node (node_config, node_flags); - node2->network.udp_channels.insert (node1->network.endpoint (), node1->network_params.protocol.protocol_version); + node2->network.udp_channels.insert (node1->network.endpoint (), node1->network_params.network.protocol_version); auto [rpc, rpc_ctx] = add_rpc (system, node2); boost::property_tree::ptree request; request.put ("action", "account_info"); diff --git a/nano/secure/common.cpp b/nano/secure/common.cpp index 8fcbd2e071..fe9358160e 100644 --- a/nano/secure/common.cpp +++ b/nano/secure/common.cpp @@ -93,11 +93,6 @@ nano::network_params::network_params (nano::networks network_a) : kdf_work = network.is_dev_network () ? kdf_dev_work : kdf_full_work; } -uint8_t nano::protocol_constants::protocol_version_min () const -{ - return protocol_version_min_m; -} - nano::ledger_constants::ledger_constants (nano::network_constants & network_constants) : ledger_constants (network_constants.network ()) { diff --git a/nano/secure/common.hpp b/nano/secure/common.hpp index 7f7ab74914..8be2cab4a5 100644 --- a/nano/secure/common.hpp +++ b/nano/secure/common.hpp @@ -336,24 +336,6 @@ enum class tally_result class network_params; -/** Protocol versions whose value may depend on the active network */ -class protocol_constants -{ -public: - /** Current protocol version */ - uint8_t const protocol_version = 0x12; - - /** Minimum accepted protocol version */ - uint8_t protocol_version_min () const; - -private: - /* Minimum protocol version we will establish connections to */ - uint8_t const protocol_version_min_m = 0x12; -}; - -// Some places use the decltype of protocol_version instead of protocol_version_min. To keep those checks simpler we check that the decltypes match ignoring differences in const -static_assert (std::is_same, decltype (protocol_constants ().protocol_version_min ())>::value, "protocol_min should match"); - /** Genesis keys and ledger constants for network variants */ class ledger_constants { @@ -458,7 +440,6 @@ class network_params unsigned kdf_work; network_constants network; - protocol_constants protocol; ledger_constants ledger; random_constants random; voting_constants voting; diff --git a/nano/slow_test/node.cpp b/nano/slow_test/node.cpp index faadc0f426..da56e24bf3 100644 --- a/nano/slow_test/node.cpp +++ b/nano/slow_test/node.cpp @@ -1483,7 +1483,7 @@ TEST (telemetry, many_nodes) ASSERT_LE (data.peer_count, 9U); ASSERT_EQ (data.account_count, 1); ASSERT_TRUE (data.block_count == 2); - ASSERT_EQ (data.protocol_version, nano::dev::network_params.protocol.protocol_version); + ASSERT_EQ (data.protocol_version, nano::dev::network_params.network.protocol_version); ASSERT_GE (data.bandwidth_cap, 100000); ASSERT_LT (data.bandwidth_cap, 100000 + system.nodes.size ()); ASSERT_EQ (data.major_version, nano::get_major_node_version ()); diff --git a/nano/test_common/system.cpp b/nano/test_common/system.cpp index 9bfd180189..b08beb0666 100644 --- a/nano/test_common/system.cpp +++ b/nano/test_common/system.cpp @@ -63,7 +63,7 @@ std::shared_ptr nano::system::add_node (nano::node_config const & no else { // UDP connection - auto channel (std::make_shared ((*j)->network.udp_channels, (*i)->network.endpoint (), node1->network_params.protocol.protocol_version)); + auto channel (std::make_shared ((*j)->network.udp_channels, (*i)->network.endpoint (), node1->network_params.network.protocol_version)); (*j)->network.send_keepalive (channel); } do diff --git a/nano/test_common/telemetry.cpp b/nano/test_common/telemetry.cpp index 2ecc2897a1..702bbdc466 100644 --- a/nano/test_common/telemetry.cpp +++ b/nano/test_common/telemetry.cpp @@ -9,7 +9,7 @@ void nano::compare_default_telemetry_response_data_excluding_signature (nano::te ASSERT_EQ (telemetry_data_a.cemented_count, 1); ASSERT_EQ (telemetry_data_a.bandwidth_cap, bandwidth_limit_a); ASSERT_EQ (telemetry_data_a.peer_count, 1); - ASSERT_EQ (telemetry_data_a.protocol_version, network_params_a.protocol.protocol_version); + ASSERT_EQ (telemetry_data_a.protocol_version, network_params_a.network.protocol_version); ASSERT_EQ (telemetry_data_a.unchecked_count, 0); ASSERT_EQ (telemetry_data_a.account_count, 1); ASSERT_LT (telemetry_data_a.uptime, 100); From 84603066bf197a75dc3c8b80224375bdc4ddb2e7 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Thu, 5 Aug 2021 14:31:27 +0100 Subject: [PATCH 142/346] Initializing message_header version and network fields from nano::network_constants in order to eliminate guesswork of setting these values before serializing. --- nano/core_test/active_transactions.cpp | 4 +- nano/core_test/block.cpp | 4 +- nano/core_test/bootstrap.cpp | 54 ++++++++--------- nano/core_test/confirmation_height.cpp | 4 +- nano/core_test/message.cpp | 32 +++++----- nano/core_test/message_parser.cpp | 10 +-- nano/core_test/network.cpp | 32 +++++----- nano/core_test/network_filter.cpp | 4 +- nano/core_test/node.cpp | 42 ++++++------- nano/core_test/peer_container.cpp | 4 +- nano/core_test/telemetry.cpp | 10 +-- nano/core_test/websocket.cpp | 2 +- nano/node/bootstrap/bootstrap_bulk_pull.cpp | 4 +- nano/node/bootstrap/bootstrap_bulk_push.cpp | 2 +- nano/node/bootstrap/bootstrap_frontier.cpp | 2 +- nano/node/bootstrap/bootstrap_server.cpp | 5 +- nano/node/common.cpp | 67 +++++++++++---------- nano/node/common.hpp | 32 +++++----- nano/node/confirmation_solicitor.cpp | 6 +- nano/node/network.cpp | 36 +++++++---- nano/node/network.hpp | 14 +---- nano/node/node.cpp | 2 +- nano/node/request_aggregator.cpp | 11 ++-- nano/node/request_aggregator.hpp | 3 +- nano/node/telemetry.cpp | 2 +- nano/node/transport/tcp.cpp | 6 +- nano/node/transport/transport.cpp | 3 - nano/node/transport/udp.cpp | 2 +- 28 files changed, 199 insertions(+), 200 deletions(-) diff --git a/nano/core_test/active_transactions.cpp b/nano/core_test/active_transactions.cpp index cfe8355eaa..142da6b554 100644 --- a/nano/core_test/active_transactions.cpp +++ b/nano/core_test/active_transactions.cpp @@ -253,11 +253,11 @@ TEST (active_transactions, inactive_votes_cache_fork) node.vote_processor.vote (vote, std::make_shared (node)); auto channel1 (node.network.udp_channels.create (node.network.endpoint ())); ASSERT_TIMELY (5s, node.active.inactive_votes_cache_size () == 1); - node.network.inbound (nano::publish (send2), channel1); + node.network.inbound (nano::publish{ nano::dev::network_params.network, send2 }, channel1); node.block_processor.flush (); ASSERT_NE (nullptr, node.block (send2->hash ())); node.scheduler.flush (); // Start election, otherwise conflicting block won't be inserted into election - node.network.inbound (nano::publish (send1), channel1); + node.network.inbound (nano::publish{ nano::dev::network_params.network, send1 }, channel1); node.block_processor.flush (); bool confirmed (false); system.deadline_set (5s); diff --git a/nano/core_test/block.cpp b/nano/core_test/block.cpp index cd9e1f38d1..832757989d 100644 --- a/nano/core_test/block.cpp +++ b/nano/core_test/block.cpp @@ -270,7 +270,7 @@ TEST (change_block, deserialize) TEST (frontier_req, serialization) { - nano::frontier_req request1; + nano::frontier_req request1{ nano::dev::network_params.network }; request1.start = 1; request1.age = 2; request1.count = 3; @@ -293,7 +293,7 @@ TEST (block, publish_req_serialization) nano::keypair key1; nano::keypair key2; auto block (std::make_shared (0, key2.pub, 200, nano::keypair ().prv, 2, 3)); - nano::publish req (block); + nano::publish req{ nano::dev::network_params.network, block }; std::vector bytes; { nano::vectorstream stream (bytes); diff --git a/nano/core_test/bootstrap.cpp b/nano/core_test/bootstrap.cpp index 96f19a7abd..b04b41b8f7 100644 --- a/nano/core_test/bootstrap.cpp +++ b/nano/core_test/bootstrap.cpp @@ -12,7 +12,7 @@ TEST (bulk_pull, no_address) { nano::system system (1); auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); - auto req = std::make_unique (); + auto req = std::make_unique (nano::dev::network_params.network); req->start = 1; req->end = 2; connection->requests.push (std::unique_ptr{}); @@ -25,10 +25,10 @@ TEST (bulk_pull, genesis_to_end) { nano::system system (1); auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); - auto req = std::make_unique (); + auto req = std::make_unique (nano::dev::network_params.network); req->start = nano::dev::genesis_key.pub; req->end.clear (); - connection->requests.push (std::unique_ptr{}); + connection->requests.push (nullptr); auto request (std::make_shared (connection, std::move (req))); ASSERT_EQ (system.nodes[0]->latest (nano::dev::genesis_key.pub), request->current); ASSERT_EQ (request->request->end, request->request->end); @@ -39,7 +39,7 @@ TEST (bulk_pull, no_end) { nano::system system (1); auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); - auto req = std::make_unique (); + auto req = std::make_unique (nano::dev::network_params.network); req->start = nano::dev::genesis_key.pub; req->end = 1; connection->requests.push (std::unique_ptr{}); @@ -64,7 +64,7 @@ TEST (bulk_pull, end_not_owned) system.nodes[0]->work_generate_blocking (open); ASSERT_EQ (nano::process_result::progress, system.nodes[0]->process (open).code); auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); - auto req = std::make_unique (); + auto req = std::make_unique (nano::dev::network_params.network); req->start = key2.pub; req->end = nano::dev::genesis->hash (); connection->requests.push (std::unique_ptr{}); @@ -76,7 +76,7 @@ TEST (bulk_pull, none) { nano::system system (1); auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); - auto req = std::make_unique (); + auto req = std::make_unique (nano::dev::network_params.network); req->start = nano::dev::genesis_key.pub; req->end = nano::dev::genesis->hash (); connection->requests.push (std::unique_ptr{}); @@ -89,7 +89,7 @@ TEST (bulk_pull, get_next_on_open) { nano::system system (1); auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); - auto req = std::make_unique (); + auto req = std::make_unique (nano::dev::network_params.network); req->start = nano::dev::genesis_key.pub; req->end.clear (); connection->requests.push (std::unique_ptr{}); @@ -105,7 +105,7 @@ TEST (bulk_pull, by_block) { nano::system system (1); auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); - auto req = std::make_unique (); + auto req = std::make_unique (nano::dev::network_params.network); req->start = nano::dev::genesis->hash (); req->end.clear (); connection->requests.push (std::unique_ptr{}); @@ -122,7 +122,7 @@ TEST (bulk_pull, by_block_single) { nano::system system (1); auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); - auto req = std::make_unique (); + auto req = std::make_unique (nano::dev::network_params.network); req->start = nano::dev::genesis->hash (); req->end = nano::dev::genesis->hash (); connection->requests.push (std::unique_ptr{}); @@ -146,7 +146,7 @@ TEST (bulk_pull, count_limit) ASSERT_EQ (nano::process_result::progress, node0->process (*receive1).code); auto connection (std::make_shared (std::make_shared (*node0), node0)); - auto req = std::make_unique (); + auto req = std::make_unique (nano::dev::network_params.network); req->start = receive1->hash (); req->set_count_present (true); req->count = 2; @@ -1393,7 +1393,7 @@ TEST (frontier_req_response, DISABLED_destruction) { nano::system system (1); auto connection (std::make_shared (nullptr, system.nodes[0])); - auto req = std::make_unique (); + auto req = std::make_unique (nano::dev::network_params.network); req->start.clear (); req->age = std::numeric_limitsage)>::max (); req->count = std::numeric_limitscount)>::max (); @@ -1408,7 +1408,7 @@ TEST (frontier_req, begin) { nano::system system (1); auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); - auto req = std::make_unique (); + auto req = std::make_unique (nano::dev::network_params.network); req->start.clear (); req->age = std::numeric_limitsage)>::max (); req->count = std::numeric_limitscount)>::max (); @@ -1422,7 +1422,7 @@ TEST (frontier_req, end) { nano::system system (1); auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); - auto req = std::make_unique (); + auto req = std::make_unique (nano::dev::network_params.network); req->start = nano::dev::genesis_key.pub.number () + 1; req->age = std::numeric_limitsage)>::max (); req->count = std::numeric_limitscount)>::max (); @@ -1464,7 +1464,7 @@ TEST (frontier_req, count) ASSERT_EQ (nano::process_result::progress, node1->process (*receive1).code); auto connection (std::make_shared (std::make_shared (*node1), node1)); - auto req = std::make_unique (); + auto req = std::make_unique (nano::dev::network_params.network); req->start.clear (); req->age = std::numeric_limitsage)>::max (); req->count = 1; @@ -1478,7 +1478,7 @@ TEST (frontier_req, time_bound) { nano::system system (1); auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); - auto req = std::make_unique (); + auto req = std::make_unique (nano::dev::network_params.network); req->start.clear (); req->age = 1; req->count = std::numeric_limitscount)>::max (); @@ -1487,7 +1487,7 @@ TEST (frontier_req, time_bound) ASSERT_EQ (nano::dev::genesis_key.pub, request->current); // Wait 2 seconds until age of account will be > 1 seconds std::this_thread::sleep_for (std::chrono::milliseconds (2100)); - auto req2 (std::make_unique ()); + auto req2 (std::make_unique (nano::dev::network_params.network)); req2->start.clear (); req2->age = 1; req2->count = std::numeric_limitscount)>::max (); @@ -1501,7 +1501,7 @@ TEST (frontier_req, time_cutoff) { nano::system system (1); auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); - auto req = std::make_unique (); + auto req = std::make_unique (nano::dev::network_params.network); req->start.clear (); req->age = 3; req->count = std::numeric_limitscount)>::max (); @@ -1511,7 +1511,7 @@ TEST (frontier_req, time_cutoff) ASSERT_EQ (nano::dev::genesis->hash (), request->frontier); // Wait 4 seconds until age of account will be > 3 seconds std::this_thread::sleep_for (std::chrono::milliseconds (4100)); - auto req2 (std::make_unique ()); + auto req2 (std::make_unique (nano::dev::network_params.network)); req2->start.clear (); req2->age = 3; req2->count = std::numeric_limitscount)>::max (); @@ -1590,7 +1590,7 @@ TEST (frontier_req, confirmed_frontier) // Request for all accounts (confirmed only) auto connection (std::make_shared (std::make_shared (*node1), node1)); - auto req = std::make_unique (); + auto req = std::make_unique (nano::dev::network_params.network); req->start.clear (); req->age = std::numeric_limitsage)>::max (); req->count = std::numeric_limitscount)>::max (); @@ -1604,7 +1604,7 @@ TEST (frontier_req, confirmed_frontier) // Request starting with account before genesis (confirmed only) auto connection2 (std::make_shared (std::make_shared (*node1), node1)); - auto req2 = std::make_unique (); + auto req2 = std::make_unique (nano::dev::network_params.network); req2->start = key_before_genesis.pub; req2->age = std::numeric_limitsage)>::max (); req2->count = std::numeric_limitscount)>::max (); @@ -1618,7 +1618,7 @@ TEST (frontier_req, confirmed_frontier) // Request starting with account after genesis (confirmed only) auto connection3 (std::make_shared (std::make_shared (*node1), node1)); - auto req3 = std::make_unique (); + auto req3 = std::make_unique (nano::dev::network_params.network); req3->start = key_after_genesis.pub; req3->age = std::numeric_limitsage)>::max (); req3->count = std::numeric_limitscount)>::max (); @@ -1632,7 +1632,7 @@ TEST (frontier_req, confirmed_frontier) // Request for all accounts (unconfirmed blocks) auto connection4 (std::make_shared (std::make_shared (*node1), node1)); - auto req4 = std::make_unique (); + auto req4 = std::make_unique (nano::dev::network_params.network); req4->start.clear (); req4->age = std::numeric_limitsage)>::max (); req4->count = std::numeric_limitscount)>::max (); @@ -1644,7 +1644,7 @@ TEST (frontier_req, confirmed_frontier) // Request starting with account after genesis (unconfirmed blocks) auto connection5 (std::make_shared (std::make_shared (*node1), node1)); - auto req5 = std::make_unique (); + auto req5 = std::make_unique (nano::dev::network_params.network); req5->start = key_after_genesis.pub; req5->age = std::numeric_limitsage)>::max (); req5->count = std::numeric_limitscount)>::max (); @@ -1658,7 +1658,7 @@ TEST (frontier_req, confirmed_frontier) nano::blocks_confirm (*node1, { send1, receive1 }, true); ASSERT_TIMELY (5s, node1->block_confirmed (send1->hash ()) && node1->block_confirmed (receive1->hash ())); auto connection6 (std::make_shared (std::make_shared (*node1), node1)); - auto req6 = std::make_unique (); + auto req6 = std::make_unique (nano::dev::network_params.network); req6->start = key_before_genesis.pub; req6->age = std::numeric_limitsage)>::max (); req6->count = std::numeric_limitscount)>::max (); @@ -1674,7 +1674,7 @@ TEST (frontier_req, confirmed_frontier) nano::blocks_confirm (*node1, { send2, receive2 }, true); ASSERT_TIMELY (5s, node1->block_confirmed (send2->hash ()) && node1->block_confirmed (receive2->hash ())); auto connection7 (std::make_shared (std::make_shared (*node1), node1)); - auto req7 = std::make_unique (); + auto req7 = std::make_unique (nano::dev::network_params.network); req7->start = key_after_genesis.pub; req7->age = std::numeric_limitsage)>::max (); req7->count = std::numeric_limitscount)>::max (); @@ -1851,7 +1851,7 @@ TEST (bulk_pull_account, basics) auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); { - auto req = std::make_unique (); + auto req = std::make_unique (nano::dev::network_params.network); req->account = key1.pub; req->minimum_amount = 5; req->flags = nano::bulk_pull_account_flags (); @@ -1870,7 +1870,7 @@ TEST (bulk_pull_account, basics) } { - auto req = std::make_unique (); + auto req = std::make_unique (nano::dev::network_params.network); req->account = key1.pub; req->minimum_amount = 0; req->flags = nano::bulk_pull_account_flags::pending_address_only; diff --git a/nano/core_test/confirmation_height.cpp b/nano/core_test/confirmation_height.cpp index 644e1cf601..5b6c41227d 100644 --- a/nano/core_test/confirmation_height.cpp +++ b/nano/core_test/confirmation_height.cpp @@ -654,10 +654,10 @@ TEST (confirmation_height, conflict_rollback_cemented) ASSERT_EQ (1, node1->network.size ()); nano::keypair key1; auto send1 (std::make_shared (nano::dev::genesis->hash (), key1.pub, nano::dev::constants.genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); - nano::publish publish1 (send1); + nano::publish publish1{ nano::dev::network_params.network, send1 }; nano::keypair key2; auto send2 (std::make_shared (nano::dev::genesis->hash (), key2.pub, nano::dev::constants.genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); - nano::publish publish2 (send2); + nano::publish publish2{ nano::dev::network_params.network, send2 }; auto channel1 (node1->network.udp_channels.create (node1->network.endpoint ())); node1->network.inbound (publish1, channel1); node1->block_processor.flush (); diff --git a/nano/core_test/message.cpp b/nano/core_test/message.cpp index 266f0f141e..67a90f28a0 100644 --- a/nano/core_test/message.cpp +++ b/nano/core_test/message.cpp @@ -8,7 +8,7 @@ TEST (message, keepalive_serialization) { - nano::keepalive request1; + nano::keepalive request1{ nano::dev::network_params.network }; std::vector bytes; { nano::vectorstream stream (bytes); @@ -25,7 +25,7 @@ TEST (message, keepalive_serialization) TEST (message, keepalive_deserialize) { - nano::keepalive message1; + nano::keepalive message1{ nano::dev::network_params.network }; message1.peers[0] = nano::endpoint (boost::asio::ip::address_v6::loopback (), 10000); std::vector bytes; { @@ -44,11 +44,7 @@ TEST (message, keepalive_deserialize) TEST (message, publish_serialization) { - nano::publish publish (std::make_shared (0, 1, 2, nano::keypair ().prv, 4, 5)); - publish.header.network = nano::networks::nano_dev_network; - publish.header.version_max = 6; - publish.header.version_using = 5; - publish.header.version_min = 4; + nano::publish publish{ nano::dev::network_params.network, std::make_shared (0, 1, 2, nano::keypair ().prv, 4, 5) }; ASSERT_EQ (nano::block_type::send, publish.header.block_type ()); std::vector bytes; { @@ -58,9 +54,9 @@ TEST (message, publish_serialization) ASSERT_EQ (8, bytes.size ()); ASSERT_EQ (0x52, bytes[0]); ASSERT_EQ (0x41, bytes[1]); - ASSERT_EQ (6, bytes[2]); - ASSERT_EQ (5, bytes[3]); - ASSERT_EQ (4, bytes[4]); + ASSERT_EQ (nano::dev::network_params.network.protocol_version, bytes[2]); + ASSERT_EQ (nano::dev::network_params.network.protocol_version, bytes[3]); + ASSERT_EQ (nano::dev::network_params.network.protocol_version_min, bytes[4]); ASSERT_EQ (static_cast (nano::message_type::publish), bytes[5]); ASSERT_EQ (0x00, bytes[6]); // extensions ASSERT_EQ (static_cast (nano::block_type::send), bytes[7]); @@ -68,9 +64,9 @@ TEST (message, publish_serialization) auto error (false); nano::message_header header (error, stream); ASSERT_FALSE (error); - ASSERT_EQ (4, header.version_min); - ASSERT_EQ (5, header.version_using); - ASSERT_EQ (6, header.version_max); + ASSERT_EQ (nano::dev::network_params.network.protocol_version_min, header.version_min); + ASSERT_EQ (nano::dev::network_params.network.protocol_version, header.version_using); + ASSERT_EQ (nano::dev::network_params.network.protocol_version, header.version_max); ASSERT_EQ (nano::message_type::publish, header.type); } @@ -78,7 +74,7 @@ TEST (message, confirm_ack_serialization) { nano::keypair key1; auto vote (std::make_shared (key1.pub, key1.prv, 0, std::make_shared (0, 1, 2, key1.prv, 4, 5))); - nano::confirm_ack con1 (vote); + nano::confirm_ack con1{ nano::dev::network_params.network, vote }; std::vector bytes; { nano::vectorstream stream1 (bytes); @@ -106,7 +102,7 @@ TEST (message, confirm_ack_hash_serialization) } nano::keypair representative1; auto vote (std::make_shared (representative1.pub, representative1.prv, 0, hashes)); - nano::confirm_ack con1 (vote); + nano::confirm_ack con1{ nano::dev::network_params.network, vote }; std::vector bytes; { nano::vectorstream stream1 (bytes); @@ -134,7 +130,7 @@ TEST (message, confirm_req_serialization) nano::keypair key1; nano::keypair key2; auto block (std::make_shared (0, key2.pub, 200, nano::keypair ().prv, 2, 3)); - nano::confirm_req req (block); + nano::confirm_req req{ nano::dev::network_params.network, block }; std::vector bytes; { nano::vectorstream stream (bytes); @@ -154,7 +150,7 @@ TEST (message, confirm_req_hash_serialization) nano::keypair key1; nano::keypair key2; nano::send_block block (1, key2.pub, 200, nano::keypair ().prv, 2, 3); - nano::confirm_req req (block.hash (), block.root ()); + nano::confirm_req req{ nano::dev::network_params.network, block.hash (), block.root () }; std::vector bytes; { nano::vectorstream stream (bytes); @@ -187,7 +183,7 @@ TEST (message, confirm_req_hash_batch_serialization) roots_hashes.push_back (std::make_pair (block.hash (), block.root ())); } roots_hashes.push_back (std::make_pair (open.hash (), open.root ())); - nano::confirm_req req (roots_hashes); + nano::confirm_req req{ nano::dev::network_params.network, roots_hashes }; std::vector bytes; { nano::vectorstream stream (bytes); diff --git a/nano/core_test/message_parser.cpp b/nano/core_test/message_parser.cpp index 5918940e9e..d81050e9bc 100644 --- a/nano/core_test/message_parser.cpp +++ b/nano/core_test/message_parser.cpp @@ -71,7 +71,7 @@ TEST (message_parser, exact_confirm_ack_size) nano::message_parser parser (filter, block_uniquer, vote_uniquer, visitor, system.work, network); auto block (std::make_shared (1, 1, 2, nano::keypair ().prv, 4, *system.work.generate (nano::root (1)))); auto vote (std::make_shared (0, nano::keypair ().prv, 0, std::move (block))); - nano::confirm_ack message (vote); + nano::confirm_ack message{ nano::dev::network_params.network, vote }; std::vector bytes; { nano::vectorstream stream (bytes); @@ -105,7 +105,7 @@ TEST (message_parser, exact_confirm_req_size) nano::network_constants network; nano::message_parser parser (filter, block_uniquer, vote_uniquer, visitor, system.work, network); auto block (std::make_shared (1, 1, 2, nano::keypair ().prv, 4, *system.work.generate (nano::root (1)))); - nano::confirm_req message (std::move (block)); + nano::confirm_req message{ nano::dev::network_params.network, block }; std::vector bytes; { nano::vectorstream stream (bytes); @@ -139,7 +139,7 @@ TEST (message_parser, exact_confirm_req_hash_size) nano::network_constants network; nano::message_parser parser (filter, block_uniquer, vote_uniquer, visitor, system.work, network); nano::send_block block (1, 1, 2, nano::keypair ().prv, 4, *system.work.generate (nano::root (1))); - nano::confirm_req message (block.hash (), block.root ()); + nano::confirm_req message{ nano::dev::network_params.network, block.hash (), block.root () }; std::vector bytes; { nano::vectorstream stream (bytes); @@ -173,7 +173,7 @@ TEST (message_parser, exact_publish_size) nano::network_constants network; nano::message_parser parser (filter, block_uniquer, vote_uniquer, visitor, system.work, network); auto block (std::make_shared (1, 1, 2, nano::keypair ().prv, 4, *system.work.generate (nano::root (1)))); - nano::publish message (std::move (block)); + nano::publish message{ nano::dev::network_params.network, block }; std::vector bytes; { nano::vectorstream stream (bytes); @@ -206,7 +206,7 @@ TEST (message_parser, exact_keepalive_size) nano::vote_uniquer vote_uniquer (block_uniquer); nano::network_constants network; nano::message_parser parser (filter, block_uniquer, vote_uniquer, visitor, system.work, network); - nano::keepalive message; + nano::keepalive message{ nano::dev::network_params.network }; std::vector bytes; { nano::vectorstream stream (bytes); diff --git a/nano/core_test/network.cpp b/nano/core_test/network.cpp index 8f06af1fa4..50521c0b1b 100644 --- a/nano/core_test/network.cpp +++ b/nano/core_test/network.cpp @@ -304,7 +304,7 @@ TEST (network, send_insufficient_work_udp) auto & node1 = *system.add_node (node_flags); auto & node2 = *system.add_node (node_flags); auto block (std::make_shared (0, 1, 20, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); - nano::publish publish (block); + nano::publish publish{ nano::dev::network_params.network, block }; nano::transport::channel_udp channel (node1.network.udp_channels, node2.network.endpoint (), node1.network_params.network.protocol_version); channel.send (publish, [] (boost::system::error_code const & ec, size_t size) {}); ASSERT_EQ (0, node1.stats.count (nano::stat::type::error, nano::stat::detail::insufficient_work)); @@ -319,7 +319,7 @@ TEST (network, send_insufficient_work) auto & node2 = *system.nodes[1]; // Block zero work auto block1 (std::make_shared (0, 1, 20, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); - nano::publish publish1 (block1); + nano::publish publish1{ nano::dev::network_params.network, block1 }; auto tcp_channel (node1.network.tcp_channels.find_channel (nano::transport::map_endpoint_to_tcp (node2.network.endpoint ()))); tcp_channel->send (publish1, [] (boost::system::error_code const & ec, size_t size) {}); ASSERT_EQ (0, node1.stats.count (nano::stat::type::error, nano::stat::detail::insufficient_work)); @@ -327,20 +327,20 @@ TEST (network, send_insufficient_work) ASSERT_EQ (1, node2.stats.count (nano::stat::type::error, nano::stat::detail::insufficient_work)); // Legacy block work between epoch_2_recieve & epoch_1 auto block2 (std::make_shared (block1->hash (), 1, 20, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, system.work_generate_limited (block1->hash (), node1.network_params.network.publish_thresholds.epoch_2_receive, node1.network_params.network.publish_thresholds.epoch_1 - 1))); - nano::publish publish2 (block2); + nano::publish publish2{ nano::dev::network_params.network, block2 }; tcp_channel->send (publish2, [] (boost::system::error_code const & ec, size_t size) {}); ASSERT_TIMELY (10s, node2.stats.count (nano::stat::type::error, nano::stat::detail::insufficient_work) != 1); ASSERT_EQ (2, node2.stats.count (nano::stat::type::error, nano::stat::detail::insufficient_work)); // Legacy block work epoch_1 auto block3 (std::make_shared (block2->hash (), 1, 20, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (block2->hash (), node1.network_params.network.publish_thresholds.epoch_2))); - nano::publish publish3 (block3); + nano::publish publish3{ nano::dev::network_params.network, block3 }; tcp_channel->send (publish3, [] (boost::system::error_code const & ec, size_t size) {}); ASSERT_EQ (0, node2.stats.count (nano::stat::type::message, nano::stat::detail::publish, nano::stat::dir::in)); ASSERT_TIMELY (10s, node2.stats.count (nano::stat::type::message, nano::stat::detail::publish, nano::stat::dir::in) != 0); ASSERT_EQ (1, node2.stats.count (nano::stat::type::message, nano::stat::detail::publish, nano::stat::dir::in)); // State block work epoch_2_recieve auto block4 (std::make_shared (nano::dev::genesis_key.pub, block1->hash (), nano::dev::genesis_key.pub, 20, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, system.work_generate_limited (block1->hash (), node1.network_params.network.publish_thresholds.epoch_2_receive, node1.network_params.network.publish_thresholds.epoch_1 - 1))); - nano::publish publish4 (block4); + nano::publish publish4{ nano::dev::network_params.network, block4 }; tcp_channel->send (publish4, [] (boost::system::error_code const & ec, size_t size) {}); ASSERT_TIMELY (10s, node2.stats.count (nano::stat::type::message, nano::stat::detail::publish, nano::stat::dir::in) != 0); ASSERT_EQ (1, node2.stats.count (nano::stat::type::message, nano::stat::detail::publish, nano::stat::dir::in)); @@ -357,7 +357,7 @@ TEST (receivable_processor, confirm_insufficient_pos) node1.scheduler.activate (nano::dev::genesis_key.pub, node1.store.tx_begin_read ()); nano::keypair key1; auto vote (std::make_shared (key1.pub, key1.prv, 0, block1)); - nano::confirm_ack con1 (vote); + nano::confirm_ack con1{ nano::dev::network_params.network, vote }; node1.network.inbound (con1, node1.network.udp_channels.create (node1.network.endpoint ())); } @@ -370,7 +370,7 @@ TEST (receivable_processor, confirm_sufficient_pos) ASSERT_EQ (nano::process_result::progress, node1.process (*block1).code); node1.scheduler.activate (nano::dev::genesis_key.pub, node1.store.tx_begin_read ()); auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, block1)); - nano::confirm_ack con1 (vote); + nano::confirm_ack con1{ nano::dev::network_params.network, vote }; node1.network.inbound (con1, node1.network.udp_channels.create (node1.network.endpoint ())); } @@ -783,7 +783,7 @@ TEST (tcp_listener, tcp_node_id_handshake) auto socket (std::make_shared (*system.nodes[0])); auto bootstrap_endpoint (system.nodes[0]->bootstrap.endpoint ()); auto cookie (system.nodes[0]->network.syn_cookies.assign (nano::transport::map_tcp_to_endpoint (bootstrap_endpoint))); - nano::node_id_handshake node_id_handshake (cookie, boost::none); + nano::node_id_handshake node_id_handshake{ nano::dev::network_params.network, cookie, boost::none }; auto input (node_id_handshake.to_shared_const_buffer ()); std::atomic write_done (false); socket->async_connect (bootstrap_endpoint, [&input, socket, &write_done] (boost::system::error_code const & ec) { @@ -798,7 +798,7 @@ TEST (tcp_listener, tcp_node_id_handshake) ASSERT_TIMELY (5s, write_done); boost::optional> response_zero (std::make_pair (nano::account (0), nano::signature (0))); - nano::node_id_handshake node_id_handshake_response (boost::none, response_zero); + nano::node_id_handshake node_id_handshake_response{ nano::dev::network_params.network, boost::none, response_zero }; auto output (node_id_handshake_response.to_bytes ()); std::atomic done (false); socket->async_read (output, output->size (), [&output, &done] (boost::system::error_code const & ec, size_t size_a) { @@ -838,7 +838,7 @@ TEST (tcp_listener, tcp_listener_timeout_node_id_handshake) auto node0 (system.nodes[0]); auto socket (std::make_shared (*node0)); auto cookie (node0->network.syn_cookies.assign (nano::transport::map_tcp_to_endpoint (node0->bootstrap.endpoint ()))); - nano::node_id_handshake node_id_handshake (cookie, boost::none); + nano::node_id_handshake node_id_handshake{ nano::dev::network_params.network, cookie, boost::none }; auto channel = std::make_shared (*node0, socket); socket->async_connect (node0->bootstrap.endpoint (), [&node_id_handshake, channel] (boost::system::error_code const & ec) { ASSERT_FALSE (ec); @@ -942,7 +942,7 @@ TEST (network, duplicate_detection) auto & node0 (*system.add_node (node_flags)); auto & node1 (*system.add_node (node_flags)); auto udp_channel (std::make_shared (node0.network.udp_channels, node1.network.endpoint (), node1.network_params.network.protocol_version)); - nano::publish publish (nano::dev::genesis); + nano::publish publish{ nano::dev::network_params.network, nano::dev::genesis }; // Publish duplicate detection through UDP ASSERT_EQ (0, node1.stats.count (nano::stat::type::filter, nano::stat::detail::duplicate_publish)); @@ -964,7 +964,7 @@ TEST (network, duplicate_revert_publish) node_flags.block_processor_full_size = 0; auto & node (*system.add_node (node_flags)); ASSERT_TRUE (node.block_processor.full ()); - nano::publish publish (nano::dev::genesis); + nano::publish publish{ nano::dev::network_params.network, nano::dev::genesis }; std::vector bytes; { nano::vectorstream stream (bytes); @@ -993,7 +993,7 @@ TEST (network, duplicate_revert_publish) TEST (network, bandwidth_limiter) { nano::system system; - nano::publish message (nano::dev::genesis); + nano::publish message{ nano::dev::network_params.network, nano::dev::genesis }; auto message_size = message.to_bytes ()->size (); auto message_limit = 4; // must be multiple of the number of channels nano::node_config node_config (nano::get_available_port (), system.logging); @@ -1254,11 +1254,11 @@ TEST (network, filter) { nano::system system{ 1 }; auto & node1 = *system.nodes[0]; - nano::keepalive keepalive; - keepalive.header.network = nano::networks::nano_dev_network; + nano::keepalive keepalive{ nano::dev::network_params.network }; + const_cast (keepalive.header.network) = nano::networks::nano_dev_network; node1.network.inbound (keepalive, std::make_shared (node1)); ASSERT_EQ (0, node1.stats.count (nano::stat::type::message, nano::stat::detail::invalid_network)); - keepalive.header.network = nano::networks::invalid; + const_cast (keepalive.header.network) = nano::networks::invalid; node1.network.inbound (keepalive, std::make_shared (node1)); ASSERT_EQ (1, node1.stats.count (nano::stat::type::message, nano::stat::detail::invalid_network)); } diff --git a/nano/core_test/network_filter.cpp b/nano/core_test/network_filter.cpp index 90f29c5dad..3f5cc981b8 100644 --- a/nano/core_test/network_filter.cpp +++ b/nano/core_test/network_filter.cpp @@ -11,7 +11,7 @@ TEST (network_filter, unit) nano::ledger_constants constants{ nano::networks::nano_dev_network }; nano::network_filter filter (1); auto one_block = [&filter] (std::shared_ptr const & block_a, bool expect_duplicate_a) { - nano::publish message (block_a); + nano::publish message{ nano::dev::network_params.network, block_a }; auto bytes (message.to_bytes ()); nano::bufferstream stream (bytes->data (), bytes->size ()); @@ -78,7 +78,7 @@ TEST (network_filter, many) .work (0) .build_shared (); - nano::publish message (block); + nano::publish message{ nano::dev::network_params.network, block }; auto bytes (message.to_bytes ()); nano::bufferstream stream (bytes->data (), bytes->size ()); diff --git a/nano/core_test/node.cpp b/nano/core_test/node.cpp index 6f6331698d..bfa146e886 100644 --- a/nano/core_test/node.cpp +++ b/nano/core_test/node.cpp @@ -361,7 +361,7 @@ TEST (node, receive_gap) .work (0) .build_shared (); node1.work_generate_blocking (*block); - nano::publish message (block); + nano::publish message{ nano::dev::network_params.network, block }; node1.network.inbound (message, node1.network.udp_channels.create (node1.network.endpoint ())); node1.block_processor.flush (); ASSERT_EQ (1, node1.gap_cache.size ()); @@ -1191,7 +1191,7 @@ TEST (node, fork_flip) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); - nano::publish publish1 (send1); + nano::publish publish1{ nano::dev::network_params.network, send1 }; nano::keypair key2; auto send2 = builder.make_block () .previous (nano::dev::genesis->hash ()) @@ -1200,7 +1200,7 @@ TEST (node, fork_flip) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); - nano::publish publish2 (send2); + nano::publish publish2{ nano::dev::network_params.network, send2 }; auto channel1 (node1.network.udp_channels.create (node1.network.endpoint ())); node1.network.inbound (publish1, channel1); node1.block_processor.flush (); @@ -1258,7 +1258,7 @@ TEST (node, fork_multi_flip) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); - nano::publish publish1 (send1); + nano::publish publish1{ nano::dev::network_params.network, send1 }; nano::keypair key2; auto send2 = builder.make_block () .previous (nano::dev::genesis->hash ()) @@ -1267,7 +1267,7 @@ TEST (node, fork_multi_flip) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); - nano::publish publish2 (send2); + nano::publish publish2{ nano::dev::network_params.network, send2 }; auto send3 = builder.make_block () .previous (publish2.block->hash ()) .destination (key2.pub) @@ -1275,7 +1275,7 @@ TEST (node, fork_multi_flip) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (publish2.block->hash ())) .build_shared (); - nano::publish publish3 (send3); + nano::publish publish3{ nano::dev::network_params.network, send3 }; node1.network.inbound (publish1, node1.network.udp_channels.create (node1.network.endpoint ())); node2.network.inbound (publish2, node2.network.udp_channels.create (node2.network.endpoint ())); node2.network.inbound (publish3, node2.network.udp_channels.create (node2.network.endpoint ())); @@ -1368,7 +1368,7 @@ TEST (node, fork_open) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); - nano::publish publish1 (send1); + nano::publish publish1{ nano::dev::network_params.network, send1 }; auto channel1 (node1.network.udp_channels.create (node1.network.endpoint ())); node1.network.inbound (publish1, channel1); node1.block_processor.flush (); @@ -1385,7 +1385,7 @@ TEST (node, fork_open) .sign (key1.prv, key1.pub) .work (*system.work.generate (key1.pub)) .build_shared (); - nano::publish publish2 (open1); + nano::publish publish2{ nano::dev::network_params.network, open1 }; node1.network.inbound (publish2, channel1); node1.block_processor.flush (); node1.scheduler.flush (); @@ -1397,7 +1397,7 @@ TEST (node, fork_open) .sign (key1.prv, key1.pub) .work (*system.work.generate (key1.pub)) .build_shared (); - nano::publish publish3 (open2); + nano::publish publish3{ nano::dev::network_params.network, open2 }; system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); node1.network.inbound (publish3, channel1); node1.block_processor.flush (); @@ -1531,7 +1531,7 @@ TEST (node, fork_no_vote_quorum) auto transaction (system.wallet (1)->wallets.tx_begin_read ()); ASSERT_FALSE (system.wallet (1)->store.fetch (transaction, key1, key3)); auto vote (std::make_shared (key1, key3, 0, send2)); - nano::confirm_ack confirm (vote); + nano::confirm_ack confirm{ nano::dev::network_params.network, vote }; std::vector buffer; { nano::vectorstream stream (buffer); @@ -2692,8 +2692,8 @@ TEST (node, local_votes_cache) election->force_confirm (); ASSERT_TIMELY (3s, node.ledger.cache.cemented_count == 3); system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); - nano::confirm_req message1 (send1); - nano::confirm_req message2 (send2); + nano::confirm_req message1{ nano::dev::network_params.network, send1 }; + nano::confirm_req message2{ nano::dev::network_params.network, send2 }; auto channel (node.network.udp_channels.create (node.network.endpoint ())); node.network.inbound (message1, channel); ASSERT_TIMELY (3s, node.stats.count (nano::stat::type::requests, nano::stat::detail::requests_generated_votes) == 1); @@ -2715,7 +2715,7 @@ TEST (node, local_votes_cache) auto transaction (node.store.tx_begin_write ()); ASSERT_EQ (nano::process_result::progress, node.ledger.process (transaction, *send3).code); } - nano::confirm_req message3 (send3); + nano::confirm_req message3{ nano::dev::network_params.network, send3 }; for (auto i (0); i < 100; ++i) { node.network.inbound (message3, channel); @@ -2772,7 +2772,7 @@ TEST (node, local_votes_cache_batch) .build_shared (); ASSERT_EQ (nano::process_result::progress, node.ledger.process (node.store.tx_begin_write (), *receive1).code); std::vector> batch{ { send2->hash (), send2->root () }, { receive1->hash (), receive1->root () } }; - nano::confirm_req message (batch); + nano::confirm_req message{ nano::dev::network_params.network, batch }; auto channel (node.network.udp_channels.create (node.network.endpoint ())); // Generates and sends one vote for both hashes which is then cached node.network.inbound (message, channel); @@ -2787,10 +2787,10 @@ TEST (node, local_votes_cache_batch) // Test when votes are different node.history.erase (send2->root ()); node.history.erase (receive1->root ()); - node.network.inbound (nano::confirm_req (send2->hash (), send2->root ()), channel); + node.network.inbound (nano::confirm_req{ nano::dev::network_params.network, send2->hash (), send2->root () }, channel); ASSERT_TIMELY (3s, node.stats.count (nano::stat::type::message, nano::stat::detail::confirm_ack, nano::stat::dir::out) == 3); ASSERT_EQ (3, node.stats.count (nano::stat::type::message, nano::stat::detail::confirm_ack, nano::stat::dir::out)); - node.network.inbound (nano::confirm_req (receive1->hash (), receive1->root ()), channel); + node.network.inbound (nano::confirm_req{ nano::dev::network_params.network, receive1->hash (), receive1->root () }, channel); ASSERT_TIMELY (3s, node.stats.count (nano::stat::type::message, nano::stat::detail::confirm_ack, nano::stat::dir::out) == 4); ASSERT_EQ (4, node.stats.count (nano::stat::type::message, nano::stat::detail::confirm_ack, nano::stat::dir::out)); // There are two different votes, so both should be sent in response @@ -2807,7 +2807,7 @@ TEST (node, local_votes_cache_generate_new_vote) auto & node (*system.add_node (node_config)); system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); // Repsond with cached vote - nano::confirm_req message1 (nano::dev::genesis); + nano::confirm_req message1{ nano::dev::network_params.network, nano::dev::genesis }; auto channel (node.network.udp_channels.create (node.network.endpoint ())); node.network.inbound (message1, channel); ASSERT_TIMELY (3s, !node.history.votes (nano::dev::genesis->root (), nano::dev::genesis->hash ()).empty ()); @@ -2828,7 +2828,7 @@ TEST (node, local_votes_cache_generate_new_vote) ASSERT_EQ (nano::process_result::progress, node.process (*send1).code); // One of the hashes is cached std::vector> roots_hashes{ std::make_pair (nano::dev::genesis->hash (), nano::dev::genesis->root ()), std::make_pair (send1->hash (), send1->root ()) }; - nano::confirm_req message2 (roots_hashes); + nano::confirm_req message2{ nano::dev::network_params.network, roots_hashes }; node.network.inbound (message2, channel); ASSERT_TIMELY (3s, !node.history.votes (send1->root (), send1->hash ()).empty ()); auto votes2 (node.history.votes (send1->root (), send1->hash ())); @@ -3231,13 +3231,13 @@ TEST (node, fork_election_invalid_block_signature) .sign (nano::dev::genesis_key.prv, 0) // Invalid signature .build_shared (); auto channel1 (node1.network.udp_channels.create (node1.network.endpoint ())); - node1.network.inbound (nano::publish (send1), channel1); + node1.network.inbound (nano::publish{ nano::dev::network_params.network, send1 }, channel1); ASSERT_TIMELY (5s, node1.active.active (send1->qualified_root ())); auto election (node1.active.election (send1->qualified_root ())); ASSERT_NE (nullptr, election); ASSERT_EQ (1, election->blocks ().size ()); - node1.network.inbound (nano::publish (send3), channel1); - node1.network.inbound (nano::publish (send2), channel1); + node1.network.inbound (nano::publish{ nano::dev::network_params.network, send3 }, channel1); + node1.network.inbound (nano::publish{ nano::dev::network_params.network, send2 }, channel1); ASSERT_TIMELY (3s, election->blocks ().size () > 1); ASSERT_EQ (election->blocks ()[send2->hash ()]->block_signature (), send2->block_signature ()); } diff --git a/nano/core_test/peer_container.cpp b/nano/core_test/peer_container.cpp index 3a4c29908e..94384a5361 100644 --- a/nano/core_test/peer_container.cpp +++ b/nano/core_test/peer_container.cpp @@ -179,8 +179,8 @@ TEST (peer_container, depeer) { nano::system system (1); nano::endpoint endpoint0 (boost::asio::ip::address_v6::loopback (), nano::get_available_port ()); - nano::keepalive message; - message.header.version_using = 1; + nano::keepalive message{ nano::dev::network_params.network }; + const_cast (message.header.version_using) = 1; auto bytes (message.to_bytes ()); nano::message_buffer buffer = { bytes->data (), bytes->size (), endpoint0 }; system.nodes[0]->network.udp_channels.receive_action (&buffer); diff --git a/nano/core_test/telemetry.cpp b/nano/core_test/telemetry.cpp index d44bbf7157..b46e01ad7f 100644 --- a/nano/core_test/telemetry.cpp +++ b/nano/core_test/telemetry.cpp @@ -284,7 +284,7 @@ TEST (telemetry, receive_from_non_listening_channel) { nano::system system; auto node = system.add_node (); - nano::telemetry_ack message (nano::telemetry_data{}); + nano::telemetry_ack message{ nano::dev::network_params.network, nano::telemetry_data{} }; node->network.inbound (message, node->network.udp_channels.create (node->network.endpoint ())); // We have not sent a telemetry_req message to this endpoint, so shouldn't count telemetry_ack received from it. ASSERT_EQ (node->telemetry->telemetry_data_size (), 0); @@ -412,7 +412,7 @@ TEST (telemetry, dos_tcp) wait_peer_connections (system); - nano::telemetry_req message; + nano::telemetry_req message{ nano::dev::network_params.network }; auto channel = node_client->network.tcp_channels.find_channel (nano::transport::map_endpoint_to_tcp (node_server->network.endpoint ())); channel->send (message, [] (boost::system::error_code const & ec, size_t size_a) { ASSERT_FALSE (ec); @@ -455,7 +455,7 @@ TEST (telemetry, dos_udp) wait_peer_connections (system); - nano::telemetry_req message; + nano::telemetry_req message{ nano::dev::network_params.network }; auto channel (node_client->network.udp_channels.create (node_server->network.endpoint ())); channel->send (message, [] (boost::system::error_code const & ec, size_t size_a) { ASSERT_FALSE (ec); @@ -532,7 +532,7 @@ TEST (telemetry, max_possible_size) nano::telemetry_data data; data.unknown_data.resize (nano::message_header::telemetry_size_mask.to_ulong () - nano::telemetry_data::latest_size); - nano::telemetry_ack message (data); + nano::telemetry_ack message{ nano::dev::network_params.network, data }; wait_peer_connections (system); auto channel = node_client->network.tcp_channels.find_channel (nano::transport::map_endpoint_to_tcp (node_server->network.endpoint ())); @@ -651,7 +651,7 @@ TEST (telemetry, remove_peer_invalid_signature) auto telemetry_data = nano::local_telemetry_data (node->ledger, node->network, node->config.bandwidth_limit, node->network_params, node->startup_time, node->default_difficulty (nano::work_version::work_1), node->node_id); // Change anything so that the signed message is incorrect telemetry_data.block_count = 0; - auto telemetry_ack = nano::telemetry_ack (telemetry_data); + auto telemetry_ack = nano::telemetry_ack{ nano::dev::network_params.network, telemetry_data }; node->network.inbound (telemetry_ack, channel); ASSERT_TIMELY (10s, node->stats.count (nano::stat::type::telemetry, nano::stat::detail::invalid_signature) > 0); diff --git a/nano/core_test/websocket.cpp b/nano/core_test/websocket.cpp index 1dc15e078a..f9462d82fa 100644 --- a/nano/core_test/websocket.cpp +++ b/nano/core_test/websocket.cpp @@ -141,7 +141,7 @@ TEST (websocket, stopped_election) // Create election, then erase it, causing a websocket message to be emitted nano::keypair key1; auto send1 (std::make_shared (nano::dev::genesis->hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (nano::dev::genesis->hash ()))); - nano::publish publish1 (send1); + nano::publish publish1{ nano::dev::network_params.network, send1 }; auto channel1 (node1->network.udp_channels.create (node1->network.endpoint ())); node1->network.inbound (publish1, channel1); node1->block_processor.flush (); diff --git a/nano/node/bootstrap/bootstrap_bulk_pull.cpp b/nano/node/bootstrap/bootstrap_bulk_pull.cpp index bb362799e0..873a490e17 100644 --- a/nano/node/bootstrap/bootstrap_bulk_pull.cpp +++ b/nano/node/bootstrap/bootstrap_bulk_pull.cpp @@ -58,7 +58,7 @@ void nano::bulk_pull_client::request () { debug_assert (!pull.head.is_zero () || pull.retry_limit <= connection->node->network_params.bootstrap.lazy_retry_limit); expected = pull.head; - nano::bulk_pull req; + nano::bulk_pull req{ connection->node->network_params.network }; if (pull.head == pull.head_original && pull.attempts % 4 < 3) { // Account for new pulls @@ -300,7 +300,7 @@ nano::bulk_pull_account_client::~bulk_pull_account_client () void nano::bulk_pull_account_client::request () { - nano::bulk_pull_account req; + nano::bulk_pull_account req{ connection->node->network_params.network }; req.account = account; req.minimum_amount = connection->node->config.receive_minimum; req.flags = nano::bulk_pull_account_flags::pending_hash_and_amount; diff --git a/nano/node/bootstrap/bootstrap_bulk_push.cpp b/nano/node/bootstrap/bootstrap_bulk_push.cpp index 1be43031d3..0a1a19e8bf 100644 --- a/nano/node/bootstrap/bootstrap_bulk_push.cpp +++ b/nano/node/bootstrap/bootstrap_bulk_push.cpp @@ -17,7 +17,7 @@ nano::bulk_push_client::~bulk_push_client () void nano::bulk_push_client::start () { - nano::bulk_push message; + nano::bulk_push message{ connection->node->network_params.network }; auto this_l (shared_from_this ()); connection->channel->send ( message, [this_l] (boost::system::error_code const & ec, size_t size_a) { diff --git a/nano/node/bootstrap/bootstrap_frontier.cpp b/nano/node/bootstrap/bootstrap_frontier.cpp index 4fad5f6674..6f6daf45b9 100644 --- a/nano/node/bootstrap/bootstrap_frontier.cpp +++ b/nano/node/bootstrap/bootstrap_frontier.cpp @@ -14,7 +14,7 @@ constexpr size_t nano::frontier_req_client::size_frontier; void nano::frontier_req_client::run (nano::account const & start_account_a, uint32_t const frontiers_age_a, uint32_t const count_a) { - nano::frontier_req request; + nano::frontier_req request{ connection->node->network_params.network }; request.start = (start_account_a.is_zero () || start_account_a.number () == std::numeric_limits::max ()) ? start_account_a : start_account_a.number () + 1; request.age = frontiers_age_a; request.count = count_a; diff --git a/nano/node/bootstrap/bootstrap_server.cpp b/nano/node/bootstrap/bootstrap_server.cpp index 022cf89366..7a7caf127a 100644 --- a/nano/node/bootstrap/bootstrap_server.cpp +++ b/nano/node/bootstrap/bootstrap_server.cpp @@ -669,10 +669,7 @@ class request_response_visitor : public nano::message_visitor boost::optional> response (std::make_pair (connection->node->node_id.pub, nano::sign_message (connection->node->node_id.prv, connection->node->node_id.pub, *message_a.query))); debug_assert (!nano::validate_message (response->first, *message_a.query, response->second)); auto cookie (connection->node->network.syn_cookies.assign (nano::transport::map_tcp_to_endpoint (connection->remote_endpoint))); - nano::node_id_handshake response_message (cookie, response); - response_message.header.version_max = connection->node->network_params.network.protocol_version; - response_message.header.version_using = connection->node->network_params.network.protocol_version; - response_message.header.version_min = connection->node->network_params.network.protocol_version_min; + nano::node_id_handshake response_message (connection->node->network_params.network, cookie, response); auto shared_const_buffer = response_message.to_shared_const_buffer (); connection->socket->async_write (shared_const_buffer, [connection = std::weak_ptr (connection)] (boost::system::error_code const & ec, size_t size_a) { if (auto connection_l = connection.lock ()) diff --git a/nano/node/common.cpp b/nano/node/common.cpp index 1b84a7a2c3..0583b588c4 100644 --- a/nano/node/common.cpp +++ b/nano/node/common.cpp @@ -40,8 +40,11 @@ uint64_t nano::ip_address_hash_raw (boost::asio::ip::address const & ip_a, uint1 return result; } -nano::message_header::message_header (nano::message_type type_a) : - network (nano::network_constants::active_network), +nano::message_header::message_header (nano::network_constants const & constants, nano::message_type type_a) : + network{ constants.current_network }, + version_max{ constants.protocol_version }, + version_using{ constants.protocol_version }, + version_min{ constants.protocol_version_min }, type (type_a) { } @@ -88,8 +91,8 @@ bool nano::message_header::deserialize (nano::stream & stream_a) return error; } -nano::message::message (nano::message_type type_a) : - header (type_a) +nano::message::message (nano::network_constants const & constants, nano::message_type type_a) : + header (constants, type_a) { } @@ -535,8 +538,8 @@ bool nano::message_parser::at_end (nano::stream & stream_a) return end; } -nano::keepalive::keepalive () : - message (nano::message_type::keepalive) +nano::keepalive::keepalive (nano::network_constants const & constants) : + message (constants, nano::message_type::keepalive) { nano::endpoint endpoint (boost::asio::ip::address_v6{}, 0); for (auto i (peers.begin ()), n (peers.end ()); i != n; ++i) @@ -606,8 +609,8 @@ nano::publish::publish (bool & error_a, nano::stream & stream_a, nano::message_h } } -nano::publish::publish (std::shared_ptr const & block_a) : - message (nano::message_type::publish), +nano::publish::publish (nano::network_constants const & constants, std::shared_ptr const & block_a) : + message (constants, nano::message_type::publish), block (block_a) { header.block_type_set (block->type ()); @@ -647,15 +650,15 @@ nano::confirm_req::confirm_req (bool & error_a, nano::stream & stream_a, nano::m } } -nano::confirm_req::confirm_req (std::shared_ptr const & block_a) : - message (nano::message_type::confirm_req), +nano::confirm_req::confirm_req (nano::network_constants const & constants, std::shared_ptr const & block_a) : + message (constants, nano::message_type::confirm_req), block (block_a) { header.block_type_set (block->type ()); } -nano::confirm_req::confirm_req (std::vector> const & roots_hashes_a) : - message (nano::message_type::confirm_req), +nano::confirm_req::confirm_req (nano::network_constants const & constants, std::vector> const & roots_hashes_a) : + message (constants, nano::message_type::confirm_req), roots_hashes (roots_hashes_a) { // not_a_block (1) block type for hashes + roots request @@ -664,8 +667,8 @@ nano::confirm_req::confirm_req (std::vector (roots_hashes.size ())); } -nano::confirm_req::confirm_req (nano::block_hash const & hash_a, nano::root const & root_a) : - message (nano::message_type::confirm_req), +nano::confirm_req::confirm_req (nano::network_constants const & constants, nano::block_hash const & hash_a, nano::root const & root_a) : + message (constants, nano::message_type::confirm_req), roots_hashes (std::vector> (1, std::make_pair (hash_a, root_a))) { debug_assert (!roots_hashes.empty ()); @@ -788,8 +791,8 @@ nano::confirm_ack::confirm_ack (bool & error_a, nano::stream & stream_a, nano::m } } -nano::confirm_ack::confirm_ack (std::shared_ptr const & vote_a) : - message (nano::message_type::confirm_ack), +nano::confirm_ack::confirm_ack (nano::network_constants const & constants, std::shared_ptr const & vote_a) : + message (constants, nano::message_type::confirm_ack), vote (vote_a) { debug_assert (!vote_a->blocks.empty ()); @@ -838,8 +841,8 @@ size_t nano::confirm_ack::size (nano::block_type type_a, size_t count) return result; } -nano::frontier_req::frontier_req () : - message (nano::message_type::frontier_req) +nano::frontier_req::frontier_req (nano::network_constants const & constants) : + message (constants, nano::message_type::frontier_req) { } @@ -888,8 +891,8 @@ bool nano::frontier_req::operator== (nano::frontier_req const & other_a) const return start == other_a.start && age == other_a.age && count == other_a.count; } -nano::bulk_pull::bulk_pull () : - message (nano::message_type::bulk_pull) +nano::bulk_pull::bulk_pull (nano::network_constants const & constants) : + message (constants, nano::message_type::bulk_pull) { } @@ -984,8 +987,8 @@ void nano::bulk_pull::set_count_present (bool value_a) header.extensions.set (count_present_flag, value_a); } -nano::bulk_pull_account::bulk_pull_account () : - message (nano::message_type::bulk_pull_account) +nano::bulk_pull_account::bulk_pull_account (nano::network_constants const & constants) : + message (constants, nano::message_type::bulk_pull_account) { } @@ -1029,8 +1032,8 @@ bool nano::bulk_pull_account::deserialize (nano::stream & stream_a) return error; } -nano::bulk_push::bulk_push () : - message (nano::message_type::bulk_push) +nano::bulk_push::bulk_push (nano::network_constants const & constants) : + message (constants, nano::message_type::bulk_push) { } @@ -1055,8 +1058,8 @@ void nano::bulk_push::visit (nano::message_visitor & visitor_a) const visitor_a.bulk_push (*this); } -nano::telemetry_req::telemetry_req () : - message (nano::message_type::telemetry_req) +nano::telemetry_req::telemetry_req (nano::network_constants const & constants) : + message (constants, nano::message_type::telemetry_req) { } @@ -1081,8 +1084,8 @@ void nano::telemetry_req::visit (nano::message_visitor & visitor_a) const visitor_a.telemetry_req (*this); } -nano::telemetry_ack::telemetry_ack () : - message (nano::message_type::telemetry_ack) +nano::telemetry_ack::telemetry_ack (nano::network_constants const & constants) : + message (constants, nano::message_type::telemetry_ack) { } @@ -1095,8 +1098,8 @@ nano::telemetry_ack::telemetry_ack (bool & error_a, nano::stream & stream_a, nan } } -nano::telemetry_ack::telemetry_ack (nano::telemetry_data const & telemetry_data_a) : - message (nano::message_type::telemetry_ack), +nano::telemetry_ack::telemetry_ack (nano::network_constants const & constants, nano::telemetry_data const & telemetry_data_a) : + message (constants, nano::message_type::telemetry_ack), data (telemetry_data_a) { debug_assert (telemetry_data::size + telemetry_data_a.unknown_data.size () <= message_header::telemetry_size_mask.to_ulong ()); // Maximum size the mask allows @@ -1342,8 +1345,8 @@ nano::node_id_handshake::node_id_handshake (bool & error_a, nano::stream & strea error_a = deserialize (stream_a); } -nano::node_id_handshake::node_id_handshake (boost::optional query, boost::optional> response) : - message (nano::message_type::node_id_handshake), +nano::node_id_handshake::node_id_handshake (nano::network_constants const & constants, boost::optional query, boost::optional> response) : + message (constants, nano::message_type::node_id_handshake), query (query), response (response) { diff --git a/nano/node/common.hpp b/nano/node/common.hpp index c185fe7286..3d29457f46 100644 --- a/nano/node/common.hpp +++ b/nano/node/common.hpp @@ -187,7 +187,7 @@ class message_visitor; class message_header final { public: - explicit message_header (nano::message_type); + message_header (nano::network_constants const &, nano::message_type); message_header (bool &, nano::stream &); void serialize (nano::stream &) const; bool deserialize (nano::stream &); @@ -225,7 +225,7 @@ class message_header final class message { public: - explicit message (nano::message_type); + explicit message (nano::network_constants const &, nano::message_type); explicit message (nano::message_header const &); virtual ~message () = default; virtual void serialize (nano::stream &) const = 0; @@ -279,7 +279,7 @@ class message_parser final class keepalive final : public message { public: - keepalive (); + explicit keepalive (nano::network_constants const & constants); keepalive (bool &, nano::stream &, nano::message_header const &); void visit (nano::message_visitor &) const override; void serialize (nano::stream &) const override; @@ -292,7 +292,7 @@ class publish final : public message { public: publish (bool &, nano::stream &, nano::message_header const &, nano::uint128_t const & = 0, nano::block_uniquer * = nullptr); - explicit publish (std::shared_ptr const &); + publish (nano::network_constants const & constants, std::shared_ptr const &); void visit (nano::message_visitor &) const override; void serialize (nano::stream &) const override; bool deserialize (nano::stream &, nano::block_uniquer * = nullptr); @@ -304,9 +304,9 @@ class confirm_req final : public message { public: confirm_req (bool &, nano::stream &, nano::message_header const &, nano::block_uniquer * = nullptr); - explicit confirm_req (std::shared_ptr const &); - confirm_req (std::vector> const &); - confirm_req (nano::block_hash const &, nano::root const &); + confirm_req (nano::network_constants const & constants, std::shared_ptr const &); + confirm_req (nano::network_constants const & constants, std::vector> const &); + confirm_req (nano::network_constants const & constants, nano::block_hash const &, nano::root const &); void serialize (nano::stream &) const override; bool deserialize (nano::stream &, nano::block_uniquer * = nullptr); void visit (nano::message_visitor &) const override; @@ -320,7 +320,7 @@ class confirm_ack final : public message { public: confirm_ack (bool &, nano::stream &, nano::message_header const &, nano::vote_uniquer * = nullptr); - explicit confirm_ack (std::shared_ptr const &); + confirm_ack (nano::network_constants const & constants, std::shared_ptr const &); void serialize (nano::stream &) const override; void visit (nano::message_visitor &) const override; bool operator== (nano::confirm_ack const &) const; @@ -330,7 +330,7 @@ class confirm_ack final : public message class frontier_req final : public message { public: - frontier_req (); + explicit frontier_req (nano::network_constants const & constants); frontier_req (bool &, nano::stream &, nano::message_header const &); void serialize (nano::stream &) const override; bool deserialize (nano::stream &); @@ -389,7 +389,7 @@ class telemetry_data class telemetry_req final : public message { public: - telemetry_req (); + explicit telemetry_req (nano::network_constants const & constants); explicit telemetry_req (nano::message_header const &); void serialize (nano::stream &) const override; bool deserialize (nano::stream &); @@ -398,9 +398,9 @@ class telemetry_req final : public message class telemetry_ack final : public message { public: - telemetry_ack (); + explicit telemetry_ack (nano::network_constants const & constants); telemetry_ack (bool &, nano::stream &, nano::message_header const &); - explicit telemetry_ack (telemetry_data const &); + telemetry_ack (nano::network_constants const & constants, telemetry_data const &); void serialize (nano::stream &) const override; void visit (nano::message_visitor &) const override; bool deserialize (nano::stream &); @@ -414,7 +414,7 @@ class bulk_pull final : public message { public: using count_t = uint32_t; - bulk_pull (); + explicit bulk_pull (nano::network_constants const & constants); bulk_pull (bool &, nano::stream &, nano::message_header const &); void serialize (nano::stream &) const override; bool deserialize (nano::stream &); @@ -431,7 +431,7 @@ class bulk_pull final : public message class bulk_pull_account final : public message { public: - bulk_pull_account (); + explicit bulk_pull_account (nano::network_constants const & constants); bulk_pull_account (bool &, nano::stream &, nano::message_header const &); void serialize (nano::stream &) const override; bool deserialize (nano::stream &); @@ -444,7 +444,7 @@ class bulk_pull_account final : public message class bulk_push final : public message { public: - bulk_push (); + explicit bulk_push (nano::network_constants const & constants); explicit bulk_push (nano::message_header const &); void serialize (nano::stream &) const override; bool deserialize (nano::stream &); @@ -454,7 +454,7 @@ class node_id_handshake final : public message { public: node_id_handshake (bool &, nano::stream &, nano::message_header const &); - node_id_handshake (boost::optional, boost::optional>); + node_id_handshake (nano::network_constants const & constants, boost::optional, boost::optional>); void serialize (nano::stream &) const override; bool deserialize (nano::stream &); void visit (nano::message_visitor &) const override; diff --git a/nano/node/confirmation_solicitor.cpp b/nano/node/confirmation_solicitor.cpp index 3faf67f725..235aa6bd24 100644 --- a/nano/node/confirmation_solicitor.cpp +++ b/nano/node/confirmation_solicitor.cpp @@ -31,7 +31,7 @@ bool nano::confirmation_solicitor::broadcast (nano::election const & election_a) if (rebroadcasted++ < max_block_broadcasts) { auto const & hash (election_a.status.winner->hash ()); - nano::publish winner (election_a.status.winner); + nano::publish winner{ config.network_params.network, election_a.status.winner }; unsigned count = 0; // Directed broadcasting to principal representatives for (auto i (representatives_broadcasts.begin ()), n (representatives_broadcasts.end ()); i != n && count < max_election_broadcasts; ++i) @@ -98,14 +98,14 @@ void nano::confirmation_solicitor::flush () roots_hashes_l.push_back (root_hash); if (roots_hashes_l.size () == nano::network::confirm_req_hashes_max) { - nano::confirm_req req (roots_hashes_l); + nano::confirm_req req{ config.network_params.network, roots_hashes_l }; channel->send (req); roots_hashes_l.clear (); } } if (!roots_hashes_l.empty ()) { - nano::confirm_req req (roots_hashes_l); + nano::confirm_req req{ config.network_params.network, roots_hashes_l }; channel->send (req); } } diff --git a/nano/node/network.cpp b/nano/node/network.cpp index b3e284653a..7c90706ddf 100644 --- a/nano/node/network.cpp +++ b/nano/node/network.cpp @@ -152,14 +152,14 @@ void nano::network::stop () void nano::network::send_keepalive (std::shared_ptr const & channel_a) { - nano::keepalive message; + nano::keepalive message{ node.network_params.network }; random_fill (message.peers); channel_a->send (message); } void nano::network::send_keepalive_self (std::shared_ptr const & channel_a) { - nano::keepalive message; + nano::keepalive message{ node.network_params.network }; fill_keepalive_self (message.peers); channel_a->send (message); } @@ -172,7 +172,7 @@ void nano::network::send_node_id_handshake (std::shared_ptrfirst, *respond_to, response->second)); } - nano::node_id_handshake message (query, response); + nano::node_id_handshake message{ node.network_params.network, query, response }; if (node.config.logging.network_node_id_handshake_logging ()) { node.logger.try_log (boost::str (boost::format ("Node ID handshake sent with node ID %1% to %2%: query %3%, respond_to %4% (signature %5%)") % node.node_id.pub.to_node_id () % channel_a->get_endpoint () % (query ? query->to_string () : std::string ("[none]")) % (respond_to ? respond_to->to_string () : std::string ("[none]")) % (response ? response->second.to_string () : std::string ("[none]")))); @@ -188,15 +188,29 @@ void nano::network::flood_message (nano::message & message_a, nano::buffer_drop_ } } +void nano::network::flood_keepalive (float const scale_a) +{ + nano::keepalive message{ node.network_params.network }; + random_fill (message.peers); + flood_message (message, nano::buffer_drop_policy::limiter, scale_a); +} + +void nano::network::flood_keepalive_self (float const scale_a) +{ + nano::keepalive message{ node.network_params.network }; + fill_keepalive_self (message.peers); + flood_message (message, nano::buffer_drop_policy::limiter, scale_a); +} + void nano::network::flood_block (std::shared_ptr const & block_a, nano::buffer_drop_policy const drop_policy_a) { - nano::publish message (block_a); + nano::publish message (node.network_params.network, block_a); flood_message (message, drop_policy_a); } void nano::network::flood_block_initial (std::shared_ptr const & block_a) { - nano::publish message (block_a); + nano::publish message (node.network_params.network, block_a); for (auto const & i : node.rep_crawler.principal_representatives ()) { i.channel->send (message, nullptr, nano::buffer_drop_policy::no_limiter_drop); @@ -209,7 +223,7 @@ void nano::network::flood_block_initial (std::shared_ptr const & bl void nano::network::flood_vote (std::shared_ptr const & vote_a, float scale) { - nano::confirm_ack message (vote_a); + nano::confirm_ack message{ node.network_params.network, vote_a }; for (auto & i : list (fanout (scale))) { i->send (message, nullptr); @@ -218,7 +232,7 @@ void nano::network::flood_vote (std::shared_ptr const & vote_a, floa void nano::network::flood_vote_pr (std::shared_ptr const & vote_a) { - nano::confirm_ack message (vote_a); + nano::confirm_ack message{ node.network_params.network, vote_a }; for (auto const & i : node.rep_crawler.principal_representatives ()) { i.channel->send (message, nullptr, nano::buffer_drop_policy::no_limiter_drop); @@ -252,7 +266,7 @@ void nano::network::flood_block_many (std::deque> b void nano::network::send_confirm_req (std::shared_ptr const & channel_a, std::pair const & hash_root_a) { // Confirmation request with hash + root - nano::confirm_req req (hash_root_a.first, hash_root_a.second); + nano::confirm_req req (node.network_params.network, hash_root_a.first, hash_root_a.second); channel_a->send (req); } @@ -330,7 +344,7 @@ void nano::network::broadcast_confirm_req_batched_many (std::unordered_mapsecond.front ()); i->second.pop_front (); } - nano::confirm_req req (roots_hashes_l); + nano::confirm_req req{ node.network_params.network, roots_hashes_l }; i->first->send (req); if (i->second.empty ()) { @@ -516,11 +530,11 @@ class network_message_visitor : public nano::message_visitor // Send an empty telemetry_ack if we do not want, just to acknowledge that we have received the message to // remove any timeouts on the server side waiting for a message. - nano::telemetry_ack telemetry_ack; + nano::telemetry_ack telemetry_ack{ node.network_params.network }; if (!node.flags.disable_providing_telemetry_metrics) { auto telemetry_data = nano::local_telemetry_data (node.ledger, node.network, node.config.bandwidth_limit, node.network_params, node.startup_time, node.default_difficulty (nano::work_version::work_1), node.node_id); - telemetry_ack = nano::telemetry_ack (telemetry_data); + telemetry_ack = nano::telemetry_ack{ node.network_params.network, telemetry_data }; } channel->send (telemetry_ack, nullptr, nano::buffer_drop_policy::no_socket_drop); } diff --git a/nano/node/network.hpp b/nano/node/network.hpp index 598f62e5ad..eb0c771da1 100644 --- a/nano/node/network.hpp +++ b/nano/node/network.hpp @@ -124,18 +124,8 @@ class network final void start (); void stop (); void flood_message (nano::message &, nano::buffer_drop_policy const = nano::buffer_drop_policy::limiter, float const = 1.0f); - void flood_keepalive (float const scale_a = 1.0f) - { - nano::keepalive message; - random_fill (message.peers); - flood_message (message, nano::buffer_drop_policy::limiter, scale_a); - } - void flood_keepalive_self (float const scale_a = 0.5f) - { - nano::keepalive message; - fill_keepalive_self (message.peers); - flood_message (message, nano::buffer_drop_policy::limiter, scale_a); - } + void flood_keepalive (float const scale_a = 1.0f); + void flood_keepalive_self (float const scale_a = 0.5f); void flood_vote (std::shared_ptr const &, float scale); void flood_vote_pr (std::shared_ptr const &); // Flood block to all PRs and a random selection of non-PRs diff --git a/nano/node/node.cpp b/nano/node/node.cpp index 9d29cb0e7f..c2d6ad5954 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -119,7 +119,7 @@ nano::node::node (boost::asio::io_context & io_ctx_a, boost::filesystem::path co confirmation_height_processor (ledger, write_database_queue, config.conf_height_processor_batch_min_time, config.logging, logger, node_initialized_latch, flags.confirmation_height_processor_mode), active (*this, confirmation_height_processor), scheduler{ *this }, - aggregator (network_params.network, config, stats, active.generator, active.final_generator, history, ledger, wallets, active), + aggregator (config, stats, active.generator, active.final_generator, history, ledger, wallets, active), wallets (wallets_store.init_error (), *this), startup_time (std::chrono::steady_clock::now ()), node_seq (seq) diff --git a/nano/node/request_aggregator.cpp b/nano/node/request_aggregator.cpp index a67c930cbc..6c3d6f7939 100644 --- a/nano/node/request_aggregator.cpp +++ b/nano/node/request_aggregator.cpp @@ -11,9 +11,10 @@ #include #include -nano::request_aggregator::request_aggregator (nano::network_constants const & network_constants_a, nano::node_config const & config_a, nano::stat & stats_a, nano::vote_generator & generator_a, nano::vote_generator & final_generator_a, nano::local_vote_history & history_a, nano::ledger & ledger_a, nano::wallets & wallets_a, nano::active_transactions & active_a) : - max_delay (network_constants_a.is_dev_network () ? 50 : 300), - small_delay (network_constants_a.is_dev_network () ? 10 : 50), +nano::request_aggregator::request_aggregator (nano::node_config const & config_a, nano::stat & stats_a, nano::vote_generator & generator_a, nano::vote_generator & final_generator_a, nano::local_vote_history & history_a, nano::ledger & ledger_a, nano::wallets & wallets_a, nano::active_transactions & active_a) : + config{ config_a }, + max_delay (config_a.network_params.network.is_dev_network () ? 50 : 300), + small_delay (config_a.network_params.network.is_dev_network () ? 10 : 50), max_channel_requests (config_a.max_queued_requests), stats (stats_a), local_votes (history_a), @@ -150,7 +151,7 @@ bool nano::request_aggregator::empty () void nano::request_aggregator::reply_action (std::shared_ptr const & vote_a, std::shared_ptr const & channel_a) const { - nano::confirm_ack confirm (vote_a); + nano::confirm_ack confirm{ config.network_params.network, vote_a }; channel_a->send (confirm); } @@ -277,7 +278,7 @@ std::pair>, std::vectorhash () != hash) { - nano::publish publish (block); + nano::publish publish (config.network_params.network, block); channel_a->send (publish); } } diff --git a/nano/node/request_aggregator.hpp b/nano/node/request_aggregator.hpp index 52017cabb2..8b8c8186b1 100644 --- a/nano/node/request_aggregator.hpp +++ b/nano/node/request_aggregator.hpp @@ -59,7 +59,7 @@ class request_aggregator final // clang-format on public: - request_aggregator (nano::network_constants const &, nano::node_config const & config, nano::stat & stats_a, nano::vote_generator &, nano::vote_generator &, nano::local_vote_history &, nano::ledger &, nano::wallets &, nano::active_transactions &); + request_aggregator (nano::node_config const & config, nano::stat & stats_a, nano::vote_generator &, nano::vote_generator &, nano::local_vote_history &, nano::ledger &, nano::wallets &, nano::active_transactions &); /** Add a new request by \p channel_a for hashes \p hashes_roots_a */ void add (std::shared_ptr const & channel_a, std::vector> const & hashes_roots_a); @@ -68,6 +68,7 @@ class request_aggregator final size_t size (); bool empty (); + nano::node_config const & config; const std::chrono::milliseconds max_delay; const std::chrono::milliseconds small_delay; const size_t max_channel_requests; diff --git a/nano/node/telemetry.cpp b/nano/node/telemetry.cpp index e6ed593ac1..3ab166d382 100644 --- a/nano/node/telemetry.cpp +++ b/nano/node/telemetry.cpp @@ -352,7 +352,7 @@ void nano::telemetry::fire_request_message (std::shared_ptr this_w (shared_from_this ()); - nano::telemetry_req message; + nano::telemetry_req message{ network_params.network }; // clang-format off channel_a->send (message, [this_w, endpoint = channel_a->get_endpoint (), round_l](boost::system::error_code const & ec, size_t size_a) { if (auto this_l = this_w.lock ()) diff --git a/nano/node/transport/tcp.cpp b/nano/node/transport/tcp.cpp index 85aabe3ecf..6951751b85 100644 --- a/nano/node/transport/tcp.cpp +++ b/nano/node/transport/tcp.cpp @@ -445,7 +445,7 @@ void nano::transport::tcp_channels::purge (std::chrono::steady_clock::time_point void nano::transport::tcp_channels::ongoing_keepalive () { - nano::keepalive message; + nano::keepalive message{ node.network_params.network }; node.network.random_fill (message.peers); nano::unique_lock lock (mutex); // Wake up channels @@ -571,7 +571,7 @@ void nano::transport::tcp_channels::start_tcp (nano::endpoint const & endpoint_a { // TCP node ID handshake auto cookie (node_l->network.syn_cookies.assign (endpoint_a)); - nano::node_id_handshake message (cookie, boost::none); + nano::node_id_handshake message (node_l->network_params.network, cookie, boost::none); if (node_l->config.logging.network_node_id_handshake_logging ()) { node_l->logger.try_log (boost::str (boost::format ("Node ID handshake request sent with node ID %1% to %2%: query %3%") % node_l->node_id.pub.to_node_id () % endpoint_a % (*cookie).to_string ())); @@ -669,7 +669,7 @@ void nano::transport::tcp_channels::start_tcp_receive_node_id (std::shared_ptrset_node_id (node_id); channel_a->set_last_packet_received (std::chrono::steady_clock::now ()); boost::optional> response (std::make_pair (node_l->node_id.pub, nano::sign_message (node_l->node_id.prv, node_l->node_id.pub, *message.query))); - nano::node_id_handshake response_message (boost::none, response); + nano::node_id_handshake response_message (node_l->network_params.network, boost::none, response); if (node_l->config.logging.network_node_id_handshake_logging ()) { node_l->logger.try_log (boost::str (boost::format ("Node ID handshake response sent with node ID %1% to %2%: query %3%") % node_l->node_id.pub.to_node_id () % endpoint_a % (*message.query).to_string ())); diff --git a/nano/node/transport/transport.cpp b/nano/node/transport/transport.cpp index 2ec3eb6840..75ba49474d 100644 --- a/nano/node/transport/transport.cpp +++ b/nano/node/transport/transport.cpp @@ -102,9 +102,6 @@ nano::transport::channel::channel (nano::node & node_a) : void nano::transport::channel::send (nano::message & message_a, std::function const & callback_a, nano::buffer_drop_policy drop_policy_a) { - message_a.header.version_max = node.network_params.network.protocol_version; - message_a.header.version_using = node.network_params.network.protocol_version; - message_a.header.version_min = node.network_params.network.protocol_version_min; callback_visitor visitor; message_a.visit (visitor); auto buffer (message_a.to_shared_const_buffer ()); diff --git a/nano/node/transport/udp.cpp b/nano/node/transport/udp.cpp index c46fce6859..bd975ad650 100644 --- a/nano/node/transport/udp.cpp +++ b/nano/node/transport/udp.cpp @@ -686,7 +686,7 @@ void nano::transport::udp_channels::purge (std::chrono::steady_clock::time_point void nano::transport::udp_channels::ongoing_keepalive () { - nano::keepalive message; + nano::keepalive message{ node.network_params.network }; node.network.random_fill (message.peers); std::vector> send_list; nano::unique_lock lock (mutex); From 6410c5241a5679ceb0997ab3c34ed81cc8c7cd55 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Fri, 6 Aug 2021 13:44:52 +0100 Subject: [PATCH 143/346] Removing legacy path from nano::working_path as versions that use this path are no longer supported in the upgrade path. (#3414) --- nano/secure/utility.cpp | 38 +++++--------------------------------- nano/secure/utility.hpp | 2 +- 2 files changed, 6 insertions(+), 34 deletions(-) diff --git a/nano/secure/utility.cpp b/nano/secure/utility.cpp index 67637f9667..c15de73972 100644 --- a/nano/secure/utility.cpp +++ b/nano/secure/utility.cpp @@ -6,7 +6,7 @@ static std::vector all_unique_paths; -boost::filesystem::path nano::working_path (bool legacy) +boost::filesystem::path nano::working_path () { static nano::network_constants network_constants; auto result (nano::app_path ()); @@ -16,44 +16,16 @@ boost::filesystem::path nano::working_path (bool legacy) release_assert (false); break; case nano::networks::nano_dev_network: - if (!legacy) - { - result /= "NanoDev"; - } - else - { - result /= "RaiBlocksDev"; - } + result /= "NanoDev"; break; case nano::networks::nano_beta_network: - if (!legacy) - { - result /= "NanoBeta"; - } - else - { - result /= "RaiBlocksBeta"; - } + result /= "NanoBeta"; break; case nano::networks::nano_live_network: - if (!legacy) - { - result /= "Nano"; - } - else - { - result /= "RaiBlocks"; - } + result /= "Nano"; break; case nano::networks::nano_test_network: - if (!legacy) - { - result /= "NanoTest"; - } - else - { - result /= "RaiBlocksTest"; - } + result /= "NanoTest"; break; } return result; diff --git a/nano/secure/utility.hpp b/nano/secure/utility.hpp index 0d090e5d81..71b5983462 100644 --- a/nano/secure/utility.hpp +++ b/nano/secure/utility.hpp @@ -7,7 +7,7 @@ namespace nano { // OS-specific way of finding a path to a home directory. -boost::filesystem::path working_path (bool = false); +boost::filesystem::path working_path (); // Get a unique path within the home directory, used for testing. // Any directories created at this location will be removed when a test finishes. boost::filesystem::path unique_path (); From e45490eb931a53b55202b5a0423dc8b006f4db16 Mon Sep 17 00:00:00 2001 From: Russel Waters <6511720+argakiig@users.noreply.github.com> Date: Fri, 6 Aug 2021 05:45:12 -0700 Subject: [PATCH 144/346] test_common not required for qt only for qt_test (#3415) --- CMakeLists.txt | 1 - 1 file changed, 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 7db5c61ad6..07ea6e7c06 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -639,7 +639,6 @@ if(NANO_GUI OR RAIBLOCKS_GUI) node secure nano_lib - test_common libminiupnpc-static Qt5::Gui Qt5::Widgets) From a5b9c3f51e3da14cc6275400472f2573c9c78fde Mon Sep 17 00:00:00 2001 From: Russel Waters <6511720+argakiig@users.noreply.github.com> Date: Fri, 6 Aug 2021 12:43:39 -0700 Subject: [PATCH 145/346] Remove qt_system target we dont need it or use it (#3418) * Remove qt_system target we dont need it or use it * cmake format sanitization --- CMakeLists.txt | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 07ea6e7c06..339b46ae79 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -685,13 +685,9 @@ if(NANO_GUI OR RAIBLOCKS_GUI) SUFFIX ".com") endif() - add_executable(qt_system nano/qt_system/entry.cpp) - - target_link_libraries(qt_system qt node Qt5::Gui Qt5::Widgets) - set_target_properties( - qt nano_wallet qt_system - PROPERTIES COMPILE_FLAGS "-DQT_NO_KEYWORDS -DBOOST_ASIO_HAS_STD_ARRAY=1") + qt nano_wallet PROPERTIES COMPILE_FLAGS + "-DQT_NO_KEYWORDS -DBOOST_ASIO_HAS_STD_ARRAY=1") if(NANO_TEST OR RAIBLOCKS_TEST) add_executable(qt_test nano/qt_test/entry.cpp nano/qt_test/qt.cpp) From bf53120a70cd9f669f075b5ffb8cd810edd0ecc3 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Sat, 7 Aug 2021 21:26:01 +0100 Subject: [PATCH 146/346] Passing nano::network_constants by ref in to work_pool rather than instantiating statically. --- nano/core_test/block_store.cpp | 10 +- nano/core_test/confirmation_height.cpp | 10 +- nano/core_test/ledger.cpp | 184 ++++++++++++------------- nano/core_test/node.cpp | 8 +- nano/core_test/processor_service.cpp | 4 +- nano/core_test/work_pool.cpp | 18 +-- nano/lib/work.cpp | 3 +- nano/lib/work.hpp | 4 +- nano/nano_node/daemon.cpp | 2 +- nano/nano_node/entry.cpp | 10 +- nano/nano_wallet/entry.cpp | 4 +- nano/node/node.cpp | 2 +- nano/slow_test/node.cpp | 4 +- nano/test_common/system.hpp | 2 +- 14 files changed, 133 insertions(+), 132 deletions(-) diff --git a/nano/core_test/block_store.cpp b/nano/core_test/block_store.cpp index 55202988df..0e4411b665 100644 --- a/nano/core_test/block_store.cpp +++ b/nano/core_test/block_store.cpp @@ -1006,7 +1006,7 @@ TEST (mdb_block_store, sideband_height) nano::ledger ledger (store, stat, nano::dev::constants); auto transaction (store.tx_begin_write ()); store.initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::send_block send (nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); nano::receive_block receive (send.hash (), send.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send.hash ())); @@ -1262,7 +1262,7 @@ TEST (mdb_block_store, upgrade_v14_v15) } // Extract confirmation height to a separate database auto path (nano::unique_path ()); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::send_block send (nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); nano::state_block epoch (nano::dev::genesis_key.pub, send.hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::network_params.ledger.epochs.link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send.hash ())); nano::state_block state_send (nano::dev::genesis_key.pub, epoch.hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio * 2, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch.hash ())); @@ -1416,7 +1416,7 @@ TEST (mdb_block_store, upgrade_v16_v17) // Don't test this in rocksdb mode return; } - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::state_block block1 (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); nano::state_block block2 (nano::dev::genesis_key.pub, block1.hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio - 1, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (block1.hash ())); nano::state_block block3 (nano::dev::genesis_key.pub, block2.hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio - 2, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (block2.hash ())); @@ -1482,7 +1482,7 @@ TEST (mdb_block_store, upgrade_v17_v18) nano::keypair key1; nano::keypair key2; nano::keypair key3; - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::send_block send_zero (nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); nano::state_block state_receive_zero (nano::dev::genesis_key.pub, send_zero.hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount, send_zero.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send_zero.hash ())); nano::state_block epoch (nano::dev::genesis_key.pub, state_receive_zero.hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount, nano::dev::network_params.ledger.epochs.link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (state_receive_zero.hash ())); @@ -1682,7 +1682,7 @@ TEST (mdb_block_store, upgrade_v18_v19) } auto path (nano::unique_path ()); nano::keypair key1; - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::send_block send (nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); nano::receive_block receive (send.hash (), send.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send.hash ())); nano::change_block change (receive.hash (), 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (receive.hash ())); diff --git a/nano/core_test/confirmation_height.cpp b/nano/core_test/confirmation_height.cpp index 5b6c41227d..00b11c4ea7 100644 --- a/nano/core_test/confirmation_height.cpp +++ b/nano/core_test/confirmation_height.cpp @@ -723,7 +723,7 @@ TEST (confirmation_heightDeathTest, rollback_added_block) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); nano::write_database_queue write_database_queue (false); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; auto send = std::make_shared (nano::dev::genesis->hash (), key1.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); { @@ -799,7 +799,7 @@ TEST (confirmation_heightDeathTest, modified_chain) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); nano::write_database_queue write_database_queue (false); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; auto send = std::make_shared (nano::dev::genesis->hash (), key1.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); { @@ -869,7 +869,7 @@ TEST (confirmation_heightDeathTest, modified_chain_account_removed) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); nano::write_database_queue write_database_queue (false); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; auto send = std::make_shared (nano::dev::genesis->hash (), key1.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); auto open = std::make_shared (key1.pub, 0, 0, nano::Gxrb_ratio, send->hash (), key1.prv, key1.pub, *pool.generate (key1.pub)); @@ -1362,7 +1362,7 @@ TEST (confirmation_height, unbounded_block_cache_iteration) nano::ledger ledger (*store, stats, nano::dev::constants); nano::write_database_queue write_database_queue (false); boost::latch initialized_latch{ 0 }; - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::logging logging; nano::keypair key1; auto send = std::make_shared (nano::dev::genesis->hash (), key1.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); @@ -1412,7 +1412,7 @@ TEST (confirmation_height, pruned_source) nano::ledger ledger (*store, stats, nano::dev::constants); ledger.pruning = true; nano::write_database_queue write_database_queue (false); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1, key2; auto send1 = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - 100, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); auto open1 = std::make_shared (key1.pub, 0, key1.pub, 100, send1->hash (), key1.prv, key1.pub, *pool.generate (key1.pub)); diff --git a/nano/core_test/ledger.cpp b/nano/core_test/ledger.cpp index 829c444a44..d873bac653 100644 --- a/nano/core_test/ledger.cpp +++ b/nano/core_test/ledger.cpp @@ -73,7 +73,7 @@ TEST (ledger, process_modifies_sideband) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); store->initialize (store->tx_begin_write (), ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (store->tx_begin_write (), send1).code); ASSERT_EQ (send1.sideband ().timestamp, store->block.get (store->tx_begin_read (), send1.hash ())->sideband ().timestamp); @@ -89,7 +89,7 @@ TEST (ledger, process_send) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::account_info info1; ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info1)); nano::keypair key2; @@ -188,7 +188,7 @@ TEST (ledger, process_receive) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::account_info info1; ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info1)); nano::keypair key2; @@ -251,7 +251,7 @@ TEST (ledger, rollback_receiver) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::account_info info1; ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info1)); nano::keypair key2; @@ -290,7 +290,7 @@ TEST (ledger, rollback_representation) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key5; nano::change_block change1 (nano::dev::genesis->hash (), key5.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, change1).code); @@ -343,7 +343,7 @@ TEST (ledger, receive_rollback) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::send_block send (nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); nano::receive_block receive (send.hash (), send.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send.hash ())); @@ -360,7 +360,7 @@ TEST (ledger, process_duplicate) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::account_info info1; ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info1)); nano::keypair key2; @@ -409,7 +409,7 @@ TEST (ledger, representative_change) nano::keypair key2; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; ASSERT_EQ (nano::dev::constants.genesis_amount, ledger.weight (nano::dev::genesis_key.pub)); ASSERT_EQ (0, ledger.weight (key2.pub)); nano::account_info info1; @@ -448,7 +448,7 @@ TEST (ledger, send_fork) nano::keypair key3; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::account_info info1; ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info1)); nano::send_block block (info1.head, key2.pub, 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (info1.head)); @@ -468,7 +468,7 @@ TEST (ledger, receive_fork) nano::keypair key3; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::account_info info1; ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info1)); nano::send_block block (info1.head, key2.pub, 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (info1.head)); @@ -494,7 +494,7 @@ TEST (ledger, open_fork) nano::keypair key3; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::account_info info1; ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info1)); nano::send_block block (info1.head, key2.pub, 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (info1.head)); @@ -526,7 +526,7 @@ TEST (ledger, representation) auto & rep_weights = ledger.cache.rep_weights; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; ASSERT_EQ (nano::dev::constants.genesis_amount, rep_weights.representation_get (nano::dev::genesis_key.pub)); nano::keypair key2; nano::send_block block1 (nano::dev::genesis->hash (), key2.pub, nano::dev::constants.genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); @@ -599,7 +599,7 @@ TEST (ledger, double_open) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key2; nano::send_block send1 (nano::dev::genesis->hash (), key2.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -618,7 +618,7 @@ TEST (ledger, double_receive) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key2; nano::send_block send1 (nano::dev::genesis->hash (), key2.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -896,7 +896,7 @@ TEST (ledger, fail_change_old) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; nano::change_block block (nano::dev::genesis->hash (), key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); auto result1 (ledger.process (transaction, block)); @@ -914,7 +914,7 @@ TEST (ledger, fail_change_gap_previous) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; nano::change_block block (1, key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::root (1))); auto result1 (ledger.process (transaction, block)); @@ -930,7 +930,7 @@ TEST (ledger, fail_change_bad_signature) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; nano::change_block block (nano::dev::genesis->hash (), key1.pub, nano::keypair ().prv, 0, *pool.generate (nano::dev::genesis->hash ())); auto result1 (ledger.process (transaction, block)); @@ -946,7 +946,7 @@ TEST (ledger, fail_change_fork) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; nano::change_block block1 (nano::dev::genesis->hash (), key1.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); auto result1 (ledger.process (transaction, block1)); @@ -966,7 +966,7 @@ TEST (ledger, fail_send_old) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; nano::send_block block (nano::dev::genesis->hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); auto result1 (ledger.process (transaction, block)); @@ -984,7 +984,7 @@ TEST (ledger, fail_send_gap_previous) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; nano::send_block block (1, key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::root (1))); auto result1 (ledger.process (transaction, block)); @@ -1000,7 +1000,7 @@ TEST (ledger, fail_send_bad_signature) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; nano::send_block block (nano::dev::genesis->hash (), key1.pub, 1, nano::keypair ().prv, 0, *pool.generate (nano::dev::genesis->hash ())); auto result1 (ledger.process (transaction, block)); @@ -1016,7 +1016,7 @@ TEST (ledger, fail_send_negative_spend) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; nano::send_block block1 (nano::dev::genesis->hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block1).code); @@ -1034,7 +1034,7 @@ TEST (ledger, fail_send_fork) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; nano::send_block block1 (nano::dev::genesis->hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block1).code); @@ -1052,7 +1052,7 @@ TEST (ledger, fail_open_old) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; nano::send_block block1 (nano::dev::genesis->hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block1).code); @@ -1070,7 +1070,7 @@ TEST (ledger, fail_open_gap_source) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; nano::open_block block2 (1, 1, key1.pub, key1.prv, key1.pub, *pool.generate (key1.pub)); auto result2 (ledger.process (transaction, block2)); @@ -1086,7 +1086,7 @@ TEST (ledger, fail_open_bad_signature) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; nano::send_block block1 (nano::dev::genesis->hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block1).code); @@ -1104,7 +1104,7 @@ TEST (ledger, fail_open_fork_previous) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; nano::send_block block1 (nano::dev::genesis->hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block1).code); @@ -1126,7 +1126,7 @@ TEST (ledger, fail_open_account_mismatch) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; nano::send_block block1 (nano::dev::genesis->hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block1).code); @@ -1145,7 +1145,7 @@ TEST (ledger, fail_receive_old) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; nano::send_block block1 (nano::dev::genesis->hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, block1).code); @@ -1167,7 +1167,7 @@ TEST (ledger, fail_receive_gap_source) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; nano::send_block block1 (nano::dev::genesis->hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); auto result1 (ledger.process (transaction, block1)); @@ -1192,7 +1192,7 @@ TEST (ledger, fail_receive_overreceive) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; nano::send_block block1 (nano::dev::genesis->hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); auto result1 (ledger.process (transaction, block1)); @@ -1214,7 +1214,7 @@ TEST (ledger, fail_receive_bad_signature) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; nano::send_block block1 (nano::dev::genesis->hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); auto result1 (ledger.process (transaction, block1)); @@ -1239,7 +1239,7 @@ TEST (ledger, fail_receive_gap_previous_opened) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; nano::send_block block1 (nano::dev::genesis->hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); auto result1 (ledger.process (transaction, block1)); @@ -1264,7 +1264,7 @@ TEST (ledger, fail_receive_gap_previous_unopened) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; nano::send_block block1 (nano::dev::genesis->hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); auto result1 (ledger.process (transaction, block1)); @@ -1286,7 +1286,7 @@ TEST (ledger, fail_receive_fork_previous) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; nano::send_block block1 (nano::dev::genesis->hash (), key1.pub, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); auto result1 (ledger.process (transaction, block1)); @@ -1315,7 +1315,7 @@ TEST (ledger, fail_receive_received_source) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; nano::send_block block1 (nano::dev::genesis->hash (), key1.pub, 2, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); auto result1 (ledger.process (transaction, block1)); @@ -1363,7 +1363,7 @@ TEST (ledger, latest_root) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key; ASSERT_EQ (key.pub, ledger.latest_root (transaction, key.pub)); auto hash1 (ledger.latest (transaction, nano::dev::genesis_key.pub)); @@ -1382,7 +1382,7 @@ TEST (ledger, change_representative_move_representation) nano::keypair key1; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; ASSERT_EQ (nano::dev::constants.genesis_amount, ledger.weight (nano::dev::genesis_key.pub)); nano::send_block send (nano::dev::genesis->hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send).code); @@ -1405,7 +1405,7 @@ TEST (ledger, send_open_receive_rollback) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::account_info info1; ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info1)); nano::keypair key1; @@ -1463,7 +1463,7 @@ TEST (ledger, bootstrap_rep_weight) nano::ledger ledger (*store, stats, nano::dev::constants); nano::account_info info1; nano::keypair key2; - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; { auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); @@ -1499,7 +1499,7 @@ TEST (ledger, block_destination_source) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair dest; nano::uint128_t balance (nano::dev::constants.genesis_amount); balance -= nano::Gxrb_ratio; @@ -1544,7 +1544,7 @@ TEST (ledger, state_account) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_EQ (nano::dev::genesis->account (), ledger.account (transaction, send1.hash ())); @@ -1559,7 +1559,7 @@ TEST (ledger, state_send_receive) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); @@ -1600,7 +1600,7 @@ TEST (ledger, state_receive) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::send_block send1 (nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); @@ -1634,7 +1634,7 @@ TEST (ledger, state_rep_change) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair rep; nano::state_block change1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), rep.pub, nano::dev::constants.genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, change1).code); @@ -1661,7 +1661,7 @@ TEST (ledger, state_open) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair destination; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -1700,7 +1700,7 @@ TEST (ledger, send_after_state_fail) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::send_block send2 (send1.hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - (2 * nano::Gxrb_ratio), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); @@ -1717,7 +1717,7 @@ TEST (ledger, receive_after_state_fail) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::receive_block receive1 (send1.hash (), send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); @@ -1734,7 +1734,7 @@ TEST (ledger, change_after_state_fail) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::keypair rep; @@ -1751,7 +1751,7 @@ TEST (ledger, state_unreceivable_fail) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::send_block send1 (nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); @@ -1774,7 +1774,7 @@ TEST (ledger, state_receive_bad_amount_fail) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::send_block send1 (nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); @@ -1797,7 +1797,7 @@ TEST (ledger, state_no_link_amount_fail) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::keypair rep; @@ -1814,7 +1814,7 @@ TEST (ledger, state_receive_wrong_account_fail) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); @@ -1838,7 +1838,7 @@ TEST (ledger, state_open_state_fork) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair destination; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -1858,7 +1858,7 @@ TEST (ledger, state_state_open_fork) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair destination; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -1879,7 +1879,7 @@ TEST (ledger, state_open_previous_fail) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair destination; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -1896,7 +1896,7 @@ TEST (ledger, state_open_source_fail) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair destination; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -1913,7 +1913,7 @@ TEST (ledger, state_send_change) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair rep; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), rep.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -1940,7 +1940,7 @@ TEST (ledger, state_receive_change) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); @@ -1976,7 +1976,7 @@ TEST (ledger, state_open_old) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair destination; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -1996,7 +1996,7 @@ TEST (ledger, state_receive_old) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair destination; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -2020,7 +2020,7 @@ TEST (ledger, state_rollback_send) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); @@ -2051,7 +2051,7 @@ TEST (ledger, state_rollback_receive) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::state_block receive1 (nano::dev::genesis->account (), send1.hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount, send1.hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (send1.hash ())); @@ -2077,7 +2077,7 @@ TEST (ledger, state_rollback_received_send) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -2104,7 +2104,7 @@ TEST (ledger, state_rep_change_rollback) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair rep; nano::state_block change1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), rep.pub, nano::dev::constants.genesis_amount, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, change1).code); @@ -2124,7 +2124,7 @@ TEST (ledger, state_open_rollback) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair destination; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -2150,7 +2150,7 @@ TEST (ledger, state_send_change_rollback) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair rep; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), rep.pub, nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -2171,7 +2171,7 @@ TEST (ledger, state_receive_change_rollback) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::keypair rep; @@ -2194,7 +2194,7 @@ TEST (ledger, epoch_blocks_v1_general) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair destination; nano::state_block epoch1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch1).code); @@ -2264,7 +2264,7 @@ TEST (ledger, epoch_blocks_v2_general) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair destination; nano::state_block epoch1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount, ledger.epoch_link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); // Trying to upgrade from epoch 0 to epoch 2. It is a requirement epoch upgrades are sequential unless the account is unopened @@ -2329,7 +2329,7 @@ TEST (ledger, epoch_blocks_receive_upgrade) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair destination; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, destination.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -2409,7 +2409,7 @@ TEST (ledger, epoch_blocks_fork) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair destination; nano::send_block send1 (nano::dev::genesis->hash (), nano::account (0), nano::dev::constants.genesis_amount, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); @@ -2430,7 +2430,7 @@ TEST (ledger, successor_epoch) nano::system system (1); auto & node1 (*system.nodes[0]); nano::keypair key1; - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::send_block send1 (nano::dev::genesis->hash (), key1.pub, nano::dev::constants.genesis_amount - 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); nano::state_block open (key1.pub, 0, key1.pub, 1, send1.hash (), key1.prv, key1.pub, *pool.generate (key1.pub)); nano::state_block change (key1.pub, open.hash (), key1.pub, 1, 0, key1.prv, key1.pub, *pool.generate (open.hash ())); @@ -2454,7 +2454,7 @@ TEST (ledger, epoch_open_pending) nano::block_builder builder; nano::system system (1); auto & node1 (*system.nodes[0]); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; auto epoch_open = builder.state () .account (key1.pub) @@ -2498,7 +2498,7 @@ TEST (ledger, block_hash_account_conflict) auto & node1 (*system.nodes[0]); nano::keypair key1; nano::keypair key2; - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; /* * Generate a send block whose destination is a block hash already @@ -2590,7 +2590,7 @@ TEST (ledger, could_fit) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair destination; // Test legacy and state change blocks could_fit nano::change_block change1 (nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); @@ -2826,7 +2826,7 @@ TEST (ledger, confirmation_height_not_updated) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::account_info account_info; ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, account_info)); nano::keypair key; @@ -2886,7 +2886,7 @@ TEST (ledger, work_validation) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); store->initialize (store->tx_begin_write (), ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::block_builder builder; auto gen = nano::dev::genesis_key; nano::keypair key; @@ -2981,7 +2981,7 @@ TEST (ledger, dependents_confirmed) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); ASSERT_TRUE (ledger.dependents_confirmed (transaction, *nano::dev::genesis)); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; auto send1 = builder.state () .account (nano::dev::genesis->account ()) @@ -3053,7 +3053,7 @@ TEST (ledger, dependents_confirmed_pruning) ledger.pruning = true; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; auto send1 = builder.state () .account (nano::dev::genesis->account ()) @@ -3104,7 +3104,7 @@ TEST (ledger, block_confirmed) auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); ASSERT_TRUE (ledger.block_confirmed (transaction, nano::dev::genesis->hash ())); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key1; auto send1 = builder.state () .account (nano::dev::genesis->account ()) @@ -3134,7 +3134,7 @@ TEST (ledger, cache) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); store->initialize (store->tx_begin_write (), ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::block_builder builder; size_t const total = 100; @@ -3247,7 +3247,7 @@ TEST (ledger, pruning_action) ledger.pruning = true; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); @@ -3303,7 +3303,7 @@ TEST (ledger, pruning_large_chain) ledger.pruning = true; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; size_t send_receive_pairs (20); auto last_hash (nano::dev::genesis->hash ()); for (auto i (0); i < send_receive_pairs; i++) @@ -3339,7 +3339,7 @@ TEST (ledger, pruning_source_rollback) ledger.pruning = true; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::state_block epoch1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, epoch1).code); nano::state_block send1 (nano::dev::genesis->account (), epoch1.hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (epoch1.hash ())); @@ -3390,7 +3390,7 @@ TEST (ledger, pruning_source_rollback_legacy) ledger.pruning = true; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::send_block send1 (nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()))); @@ -3468,7 +3468,7 @@ TEST (ledger, pruning_process_error) ledger.pruning = true; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_EQ (0, ledger.cache.pruned_count); @@ -3497,7 +3497,7 @@ TEST (ledger, pruning_legacy_blocks) nano::keypair key1; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::send_block send1 (nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->pending.exists (transaction, nano::pending_key (nano::dev::genesis->account (), send1.hash ()))); @@ -3541,7 +3541,7 @@ TEST (ledger, pruning_safe_functions) ledger.pruning = true; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); @@ -3583,7 +3583,7 @@ TEST (ledger, hash_root_random) ledger.pruning = true; auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::state_block send1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis->account (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); ASSERT_TRUE (store->block.exists (transaction, send1.hash ())); @@ -3625,7 +3625,7 @@ TEST (ledger, migrate_lmdb_to_rocksdb) nano::mdb_store store (logger, path / "data.ldb", nano::dev::constants); nano::stat stats; nano::ledger ledger (store, stats, nano::dev::constants); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; auto send = nano::state_block_builder () .account (nano::dev::genesis_key.pub) @@ -3705,7 +3705,7 @@ TEST (ledger, unconfirmed_frontiers) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); store->initialize (store->tx_begin_write (), ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; auto unconfirmed_frontiers = ledger.unconfirmed_frontiers (); ASSERT_TRUE (unconfirmed_frontiers.empty ()); diff --git a/nano/core_test/node.cpp b/nano/core_test/node.cpp index bfa146e886..d69f1e18c5 100644 --- a/nano/core_test/node.cpp +++ b/nano/core_test/node.cpp @@ -60,8 +60,8 @@ TEST (node, block_store_path_failure) auto path (nano::unique_path ()); nano::logging logging; logging.init (path); - nano::work_pool work (std::numeric_limits::max ()); - auto node (std::make_shared (*service, nano::get_available_port (), path, logging, work)); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; + auto node (std::make_shared (*service, nano::get_available_port (), path, logging, pool)); ASSERT_TRUE (node->wallets.items.empty ()); node->stop (); } @@ -91,9 +91,9 @@ TEST (node, password_fanout) nano::node_config config; config.peering_port = nano::get_available_port (); config.logging.init (path); - nano::work_pool work (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; config.password_fanout = 10; - nano::node node (io_ctx, path, config, work); + nano::node node (io_ctx, path, config, pool); auto wallet (node.wallets.create (100)); ASSERT_EQ (10, wallet->store.password.values.size ()); node.stop (); diff --git a/nano/core_test/processor_service.cpp b/nano/core_test/processor_service.cpp index 2135a9b534..1cf5bf49b4 100644 --- a/nano/core_test/processor_service.cpp +++ b/nano/core_test/processor_service.cpp @@ -16,7 +16,7 @@ TEST (processor_service, bad_send_signature) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::account_info info1; ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info1)); nano::keypair key2; @@ -34,7 +34,7 @@ TEST (processor_service, bad_receive_signature) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::account_info info1; ASSERT_FALSE (store->account.get (transaction, nano::dev::genesis_key.pub, info1)); nano::send_block send (info1.head, nano::dev::genesis_key.pub, 50, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (info1.head)); diff --git a/nano/core_test/work_pool.cpp b/nano/core_test/work_pool.cpp index 6dde98586e..f2bc145029 100644 --- a/nano/core_test/work_pool.cpp +++ b/nano/core_test/work_pool.cpp @@ -17,7 +17,7 @@ TEST (work, one) { nano::network_constants network_constants; - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::change_block block (1, 1, nano::keypair ().prv, 3, 4); block.block_work_set (*pool.generate (block.root ())); ASSERT_LT (nano::work_threshold_base (block.work_version ()), block.difficulty ()); @@ -26,7 +26,7 @@ TEST (work, one) TEST (work, disabled) { nano::network_constants network_constants; - nano::work_pool pool (0); + nano::work_pool pool{ nano::dev::network_params.network, 0 }; auto result (pool.generate (nano::block_hash ())); ASSERT_FALSE (result.is_initialized ()); } @@ -34,7 +34,7 @@ TEST (work, disabled) TEST (work, validate) { nano::network_constants network_constants; - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::send_block send_block (1, 1, 2, nano::keypair ().prv, 4, 6); ASSERT_LT (send_block.difficulty (), nano::work_threshold_base (send_block.work_version ())); send_block.block_work_set (*pool.generate (send_block.root ())); @@ -43,7 +43,7 @@ TEST (work, validate) TEST (work, cancel) { - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; auto iterations (0); auto done (false); while (!done) @@ -61,7 +61,7 @@ TEST (work, cancel) TEST (work, cancel_many) { - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::root key1 (1); nano::root key2 (2); nano::root key3 (1); @@ -93,9 +93,9 @@ TEST (work, opencl) if (opencl != nullptr) { // 0 threads, should add 1 for managing OpenCL - nano::work_pool pool (0, std::chrono::nanoseconds (0), [&opencl] (nano::work_version const version_a, nano::root const & root_a, uint64_t difficulty_a, std::atomic & ticket_a) { + nano::work_pool pool{ nano::dev::network_params.network, 0, std::chrono::nanoseconds (0), [&opencl] (nano::work_version const version_a, nano::root const & root_a, uint64_t difficulty_a, std::atomic & ticket_a) { return opencl->generate_work (version_a, root_a, difficulty_a); - }); + } }; ASSERT_NE (nullptr, pool.opencl); nano::root root; uint64_t difficulty (0xff00000000000000); @@ -136,7 +136,7 @@ TEST (work, opencl_config) TEST (work, difficulty) { - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::root root (1); uint64_t difficulty1 (0xff00000000000000); uint64_t difficulty2 (0xfff0000000000000); @@ -160,7 +160,7 @@ TEST (work, difficulty) TEST (work, eco_pow) { auto work_func = [] (std::promise & promise, std::chrono::nanoseconds interval) { - nano::work_pool pool (1, interval); + nano::work_pool pool{ nano::dev::network_params.network, 1, interval }; constexpr auto num_iterations = 5; nano::timer timer; diff --git a/nano/lib/work.cpp b/nano/lib/work.cpp index 6ccf06174e..a72bda7ddf 100644 --- a/nano/lib/work.cpp +++ b/nano/lib/work.cpp @@ -198,7 +198,8 @@ double nano::denormalized_multiplier (double const multiplier_a, uint64_t const return multiplier; } -nano::work_pool::work_pool (unsigned max_threads_a, std::chrono::nanoseconds pow_rate_limiter_a, std::function (nano::work_version const, nano::root const &, uint64_t, std::atomic &)> opencl_a) : +nano::work_pool::work_pool (nano::network_constants & network_constants, unsigned max_threads_a, std::chrono::nanoseconds pow_rate_limiter_a, std::function (nano::work_version const, nano::root const &, uint64_t, std::atomic &)> opencl_a) : + network_constants{ network_constants }, ticket (0), done (false), pow_rate_limiter (pow_rate_limiter_a), diff --git a/nano/lib/work.hpp b/nano/lib/work.hpp index 6480357d11..26fb6db674 100644 --- a/nano/lib/work.hpp +++ b/nano/lib/work.hpp @@ -59,7 +59,7 @@ class work_item final class work_pool final { public: - work_pool (unsigned, std::chrono::nanoseconds = std::chrono::nanoseconds (0), std::function (nano::work_version const, nano::root const &, uint64_t, std::atomic &)> = nullptr); + work_pool (nano::network_constants & network_constants, unsigned, std::chrono::nanoseconds = std::chrono::nanoseconds (0), std::function (nano::work_version const, nano::root const &, uint64_t, std::atomic &)> = nullptr); ~work_pool (); void loop (uint64_t); void stop (); @@ -70,7 +70,7 @@ class work_pool final boost::optional generate (nano::root const &); boost::optional generate (nano::root const &, uint64_t); size_t size (); - nano::network_constants network_constants; + nano::network_constants & network_constants; std::atomic ticket; bool done; std::vector threads; diff --git a/nano/nano_node/daemon.cpp b/nano/nano_node/daemon.cpp index 184f48145a..78d492834f 100644 --- a/nano/nano_node/daemon.cpp +++ b/nano/nano_node/daemon.cpp @@ -61,7 +61,7 @@ void nano_daemon::daemon::run (boost::filesystem::path const & data_path, nano:: nano::logger_mt logger{ config.node.logging.min_time_between_log_output }; boost::asio::io_context io_ctx; auto opencl (nano::opencl_work::create (config.opencl_enable, config.opencl, logger)); - nano::work_pool opencl_work (config.node.work_threads, config.node.pow_sleep_interval, opencl ? [&opencl] (nano::work_version const version_a, nano::root const & root_a, uint64_t difficulty_a, std::atomic & ticket_a) { + nano::work_pool opencl_work (config.node.network_params.network, config.node.work_threads, config.node.pow_sleep_interval, opencl ? [&opencl] (nano::work_version const version_a, nano::root const & root_a, uint64_t difficulty_a, std::atomic & ticket_a) { return opencl->generate_work (version_a, root_a, difficulty_a, ticket_a); } : std::function (nano::work_version const, nano::root const &, uint64_t, std::atomic &)> (nullptr)); diff --git a/nano/nano_node/entry.cpp b/nano/nano_node/entry.cpp index a5585ca582..472b90aa92 100644 --- a/nano/nano_node/entry.cpp +++ b/nano/nano_node/entry.cpp @@ -324,7 +324,7 @@ int main (int argc, char * const * argv) if (!key.decode_hex (key_it->second.as ())) { nano::keypair genesis (key.to_string ()); - nano::work_pool work (std::numeric_limits::max ()); + nano::work_pool work{ nano::dev::network_params.network, std::numeric_limits::max () }; std::cout << "Genesis: " << genesis.prv.to_string () << "\n" << "Public: " << genesis.pub.to_string () << "\n" << "Account: " << genesis.pub.to_account () << "\n"; @@ -491,7 +491,7 @@ int main (int argc, char * const * argv) pow_rate_limiter = std::chrono::nanoseconds (boost::lexical_cast (pow_sleep_interval_it->second.as ())); } - nano::work_pool work (std::numeric_limits::max (), pow_rate_limiter); + nano::work_pool work{ network_constants, std::numeric_limits::max (), pow_rate_limiter }; nano::change_block block (0, 0, nano::keypair ().prv, 0, 0); if (!result) { @@ -610,10 +610,10 @@ int main (int argc, char * const * argv) nano::logger_mt logger; nano::opencl_config config (platform, device, threads); auto opencl (nano::opencl_work::create (true, config, logger)); - nano::work_pool work_pool (0, std::chrono::nanoseconds (0), opencl ? [&opencl] (nano::work_version const version_a, nano::root const & root_a, uint64_t difficulty_a, std::atomic &) { + nano::work_pool work_pool{ network_constants, 0, std::chrono::nanoseconds (0), opencl ? [&opencl] (nano::work_version const version_a, nano::root const & root_a, uint64_t difficulty_a, std::atomic &) { return opencl->generate_work (version_a, root_a, difficulty_a); } - : std::function (nano::work_version const, nano::root const &, uint64_t, std::atomic &)> (nullptr)); + : std::function (nano::work_version const, nano::root const &, uint64_t, std::atomic &)> (nullptr) }; nano::change_block block (0, 0, nano::keypair ().prv, 0, 0); std::cerr << boost::str (boost::format ("Starting OpenCL generation profiling. Platform: %1%. Device: %2%. Threads: %3%. Difficulty: %4$#x (%5%x from base difficulty %6$#x)\n") % platform % device % threads % difficulty % nano::to_string (nano::difficulty::to_multiplier (difficulty, network_constants.publish_full.base), 4) % network_constants.publish_full.base); for (uint64_t i (0); true; ++i) @@ -1126,7 +1126,7 @@ int main (int argc, char * const * argv) std::cout << boost::str (boost::format ("Starting generating %1% blocks...\n") % (count * 2)); boost::asio::io_context io_ctx1; boost::asio::io_context io_ctx2; - nano::work_pool work (std::numeric_limits::max ()); + nano::work_pool work{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::logging logging; auto path1 (nano::unique_path ()); auto path2 (nano::unique_path ()); diff --git a/nano/nano_wallet/entry.cpp b/nano/nano_wallet/entry.cpp index a5c9de4b29..e9bdd7dad8 100644 --- a/nano/nano_wallet/entry.cpp +++ b/nano/nano_wallet/entry.cpp @@ -107,10 +107,10 @@ int run_wallet (QApplication & application, int argc, char * const * argv, boost std::shared_ptr gui; nano::set_application_icon (application); auto opencl (nano::opencl_work::create (config.opencl_enable, config.opencl, logger)); - nano::work_pool work (config.node.work_threads, config.node.pow_sleep_interval, opencl ? [&opencl] (nano::work_version const version_a, nano::root const & root_a, uint64_t difficulty_a, std::atomic &) { + nano::work_pool work{ config.node.network_params.network, config.node.work_threads, config.node.pow_sleep_interval, opencl ? [&opencl] (nano::work_version const version_a, nano::root const & root_a, uint64_t difficulty_a, std::atomic &) { return opencl->generate_work (version_a, root_a, difficulty_a); } - : std::function (nano::work_version const, nano::root const &, uint64_t, std::atomic &)> (nullptr)); + : std::function (nano::work_version const, nano::root const &, uint64_t, std::atomic &)> (nullptr) }; node = std::make_shared (io_ctx, data_path, config.node, work, flags); if (!node->init_error ()) { diff --git a/nano/node/node.cpp b/nano/node/node.cpp index c2d6ad5954..4c50504004 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -1763,7 +1763,7 @@ void nano::node::populate_backlog () nano::node_wrapper::node_wrapper (boost::filesystem::path const & path_a, boost::filesystem::path const & config_path_a, nano::node_flags const & node_flags_a) : io_context (std::make_shared ()), - work (1) + work{ nano::dev::network_params.network, 1 } { boost::system::error_code error_chmod; diff --git a/nano/slow_test/node.cpp b/nano/slow_test/node.cpp index da56e24bf3..c48055fbf7 100644 --- a/nano/slow_test/node.cpp +++ b/nano/slow_test/node.cpp @@ -97,7 +97,7 @@ TEST (ledger, deep_account_compute) nano::ledger ledger (*store, stats, nano::dev::constants); auto transaction (store->tx_begin_write ()); store->initialize (transaction, ledger.cache); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair key; auto balance (nano::dev::constants.genesis_amount - 1); nano::send_block send (nano::dev::genesis->hash (), key.pub, balance, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); @@ -968,7 +968,7 @@ TEST (confirmation_height, many_accounts_send_receive_self_no_elections) nano::stat stats; nano::ledger ledger (*store, stats, nano::dev::constants); nano::write_database_queue write_database_queue (false); - nano::work_pool pool (std::numeric_limits::max ()); + nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; std::atomic stopped{ false }; boost::latch initialized_latch{ 0 }; diff --git a/nano/test_common/system.hpp b/nano/test_common/system.hpp index 0ca9cca582..6b69488954 100644 --- a/nano/test_common/system.hpp +++ b/nano/test_common/system.hpp @@ -50,7 +50,7 @@ class system final boost::asio::io_context io_ctx; std::vector> nodes; nano::logging logging; - nano::work_pool work{ std::max (std::thread::hardware_concurrency (), 1u) }; + nano::work_pool work{ nano::dev::network_params.network, std::max (std::thread::hardware_concurrency (), 1u) }; std::chrono::time_point> deadline{ std::chrono::steady_clock::time_point::max () }; double deadline_scaling_factor{ 1.0 }; unsigned node_sequence{ 0 }; From 4a51d0ccece1d4ad13bf50e5663c80bf50b7ed7f Mon Sep 17 00:00:00 2001 From: clemahieu Date: Sat, 7 Aug 2021 21:32:04 +0100 Subject: [PATCH 147/346] Using object reference to network_constants rather than static instantiation. --- nano/lib/work.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/nano/lib/work.cpp b/nano/lib/work.cpp index a72bda7ddf..bd7309ba23 100644 --- a/nano/lib/work.cpp +++ b/nano/lib/work.cpp @@ -376,14 +376,12 @@ void nano::work_pool::generate (nano::work_version const version_a, nano::root c boost::optional nano::work_pool::generate (nano::root const & root_a) { - static nano::network_constants network_constants; debug_assert (network_constants.is_dev_network ()); return generate (nano::work_version::work_1, root_a, network_constants.publish_thresholds.base); } boost::optional nano::work_pool::generate (nano::root const & root_a, uint64_t difficulty_a) { - static nano::network_constants network_constants; debug_assert (network_constants.is_dev_network ()); return generate (nano::work_version::work_1, root_a, difficulty_a); } From 68f07fa276feae0a8ed7323431c494fbb5f79b38 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Sun, 8 Aug 2021 10:25:21 +0100 Subject: [PATCH 148/346] Referencing network_constants by reference within websocket_config. --- nano/node/nodeconfig.cpp | 1 + nano/node/websocketconfig.cpp | 7 ++++--- nano/node/websocketconfig.hpp | 4 ++-- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/nano/node/nodeconfig.cpp b/nano/node/nodeconfig.cpp index 7061178892..26c78b0ec1 100644 --- a/nano/node/nodeconfig.cpp +++ b/nano/node/nodeconfig.cpp @@ -29,6 +29,7 @@ nano::node_config::node_config (uint16_t peering_port_a, nano::logging const & l network_params{ network_params }, peering_port{ peering_port_a }, logging{ logging_a }, + websocket_config{ network_params.network }, external_address{ boost::asio::ip::address_v6{}.to_string () } { // The default constructor passes 0 to indicate we should use the default port, diff --git a/nano/node/websocketconfig.cpp b/nano/node/websocketconfig.cpp index 7d49986d11..a6d9484f15 100644 --- a/nano/node/websocketconfig.cpp +++ b/nano/node/websocketconfig.cpp @@ -3,9 +3,10 @@ #include #include -nano::websocket::config::config () : - port (network_constants.default_websocket_port), - address (boost::asio::ip::address_v6::loopback ().to_string ()) +nano::websocket::config::config (nano::network_constants & network_constants) : + network_constants{ network_constants }, + port{ network_constants.default_websocket_port }, + address{ boost::asio::ip::address_v6::loopback ().to_string () } { } diff --git a/nano/node/websocketconfig.hpp b/nano/node/websocketconfig.hpp index f8b9eeef7b..3bafa29447 100644 --- a/nano/node/websocketconfig.hpp +++ b/nano/node/websocketconfig.hpp @@ -13,12 +13,12 @@ namespace websocket class config final { public: - config (); + config (nano::network_constants & network_constants); nano::error deserialize_json (nano::jsonconfig & json_a); nano::error serialize_json (nano::jsonconfig & json) const; nano::error deserialize_toml (nano::tomlconfig & toml_a); nano::error serialize_toml (nano::tomlconfig & toml) const; - nano::network_constants network_constants; + nano::network_constants & network_constants; bool enabled{ false }; uint16_t port; std::string address; From 9fea509cd9692ffe8aae38b3cf4006f7d2609ff2 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Sun, 8 Aug 2021 10:54:44 +0100 Subject: [PATCH 149/346] Removing static instances of nano::network_constants within unit tests. --- nano/core_test/message_parser.cpp | 15 +++++---------- nano/core_test/system.cpp | 5 ++--- nano/core_test/work_pool.cpp | 18 +++++++----------- 3 files changed, 14 insertions(+), 24 deletions(-) diff --git a/nano/core_test/message_parser.cpp b/nano/core_test/message_parser.cpp index d81050e9bc..0bf62f22bf 100644 --- a/nano/core_test/message_parser.cpp +++ b/nano/core_test/message_parser.cpp @@ -67,8 +67,7 @@ TEST (message_parser, exact_confirm_ack_size) nano::network_filter filter (1); nano::block_uniquer block_uniquer; nano::vote_uniquer vote_uniquer (block_uniquer); - nano::network_constants network; - nano::message_parser parser (filter, block_uniquer, vote_uniquer, visitor, system.work, network); + nano::message_parser parser (filter, block_uniquer, vote_uniquer, visitor, system.work, nano::dev::network_params.network); auto block (std::make_shared (1, 1, 2, nano::keypair ().prv, 4, *system.work.generate (nano::root (1)))); auto vote (std::make_shared (0, nano::keypair ().prv, 0, std::move (block))); nano::confirm_ack message{ nano::dev::network_params.network, vote }; @@ -102,8 +101,7 @@ TEST (message_parser, exact_confirm_req_size) nano::network_filter filter (1); nano::block_uniquer block_uniquer; nano::vote_uniquer vote_uniquer (block_uniquer); - nano::network_constants network; - nano::message_parser parser (filter, block_uniquer, vote_uniquer, visitor, system.work, network); + nano::message_parser parser (filter, block_uniquer, vote_uniquer, visitor, system.work, nano::dev::network_params.network); auto block (std::make_shared (1, 1, 2, nano::keypair ().prv, 4, *system.work.generate (nano::root (1)))); nano::confirm_req message{ nano::dev::network_params.network, block }; std::vector bytes; @@ -136,8 +134,7 @@ TEST (message_parser, exact_confirm_req_hash_size) nano::network_filter filter (1); nano::block_uniquer block_uniquer; nano::vote_uniquer vote_uniquer (block_uniquer); - nano::network_constants network; - nano::message_parser parser (filter, block_uniquer, vote_uniquer, visitor, system.work, network); + nano::message_parser parser (filter, block_uniquer, vote_uniquer, visitor, system.work, nano::dev::network_params.network); nano::send_block block (1, 1, 2, nano::keypair ().prv, 4, *system.work.generate (nano::root (1))); nano::confirm_req message{ nano::dev::network_params.network, block.hash (), block.root () }; std::vector bytes; @@ -170,8 +167,7 @@ TEST (message_parser, exact_publish_size) nano::network_filter filter (1); nano::block_uniquer block_uniquer; nano::vote_uniquer vote_uniquer (block_uniquer); - nano::network_constants network; - nano::message_parser parser (filter, block_uniquer, vote_uniquer, visitor, system.work, network); + nano::message_parser parser (filter, block_uniquer, vote_uniquer, visitor, system.work, nano::dev::network_params.network); auto block (std::make_shared (1, 1, 2, nano::keypair ().prv, 4, *system.work.generate (nano::root (1)))); nano::publish message{ nano::dev::network_params.network, block }; std::vector bytes; @@ -204,8 +200,7 @@ TEST (message_parser, exact_keepalive_size) nano::network_filter filter (1); nano::block_uniquer block_uniquer; nano::vote_uniquer vote_uniquer (block_uniquer); - nano::network_constants network; - nano::message_parser parser (filter, block_uniquer, vote_uniquer, visitor, system.work, network); + nano::message_parser parser (filter, block_uniquer, vote_uniquer, visitor, system.work, nano::dev::network_params.network); nano::keepalive message{ nano::dev::network_params.network }; std::vector bytes; { diff --git a/nano/core_test/system.cpp b/nano/core_test/system.cpp index 015a81ddc7..7ea6dd7df0 100644 --- a/nano/core_test/system.cpp +++ b/nano/core_test/system.cpp @@ -10,9 +10,8 @@ TEST (system, work_generate_limited) { nano::system system; nano::block_hash key (1); - nano::network_constants constants; - auto min = constants.publish_thresholds.entry; - auto max = constants.publish_thresholds.base; + auto min = nano::dev::network_params.network.publish_thresholds.entry; + auto max = nano::dev::network_params.network.publish_thresholds.base; for (int i = 0; i < 5; ++i) { auto work = system.work_generate_limited (key, min, max); diff --git a/nano/core_test/work_pool.cpp b/nano/core_test/work_pool.cpp index f2bc145029..c7f7ed2246 100644 --- a/nano/core_test/work_pool.cpp +++ b/nano/core_test/work_pool.cpp @@ -16,7 +16,6 @@ TEST (work, one) { - nano::network_constants network_constants; nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::change_block block (1, 1, nano::keypair ().prv, 3, 4); block.block_work_set (*pool.generate (block.root ())); @@ -25,7 +24,6 @@ TEST (work, one) TEST (work, disabled) { - nano::network_constants network_constants; nano::work_pool pool{ nano::dev::network_params.network, 0 }; auto result (pool.generate (nano::block_hash ())); ASSERT_FALSE (result.is_initialized ()); @@ -33,7 +31,6 @@ TEST (work, disabled) TEST (work, validate) { - nano::network_constants network_constants; nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::send_block send_block (1, 1, 2, nano::keypair ().prv, 4, 6); ASSERT_LT (send_block.difficulty (), nano::work_threshold_base (send_block.work_version ())); @@ -50,7 +47,7 @@ TEST (work, cancel) { nano::root key (1); pool.generate ( - nano::work_version::work_1, key, nano::network_constants ().publish_thresholds.base, [&done] (boost::optional work_a) { + nano::work_version::work_1, key, nano::dev::network_params.network.publish_thresholds.base, [&done] (boost::optional work_a) { done = !work_a; }); pool.cancel (key); @@ -68,13 +65,12 @@ TEST (work, cancel_many) nano::root key4 (1); nano::root key5 (3); nano::root key6 (1); - nano::network_constants constants; - pool.generate (nano::work_version::work_1, key1, constants.publish_thresholds.base, [] (boost::optional) {}); - pool.generate (nano::work_version::work_1, key2, constants.publish_thresholds.base, [] (boost::optional) {}); - pool.generate (nano::work_version::work_1, key3, constants.publish_thresholds.base, [] (boost::optional) {}); - pool.generate (nano::work_version::work_1, key4, constants.publish_thresholds.base, [] (boost::optional) {}); - pool.generate (nano::work_version::work_1, key5, constants.publish_thresholds.base, [] (boost::optional) {}); - pool.generate (nano::work_version::work_1, key6, constants.publish_thresholds.base, [] (boost::optional) {}); + pool.generate (nano::work_version::work_1, key1, nano::dev::network_params.network.publish_thresholds.base, [] (boost::optional) {}); + pool.generate (nano::work_version::work_1, key2, nano::dev::network_params.network.publish_thresholds.base, [] (boost::optional) {}); + pool.generate (nano::work_version::work_1, key3, nano::dev::network_params.network.publish_thresholds.base, [] (boost::optional) {}); + pool.generate (nano::work_version::work_1, key4, nano::dev::network_params.network.publish_thresholds.base, [] (boost::optional) {}); + pool.generate (nano::work_version::work_1, key5, nano::dev::network_params.network.publish_thresholds.base, [] (boost::optional) {}); + pool.generate (nano::work_version::work_1, key6, nano::dev::network_params.network.publish_thresholds.base, [] (boost::optional) {}); pool.cancel (key1); } From 238ae671e16d2b643273ef97467625e4599ed3b3 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Sun, 8 Aug 2021 12:14:06 +0100 Subject: [PATCH 150/346] Moving work_threshold constants on to work_threshold class where they belong, rather than on network_constants. --- nano/core_test/difficulty.cpp | 36 +++++++++++++++++------------------ nano/lib/config.cpp | 12 ++++++------ nano/lib/config.hpp | 14 +++++++------- nano/nano_node/entry.cpp | 10 +++++----- 4 files changed, 36 insertions(+), 36 deletions(-) diff --git a/nano/core_test/difficulty.cpp b/nano/core_test/difficulty.cpp index 3bb8a5cd30..5034e16b89 100644 --- a/nano/core_test/difficulty.cpp +++ b/nano/core_test/difficulty.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include #include @@ -106,10 +107,9 @@ TEST (difficulty, zero) TEST (difficulty, network_constants) { - nano::network_constants constants; - auto & full_thresholds = constants.publish_full; - auto & beta_thresholds = constants.publish_beta; - auto & dev_thresholds = constants.publish_dev; + auto & full_thresholds = nano::work_thresholds::publish_full; + auto & beta_thresholds = nano::work_thresholds::publish_beta; + auto & dev_thresholds = nano::work_thresholds::publish_dev; ASSERT_NEAR (8., nano::difficulty::to_multiplier (full_thresholds.epoch_2, full_thresholds.epoch_1), 1e-10); ASSERT_NEAR (1 / 8., nano::difficulty::to_multiplier (full_thresholds.epoch_2_receive, full_thresholds.epoch_1), 1e-10); @@ -128,23 +128,23 @@ TEST (difficulty, network_constants) ASSERT_NEAR (1., nano::difficulty::to_multiplier (dev_thresholds.epoch_2, dev_thresholds.base), 1e-10); nano::work_version version{ nano::work_version::work_1 }; - ASSERT_EQ (constants.publish_thresholds.base, constants.publish_thresholds.epoch_2); - ASSERT_EQ (constants.publish_thresholds.base, nano::work_threshold_base (version)); - ASSERT_EQ (constants.publish_thresholds.entry, nano::work_threshold_entry (version, nano::block_type::state)); - ASSERT_EQ (constants.publish_thresholds.epoch_1, nano::work_threshold_entry (version, nano::block_type::send)); - ASSERT_EQ (constants.publish_thresholds.epoch_1, nano::work_threshold_entry (version, nano::block_type::receive)); - ASSERT_EQ (constants.publish_thresholds.epoch_1, nano::work_threshold_entry (version, nano::block_type::open)); - ASSERT_EQ (constants.publish_thresholds.epoch_1, nano::work_threshold_entry (version, nano::block_type::change)); - ASSERT_EQ (constants.publish_thresholds.epoch_1, nano::work_threshold (version, nano::block_details (nano::epoch::epoch_0, false, false, false))); - ASSERT_EQ (constants.publish_thresholds.epoch_1, nano::work_threshold (version, nano::block_details (nano::epoch::epoch_1, false, false, false))); - ASSERT_EQ (constants.publish_thresholds.epoch_1, nano::work_threshold (version, nano::block_details (nano::epoch::epoch_1, false, false, false))); + ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.base, nano::dev::network_params.network.publish_thresholds.epoch_2); + ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.base, nano::work_threshold_base (version)); + ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.entry, nano::work_threshold_entry (version, nano::block_type::state)); + ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_1, nano::work_threshold_entry (version, nano::block_type::send)); + ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_1, nano::work_threshold_entry (version, nano::block_type::receive)); + ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_1, nano::work_threshold_entry (version, nano::block_type::open)); + ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_1, nano::work_threshold_entry (version, nano::block_type::change)); + ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_1, nano::work_threshold (version, nano::block_details (nano::epoch::epoch_0, false, false, false))); + ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_1, nano::work_threshold (version, nano::block_details (nano::epoch::epoch_1, false, false, false))); + ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_1, nano::work_threshold (version, nano::block_details (nano::epoch::epoch_1, false, false, false))); // Send [+ change] - ASSERT_EQ (constants.publish_thresholds.epoch_2, nano::work_threshold (version, nano::block_details (nano::epoch::epoch_2, true, false, false))); + ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_2, nano::work_threshold (version, nano::block_details (nano::epoch::epoch_2, true, false, false))); // Change - ASSERT_EQ (constants.publish_thresholds.epoch_2, nano::work_threshold (version, nano::block_details (nano::epoch::epoch_2, false, false, false))); + ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_2, nano::work_threshold (version, nano::block_details (nano::epoch::epoch_2, false, false, false))); // Receive [+ change] / Open - ASSERT_EQ (constants.publish_thresholds.epoch_2_receive, nano::work_threshold (version, nano::block_details (nano::epoch::epoch_2, false, true, false))); + ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_2_receive, nano::work_threshold (version, nano::block_details (nano::epoch::epoch_2, false, true, false))); // Epoch - ASSERT_EQ (constants.publish_thresholds.epoch_2_receive, nano::work_threshold (version, nano::block_details (nano::epoch::epoch_2, false, false, true))); + ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_2_receive, nano::work_threshold (version, nano::block_details (nano::epoch::epoch_2, false, false, true))); } diff --git a/nano/lib/config.cpp b/nano/lib/config.cpp index 955ddd59bb..72c0af2d02 100644 --- a/nano/lib/config.cpp +++ b/nano/lib/config.cpp @@ -24,32 +24,32 @@ struct HexTo }; } // namespace -namespace nano -{ -work_thresholds const network_constants::publish_full ( +nano::work_thresholds const nano::work_thresholds::publish_full ( 0xffffffc000000000, 0xfffffff800000000, // 8x higher than epoch_1 0xfffffe0000000000 // 8x lower than epoch_1 ); -work_thresholds const network_constants::publish_beta ( +nano::work_thresholds const nano::work_thresholds::publish_beta ( 0xfffff00000000000, // 64x lower than publish_full.epoch_1 0xfffff00000000000, // same as epoch_1 0xffffe00000000000 // 2x lower than epoch_1 ); -work_thresholds const network_constants::publish_dev ( +nano::work_thresholds const nano::work_thresholds::publish_dev ( 0xfe00000000000000, // Very low for tests 0xffc0000000000000, // 8x higher than epoch_1 0xf000000000000000 // 8x lower than epoch_1 ); -work_thresholds const network_constants::publish_test ( //defaults to live network levels +nano::work_thresholds const nano::work_thresholds::publish_test ( //defaults to live network levels get_env_threshold_or_default ("NANO_TEST_EPOCH_1", 0xffffffc000000000), get_env_threshold_or_default ("NANO_TEST_EPOCH_2", 0xfffffff800000000), // 8x higher than epoch_1 get_env_threshold_or_default ("NANO_TEST_EPOCH_2_RECV", 0xfffffe0000000000) // 8x lower than epoch_1 ); +namespace nano +{ const char * network_constants::active_network_err_msg = "Invalid network. Valid values are live, test, beta and dev."; uint8_t get_major_node_version () diff --git a/nano/lib/config.hpp b/nano/lib/config.hpp index 720a35ef11..6bcc98790b 100644 --- a/nano/lib/config.hpp +++ b/nano/lib/config.hpp @@ -99,6 +99,12 @@ struct work_thresholds { return other_a; } + + /** Network work thresholds. Define these inline as constexpr when moving to cpp17. */ + static const nano::work_thresholds publish_full; + static const nano::work_thresholds publish_beta; + static const nano::work_thresholds publish_dev; + static const nano::work_thresholds publish_test; }; class network_constants @@ -111,7 +117,7 @@ class network_constants network_constants (nano::networks network_a) : current_network (network_a), - publish_thresholds (is_live_network () ? publish_full : is_beta_network () ? publish_beta : is_test_network () ? publish_test : publish_dev) + publish_thresholds (is_live_network () ? nano::work_thresholds::publish_full : is_beta_network () ? nano::work_thresholds::publish_beta : is_test_network () ? nano::work_thresholds::publish_test : nano::work_thresholds::publish_dev) { // A representative is classified as principal based on its weight and this factor principal_weight_factor = 1000; // 0.1% @@ -130,12 +136,6 @@ class network_constants peer_dump_interval = is_dev_network () ? std::chrono::seconds (1) : std::chrono::seconds (5 * 60); } - /** Network work thresholds. Define these inline as constexpr when moving to cpp17. */ - static const nano::work_thresholds publish_full; - static const nano::work_thresholds publish_beta; - static const nano::work_thresholds publish_dev; - static const nano::work_thresholds publish_test; - /** Error message when an invalid network is specified */ static const char * active_network_err_msg; diff --git a/nano/nano_node/entry.cpp b/nano/nano_node/entry.cpp index 472b90aa92..ea9f20cdfd 100644 --- a/nano/nano_node/entry.cpp +++ b/nano/nano_node/entry.cpp @@ -456,7 +456,7 @@ int main (int argc, char * const * argv) else if (vm.count ("debug_profile_generate")) { nano::network_constants network_constants; - uint64_t difficulty{ network_constants.publish_full.base }; + uint64_t difficulty{ nano::work_thresholds::publish_full.base }; auto multiplier_it = vm.find ("multiplier"); if (multiplier_it != vm.end ()) { @@ -495,7 +495,7 @@ int main (int argc, char * const * argv) nano::change_block block (0, 0, nano::keypair ().prv, 0, 0); if (!result) { - std::cerr << boost::str (boost::format ("Starting generation profiling. Difficulty: %1$#x (%2%x from base difficulty %3$#x)\n") % difficulty % nano::to_string (nano::difficulty::to_multiplier (difficulty, network_constants.publish_full.base), 4) % network_constants.publish_full.base); + std::cerr << boost::str (boost::format ("Starting generation profiling. Difficulty: %1$#x (%2%x from base difficulty %3$#x)\n") % difficulty % nano::to_string (nano::difficulty::to_multiplier (difficulty, nano::work_thresholds::publish_full.base), 4) % nano::work_thresholds::publish_full.base); while (!result) { block.hashables.previous.qwords[0] += 1; @@ -508,7 +508,7 @@ int main (int argc, char * const * argv) } else if (vm.count ("debug_profile_validate")) { - uint64_t difficulty{ nano::network_constants ().publish_full.base }; + uint64_t difficulty{ nano::work_thresholds::publish_full.base }; std::cerr << "Starting validation profile" << std::endl; auto start (std::chrono::steady_clock::now ()); bool valid{ false }; @@ -572,7 +572,7 @@ int main (int argc, char * const * argv) return -1; } } - uint64_t difficulty (network_constants.publish_full.base); + uint64_t difficulty (nano::work_thresholds::publish_full.base); auto multiplier_it = vm.find ("multiplier"); if (multiplier_it != vm.end ()) { @@ -615,7 +615,7 @@ int main (int argc, char * const * argv) } : std::function (nano::work_version const, nano::root const &, uint64_t, std::atomic &)> (nullptr) }; nano::change_block block (0, 0, nano::keypair ().prv, 0, 0); - std::cerr << boost::str (boost::format ("Starting OpenCL generation profiling. Platform: %1%. Device: %2%. Threads: %3%. Difficulty: %4$#x (%5%x from base difficulty %6$#x)\n") % platform % device % threads % difficulty % nano::to_string (nano::difficulty::to_multiplier (difficulty, network_constants.publish_full.base), 4) % network_constants.publish_full.base); + std::cerr << boost::str (boost::format ("Starting OpenCL generation profiling. Platform: %1%. Device: %2%. Threads: %3%. Difficulty: %4$#x (%5%x from base difficulty %6$#x)\n") % platform % device % threads % difficulty % nano::to_string (nano::difficulty::to_multiplier (difficulty, nano::work_thresholds::publish_full.base), 4) % nano::work_thresholds::publish_full.base); for (uint64_t i (0); true; ++i) { block.hashables.previous.qwords[0] += 1; From cad65ee4366991a9a9c1335af2c28e345b3a893d Mon Sep 17 00:00:00 2001 From: clemahieu Date: Sun, 8 Aug 2021 15:48:12 +0100 Subject: [PATCH 151/346] Pulling nano::network_constants reference through ipc_config_tcp_socket rather than instantiating it statically. --- nano/node/ipc/ipc_config.hpp | 11 ++++++++--- nano/node/nodeconfig.cpp | 1 + 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/nano/node/ipc/ipc_config.hpp b/nano/node/ipc/ipc_config.hpp index ad7d4b4ee4..e8a8d6da9c 100644 --- a/nano/node/ipc/ipc_config.hpp +++ b/nano/node/ipc/ipc_config.hpp @@ -52,11 +52,12 @@ namespace ipc class ipc_config_tcp_socket : public ipc_config_transport { public: - ipc_config_tcp_socket () : - port (network_constants.default_ipc_port) + ipc_config_tcp_socket (nano::network_constants & network_constants) : + network_constants{ network_constants }, + port{ network_constants.default_ipc_port } { } - nano::network_constants network_constants; + nano::network_constants & network_constants; /** Listening port */ uint16_t port; }; @@ -65,6 +66,10 @@ namespace ipc class ipc_config { public: + ipc_config (nano::network_constants & network_constants) : + transport_tcp{ network_constants } + { + } nano::error deserialize_json (bool & upgraded_a, nano::jsonconfig & json_a); nano::error serialize_json (nano::jsonconfig & json) const; nano::error deserialize_toml (nano::tomlconfig & toml_a); diff --git a/nano/node/nodeconfig.cpp b/nano/node/nodeconfig.cpp index 26c78b0ec1..e5a3fc4b77 100644 --- a/nano/node/nodeconfig.cpp +++ b/nano/node/nodeconfig.cpp @@ -30,6 +30,7 @@ nano::node_config::node_config (uint16_t peering_port_a, nano::logging const & l peering_port{ peering_port_a }, logging{ logging_a }, websocket_config{ network_params.network }, + ipc_config{ network_params.network }, external_address{ boost::asio::ip::address_v6{}.to_string () } { // The default constructor passes 0 to indicate we should use the default port, From 210f725e164936f1164efda05f535c22d6fa1750 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Sun, 8 Aug 2021 13:29:42 +0100 Subject: [PATCH 152/346] Pulling network_constants reference through rpc_config rather than initializing statically. --- nano/core_test/toml.cpp | 12 ++++++------ nano/lib/rpcconfig.cpp | 23 +++++++++++++---------- nano/lib/rpcconfig.hpp | 8 ++++---- nano/load_test/entry.cpp | 2 +- nano/nano_node/daemon.cpp | 2 +- nano/nano_rpc/entry.cpp | 3 ++- nano/nano_wallet/entry.cpp | 2 +- nano/node/cli.cpp | 2 +- nano/rpc_test/rpc.cpp | 10 +++++----- 9 files changed, 34 insertions(+), 30 deletions(-) diff --git a/nano/core_test/toml.cpp b/nano/core_test/toml.cpp index 905c26afa9..2b88026080 100644 --- a/nano/core_test/toml.cpp +++ b/nano/core_test/toml.cpp @@ -88,8 +88,8 @@ TEST (toml, rpc_config_deserialize_defaults) nano::tomlconfig t; t.read (ss); - nano::rpc_config conf; - nano::rpc_config defaults; + nano::rpc_config conf{ nano::dev::network_params.network }; + nano::rpc_config defaults{ nano::dev::network_params.network }; conf.deserialize_toml (t); ASSERT_FALSE (t.get_error ()) << t.get_error ().get_message (); @@ -717,8 +717,8 @@ TEST (toml, rpc_config_deserialize_no_defaults) nano::tomlconfig toml; toml.read (ss); - nano::rpc_config conf; - nano::rpc_config defaults; + nano::rpc_config conf{ nano::dev::network_params.network }; + nano::rpc_config defaults{ nano::dev::network_params.network }; conf.deserialize_toml (toml); ASSERT_FALSE (toml.get_error ()) << toml.get_error ().get_message (); @@ -752,8 +752,8 @@ TEST (toml, rpc_config_no_required) nano::tomlconfig toml; toml.read (ss); - nano::rpc_config conf; - nano::rpc_config defaults; + nano::rpc_config conf{ nano::dev::network_params.network }; + nano::rpc_config defaults{ nano::dev::network_params.network }; conf.deserialize_toml (toml); ASSERT_FALSE (toml.get_error ()) << toml.get_error ().get_message (); diff --git a/nano/lib/rpcconfig.cpp b/nano/lib/rpcconfig.cpp index b74d2aded2..57fa5a5f02 100644 --- a/nano/lib/rpcconfig.cpp +++ b/nano/lib/rpcconfig.cpp @@ -54,15 +54,17 @@ nano::error nano::rpc_secure_config::deserialize_toml (nano::tomlconfig & toml) return toml.get_error (); } -nano::rpc_config::rpc_config () : - address (boost::asio::ip::address_v6::loopback ().to_string ()) +nano::rpc_config::rpc_config (nano::network_constants & network_constants) : + rpc_process{ network_constants }, + address{ boost::asio::ip::address_v6::loopback ().to_string () } { } -nano::rpc_config::rpc_config (uint16_t port_a, bool enable_control_a) : - address (boost::asio::ip::address_v6::loopback ().to_string ()), - port (port_a), - enable_control (enable_control_a) +nano::rpc_config::rpc_config (nano::network_constants & network_constants, uint16_t port_a, bool enable_control_a) : + rpc_process{ network_constants }, + address{ boost::asio::ip::address_v6::loopback ().to_string () }, + port{ port_a }, + enable_control{ enable_control_a } { } @@ -183,8 +185,9 @@ nano::error nano::rpc_config::deserialize_toml (nano::tomlconfig & toml) return toml.get_error (); } -nano::rpc_process_config::rpc_process_config () : - ipc_address (boost::asio::ip::address_v6::loopback ().to_string ()) +nano::rpc_process_config::rpc_process_config (nano::network_constants & network_constants) : + network_constants{ network_constants }, + ipc_address{ boost::asio::ip::address_v6::loopback ().to_string () } { } @@ -206,7 +209,7 @@ nano::error read_rpc_config_toml (boost::filesystem::path const & data_path_a, n else { // Migrate - nano::rpc_config config_json_l; + nano::rpc_config config_json_l{ config_a.rpc_process.network_constants }; error = read_and_update_rpc_config (data_path_a, config_json_l); if (!error) @@ -215,7 +218,7 @@ nano::error read_rpc_config_toml (boost::filesystem::path const & data_path_a, n config_json_l.serialize_toml (toml_l); // Only write out non-default values - nano::rpc_config config_defaults_l; + nano::rpc_config config_defaults_l{ config_a.rpc_process.network_constants }; nano::tomlconfig toml_defaults_l; config_defaults_l.serialize_toml (toml_defaults_l); diff --git a/nano/lib/rpcconfig.hpp b/nano/lib/rpcconfig.hpp index 4a9a3e9462..5952881397 100644 --- a/nano/lib/rpcconfig.hpp +++ b/nano/lib/rpcconfig.hpp @@ -48,8 +48,8 @@ class rpc_secure_config final class rpc_process_config final { public: - rpc_process_config (); - nano::network_constants network_constants; + rpc_process_config (nano::network_constants & network_constants); + nano::network_constants & network_constants; unsigned io_threads{ (4 < std::thread::hardware_concurrency ()) ? std::thread::hardware_concurrency () : 4 }; std::string ipc_address; uint16_t ipc_port{ network_constants.default_ipc_port }; @@ -69,8 +69,8 @@ class rpc_logging_config final class rpc_config final { public: - rpc_config (); - explicit rpc_config (uint16_t, bool); + explicit rpc_config (nano::network_constants & network_constants); + explicit rpc_config (nano::network_constants & network_constants, uint16_t, bool); nano::error serialize_json (nano::jsonconfig &) const; nano::error deserialize_json (bool & upgraded_a, nano::jsonconfig &); nano::error serialize_toml (nano::tomlconfig &) const; diff --git a/nano/load_test/entry.cpp b/nano/load_test/entry.cpp index b706b207f1..042743f3fe 100644 --- a/nano/load_test/entry.cpp +++ b/nano/load_test/entry.cpp @@ -56,7 +56,7 @@ void write_config_files (boost::filesystem::path const & data_path, int index) daemon_config.serialize_toml (toml); toml.write (nano::get_node_toml_config_path (data_path)); - nano::rpc_config rpc_config; + nano::rpc_config rpc_config{ daemon_config.node.network_params.network }; rpc_config.port = rpc_port_start + index; rpc_config.enable_control = true; rpc_config.rpc_process.ipc_port = ipc_port_start + index; diff --git a/nano/nano_node/daemon.cpp b/nano/nano_node/daemon.cpp index 78d492834f..3f37c2062c 100644 --- a/nano/nano_node/daemon.cpp +++ b/nano/nano_node/daemon.cpp @@ -119,7 +119,7 @@ void nano_daemon::daemon::run (boost::filesystem::path const & data_path, nano:: if (!config.rpc.child_process.enable) { // Launch rpc in-process - nano::rpc_config rpc_config; + nano::rpc_config rpc_config{ config.node.network_params.network }; auto error = nano::read_rpc_config_toml (data_path, rpc_config, flags.rpc_config_overrides); if (error) { diff --git a/nano/nano_rpc/entry.cpp b/nano/nano_rpc/entry.cpp index 26f342478e..87b4429b5d 100644 --- a/nano/nano_rpc/entry.cpp +++ b/nano/nano_rpc/entry.cpp @@ -39,8 +39,9 @@ void run (boost::filesystem::path const & data_path, std::vector co boost::system::error_code error_chmod; nano::set_secure_perm_directory (data_path, error_chmod); std::unique_ptr runner; + nano::network_constants network; - nano::rpc_config rpc_config; + nano::rpc_config rpc_config{ network }; auto error = nano::read_rpc_config_toml (data_path, rpc_config, config_overrides); if (!error) { diff --git a/nano/nano_wallet/entry.cpp b/nano/nano_wallet/entry.cpp index e9bdd7dad8..b37c7e27db 100644 --- a/nano/nano_wallet/entry.cpp +++ b/nano/nano_wallet/entry.cpp @@ -167,7 +167,7 @@ int run_wallet (QApplication & application, int argc, char * const * argv, boost if (!config.rpc.child_process.enable) { // Launch rpc in-process - nano::rpc_config rpc_config; + nano::rpc_config rpc_config{ config.node.network_params.network }; auto error = nano::read_rpc_config_toml (data_path, rpc_config, flags.rpc_config_overrides); if (error) { diff --git a/nano/node/cli.cpp b/nano/node/cli.cpp index 237764dc9d..1ab8fb118e 100644 --- a/nano/node/cli.cpp +++ b/nano/node/cli.cpp @@ -664,7 +664,7 @@ std::error_code nano::handle_node_options (boost::program_options::variables_map else if (type == "rpc") { valid_type = true; - nano::rpc_config config; + nano::rpc_config config{ nano::dev::network_params.network }; config.serialize_toml (toml); } else diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index f28bd6f23f..4cf59f6429 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -199,7 +199,7 @@ std::tuple, std::unique_ptr> add_rpc (na auto scoped_thread_name_io (std::make_unique ()); auto node_rpc_config (std::make_unique ()); auto ipc_server (std::make_unique (*node_a, *node_rpc_config)); - nano::rpc_config rpc_config (nano::get_available_port (), true); + nano::rpc_config rpc_config (node_a->network_params.network, nano::get_available_port (), true); rpc_config.rpc_process.ipc_port = node_a->config.ipc_config.transport_tcp.port; auto ipc_rpc_processor (std::make_unique (system.io_ctx, rpc_config)); auto rpc (std::make_shared (system.io_ctx, rpc_config, *ipc_rpc_processor)); @@ -5499,7 +5499,7 @@ TEST (rpc, simultaneous_calls) nano::thread_runner runner (system.io_ctx, node->config.io_threads); nano::node_rpc_config node_rpc_config; nano::ipc::ipc_server ipc_server (*node, node_rpc_config); - nano::rpc_config rpc_config (nano::get_available_port (), true); + nano::rpc_config rpc_config{ nano::dev::network_params.network, nano::get_available_port (), true }; rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; rpc_config.rpc_process.num_ipc_connections = 8; nano::ipc_rpc_processor ipc_rpc_processor (system.io_ctx, rpc_config); @@ -5553,7 +5553,7 @@ TEST (rpc, in_process) nano::system system; auto node = add_ipc_enabled_node (system); scoped_io_thread_name_change scoped_thread_name_io; - nano::rpc_config rpc_config (nano::get_available_port (), true); + nano::rpc_config rpc_config (nano::dev::network_params.network, nano::get_available_port (), true); rpc_config.rpc_process.ipc_port = node->config.ipc_config.transport_tcp.port; nano::node_rpc_config node_rpc_config; nano::ipc::ipc_server ipc_server (*node, node_rpc_config); @@ -5572,7 +5572,7 @@ TEST (rpc, in_process) TEST (rpc_config, serialization) { - nano::rpc_config config1; + nano::rpc_config config1{ nano::dev::network_params.network }; config1.address = boost::asio::ip::address_v6::any ().to_string (); config1.port = 10; config1.enable_control = true; @@ -5583,7 +5583,7 @@ TEST (rpc_config, serialization) config1.rpc_process.num_ipc_connections = 99; nano::jsonconfig tree; config1.serialize_json (tree); - nano::rpc_config config2; + nano::rpc_config config2{ nano::dev::network_params.network }; ASSERT_NE (config2.address, config1.address); ASSERT_NE (config2.port, config1.port); ASSERT_NE (config2.enable_control, config1.enable_control); From c2f19a38379777887869da643e72954b6a6dffc1 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Sun, 8 Aug 2021 16:02:05 +0100 Subject: [PATCH 153/346] Passing nano::networks enum in to working_path rather than statically constructing it. --- nano/core_test/core_test_main.cc | 2 +- nano/secure/utility.cpp | 9 ++++----- nano/secure/utility.hpp | 6 +++--- 3 files changed, 8 insertions(+), 9 deletions(-) diff --git a/nano/core_test/core_test_main.cc b/nano/core_test/core_test_main.cc index 7bd3e05bf0..ee80f5d628 100644 --- a/nano/core_test/core_test_main.cc +++ b/nano/core_test/core_test_main.cc @@ -2,6 +2,7 @@ #include #include +#include #include @@ -9,7 +10,6 @@ namespace nano { void cleanup_dev_directories_on_exit (); void force_nano_dev_network (); -boost::filesystem::path unique_path (); } GTEST_API_ int main (int argc, char ** argv) diff --git a/nano/secure/utility.cpp b/nano/secure/utility.cpp index c15de73972..917fb3e877 100644 --- a/nano/secure/utility.cpp +++ b/nano/secure/utility.cpp @@ -6,11 +6,10 @@ static std::vector all_unique_paths; -boost::filesystem::path nano::working_path () +boost::filesystem::path nano::working_path (nano::networks network) { - static nano::network_constants network_constants; auto result (nano::app_path ()); - switch (network_constants.network ()) + switch (network) { case nano::networks::invalid: release_assert (false); @@ -31,9 +30,9 @@ boost::filesystem::path nano::working_path () return result; } -boost::filesystem::path nano::unique_path () +boost::filesystem::path nano::unique_path (nano::networks network) { - auto result (working_path () / boost::filesystem::unique_path ()); + auto result (working_path (network) / boost::filesystem::unique_path ()); all_unique_paths.push_back (result); return result; } diff --git a/nano/secure/utility.hpp b/nano/secure/utility.hpp index 71b5983462..ae678294f1 100644 --- a/nano/secure/utility.hpp +++ b/nano/secure/utility.hpp @@ -1,16 +1,16 @@ #pragma once -#include +#include #include namespace nano { // OS-specific way of finding a path to a home directory. -boost::filesystem::path working_path (); +boost::filesystem::path working_path (nano::networks network = nano::network_constants::active_network); // Get a unique path within the home directory, used for testing. // Any directories created at this location will be removed when a test finishes. -boost::filesystem::path unique_path (); +boost::filesystem::path unique_path (nano::networks network = nano::network_constants::active_network); // Remove all unique tmp directories created by the process void remove_temporary_directories (); // Generic signal handler declarations From 7520bbe8c7f556f4ad4e1f75d881d5587bff4f67 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Sun, 8 Aug 2021 16:53:24 +0100 Subject: [PATCH 154/346] Converting upgrade logging message that was writing to cerr to a standard always_log message. We don't log error messages to cerr so this was out of place. Removing an unnecessary check for vacuuming within unit tests. This would be functionally equivalent yet potentially a performance issue. Timing the unit tests showed < 1% difference in time. --- nano/node/lmdb/lmdb.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/nano/node/lmdb/lmdb.cpp b/nano/node/lmdb/lmdb.cpp index f7a1145dd8..2dc32e2274 100644 --- a/nano/node/lmdb/lmdb.cpp +++ b/nano/node/lmdb/lmdb.cpp @@ -93,13 +93,9 @@ nano::mdb_store::mdb_store (nano::logger_mt & logger_a, boost::filesystem::path // (can be a few minutes with the --fast_bootstrap flag for instance) if (!is_fully_upgraded) { - nano::network_constants network_constants; if (!is_fresh_db) { - if (!network_constants.is_dev_network ()) - { - std::cout << "Upgrade in progress..." << std::endl; - } + logger.always_log ("Upgrade in progress..."); if (backup_before_upgrade_a) { create_backup_file (env, path_a, logger_a); @@ -115,7 +111,7 @@ nano::mdb_store::mdb_store (nano::logger_mt & logger_a, boost::filesystem::path } } - if (needs_vacuuming && !network_constants.is_dev_network ()) + if (needs_vacuuming) { logger.always_log ("Preparing vacuum..."); auto vacuum_success = vacuum_after_upgrade (path_a, lmdb_config_a); From a1598c9722cb3a8c35cf0a11acee924df300bd73 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Sun, 8 Aug 2021 17:25:53 +0100 Subject: [PATCH 155/346] Removing workaround for coroutines in combination with sanitizers as coroutines are no longer used. --- nano/lib/threading.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/nano/lib/threading.cpp b/nano/lib/threading.cpp index df17fda901..e3352c318c 100644 --- a/nano/lib/threading.cpp +++ b/nano/lib/threading.cpp @@ -123,8 +123,7 @@ nano::thread_runner::thread_runner (boost::asio::io_context & io_ctx_a, unsigned { boost::thread::attributes attrs; nano::thread_attributes::set (attrs); - auto count = (is_sanitizer_build && nano::network_constants{}.is_dev_network ()) ? 1 : service_threads_a; // This is a workaround to a bad interaction between TSAN, multiple coroutines, and multiple threads servicing io_context. Only use 1 thread if sanitizers are attached - for (auto i (0u); i < count; ++i) + for (auto i (0u); i < service_threads_a; ++i) { threads.emplace_back (attrs, [&io_ctx_a] () { nano::thread_role::set (nano::thread_role::name::io); From 0e8b7cdd734b2be1848c6bc5fedcf8facde572fc Mon Sep 17 00:00:00 2001 From: clemahieu Date: Sun, 8 Aug 2021 19:14:42 +0100 Subject: [PATCH 156/346] Moving threshold classes from free-functions with static network_params initialization on to nano::work_thresholds class where they belong. --- nano/core_test/difficulty.cpp | 10 ++++---- nano/lib/config.cpp | 22 ++++++++++++++++++ nano/lib/config.hpp | 12 +++++++++- nano/lib/work.cpp | 43 +++++------------------------------ nano/lib/work.hpp | 8 ------- nano/node/json_handler.cpp | 2 +- 6 files changed, 45 insertions(+), 52 deletions(-) diff --git a/nano/core_test/difficulty.cpp b/nano/core_test/difficulty.cpp index 5034e16b89..499b646211 100644 --- a/nano/core_test/difficulty.cpp +++ b/nano/core_test/difficulty.cpp @@ -130,11 +130,11 @@ TEST (difficulty, network_constants) nano::work_version version{ nano::work_version::work_1 }; ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.base, nano::dev::network_params.network.publish_thresholds.epoch_2); ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.base, nano::work_threshold_base (version)); - ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.entry, nano::work_threshold_entry (version, nano::block_type::state)); - ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_1, nano::work_threshold_entry (version, nano::block_type::send)); - ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_1, nano::work_threshold_entry (version, nano::block_type::receive)); - ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_1, nano::work_threshold_entry (version, nano::block_type::open)); - ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_1, nano::work_threshold_entry (version, nano::block_type::change)); + ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.entry, nano::dev::network_params.network.publish_thresholds.threshold_entry (version, nano::block_type::state)); + ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_1, nano::dev::network_params.network.publish_thresholds.threshold_entry (version, nano::block_type::send)); + ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_1, nano::dev::network_params.network.publish_thresholds.threshold_entry (version, nano::block_type::receive)); + ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_1, nano::dev::network_params.network.publish_thresholds.threshold_entry (version, nano::block_type::open)); + ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_1, nano::dev::network_params.network.publish_thresholds.threshold_entry (version, nano::block_type::change)); ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_1, nano::work_threshold (version, nano::block_details (nano::epoch::epoch_0, false, false, false))); ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_1, nano::work_threshold (version, nano::block_details (nano::epoch::epoch_1, false, false, false))); ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_1, nano::work_threshold (version, nano::block_details (nano::epoch::epoch_1, false, false, false))); diff --git a/nano/lib/config.cpp b/nano/lib/config.cpp index 72c0af2d02..5fac9d4330 100644 --- a/nano/lib/config.cpp +++ b/nano/lib/config.cpp @@ -1,3 +1,4 @@ +#include #include #include @@ -48,6 +49,27 @@ get_env_threshold_or_default ("NANO_TEST_EPOCH_2", 0xfffffff800000000), // 8x hi get_env_threshold_or_default ("NANO_TEST_EPOCH_2_RECV", 0xfffffe0000000000) // 8x lower than epoch_1 ); +uint64_t nano::work_thresholds::threshold_entry (nano::work_version const version_a, nano::block_type const type_a) +{ + uint64_t result{ std::numeric_limits::max () }; + if (type_a == nano::block_type::state) + { + switch (version_a) + { + case nano::work_version::work_1: + result = entry; + break; + default: + debug_assert (false && "Invalid version specified to work_threshold_entry"); + } + } + else + { + result = epoch_1; + } + return result; +} + namespace nano { const char * network_constants::active_network_err_msg = "Invalid network. Valid values are live, test, beta and dev."; diff --git a/nano/lib/config.hpp b/nano/lib/config.hpp index 6bcc98790b..0a88fa7df7 100644 --- a/nano/lib/config.hpp +++ b/nano/lib/config.hpp @@ -76,8 +76,16 @@ enum class networks : uint16_t nano_test_network = 0x5258, // 'R', 'X' }; -struct work_thresholds +enum class work_version { + unspecified, + work_1 +}; +enum class block_type : uint8_t; + +class work_thresholds +{ +public: uint64_t const epoch_1; uint64_t const epoch_2; uint64_t const epoch_2_receive; @@ -100,6 +108,8 @@ struct work_thresholds return other_a; } + uint64_t threshold_entry (nano::work_version const, nano::block_type const); + /** Network work thresholds. Define these inline as constexpr when moving to cpp17. */ static const nano::work_thresholds publish_full; static const nano::work_thresholds publish_beta; diff --git a/nano/lib/work.cpp b/nano/lib/work.cpp index bd7309ba23..01db1322b5 100644 --- a/nano/lib/work.cpp +++ b/nano/lib/work.cpp @@ -24,12 +24,14 @@ std::string nano::to_string (nano::work_version const version_a) bool nano::work_validate_entry (nano::block const & block_a) { - return block_a.difficulty () < nano::work_threshold_entry (block_a.work_version (), block_a.type ()); + static nano::network_constants network_constants; + return block_a.difficulty () < network_constants.publish_thresholds.threshold_entry (block_a.work_version (), block_a.type ()); } bool nano::work_validate_entry (nano::work_version const version_a, nano::root const & root_a, uint64_t const work_a) { - return nano::work_difficulty (version_a, root_a, work_a) < nano::work_threshold_entry (version_a, nano::block_type::state); + static nano::network_constants network_constants; + return nano::work_difficulty (version_a, root_a, work_a) < network_constants.publish_thresholds.threshold_entry (version_a, nano::block_type::state); } uint64_t nano::work_difficulty (nano::work_version const version_a, nano::root const & root_a, uint64_t const work_a) @@ -52,7 +54,8 @@ uint64_t nano::work_threshold_base (nano::work_version const version_a) switch (version_a) { case nano::work_version::work_1: - result = nano::work_v1::threshold_base (); + static nano::network_constants network_constants; + result = network_constants.publish_thresholds.base; break; default: debug_assert (false && "Invalid version specified to work_threshold_base"); @@ -60,28 +63,6 @@ uint64_t nano::work_threshold_base (nano::work_version const version_a) return result; } -uint64_t nano::work_threshold_entry (nano::work_version const version_a, nano::block_type const type_a) -{ - uint64_t result{ std::numeric_limits::max () }; - if (type_a == nano::block_type::state) - { - switch (version_a) - { - case nano::work_version::work_1: - result = nano::work_v1::threshold_entry (); - break; - default: - debug_assert (false && "Invalid version specified to work_threshold_entry"); - } - } - else - { - static nano::network_constants network_constants; - result = network_constants.publish_thresholds.epoch_1; - } - return result; -} - uint64_t nano::work_threshold (nano::work_version const version_a, nano::block_details const details_a) { uint64_t result{ std::numeric_limits::max () }; @@ -96,18 +77,6 @@ uint64_t nano::work_threshold (nano::work_version const version_a, nano::block_d return result; } -uint64_t nano::work_v1::threshold_base () -{ - static nano::network_constants network_constants; - return network_constants.publish_thresholds.base; -} - -uint64_t nano::work_v1::threshold_entry () -{ - static nano::network_constants network_constants; - return network_constants.publish_thresholds.entry; -} - uint64_t nano::work_v1::threshold (nano::block_details const details_a) { static_assert (nano::epoch::max == nano::epoch::epoch_2, "work_v1::threshold is ill-defined"); diff --git a/nano/lib/work.hpp b/nano/lib/work.hpp index 26fb6db674..4efad035db 100644 --- a/nano/lib/work.hpp +++ b/nano/lib/work.hpp @@ -13,11 +13,6 @@ namespace nano { -enum class work_version -{ - unspecified, - work_1 -}; std::string to_string (nano::work_version const version_a); class block; @@ -29,15 +24,12 @@ bool work_validate_entry (nano::work_version const, nano::root const &, uint64_t uint64_t work_difficulty (nano::work_version const, nano::root const &, uint64_t const); uint64_t work_threshold_base (nano::work_version const); -uint64_t work_threshold_entry (nano::work_version const, nano::block_type const); // Ledger threshold uint64_t work_threshold (nano::work_version const, nano::block_details const); namespace work_v1 { uint64_t value (nano::root const & root_a, uint64_t work_a); - uint64_t threshold_base (); - uint64_t threshold_entry (); uint64_t threshold (nano::block_details const); } diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index 47fc1c1f0e..9c0d697612 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -4872,7 +4872,7 @@ void nano::json_handler::work_generate () auto hash (hash_impl ()); auto difficulty (difficulty_optional_impl (work_version)); multiplier_optional_impl (work_version, difficulty); - if (!ec && (difficulty > node.max_work_generate_difficulty (work_version) || difficulty < nano::work_threshold_entry (work_version, nano::block_type::state))) + if (!ec && (difficulty > node.max_work_generate_difficulty (work_version) || difficulty < node.network_params.network.publish_thresholds.threshold_entry (work_version, nano::block_type::state))) { ec = nano::error_rpc::difficulty_limit; } From 442fb1eaba4461c720e9e3604cf8eab8ff13ded2 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Sun, 8 Aug 2021 20:16:46 +0100 Subject: [PATCH 157/346] Moving ::value function on to nano::work_thresholds where it belongs. --- nano/lib/config.cpp | 18 ++++++++++++++++++ nano/lib/config.hpp | 2 ++ nano/lib/work.cpp | 31 ++++--------------------------- nano/lib/work.hpp | 1 - nano/nano_node/entry.cpp | 3 ++- 5 files changed, 26 insertions(+), 29 deletions(-) diff --git a/nano/lib/config.cpp b/nano/lib/config.cpp index 5fac9d4330..53e65fd601 100644 --- a/nano/lib/config.cpp +++ b/nano/lib/config.cpp @@ -70,6 +70,24 @@ uint64_t nano::work_thresholds::threshold_entry (nano::work_version const versio return result; } +#ifndef NANO_FUZZER_TEST +uint64_t nano::work_thresholds::value (nano::root const & root_a, uint64_t work_a) +{ + uint64_t result; + blake2b_state hash; + blake2b_init (&hash, sizeof (result)); + blake2b_update (&hash, reinterpret_cast (&work_a), sizeof (work_a)); + blake2b_update (&hash, root_a.bytes.data (), root_a.bytes.size ()); + blake2b_final (&hash, reinterpret_cast (&result), sizeof (result)); + return result; +} +#else +uint64_t nano::work_thresholds::value (nano::root const & root_a, uint64_t work_a) +{ + return base + 1; +} +#endif + namespace nano { const char * network_constants::active_network_err_msg = "Invalid network. Valid values are live, test, beta and dev."; diff --git a/nano/lib/config.hpp b/nano/lib/config.hpp index 0a88fa7df7..e53aa5f608 100644 --- a/nano/lib/config.hpp +++ b/nano/lib/config.hpp @@ -82,6 +82,7 @@ enum class work_version work_1 }; enum class block_type : uint8_t; +class root; class work_thresholds { @@ -109,6 +110,7 @@ class work_thresholds } uint64_t threshold_entry (nano::work_version const, nano::block_type const); + uint64_t value (nano::root const & root_a, uint64_t work_a); /** Network work thresholds. Define these inline as constexpr when moving to cpp17. */ static const nano::work_thresholds publish_full; diff --git a/nano/lib/work.cpp b/nano/lib/work.cpp index 01db1322b5..17bc32e59b 100644 --- a/nano/lib/work.cpp +++ b/nano/lib/work.cpp @@ -36,11 +36,12 @@ bool nano::work_validate_entry (nano::work_version const version_a, nano::root c uint64_t nano::work_difficulty (nano::work_version const version_a, nano::root const & root_a, uint64_t const work_a) { + static nano::network_constants network_constants; uint64_t result{ 0 }; switch (version_a) { case nano::work_version::work_1: - result = nano::work_v1::value (root_a, work_a); + result = network_constants.publish_thresholds.value (root_a, work_a); break; default: debug_assert (false && "Invalid version specified to work_difficulty"); @@ -98,30 +99,6 @@ uint64_t nano::work_v1::threshold (nano::block_details const details_a) return result; } -#ifndef NANO_FUZZER_TEST -uint64_t nano::work_v1::value (nano::root const & root_a, uint64_t work_a) -{ - uint64_t result; - blake2b_state hash; - blake2b_init (&hash, sizeof (result)); - blake2b_update (&hash, reinterpret_cast (&work_a), sizeof (work_a)); - blake2b_update (&hash, root_a.bytes.data (), root_a.bytes.size ()); - blake2b_final (&hash, reinterpret_cast (&result), sizeof (result)); - return result; -} -#else -uint64_t nano::work_v1::value (nano::root const & root_a, uint64_t work_a) -{ - static nano::network_constants network_constants; - if (!network_constants.is_dev_network ()) - { - debug_assert (false); - std::exit (1); - } - return network_constants.publish_thresholds.base + 1; -} -#endif - double nano::normalized_multiplier (double const multiplier_a, uint64_t const threshold_a) { static nano::network_constants network_constants; @@ -235,7 +212,7 @@ void nano::work_pool::loop (uint64_t thread) if (opt_work.is_initialized ()) { work = *opt_work; - output = nano::work_v1::value (current_l.item, work); + output = network_constants.publish_thresholds.value (current_l.item, work); } else { @@ -268,7 +245,7 @@ void nano::work_pool::loop (uint64_t thread) { // If the ticket matches what we started with, we're the ones that found the solution debug_assert (output >= current_l.difficulty); - debug_assert (current_l.difficulty == 0 || nano::work_v1::value (current_l.item, work) == output); + debug_assert (current_l.difficulty == 0 || network_constants.publish_thresholds.value (current_l.item, work) == output); // Signal other threads to stop their work next time they check ticket ++ticket; pending.pop_front (); diff --git a/nano/lib/work.hpp b/nano/lib/work.hpp index 4efad035db..7cf9ae2eb8 100644 --- a/nano/lib/work.hpp +++ b/nano/lib/work.hpp @@ -29,7 +29,6 @@ uint64_t work_threshold (nano::work_version const, nano::block_details const); namespace work_v1 { - uint64_t value (nano::root const & root_a, uint64_t work_a); uint64_t threshold (nano::block_details const); } diff --git a/nano/nano_node/entry.cpp b/nano/nano_node/entry.cpp index ea9f20cdfd..674e129bde 100644 --- a/nano/nano_node/entry.cpp +++ b/nano/nano_node/entry.cpp @@ -508,6 +508,7 @@ int main (int argc, char * const * argv) } else if (vm.count ("debug_profile_validate")) { + nano::network_constants network_constants; uint64_t difficulty{ nano::work_thresholds::publish_full.base }; std::cerr << "Starting validation profile" << std::endl; auto start (std::chrono::steady_clock::now ()); @@ -516,7 +517,7 @@ int main (int argc, char * const * argv) uint64_t count{ 10000000U }; // 10M for (uint64_t i (0); i < count; ++i) { - valid = nano::work_v1::value (hash, i) > difficulty; + valid = network_constants.publish_thresholds.value (hash, i) > difficulty; } std::ostringstream oss (valid ? "true" : "false"); // IO forces compiler to not dismiss the variable auto total_time (std::chrono::duration_cast (std::chrono::steady_clock::now () - start).count ()); From aef5020818342c5633620ab8573d223c3abfae1b Mon Sep 17 00:00:00 2001 From: clemahieu Date: Sun, 8 Aug 2021 20:29:56 +0100 Subject: [PATCH 158/346] Moving work_v1::value function on to work_thresholds where it belongs. --- nano/lib/config.cpp | 20 ++++++++++++++++++++ nano/lib/config.hpp | 2 ++ nano/lib/work.cpp | 24 ++---------------------- nano/lib/work.hpp | 5 ----- 4 files changed, 24 insertions(+), 27 deletions(-) diff --git a/nano/lib/config.cpp b/nano/lib/config.cpp index 53e65fd601..cca4c6e4e0 100644 --- a/nano/lib/config.cpp +++ b/nano/lib/config.cpp @@ -88,6 +88,26 @@ uint64_t nano::work_thresholds::value (nano::root const & root_a, uint64_t work_ } #endif +uint64_t nano::work_thresholds::threshold (nano::block_details const & details_a) +{ + static_assert (nano::epoch::max == nano::epoch::epoch_2, "work_v1::threshold is ill-defined"); + + uint64_t result{ std::numeric_limits::max () }; + switch (details_a.epoch) + { + case nano::epoch::epoch_2: + result = (details_a.is_receive || details_a.is_epoch) ? epoch_2_receive : epoch_2; + break; + case nano::epoch::epoch_1: + case nano::epoch::epoch_0: + result = epoch_1; + break; + default: + debug_assert (false && "Invalid epoch specified to work_v1 ledger work_threshold"); + } + return result; +} + namespace nano { const char * network_constants::active_network_err_msg = "Invalid network. Valid values are live, test, beta and dev."; diff --git a/nano/lib/config.hpp b/nano/lib/config.hpp index e53aa5f608..aef7b4527e 100644 --- a/nano/lib/config.hpp +++ b/nano/lib/config.hpp @@ -83,6 +83,7 @@ enum class work_version }; enum class block_type : uint8_t; class root; +class block_details; class work_thresholds { @@ -111,6 +112,7 @@ class work_thresholds uint64_t threshold_entry (nano::work_version const, nano::block_type const); uint64_t value (nano::root const & root_a, uint64_t work_a); + uint64_t threshold (nano::block_details const &); /** Network work thresholds. Define these inline as constexpr when moving to cpp17. */ static const nano::work_thresholds publish_full; diff --git a/nano/lib/work.cpp b/nano/lib/work.cpp index 17bc32e59b..5c93dfd899 100644 --- a/nano/lib/work.cpp +++ b/nano/lib/work.cpp @@ -66,11 +66,12 @@ uint64_t nano::work_threshold_base (nano::work_version const version_a) uint64_t nano::work_threshold (nano::work_version const version_a, nano::block_details const details_a) { + static nano::network_constants network_constants; uint64_t result{ std::numeric_limits::max () }; switch (version_a) { case nano::work_version::work_1: - result = nano::work_v1::threshold (details_a); + result = network_constants.publish_thresholds.threshold (details_a); break; default: debug_assert (false && "Invalid version specified to ledger work_threshold"); @@ -78,27 +79,6 @@ uint64_t nano::work_threshold (nano::work_version const version_a, nano::block_d return result; } -uint64_t nano::work_v1::threshold (nano::block_details const details_a) -{ - static_assert (nano::epoch::max == nano::epoch::epoch_2, "work_v1::threshold is ill-defined"); - static nano::network_constants network_constants; - - uint64_t result{ std::numeric_limits::max () }; - switch (details_a.epoch) - { - case nano::epoch::epoch_2: - result = (details_a.is_receive || details_a.is_epoch) ? network_constants.publish_thresholds.epoch_2_receive : network_constants.publish_thresholds.epoch_2; - break; - case nano::epoch::epoch_1: - case nano::epoch::epoch_0: - result = network_constants.publish_thresholds.epoch_1; - break; - default: - debug_assert (false && "Invalid epoch specified to work_v1 ledger work_threshold"); - } - return result; -} - double nano::normalized_multiplier (double const multiplier_a, uint64_t const threshold_a) { static nano::network_constants network_constants; diff --git a/nano/lib/work.hpp b/nano/lib/work.hpp index 7cf9ae2eb8..fbfe3cc537 100644 --- a/nano/lib/work.hpp +++ b/nano/lib/work.hpp @@ -27,11 +27,6 @@ uint64_t work_threshold_base (nano::work_version const); // Ledger threshold uint64_t work_threshold (nano::work_version const, nano::block_details const); -namespace work_v1 -{ - uint64_t threshold (nano::block_details const); -} - double normalized_multiplier (double const, uint64_t const); double denormalized_multiplier (double const, uint64_t const); class opencl_work; From 49aaac7d02b3d4d322536b2266c3cb5a04bdb483 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Sun, 8 Aug 2021 21:53:46 +0100 Subject: [PATCH 159/346] Moving threshold function on to work_thresholds class where it belongs. --- nano/core_test/difficulty.cpp | 14 +++++++------- nano/core_test/ledger.cpp | 2 +- nano/core_test/wallet.cpp | 2 +- nano/lib/config.cpp | 15 +++++++++++++++ nano/lib/config.hpp | 2 ++ nano/lib/work.cpp | 15 --------------- nano/lib/work.hpp | 2 -- nano/nano_node/entry.cpp | 2 +- nano/node/json_handler.cpp | 10 +++++----- nano/node/node.cpp | 4 ++-- nano/node/wallet.cpp | 2 +- nano/qt/qt.cpp | 8 ++++---- nano/rpc_test/rpc.cpp | 14 +++++++------- nano/secure/ledger.cpp | 18 ++++++++++++------ nano/slow_test/node.cpp | 8 ++++---- nano/test_common/system.cpp | 3 ++- 16 files changed, 64 insertions(+), 57 deletions(-) diff --git a/nano/core_test/difficulty.cpp b/nano/core_test/difficulty.cpp index 499b646211..ab44a59dee 100644 --- a/nano/core_test/difficulty.cpp +++ b/nano/core_test/difficulty.cpp @@ -135,16 +135,16 @@ TEST (difficulty, network_constants) ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_1, nano::dev::network_params.network.publish_thresholds.threshold_entry (version, nano::block_type::receive)); ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_1, nano::dev::network_params.network.publish_thresholds.threshold_entry (version, nano::block_type::open)); ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_1, nano::dev::network_params.network.publish_thresholds.threshold_entry (version, nano::block_type::change)); - ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_1, nano::work_threshold (version, nano::block_details (nano::epoch::epoch_0, false, false, false))); - ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_1, nano::work_threshold (version, nano::block_details (nano::epoch::epoch_1, false, false, false))); - ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_1, nano::work_threshold (version, nano::block_details (nano::epoch::epoch_1, false, false, false))); + ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_1, nano::dev::network_params.network.publish_thresholds.threshold (version, nano::block_details (nano::epoch::epoch_0, false, false, false))); + ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_1, nano::dev::network_params.network.publish_thresholds.threshold (version, nano::block_details (nano::epoch::epoch_1, false, false, false))); + ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_1, nano::dev::network_params.network.publish_thresholds.threshold (version, nano::block_details (nano::epoch::epoch_1, false, false, false))); // Send [+ change] - ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_2, nano::work_threshold (version, nano::block_details (nano::epoch::epoch_2, true, false, false))); + ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_2, nano::dev::network_params.network.publish_thresholds.threshold (version, nano::block_details (nano::epoch::epoch_2, true, false, false))); // Change - ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_2, nano::work_threshold (version, nano::block_details (nano::epoch::epoch_2, false, false, false))); + ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_2, nano::dev::network_params.network.publish_thresholds.threshold (version, nano::block_details (nano::epoch::epoch_2, false, false, false))); // Receive [+ change] / Open - ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_2_receive, nano::work_threshold (version, nano::block_details (nano::epoch::epoch_2, false, true, false))); + ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_2_receive, nano::dev::network_params.network.publish_thresholds.threshold (version, nano::block_details (nano::epoch::epoch_2, false, true, false))); // Epoch - ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_2_receive, nano::work_threshold (version, nano::block_details (nano::epoch::epoch_2, false, false, true))); + ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_2_receive, nano::dev::network_params.network.publish_thresholds.threshold (version, nano::block_details (nano::epoch::epoch_2, false, false, true))); } diff --git a/nano/core_test/ledger.cpp b/nano/core_test/ledger.cpp index d873bac653..6807d45e7e 100644 --- a/nano/core_test/ledger.cpp +++ b/nano/core_test/ledger.cpp @@ -2893,7 +2893,7 @@ TEST (ledger, work_validation) // With random work the block doesn't pass, then modifies the block with sufficient work and ensures a correct result auto process_block = [&store, &ledger, &pool] (nano::block & block_a, nano::block_details const details_a) { - auto threshold = nano::work_threshold (block_a.work_version (), details_a); + auto threshold = nano::dev::network_params.network.publish_thresholds.threshold (block_a.work_version (), details_a); // Rarely failed with random work, so modify until it doesn't have enough difficulty while (block_a.difficulty () >= threshold) { diff --git a/nano/core_test/wallet.cpp b/nano/core_test/wallet.cpp index 5eae9b3fc9..0548e7b73a 100644 --- a/nano/core_test/wallet.cpp +++ b/nano/core_test/wallet.cpp @@ -822,7 +822,7 @@ TEST (wallet, no_work) auto block (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key2.pub, std::numeric_limits::max (), false)); ASSERT_NE (nullptr, block); ASSERT_NE (0, block->block_work ()); - ASSERT_GE (block->difficulty (), nano::work_threshold (block->work_version (), block->sideband ().details)); + ASSERT_GE (block->difficulty (), nano::dev::network_params.network.publish_thresholds.threshold (block->work_version (), block->sideband ().details)); auto transaction (system.wallet (0)->wallets.tx_begin_read ()); uint64_t cached_work (0); system.wallet (0)->store.work_get (transaction, nano::dev::genesis_key.pub, cached_work); diff --git a/nano/lib/config.cpp b/nano/lib/config.cpp index cca4c6e4e0..84f8f39e54 100644 --- a/nano/lib/config.cpp +++ b/nano/lib/config.cpp @@ -108,6 +108,21 @@ uint64_t nano::work_thresholds::threshold (nano::block_details const & details_a return result; } +uint64_t nano::work_thresholds::threshold (nano::work_version const version_a, nano::block_details const details_a) +{ + static nano::network_constants network_constants; + uint64_t result{ std::numeric_limits::max () }; + switch (version_a) + { + case nano::work_version::work_1: + result = network_constants.publish_thresholds.threshold (details_a); + break; + default: + debug_assert (false && "Invalid version specified to ledger work_threshold"); + } + return result; +} + namespace nano { const char * network_constants::active_network_err_msg = "Invalid network. Valid values are live, test, beta and dev."; diff --git a/nano/lib/config.hpp b/nano/lib/config.hpp index aef7b4527e..69c96d01de 100644 --- a/nano/lib/config.hpp +++ b/nano/lib/config.hpp @@ -113,6 +113,8 @@ class work_thresholds uint64_t threshold_entry (nano::work_version const, nano::block_type const); uint64_t value (nano::root const & root_a, uint64_t work_a); uint64_t threshold (nano::block_details const &); + // Ledger threshold + uint64_t threshold (nano::work_version const, nano::block_details const); /** Network work thresholds. Define these inline as constexpr when moving to cpp17. */ static const nano::work_thresholds publish_full; diff --git a/nano/lib/work.cpp b/nano/lib/work.cpp index 5c93dfd899..0873fc4c7d 100644 --- a/nano/lib/work.cpp +++ b/nano/lib/work.cpp @@ -64,21 +64,6 @@ uint64_t nano::work_threshold_base (nano::work_version const version_a) return result; } -uint64_t nano::work_threshold (nano::work_version const version_a, nano::block_details const details_a) -{ - static nano::network_constants network_constants; - uint64_t result{ std::numeric_limits::max () }; - switch (version_a) - { - case nano::work_version::work_1: - result = network_constants.publish_thresholds.threshold (details_a); - break; - default: - debug_assert (false && "Invalid version specified to ledger work_threshold"); - } - return result; -} - double nano::normalized_multiplier (double const multiplier_a, uint64_t const threshold_a) { static nano::network_constants network_constants; diff --git a/nano/lib/work.hpp b/nano/lib/work.hpp index fbfe3cc537..0d87836306 100644 --- a/nano/lib/work.hpp +++ b/nano/lib/work.hpp @@ -24,8 +24,6 @@ bool work_validate_entry (nano::work_version const, nano::root const &, uint64_t uint64_t work_difficulty (nano::work_version const, nano::root const &, uint64_t const); uint64_t work_threshold_base (nano::work_version const); -// Ledger threshold -uint64_t work_threshold (nano::work_version const, nano::block_details const); double normalized_multiplier (double const, uint64_t const); double denormalized_multiplier (double const, uint64_t const); diff --git a/nano/nano_node/entry.cpp b/nano/nano_node/entry.cpp index 674e129bde..425d27861e 100644 --- a/nano/nano_node/entry.cpp +++ b/nano/nano_node/entry.cpp @@ -1567,7 +1567,7 @@ int main (int argc, char * const * argv) } } // Check if block work value is correct - if (block->difficulty () < nano::work_threshold (block->work_version (), block->sideband ().details)) + if (block->difficulty () < node->network_params.network.publish_thresholds.threshold (block->work_version (), block->sideband ().details)) { print_error_message (boost::str (boost::format ("Invalid work for block %1% value: %2%\n") % hash.to_string () % nano::to_string_hex (block->block_work ()))); } diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index 9c0d697612..6dbf81a03c 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -414,7 +414,7 @@ uint64_t nano::json_handler::difficulty_ledger (nano::block const & block_a) details_found = true; } } - return details_found ? nano::work_threshold (block_a.work_version (), details) : node.default_difficulty (block_a.work_version ()); + return details_found ? node.network_params.network.publish_thresholds.threshold (block_a.work_version (), details) : node.default_difficulty (block_a.work_version ()); } double nano::json_handler::multiplier_optional_impl (nano::work_version const version_a, uint64_t & difficulty) @@ -829,7 +829,7 @@ void nano::json_handler::account_representative_set () if (!rpc_l->ec) { nano::block_details details (info.epoch (), false, false, false); - if (nano::work_difficulty (nano::work_version::work_1, info.head, work) < nano::work_threshold (nano::work_version::work_1, details)) + if (nano::work_difficulty (nano::work_version::work_1, info.head, work) < rpc_l->node.network_params.network.publish_thresholds.threshold (nano::work_version::work_1, details)) { rpc_l->ec = nano::error_common::invalid_work; } @@ -3284,7 +3284,7 @@ void nano::json_handler::receive () head = account; } nano::block_details details (epoch, false, true, false); - if (nano::work_difficulty (nano::work_version::work_1, head, work) < nano::work_threshold (nano::work_version::work_1, details)) + if (nano::work_difficulty (nano::work_version::work_1, head, work) < node.network_params.network.publish_thresholds.threshold (nano::work_version::work_1, details)) { ec = nano::error_common::invalid_work; } @@ -3628,7 +3628,7 @@ void nano::json_handler::send () if (!ec && work) { nano::block_details details (info.epoch (), true, false, false); - if (nano::work_difficulty (nano::work_version::work_1, info.head, work) < nano::work_threshold (nano::work_version::work_1, details)) + if (nano::work_difficulty (nano::work_version::work_1, info.head, work) < node.network_params.network.publish_thresholds.threshold (nano::work_version::work_1, details)) { ec = nano::error_common::invalid_work; } @@ -5051,7 +5051,7 @@ void nano::json_handler::work_validate () response_l.put ("valid", (result_difficulty >= difficulty) ? "1" : "0"); } response_l.put ("valid_all", (result_difficulty >= node.default_difficulty (work_version)) ? "1" : "0"); - response_l.put ("valid_receive", (result_difficulty >= nano::work_threshold (work_version, nano::block_details (nano::epoch::epoch_2, false, true, false))) ? "1" : "0"); + response_l.put ("valid_receive", (result_difficulty >= node.network_params.network.publish_thresholds.threshold (work_version, nano::block_details (nano::epoch::epoch_2, false, true, false))) ? "1" : "0"); response_l.put ("difficulty", nano::to_string_hex (result_difficulty)); auto result_multiplier = nano::difficulty::to_multiplier (result_difficulty, node.default_difficulty (work_version)); response_l.put ("multiplier", nano::to_string (result_multiplier)); diff --git a/nano/node/node.cpp b/nano/node/node.cpp index 4c50504004..f50e1e98fd 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -1546,7 +1546,7 @@ void nano::node::epoch_upgrader_impl (nano::raw_key const & prv_a, nano::epoch e if (!store.account.get (transaction, account, info) && info.epoch () < epoch_a) { ++attempts; - auto difficulty (nano::work_threshold (nano::work_version::work_1, nano::block_details (epoch_a, false, false, true))); + auto difficulty (network_params.network.publish_thresholds.threshold (nano::work_version::work_1, nano::block_details (epoch_a, false, false, true))); nano::root const & root (info.head); std::shared_ptr epoch = builder.state () .account (account) @@ -1624,7 +1624,7 @@ void nano::node::epoch_upgrader_impl (nano::raw_key const & prv_a, nano::epoch e { ++attempts; release_assert (nano::epochs::is_sequential (info.epoch, epoch_a)); - auto difficulty (nano::work_threshold (nano::work_version::work_1, nano::block_details (epoch_a, false, false, true))); + auto difficulty (network_params.network.publish_thresholds.threshold (nano::work_version::work_1, nano::block_details (epoch_a, false, false, true))); nano::root const & root (key.account); nano::account const & account (key.account); std::shared_ptr epoch = builder.state () diff --git a/nano/node/wallet.cpp b/nano/node/wallet.cpp index 5ee5f952e9..d953c8d3a5 100644 --- a/nano/node/wallet.cpp +++ b/nano/node/wallet.cpp @@ -1043,7 +1043,7 @@ bool nano::wallet::action_complete (std::shared_ptr const & block_a wallets.delayed_work->erase (account_a); if (block_a != nullptr) { - auto required_difficulty{ nano::work_threshold (block_a->work_version (), details_a) }; + auto required_difficulty{ wallets.node.network_params.network.publish_thresholds.threshold (block_a->work_version (), details_a) }; if (block_a->difficulty () < required_difficulty) { wallets.node.logger.try_log (boost::str (boost::format ("Cached or provided work for block %1% account %2% is invalid, regenerating") % block_a->hash ().to_string () % account_a.to_account ())); diff --git a/nano/qt/qt.cpp b/nano/qt/qt.cpp index 3b43176f52..ea5ce06772 100644 --- a/nano/qt/qt.cpp +++ b/nano/qt/qt.cpp @@ -2241,7 +2241,7 @@ void nano_qt::block_creation::create_send () nano::block_details details; details.is_send = true; details.epoch = info.epoch (); - auto const required_difficulty{ nano::work_threshold (send.work_version (), details) }; + auto const required_difficulty{ wallet.node.network_params.network.publish_thresholds.threshold (send.work_version (), details) }; if (wallet.node.work_generate_blocking (send, required_difficulty).is_initialized ()) { std::string block_l; @@ -2325,7 +2325,7 @@ void nano_qt::block_creation::create_receive () nano::block_details details; details.is_receive = true; details.epoch = std::max (info.epoch (), pending.epoch); - auto required_difficulty{ nano::work_threshold (receive.work_version (), details) }; + auto required_difficulty{ wallet.node.network_params.network.publish_thresholds.threshold (receive.work_version (), details) }; if (wallet.node.work_generate_blocking (receive, required_difficulty).is_initialized ()) { std::string block_l; @@ -2408,7 +2408,7 @@ void nano_qt::block_creation::create_change () nano::state_block change (account_l, info.head, representative_l, info.balance, 0, key, account_l, 0); nano::block_details details; details.epoch = info.epoch (); - auto const required_difficulty{ nano::work_threshold (change.work_version (), details) }; + auto const required_difficulty{ wallet.node.network_params.network.publish_thresholds.threshold (change.work_version (), details) }; if (wallet.node.work_generate_blocking (change, required_difficulty).is_initialized ()) { std::string block_l; @@ -2490,7 +2490,7 @@ void nano_qt::block_creation::create_open () nano::block_details details; details.is_receive = true; details.epoch = pending.epoch; - auto const required_difficulty{ nano::work_threshold (open.work_version (), details) }; + auto const required_difficulty{ wallet.node.network_params.network.publish_thresholds.threshold (open.work_version (), details) }; if (wallet.node.work_generate_blocking (open, required_difficulty).is_initialized ()) { std::string block_l; diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index 4cf59f6429..948d0c1161 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -524,7 +524,7 @@ TEST (rpc, send_epoch_2) system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv, false); - auto target_difficulty = nano::work_threshold (nano::work_version::work_1, nano::block_details (nano::epoch::epoch_2, true, false, false)); + auto target_difficulty = nano::dev::network_params.network.publish_thresholds.threshold (nano::work_version::work_1, nano::block_details (nano::epoch::epoch_2, true, false, false)); ASSERT_LT (node->network_params.network.publish_thresholds.entry, target_difficulty); auto min_difficulty = node->network_params.network.publish_thresholds.entry; @@ -2147,7 +2147,7 @@ TEST (rpc, work_generate_block_ledger_epoch_2) auto send_block (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key.pub, nano::Gxrb_ratio)); ASSERT_NE (nullptr, send_block); nano::state_block block (key.pub, 0, nano::dev::genesis_key.pub, nano::Gxrb_ratio, send_block->hash (), key.prv, key.pub, 0); - auto threshold (nano::work_threshold (block.work_version (), nano::block_details (nano::epoch::epoch_2, false, true, false))); + auto threshold (nano::dev::network_params.network.publish_thresholds.threshold (block.work_version (), nano::block_details (nano::epoch::epoch_2, false, true, false))); block.block_work_set (system.work_generate_limited (block.root ().as_block_hash (), 1, threshold - 1)); nano::block_hash hash (block.root ().as_block_hash ()); auto [rpc, rpc_ctx] = add_rpc (system, node); @@ -2542,7 +2542,7 @@ TEST (rpc, account_representative_set_epoch_2) system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv, false); - auto target_difficulty = nano::work_threshold (nano::work_version::work_1, nano::block_details (nano::epoch::epoch_2, false, false, false)); + auto target_difficulty = nano::dev::network_params.network.publish_thresholds.threshold (nano::work_version::work_1, nano::block_details (nano::epoch::epoch_2, false, false, false)); ASSERT_LT (node->network_params.network.publish_thresholds.entry, target_difficulty); auto min_difficulty = node->network_params.network.publish_thresholds.entry; @@ -4361,7 +4361,7 @@ TEST (rpc, block_create_state_open) ASSERT_EQ (nano::block_type::state, state_block->type ()); ASSERT_EQ (state_hash, state_block->hash ().to_string ()); auto difficulty (state_block->difficulty ()); - ASSERT_GT (difficulty, nano::work_threshold (state_block->work_version (), nano::block_details (nano::epoch::epoch_0, false, true, false))); + ASSERT_GT (difficulty, nano::dev::network_params.network.publish_thresholds.threshold (state_block->work_version (), nano::block_details (nano::epoch::epoch_0, false, true, false))); ASSERT_TRUE (node->latest (key.pub).is_zero ()); rpc_ctx->io_scope->reset (); auto process_result (node->process (*state_block)); @@ -4441,7 +4441,7 @@ TEST (rpc, block_create_open_epoch_v2) ASSERT_EQ (nano::block_type::state, state_block->type ()); ASSERT_EQ (state_hash, state_block->hash ().to_string ()); auto difficulty (state_block->difficulty ()); - ASSERT_GT (difficulty, nano::work_threshold (state_block->work_version (), nano::block_details (nano::epoch::epoch_2, false, true, false))); + ASSERT_GT (difficulty, nano::dev::network_params.network.publish_thresholds.threshold (state_block->work_version (), nano::block_details (nano::epoch::epoch_2, false, true, false))); ASSERT_TRUE (node->latest (key.pub).is_zero ()); rpc_ctx->io_scope->reset (); auto process_result (node->process (*state_block)); @@ -4485,7 +4485,7 @@ TEST (rpc, block_create_receive_epoch_v2) ASSERT_EQ (nano::block_type::state, state_block->type ()); ASSERT_EQ (state_hash, state_block->hash ().to_string ()); auto difficulty (state_block->difficulty ()); - ASSERT_GT (difficulty, nano::work_threshold (state_block->work_version (), nano::block_details (nano::epoch::epoch_2, false, true, false))); + ASSERT_GT (difficulty, nano::dev::network_params.network.publish_thresholds.threshold (state_block->work_version (), nano::block_details (nano::epoch::epoch_2, false, true, false))); rpc_ctx->io_scope->reset (); auto process_result (node->process (*state_block)); ASSERT_EQ (nano::process_result::progress, process_result.code); @@ -4527,7 +4527,7 @@ TEST (rpc, block_create_send_epoch_v2) ASSERT_EQ (nano::block_type::state, state_block->type ()); ASSERT_EQ (state_hash, state_block->hash ().to_string ()); auto difficulty (state_block->difficulty ()); - ASSERT_GT (difficulty, nano::work_threshold (state_block->work_version (), nano::block_details (nano::epoch::epoch_2, true, false, false))); + ASSERT_GT (difficulty, nano::dev::network_params.network.publish_thresholds.threshold (state_block->work_version (), nano::block_details (nano::epoch::epoch_2, true, false, false))); rpc_ctx->io_scope->reset (); auto process_result (node->process (*state_block)); ASSERT_EQ (nano::process_result::progress, process_result.code); diff --git a/nano/secure/ledger.cpp b/nano/secure/ledger.cpp index 04ef32d13f..2a433eb60f 100644 --- a/nano/secure/ledger.cpp +++ b/nano/secure/ledger.cpp @@ -346,7 +346,8 @@ void ledger_processor::state_block_impl (nano::state_block & block_a) if (result.code == nano::process_result::progress) { nano::block_details block_details (epoch, is_send, is_receive, false); - result.code = block_a.difficulty () >= nano::work_threshold (block_a.work_version (), block_details) ? nano::process_result::progress : nano::process_result::insufficient_work; // Does this block have sufficient work? (Malformed) + nano::network_constants constants; + result.code = block_a.difficulty () >= constants.publish_thresholds.threshold (block_a.work_version (), block_details) ? nano::process_result::progress : nano::process_result::insufficient_work; // Does this block have sufficient work? (Malformed) if (result.code == nano::process_result::progress) { ledger.stats.inc (nano::stat::type::ledger, nano::stat::detail::state_block); @@ -446,7 +447,8 @@ void ledger_processor::epoch_block_impl (nano::state_block & block_a) if (result.code == nano::process_result::progress) { nano::block_details block_details (epoch, false, false, true); - result.code = block_a.difficulty () >= nano::work_threshold (block_a.work_version (), block_details) ? nano::process_result::progress : nano::process_result::insufficient_work; // Does this block have sufficient work? (Malformed) + nano::network_constants constants; + result.code = block_a.difficulty () >= constants.publish_thresholds.threshold (block_a.work_version (), block_details) ? nano::process_result::progress : nano::process_result::insufficient_work; // Does this block have sufficient work? (Malformed) if (result.code == nano::process_result::progress) { ledger.stats.inc (nano::stat::type::ledger, nano::stat::detail::epoch_block); @@ -498,7 +500,8 @@ void ledger_processor::change_block (nano::change_block & block_a) if (result.code == nano::process_result::progress) { nano::block_details block_details (nano::epoch::epoch_0, false /* unused */, false /* unused */, false /* unused */); - result.code = block_a.difficulty () >= nano::work_threshold (block_a.work_version (), block_details) ? nano::process_result::progress : nano::process_result::insufficient_work; // Does this block have sufficient work? (Malformed) + nano::network_constants constants; + result.code = block_a.difficulty () >= constants.publish_thresholds.threshold (block_a.work_version (), block_details) ? nano::process_result::progress : nano::process_result::insufficient_work; // Does this block have sufficient work? (Malformed) if (result.code == nano::process_result::progress) { debug_assert (!validate_message (account, hash, block_a.signature)); @@ -547,7 +550,8 @@ void ledger_processor::send_block (nano::send_block & block_a) if (result.code == nano::process_result::progress) { nano::block_details block_details (nano::epoch::epoch_0, false /* unused */, false /* unused */, false /* unused */); - result.code = block_a.difficulty () >= nano::work_threshold (block_a.work_version (), block_details) ? nano::process_result::progress : nano::process_result::insufficient_work; // Does this block have sufficient work? (Malformed) + nano::network_constants constants; + result.code = block_a.difficulty () >= constants.publish_thresholds.threshold (block_a.work_version (), block_details) ? nano::process_result::progress : nano::process_result::insufficient_work; // Does this block have sufficient work? (Malformed) if (result.code == nano::process_result::progress) { debug_assert (!validate_message (account, hash, block_a.signature)); @@ -624,7 +628,8 @@ void ledger_processor::receive_block (nano::receive_block & block_a) if (result.code == nano::process_result::progress) { nano::block_details block_details (nano::epoch::epoch_0, false /* unused */, false /* unused */, false /* unused */); - result.code = block_a.difficulty () >= nano::work_threshold (block_a.work_version (), block_details) ? nano::process_result::progress : nano::process_result::insufficient_work; // Does this block have sufficient work? (Malformed) + nano::network_constants constants; + result.code = block_a.difficulty () >= constants.publish_thresholds.threshold (block_a.work_version (), block_details) ? nano::process_result::progress : nano::process_result::insufficient_work; // Does this block have sufficient work? (Malformed) if (result.code == nano::process_result::progress) { auto new_balance (info.balance.number () + pending.amount.number ()); @@ -697,7 +702,8 @@ void ledger_processor::open_block (nano::open_block & block_a) if (result.code == nano::process_result::progress) { nano::block_details block_details (nano::epoch::epoch_0, false /* unused */, false /* unused */, false /* unused */); - result.code = block_a.difficulty () >= nano::work_threshold (block_a.work_version (), block_details) ? nano::process_result::progress : nano::process_result::insufficient_work; // Does this block have sufficient work? (Malformed) + nano::network_constants constants; + result.code = block_a.difficulty () >= constants.publish_thresholds.threshold (block_a.work_version (), block_details) ? nano::process_result::progress : nano::process_result::insufficient_work; // Does this block have sufficient work? (Malformed) if (result.code == nano::process_result::progress) { #ifdef NDEBUG diff --git a/nano/slow_test/node.cpp b/nano/slow_test/node.cpp index c48055fbf7..22b5fb9b66 100644 --- a/nano/slow_test/node.cpp +++ b/nano/slow_test/node.cpp @@ -1609,7 +1609,7 @@ TEST (node, mass_epoch_upgrader) .link (info.key.pub) .representative (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*node.work_generate_blocking (latest, nano::work_threshold (nano::work_version::work_1, nano::block_details (nano::epoch::epoch_0, false, false, false)))) + .work (*node.work_generate_blocking (latest, nano::dev::network_params.network.publish_thresholds.threshold (nano::work_version::work_1, nano::block_details (nano::epoch::epoch_0, false, false, false)))) .build (ec); ASSERT_FALSE (ec); ASSERT_NE (nullptr, block); @@ -1633,7 +1633,7 @@ TEST (node, mass_epoch_upgrader) .link (info.pending_hash) .representative (info.key.pub) .sign (info.key.prv, info.key.pub) - .work (*node.work_generate_blocking (info.key.pub, nano::work_threshold (nano::work_version::work_1, nano::block_details (nano::epoch::epoch_0, false, false, false)))) + .work (*node.work_generate_blocking (info.key.pub, nano::dev::network_params.network.publish_thresholds.threshold (nano::work_version::work_1, nano::block_details (nano::epoch::epoch_0, false, false, false)))) .build (ec); ASSERT_FALSE (ec); ASSERT_NE (nullptr, block); @@ -1723,7 +1723,7 @@ TEST (node, mass_block_new) std::vector keys (num_blocks); nano::state_block_builder builder; std::vector> send_blocks; - auto send_threshold (nano::work_threshold (nano::work_version::work_1, nano::block_details (nano::epoch::epoch_2, true, false, false))); + auto send_threshold (nano::dev::network_params.network.publish_thresholds.threshold (nano::work_version::work_1, nano::block_details (nano::epoch::epoch_2, true, false, false))); auto latest_genesis = node.latest (nano::dev::genesis_key.pub); for (auto i = 0; i < num_blocks; ++i) { @@ -1746,7 +1746,7 @@ TEST (node, mass_block_new) std::cout << "Send blocks time: " << timer.stop ().count () << " " << timer.unit () << "\n\n"; std::vector> open_blocks; - auto receive_threshold (nano::work_threshold (nano::work_version::work_1, nano::block_details (nano::epoch::epoch_2, false, true, false))); + auto receive_threshold (nano::dev::network_params.network.publish_thresholds.threshold (nano::work_version::work_1, nano::block_details (nano::epoch::epoch_2, false, true, false))); for (auto i = 0; i < num_blocks; ++i) { auto const & key = keys[i]; diff --git a/nano/test_common/system.cpp b/nano/test_common/system.cpp index b08beb0666..c38af4fb2f 100644 --- a/nano/test_common/system.cpp +++ b/nano/test_common/system.cpp @@ -219,6 +219,7 @@ std::unique_ptr nano::upgrade_epoch (nano::work_pool & pool_a nano::state_block_builder builder; std::error_code ec; + nano::network_constants constants; auto epoch = builder .account (dev_genesis_key.pub) .previous (latest) @@ -226,7 +227,7 @@ std::unique_ptr nano::upgrade_epoch (nano::work_pool & pool_a .link (ledger_a.epoch_link (epoch_a)) .representative (dev_genesis_key.pub) .sign (dev_genesis_key.prv, dev_genesis_key.pub) - .work (*pool_a.generate (latest, nano::work_threshold (nano::work_version::work_1, nano::block_details (epoch_a, false, false, true)))) + .work (*pool_a.generate (latest, constants.publish_thresholds.threshold (nano::work_version::work_1, nano::block_details (epoch_a, false, false, true)))) .build (ec); bool error{ true }; From 8e53b142d61dd272ae9af0b012abb50fb07231a2 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Sun, 8 Aug 2021 22:13:26 +0100 Subject: [PATCH 160/346] Moving multiplier normalization from being a free function in to work_thresholds whre it belongs and to remove static instantiation of network_constants. --- nano/lib/config.cpp | 43 ++++++++++++++++++++++++++++++++++++ nano/lib/config.hpp | 2 ++ nano/lib/work.cpp | 45 -------------------------------------- nano/lib/work.hpp | 3 --- nano/node/json_handler.cpp | 2 +- nano/rpc_test/rpc.cpp | 2 +- 6 files changed, 47 insertions(+), 50 deletions(-) diff --git a/nano/lib/config.cpp b/nano/lib/config.cpp index 84f8f39e54..05c6370e6c 100644 --- a/nano/lib/config.cpp +++ b/nano/lib/config.cpp @@ -123,6 +123,49 @@ uint64_t nano::work_thresholds::threshold (nano::work_version const version_a, n return result; } +double nano::work_thresholds::normalized_multiplier (double const multiplier_a, uint64_t const threshold_a) +{ + debug_assert (multiplier_a >= 1); + auto multiplier (multiplier_a); + /* Normalization rules + ratio = multiplier of max work threshold (send epoch 2) from given threshold + i.e. max = 0xfe00000000000000, given = 0xf000000000000000, ratio = 8.0 + normalized = (multiplier + (ratio - 1)) / ratio; + Epoch 1 + multiplier | normalized + 1.0 | 1.0 + 9.0 | 2.0 + 25.0 | 4.0 + Epoch 2 (receive / epoch subtypes) + multiplier | normalized + 1.0 | 1.0 + 65.0 | 2.0 + 241.0 | 4.0 + */ + if (threshold_a == epoch_1 || threshold_a == epoch_2_receive) + { + auto ratio (nano::difficulty::to_multiplier (epoch_2, threshold_a)); + debug_assert (ratio >= 1); + multiplier = (multiplier + (ratio - 1.0)) / ratio; + debug_assert (multiplier >= 1); + } + return multiplier; +} + +double nano::work_thresholds::denormalized_multiplier (double const multiplier_a, uint64_t const threshold_a) +{ + debug_assert (multiplier_a >= 1); + auto multiplier (multiplier_a); + if (threshold_a == epoch_1 || threshold_a == epoch_2_receive) + { + auto ratio (nano::difficulty::to_multiplier (epoch_2, threshold_a)); + debug_assert (ratio >= 1); + multiplier = multiplier * ratio + 1.0 - ratio; + debug_assert (multiplier >= 1); + } + return multiplier; +} + namespace nano { const char * network_constants::active_network_err_msg = "Invalid network. Valid values are live, test, beta and dev."; diff --git a/nano/lib/config.hpp b/nano/lib/config.hpp index 69c96d01de..53c6a59211 100644 --- a/nano/lib/config.hpp +++ b/nano/lib/config.hpp @@ -115,6 +115,8 @@ class work_thresholds uint64_t threshold (nano::block_details const &); // Ledger threshold uint64_t threshold (nano::work_version const, nano::block_details const); + double normalized_multiplier (double const, uint64_t const); + double denormalized_multiplier (double const, uint64_t const); /** Network work thresholds. Define these inline as constexpr when moving to cpp17. */ static const nano::work_thresholds publish_full; diff --git a/nano/lib/work.cpp b/nano/lib/work.cpp index 0873fc4c7d..7c290dd3e1 100644 --- a/nano/lib/work.cpp +++ b/nano/lib/work.cpp @@ -64,51 +64,6 @@ uint64_t nano::work_threshold_base (nano::work_version const version_a) return result; } -double nano::normalized_multiplier (double const multiplier_a, uint64_t const threshold_a) -{ - static nano::network_constants network_constants; - debug_assert (multiplier_a >= 1); - auto multiplier (multiplier_a); - /* Normalization rules - ratio = multiplier of max work threshold (send epoch 2) from given threshold - i.e. max = 0xfe00000000000000, given = 0xf000000000000000, ratio = 8.0 - normalized = (multiplier + (ratio - 1)) / ratio; - Epoch 1 - multiplier | normalized - 1.0 | 1.0 - 9.0 | 2.0 - 25.0 | 4.0 - Epoch 2 (receive / epoch subtypes) - multiplier | normalized - 1.0 | 1.0 - 65.0 | 2.0 - 241.0 | 4.0 - */ - if (threshold_a == network_constants.publish_thresholds.epoch_1 || threshold_a == network_constants.publish_thresholds.epoch_2_receive) - { - auto ratio (nano::difficulty::to_multiplier (network_constants.publish_thresholds.epoch_2, threshold_a)); - debug_assert (ratio >= 1); - multiplier = (multiplier + (ratio - 1.0)) / ratio; - debug_assert (multiplier >= 1); - } - return multiplier; -} - -double nano::denormalized_multiplier (double const multiplier_a, uint64_t const threshold_a) -{ - static nano::network_constants network_constants; - debug_assert (multiplier_a >= 1); - auto multiplier (multiplier_a); - if (threshold_a == network_constants.publish_thresholds.epoch_1 || threshold_a == network_constants.publish_thresholds.epoch_2_receive) - { - auto ratio (nano::difficulty::to_multiplier (network_constants.publish_thresholds.epoch_2, threshold_a)); - debug_assert (ratio >= 1); - multiplier = multiplier * ratio + 1.0 - ratio; - debug_assert (multiplier >= 1); - } - return multiplier; -} - nano::work_pool::work_pool (nano::network_constants & network_constants, unsigned max_threads_a, std::chrono::nanoseconds pow_rate_limiter_a, std::function (nano::work_version const, nano::root const &, uint64_t, std::atomic &)> opencl_a) : network_constants{ network_constants }, ticket (0), diff --git a/nano/lib/work.hpp b/nano/lib/work.hpp index 0d87836306..aca28c688c 100644 --- a/nano/lib/work.hpp +++ b/nano/lib/work.hpp @@ -24,9 +24,6 @@ bool work_validate_entry (nano::work_version const, nano::root const &, uint64_t uint64_t work_difficulty (nano::work_version const, nano::root const &, uint64_t const); uint64_t work_threshold_base (nano::work_version const); - -double normalized_multiplier (double const, uint64_t const); -double denormalized_multiplier (double const, uint64_t const); class opencl_work; class work_item final { diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index 6dbf81a03c..25ce790162 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -1027,7 +1027,7 @@ void nano::json_handler::active_difficulty () auto const multiplier_active = 1.0; auto const default_difficulty (node.default_difficulty (nano::work_version::work_1)); auto const default_receive_difficulty (node.default_receive_difficulty (nano::work_version::work_1)); - auto const receive_current_denormalized (nano::denormalized_multiplier (multiplier_active, node.network_params.network.publish_thresholds.epoch_2_receive)); + auto const receive_current_denormalized (node.network_params.network.publish_thresholds.denormalized_multiplier (multiplier_active, node.network_params.network.publish_thresholds.epoch_2_receive)); response_l.put ("deprecated", "1"); response_l.put ("network_minimum", nano::to_string_hex (default_difficulty)); response_l.put ("network_receive_minimum", nano::to_string_hex (default_receive_difficulty)); diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index 948d0c1161..0580191f9b 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -5474,7 +5474,7 @@ TEST (rpc, active_difficulty) uint64_t network_receive_current; ASSERT_FALSE (nano::from_string_hex (network_receive_current_text, network_receive_current)); auto network_receive_current_multiplier (nano::difficulty::to_multiplier (network_receive_current, network_receive_minimum)); - auto network_receive_current_normalized_multiplier (nano::normalized_multiplier (network_receive_current_multiplier, network_receive_minimum)); + auto network_receive_current_normalized_multiplier (nano::dev::network_params.network.publish_thresholds.normalized_multiplier (network_receive_current_multiplier, network_receive_minimum)); ASSERT_NEAR (network_receive_current_normalized_multiplier, multiplier, 1e-6); ASSERT_EQ (response.not_found (), response.find ("difficulty_trend")); } From 3d71605cfdb627977c4bdf6d38b8cd35c30d9fb8 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Sun, 8 Aug 2021 23:20:17 +0100 Subject: [PATCH 161/346] Moving work_threshold_base from a free function to a member of work_thresholds. --- nano/core_test/difficulty.cpp | 2 +- nano/core_test/fakes/work_peer.hpp | 5 +++-- nano/core_test/work_pool.cpp | 6 +++--- nano/lib/config.cpp | 14 ++++++++++++++ nano/lib/config.hpp | 3 ++- nano/lib/work.cpp | 15 --------------- nano/lib/work.hpp | 1 - nano/node/node.cpp | 3 ++- nano/rpc_test/rpc.cpp | 6 +++--- 9 files changed, 28 insertions(+), 27 deletions(-) diff --git a/nano/core_test/difficulty.cpp b/nano/core_test/difficulty.cpp index ab44a59dee..9f2fe0d945 100644 --- a/nano/core_test/difficulty.cpp +++ b/nano/core_test/difficulty.cpp @@ -129,7 +129,7 @@ TEST (difficulty, network_constants) nano::work_version version{ nano::work_version::work_1 }; ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.base, nano::dev::network_params.network.publish_thresholds.epoch_2); - ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.base, nano::work_threshold_base (version)); + ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.base, nano::dev::network_params.network.publish_thresholds.threshold_base (version)); ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.entry, nano::dev::network_params.network.publish_thresholds.threshold_entry (version, nano::block_type::state)); ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_1, nano::dev::network_params.network.publish_thresholds.threshold_entry (version, nano::block_type::send)); ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_1, nano::dev::network_params.network.publish_thresholds.threshold_entry (version, nano::block_type::receive)); diff --git a/nano/core_test/fakes/work_peer.hpp b/nano/core_test/fakes/work_peer.hpp index 0345266943..4e03504e05 100644 --- a/nano/core_test/fakes/work_peer.hpp +++ b/nano/core_test/fakes/work_peer.hpp @@ -138,10 +138,11 @@ class work_peer_connection : public std::enable_shared_from_this work_a) { auto result = work_a.value_or (0); @@ -149,7 +150,7 @@ class work_peer_connection : public std::enable_shared_from_thisversion)))); + message_l.put ("multiplier", nano::to_string (nano::difficulty::to_multiplier (result_difficulty, constants.publish_thresholds.threshold_base (this_l->version)))); message_l.put ("hash", hash.to_string ()); std::stringstream ostream; ptree::write_json (ostream, message_l); diff --git a/nano/core_test/work_pool.cpp b/nano/core_test/work_pool.cpp index c7f7ed2246..223288735a 100644 --- a/nano/core_test/work_pool.cpp +++ b/nano/core_test/work_pool.cpp @@ -19,7 +19,7 @@ TEST (work, one) nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::change_block block (1, 1, nano::keypair ().prv, 3, 4); block.block_work_set (*pool.generate (block.root ())); - ASSERT_LT (nano::work_threshold_base (block.work_version ()), block.difficulty ()); + ASSERT_LT (nano::dev::network_params.network.publish_thresholds.threshold_base (block.work_version ()), block.difficulty ()); } TEST (work, disabled) @@ -33,9 +33,9 @@ TEST (work, validate) { nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::send_block send_block (1, 1, 2, nano::keypair ().prv, 4, 6); - ASSERT_LT (send_block.difficulty (), nano::work_threshold_base (send_block.work_version ())); + ASSERT_LT (send_block.difficulty (), nano::dev::network_params.network.publish_thresholds.threshold_base (send_block.work_version ())); send_block.block_work_set (*pool.generate (send_block.root ())); - ASSERT_LT (nano::work_threshold_base (send_block.work_version ()), send_block.difficulty ()); + ASSERT_LT (nano::dev::network_params.network.publish_thresholds.threshold_base (send_block.work_version ()), send_block.difficulty ()); } TEST (work, cancel) diff --git a/nano/lib/config.cpp b/nano/lib/config.cpp index 05c6370e6c..ca7e95a738 100644 --- a/nano/lib/config.cpp +++ b/nano/lib/config.cpp @@ -166,6 +166,20 @@ double nano::work_thresholds::denormalized_multiplier (double const multiplier_a return multiplier; } +uint64_t nano::work_thresholds::threshold_base (nano::work_version const version_a) +{ + uint64_t result{ std::numeric_limits::max () }; + switch (version_a) + { + case nano::work_version::work_1: + result = base; + break; + default: + debug_assert (false && "Invalid version specified to work_threshold_base"); + } + return result; +} + namespace nano { const char * network_constants::active_network_err_msg = "Invalid network. Valid values are live, test, beta and dev."; diff --git a/nano/lib/config.hpp b/nano/lib/config.hpp index 53c6a59211..50cea18c38 100644 --- a/nano/lib/config.hpp +++ b/nano/lib/config.hpp @@ -111,10 +111,11 @@ class work_thresholds } uint64_t threshold_entry (nano::work_version const, nano::block_type const); - uint64_t value (nano::root const & root_a, uint64_t work_a); uint64_t threshold (nano::block_details const &); // Ledger threshold uint64_t threshold (nano::work_version const, nano::block_details const); + uint64_t threshold_base (nano::work_version const); + uint64_t value (nano::root const & root_a, uint64_t work_a); double normalized_multiplier (double const, uint64_t const); double denormalized_multiplier (double const, uint64_t const); diff --git a/nano/lib/work.cpp b/nano/lib/work.cpp index 7c290dd3e1..0fcd752438 100644 --- a/nano/lib/work.cpp +++ b/nano/lib/work.cpp @@ -49,21 +49,6 @@ uint64_t nano::work_difficulty (nano::work_version const version_a, nano::root c return result; } -uint64_t nano::work_threshold_base (nano::work_version const version_a) -{ - uint64_t result{ std::numeric_limits::max () }; - switch (version_a) - { - case nano::work_version::work_1: - static nano::network_constants network_constants; - result = network_constants.publish_thresholds.base; - break; - default: - debug_assert (false && "Invalid version specified to work_threshold_base"); - } - return result; -} - nano::work_pool::work_pool (nano::network_constants & network_constants, unsigned max_threads_a, std::chrono::nanoseconds pow_rate_limiter_a, std::function (nano::work_version const, nano::root const &, uint64_t, std::atomic &)> opencl_a) : network_constants{ network_constants }, ticket (0), diff --git a/nano/lib/work.hpp b/nano/lib/work.hpp index aca28c688c..7b3599de14 100644 --- a/nano/lib/work.hpp +++ b/nano/lib/work.hpp @@ -23,7 +23,6 @@ bool work_validate_entry (nano::work_version const, nano::root const &, uint64_t uint64_t work_difficulty (nano::work_version const, nano::root const &, uint64_t const); -uint64_t work_threshold_base (nano::work_version const); class opencl_work; class work_item final { diff --git a/nano/node/node.cpp b/nano/node/node.cpp index f50e1e98fd..9e6a75be0c 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -1110,11 +1110,12 @@ int nano::node::price (nano::uint128_t const & balance_a, int amount_a) uint64_t nano::node::default_difficulty (nano::work_version const version_a) const { + nano::network_constants constants; uint64_t result{ std::numeric_limits::max () }; switch (version_a) { case nano::work_version::work_1: - result = nano::work_threshold_base (version_a); + result = constants.publish_thresholds.threshold_base (version_a); break; default: debug_assert (false && "Invalid version specified to default_difficulty"); diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index 0580191f9b..985ecdbefd 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -2215,7 +2215,7 @@ TEST (rpc, work_peer_bad) ASSERT_TRUE (work_a.is_initialized ()); work = *work_a; }); - ASSERT_TIMELY (5s, nano::work_difficulty (nano::work_version::work_1, hash1, work) >= nano::work_threshold_base (nano::work_version::work_1)); + ASSERT_TIMELY (5s, nano::work_difficulty (nano::work_version::work_1, hash1, work) >= nano::dev::network_params.network.publish_thresholds.threshold_base (nano::work_version::work_1)); } TEST (rpc, work_peer_one) @@ -2231,7 +2231,7 @@ TEST (rpc, work_peer_one) ASSERT_TRUE (work_a.is_initialized ()); work = *work_a; }); - ASSERT_TIMELY (5s, nano::work_difficulty (nano::work_version::work_1, key1.pub, work) >= nano::work_threshold_base (nano::work_version::work_1)); + ASSERT_TIMELY (5s, nano::work_difficulty (nano::work_version::work_1, key1.pub, work) >= nano::dev::network_params.network.publish_thresholds.threshold_base (nano::work_version::work_1)); } TEST (rpc, work_peer_many) @@ -2258,7 +2258,7 @@ TEST (rpc, work_peer_many) node1.work_generate (nano::work_version::work_1, key1.pub, node1.network_params.network.publish_thresholds.base, [&work = works[i]] (boost::optional work_a) { work = *work_a; }); - while (nano::work_difficulty (nano::work_version::work_1, key1.pub, works[i]) < nano::work_threshold_base (nano::work_version::work_1)) + while (nano::work_difficulty (nano::work_version::work_1, key1.pub, works[i]) < nano::dev::network_params.network.publish_thresholds.threshold_base (nano::work_version::work_1)) { system1.poll (); system2.poll (); From 243a4d93dd4048e45dd4be9dfe502eb6d80c23b8 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Sun, 8 Aug 2021 23:55:00 +0100 Subject: [PATCH 162/346] Moving work_difficulty free function on to work_thresholds class. --- nano/core_test/block.cpp | 2 +- nano/core_test/distributed_work.cpp | 10 +++++----- nano/core_test/fakes/work_peer.hpp | 3 ++- nano/core_test/node.cpp | 8 ++++---- nano/core_test/system.cpp | 2 +- nano/core_test/wallet.cpp | 8 ++++---- nano/core_test/work_pool.cpp | 8 ++++---- nano/lib/blocks.cpp | 3 ++- nano/lib/config.cpp | 14 ++++++++++++++ nano/lib/config.hpp | 1 + nano/lib/work.cpp | 17 +---------------- nano/lib/work.hpp | 2 -- nano/node/distributed_work.cpp | 2 +- nano/node/json_handler.cpp | 10 +++++----- nano/node/openclwork.cpp | 3 ++- nano/node/websocket.cpp | 2 +- nano/qt_test/qt.cpp | 2 +- nano/rpc_test/rpc.cpp | 22 +++++++++++----------- nano/test_common/system.cpp | 5 +++-- 19 files changed, 63 insertions(+), 61 deletions(-) diff --git a/nano/core_test/block.cpp b/nano/core_test/block.cpp index 832757989d..ead77f0ced 100644 --- a/nano/core_test/block.cpp +++ b/nano/core_test/block.cpp @@ -312,7 +312,7 @@ TEST (block, publish_req_serialization) TEST (block, difficulty) { nano::send_block block (0, 1, 2, nano::keypair ().prv, 4, 5); - ASSERT_EQ (block.difficulty (), nano::work_difficulty (block.work_version (), block.root (), block.block_work ())); + ASSERT_EQ (block.difficulty (), nano::dev::network_params.network.publish_thresholds.difficulty (block.work_version (), block.root (), block.block_work ())); } TEST (state_block, serialization) diff --git a/nano/core_test/distributed_work.cpp b/nano/core_test/distributed_work.cpp index 9cf30333cc..8c3a67011c 100644 --- a/nano/core_test/distributed_work.cpp +++ b/nano/core_test/distributed_work.cpp @@ -27,7 +27,7 @@ TEST (distributed_work, no_peers) }; ASSERT_FALSE (node->distributed_work.make (nano::work_version::work_1, hash, node->config.work_peers, node->network_params.network.publish_thresholds.base, callback, nano::account ())); ASSERT_TIMELY (5s, done); - ASSERT_GE (nano::work_difficulty (nano::work_version::work_1, hash, *work), node->network_params.network.publish_thresholds.base); + ASSERT_GE (nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, hash, *work), node->network_params.network.publish_thresholds.base); // should only be removed after cleanup ASSERT_EQ (1, node->distributed_work.size ()); while (node->distributed_work.size () > 0) @@ -138,7 +138,7 @@ TEST (distributed_work, peer) peers.emplace_back ("::ffff:127.0.0.1", work_peer->port ()); ASSERT_FALSE (node->distributed_work.make (nano::work_version::work_1, hash, peers, node->network_params.network.publish_thresholds.base, callback, nano::account ())); ASSERT_TIMELY (5s, done); - ASSERT_GE (nano::work_difficulty (nano::work_version::work_1, hash, *work), node->network_params.network.publish_thresholds.base); + ASSERT_GE (nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, hash, *work), node->network_params.network.publish_thresholds.base); ASSERT_EQ (1, work_peer->generations_good); ASSERT_EQ (0, work_peer->generations_bad); ASSERT_NO_ERROR (system.poll ()); @@ -164,7 +164,7 @@ TEST (distributed_work, peer_malicious) peers.emplace_back ("::ffff:127.0.0.1", malicious_peer->port ()); ASSERT_FALSE (node->distributed_work.make (nano::work_version::work_1, hash, peers, node->network_params.network.publish_thresholds.base, callback, nano::account ())); ASSERT_TIMELY (5s, done); - ASSERT_GE (nano::work_difficulty (nano::work_version::work_1, hash, *work), node->network_params.network.publish_thresholds.base); + ASSERT_GE (nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, hash, *work), node->network_params.network.publish_thresholds.base); ASSERT_TIMELY (5s, malicious_peer->generations_bad >= 1); // make sure it was *not* the malicious peer that replied ASSERT_EQ (0, malicious_peer->generations_good); @@ -210,7 +210,7 @@ TEST (distributed_work, peer_multi) peers.emplace_back ("localhost", good_peer->port ()); ASSERT_FALSE (node->distributed_work.make (nano::work_version::work_1, hash, peers, node->network_params.network.publish_thresholds.base, callback, nano::account ())); ASSERT_TIMELY (5s, done); - ASSERT_GE (nano::work_difficulty (nano::work_version::work_1, hash, *work), node->network_params.network.publish_thresholds.base); + ASSERT_GE (nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, hash, *work), node->network_params.network.publish_thresholds.base); ASSERT_TIMELY (5s, slow_peer->cancels == 1); ASSERT_EQ (0, malicious_peer->generations_good); ASSERT_EQ (1, malicious_peer->generations_bad); @@ -241,5 +241,5 @@ TEST (distributed_work, fail_resolve) peers.emplace_back ("beeb.boop.123z", 0); ASSERT_FALSE (node->distributed_work.make (nano::work_version::work_1, hash, peers, node->network_params.network.publish_thresholds.base, callback, nano::account ())); ASSERT_TIMELY (5s, done); - ASSERT_GE (nano::work_difficulty (nano::work_version::work_1, hash, *work), node->network_params.network.publish_thresholds.base); + ASSERT_GE (nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, hash, *work), node->network_params.network.publish_thresholds.base); } diff --git a/nano/core_test/fakes/work_peer.hpp b/nano/core_test/fakes/work_peer.hpp index 4e03504e05..82a64e97c5 100644 --- a/nano/core_test/fakes/work_peer.hpp +++ b/nano/core_test/fakes/work_peer.hpp @@ -146,7 +146,8 @@ class work_peer_connection : public std::enable_shared_from_this work_a) { auto result = work_a.value_or (0); - auto result_difficulty (nano::work_difficulty (this_l->version, hash, result)); + static nano::network_constants constants; + auto result_difficulty (constants.publish_thresholds.difficulty (this_l->version, hash, result)); ptree::ptree message_l; message_l.put ("work", nano::to_string_hex (result)); message_l.put ("difficulty", nano::to_string_hex (result_difficulty)); diff --git a/nano/core_test/node.cpp b/nano/core_test/node.cpp index d69f1e18c5..8a03fa97ff 100644 --- a/nano/core_test/node.cpp +++ b/nano/core_test/node.cpp @@ -39,7 +39,7 @@ TEST (node, work_generate) auto difficulty = nano::difficulty::from_multiplier (1.5, node.network_params.network.publish_thresholds.base); auto work = node.work_generate_blocking (version, root, difficulty); ASSERT_TRUE (work.is_initialized ()); - ASSERT_TRUE (nano::work_difficulty (version, root, *work) >= difficulty); + ASSERT_TRUE (nano::dev::network_params.network.publish_thresholds.difficulty (version, root, *work) >= difficulty); } { auto difficulty = nano::difficulty::from_multiplier (0.5, node.network_params.network.publish_thresholds.base); @@ -47,10 +47,10 @@ TEST (node, work_generate) do { work = node.work_generate_blocking (version, root, difficulty); - } while (nano::work_difficulty (version, root, *work) >= node.network_params.network.publish_thresholds.base); + } while (nano::dev::network_params.network.publish_thresholds.difficulty (version, root, *work) >= node.network_params.network.publish_thresholds.base); ASSERT_TRUE (work.is_initialized ()); - ASSERT_TRUE (nano::work_difficulty (version, root, *work) >= difficulty); - ASSERT_FALSE (nano::work_difficulty (version, root, *work) >= node.network_params.network.publish_thresholds.base); + ASSERT_TRUE (nano::dev::network_params.network.publish_thresholds.difficulty (version, root, *work) >= difficulty); + ASSERT_FALSE (nano::dev::network_params.network.publish_thresholds.difficulty (version, root, *work) >= node.network_params.network.publish_thresholds.base); } } diff --git a/nano/core_test/system.cpp b/nano/core_test/system.cpp index 7ea6dd7df0..c084d95531 100644 --- a/nano/core_test/system.cpp +++ b/nano/core_test/system.cpp @@ -15,7 +15,7 @@ TEST (system, work_generate_limited) for (int i = 0; i < 5; ++i) { auto work = system.work_generate_limited (key, min, max); - auto difficulty = nano::work_difficulty (nano::work_version::work_1, key, work); + auto difficulty = nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, key, work); ASSERT_GE (difficulty, min); ASSERT_LT (difficulty, max); } diff --git a/nano/core_test/wallet.cpp b/nano/core_test/wallet.cpp index 0548e7b73a..0c0a463e1b 100644 --- a/nano/core_test/wallet.cpp +++ b/nano/core_test/wallet.cpp @@ -645,7 +645,7 @@ TEST (wallet, work) uint64_t work (0); if (!wallet->store.work_get (transaction, nano::dev::genesis_key.pub, work)) { - done = nano::work_difficulty (nano::dev::genesis->work_version (), nano::dev::genesis->hash (), work) >= system.nodes[0]->default_difficulty (nano::dev::genesis->work_version ()); + done = nano::dev::network_params.network.publish_thresholds.difficulty (nano::dev::genesis->work_version (), nano::dev::genesis->hash (), work) >= system.nodes[0]->default_difficulty (nano::dev::genesis->work_version ()); } ASSERT_NO_ERROR (system.poll ()); } @@ -675,7 +675,7 @@ TEST (wallet, work_generate) ASSERT_NO_ERROR (system.poll ()); auto block_transaction (node1.store.tx_begin_read ()); auto transaction (system.wallet (0)->wallets.tx_begin_read ()); - again = wallet->store.work_get (transaction, account1, work1) || nano::work_difficulty (block->work_version (), node1.ledger.latest_root (block_transaction, account1), work1) < node1.default_difficulty (block->work_version ()); + again = wallet->store.work_get (transaction, account1, work1) || nano::dev::network_params.network.publish_thresholds.difficulty (block->work_version (), node1.ledger.latest_root (block_transaction, account1), work1) < node1.default_difficulty (block->work_version ()); } } @@ -705,10 +705,10 @@ TEST (wallet, work_cache_delayed) ASSERT_NO_ERROR (system.poll ()); if (!wallet->store.work_get (node1.wallets.tx_begin_read (), account1, work1)) { - again = nano::work_difficulty (nano::work_version::work_1, block2->hash (), work1) < threshold; + again = nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, block2->hash (), work1) < threshold; } } - ASSERT_GE (nano::work_difficulty (nano::work_version::work_1, block2->hash (), work1), threshold); + ASSERT_GE (nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, block2->hash (), work1), threshold); } TEST (wallet, insert_locked) diff --git a/nano/core_test/work_pool.cpp b/nano/core_test/work_pool.cpp index 223288735a..6c18ac486c 100644 --- a/nano/core_test/work_pool.cpp +++ b/nano/core_test/work_pool.cpp @@ -100,7 +100,7 @@ TEST (work, opencl) { nano::random_pool::generate_block (root.bytes.data (), root.bytes.size ()); auto result (*pool.generate (nano::work_version::work_1, root, difficulty)); - ASSERT_GE (nano::work_difficulty (nano::work_version::work_1, root, result), difficulty); + ASSERT_GE (nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, root, result), difficulty); difficulty += difficulty_add; } } @@ -141,14 +141,14 @@ TEST (work, difficulty) do { auto work1 = *pool.generate (nano::work_version::work_1, root, difficulty1); - result_difficulty1 = nano::work_difficulty (nano::work_version::work_1, root, work1); + result_difficulty1 = nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, root, work1); } while (result_difficulty1 > difficulty2); ASSERT_GT (result_difficulty1, difficulty1); uint64_t result_difficulty2 (0); do { auto work2 = *pool.generate (nano::work_version::work_1, root, difficulty2); - result_difficulty2 = nano::work_difficulty (nano::work_version::work_1, root, work2); + result_difficulty2 = nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, root, work2); } while (result_difficulty2 > difficulty3); ASSERT_GT (result_difficulty2, difficulty2); } @@ -170,7 +170,7 @@ TEST (work, eco_pow) do { auto work = *pool.generate (nano::work_version::work_1, root, difficulty1); - result_difficulty = nano::work_difficulty (nano::work_version::work_1, root, work); + result_difficulty = nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, root, work); } while (result_difficulty > difficulty2); ASSERT_GT (result_difficulty, difficulty1); } diff --git a/nano/lib/blocks.cpp b/nano/lib/blocks.cpp index 4515b78d07..b803bfa255 100644 --- a/nano/lib/blocks.cpp +++ b/nano/lib/blocks.cpp @@ -85,7 +85,8 @@ nano::work_version nano::block::work_version () const uint64_t nano::block::difficulty () const { - return nano::work_difficulty (this->work_version (), this->root (), this->block_work ()); + static nano::network_constants constants; + return constants.publish_thresholds.difficulty (this->work_version (), this->root (), this->block_work ()); } nano::block_hash nano::block::generate_hash () const diff --git a/nano/lib/config.cpp b/nano/lib/config.cpp index ca7e95a738..2470d457f8 100644 --- a/nano/lib/config.cpp +++ b/nano/lib/config.cpp @@ -180,6 +180,20 @@ uint64_t nano::work_thresholds::threshold_base (nano::work_version const version return result; } +uint64_t nano::work_thresholds::difficulty (nano::work_version const version_a, nano::root const & root_a, uint64_t const work_a) +{ + uint64_t result{ 0 }; + switch (version_a) + { + case nano::work_version::work_1: + result = value (root_a, work_a); + break; + default: + debug_assert (false && "Invalid version specified to work_difficulty"); + } + return result; +} + namespace nano { const char * network_constants::active_network_err_msg = "Invalid network. Valid values are live, test, beta and dev."; diff --git a/nano/lib/config.hpp b/nano/lib/config.hpp index 50cea18c38..2629bd0be3 100644 --- a/nano/lib/config.hpp +++ b/nano/lib/config.hpp @@ -118,6 +118,7 @@ class work_thresholds uint64_t value (nano::root const & root_a, uint64_t work_a); double normalized_multiplier (double const, uint64_t const); double denormalized_multiplier (double const, uint64_t const); + uint64_t difficulty (nano::work_version const, nano::root const &, uint64_t const); /** Network work thresholds. Define these inline as constexpr when moving to cpp17. */ static const nano::work_thresholds publish_full; diff --git a/nano/lib/work.cpp b/nano/lib/work.cpp index 0fcd752438..c507997283 100644 --- a/nano/lib/work.cpp +++ b/nano/lib/work.cpp @@ -31,22 +31,7 @@ bool nano::work_validate_entry (nano::block const & block_a) bool nano::work_validate_entry (nano::work_version const version_a, nano::root const & root_a, uint64_t const work_a) { static nano::network_constants network_constants; - return nano::work_difficulty (version_a, root_a, work_a) < network_constants.publish_thresholds.threshold_entry (version_a, nano::block_type::state); -} - -uint64_t nano::work_difficulty (nano::work_version const version_a, nano::root const & root_a, uint64_t const work_a) -{ - static nano::network_constants network_constants; - uint64_t result{ 0 }; - switch (version_a) - { - case nano::work_version::work_1: - result = network_constants.publish_thresholds.value (root_a, work_a); - break; - default: - debug_assert (false && "Invalid version specified to work_difficulty"); - } - return result; + return network_constants.publish_thresholds.difficulty (version_a, root_a, work_a) < network_constants.publish_thresholds.threshold_entry (version_a, nano::block_type::state); } nano::work_pool::work_pool (nano::network_constants & network_constants, unsigned max_threads_a, std::chrono::nanoseconds pow_rate_limiter_a, std::function (nano::work_version const, nano::root const &, uint64_t, std::atomic &)> opencl_a) : diff --git a/nano/lib/work.hpp b/nano/lib/work.hpp index 7b3599de14..d97c9b2038 100644 --- a/nano/lib/work.hpp +++ b/nano/lib/work.hpp @@ -21,8 +21,6 @@ enum class block_type : uint8_t; bool work_validate_entry (nano::block const &); bool work_validate_entry (nano::work_version const, nano::root const &, uint64_t const); -uint64_t work_difficulty (nano::work_version const, nano::root const &, uint64_t const); - class opencl_work; class work_item final { diff --git a/nano/node/distributed_work.cpp b/nano/node/distributed_work.cpp index 540459d66d..f06ef17eb3 100644 --- a/nano/node/distributed_work.cpp +++ b/nano/node/distributed_work.cpp @@ -239,7 +239,7 @@ void nano::distributed_work::success (std::string const & body_a, nano::tcp_endp uint64_t work; if (!nano::from_string_hex (work_text, work)) { - if (nano::work_difficulty (request.version, request.root, work) >= request.difficulty) + if (nano::dev::network_params.network.publish_thresholds.difficulty (request.version, request.root, work) >= request.difficulty) { error = false; node.unresponsive_work_peers = false; diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index 25ce790162..068ce8519c 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -829,7 +829,7 @@ void nano::json_handler::account_representative_set () if (!rpc_l->ec) { nano::block_details details (info.epoch (), false, false, false); - if (nano::work_difficulty (nano::work_version::work_1, info.head, work) < rpc_l->node.network_params.network.publish_thresholds.threshold (nano::work_version::work_1, details)) + if (rpc_l->node.network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, info.head, work) < rpc_l->node.network_params.network.publish_thresholds.threshold (nano::work_version::work_1, details)) { rpc_l->ec = nano::error_common::invalid_work; } @@ -3284,7 +3284,7 @@ void nano::json_handler::receive () head = account; } nano::block_details details (epoch, false, true, false); - if (nano::work_difficulty (nano::work_version::work_1, head, work) < node.network_params.network.publish_thresholds.threshold (nano::work_version::work_1, details)) + if (node.network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, head, work) < node.network_params.network.publish_thresholds.threshold (nano::work_version::work_1, details)) { ec = nano::error_common::invalid_work; } @@ -3628,7 +3628,7 @@ void nano::json_handler::send () if (!ec && work) { nano::block_details details (info.epoch (), true, false, false); - if (nano::work_difficulty (nano::work_version::work_1, info.head, work) < node.network_params.network.publish_thresholds.threshold (nano::work_version::work_1, details)) + if (node.network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, info.head, work) < node.network_params.network.publish_thresholds.threshold (nano::work_version::work_1, details)) { ec = nano::error_common::invalid_work; } @@ -4919,7 +4919,7 @@ void nano::json_handler::work_generate () uint64_t work (work_a.value ()); response_l.put ("work", nano::to_string_hex (work)); std::stringstream ostream; - auto result_difficulty (nano::work_difficulty (work_version, hash, work)); + auto result_difficulty (rpc_l->node.network_params.network.publish_thresholds.difficulty (work_version, hash, work)); response_l.put ("difficulty", nano::to_string_hex (result_difficulty)); auto result_multiplier = nano::difficulty::to_multiplier (result_difficulty, node.default_difficulty (work_version)); response_l.put ("multiplier", nano::to_string (result_multiplier)); @@ -5045,7 +5045,7 @@ void nano::json_handler::work_validate () * * valid_receive: the work is valid for a receive block in an epoch_2 upgraded account */ - auto result_difficulty (nano::work_difficulty (work_version, hash, work)); + auto result_difficulty (node.network_params.network.publish_thresholds.difficulty (work_version, hash, work)); if (request.count ("difficulty")) { response_l.put ("valid", (result_difficulty >= difficulty) ? "1" : "0"); diff --git a/nano/node/openclwork.cpp b/nano/node/openclwork.cpp index 755c476a0b..48a3ed8d21 100644 --- a/nano/node/openclwork.cpp +++ b/nano/node/openclwork.cpp @@ -455,7 +455,8 @@ boost::optional nano::opencl_work::generate_work (nano::work_version c uint64_t result (0); unsigned thread_count (config.threads); size_t work_size[] = { thread_count, 0, 0 }; - while (nano::work_difficulty (version_a, root_a, result) < difficulty_a && !error && ticket_a == ticket_l) + static nano::network_constants constants; + while (constants.publish_thresholds.difficulty (version_a, root_a, result) < difficulty_a && !error && ticket_a == ticket_l) { result = rand.next (); cl_int write_error1 = clEnqueueWriteBuffer (queue, attempt_buffer, false, 0, sizeof (uint64_t), &result, 0, nullptr, nullptr); diff --git a/nano/node/websocket.cpp b/nano/node/websocket.cpp index 84d701b6d7..f99f7f2dac 100644 --- a/nano/node/websocket.cpp +++ b/nano/node/websocket.cpp @@ -809,7 +809,7 @@ nano::websocket::message nano::websocket::message_builder::work_generation (nano boost::property_tree::ptree result_l; result_l.put ("source", peer_a); result_l.put ("work", nano::to_string_hex (work_a)); - auto result_difficulty_l (nano::work_difficulty (version_a, root_a, work_a)); + auto result_difficulty_l (nano::dev::network_params.network.publish_thresholds.difficulty (version_a, root_a, work_a)); result_l.put ("difficulty", nano::to_string_hex (result_difficulty_l)); auto result_multiplier_l (nano::difficulty::to_multiplier (result_difficulty_l, publish_threshold_a)); result_l.put ("multiplier", nano::to_string (result_multiplier_l)); diff --git a/nano/qt_test/qt.cpp b/nano/qt_test/qt.cpp index bbadd1ca15..33b1acc617 100644 --- a/nano/qt_test/qt.cpp +++ b/nano/qt_test/qt.cpp @@ -835,7 +835,7 @@ TEST (wallet, seed_work_generation) ASSERT_NO_ERROR (ec); } auto transaction (system.nodes[0]->store.tx_begin_read ()); - ASSERT_GE (nano::work_difficulty (nano::work_version::work_1, system.nodes[0]->ledger.latest_root (transaction, pub), work), system.nodes[0]->default_difficulty (nano::work_version::work_1)); + ASSERT_GE (nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, system.nodes[0]->ledger.latest_root (transaction, pub), work), system.nodes[0]->default_difficulty (nano::work_version::work_1)); } TEST (wallet, backup_seed) diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index 985ecdbefd..49d7b82fbf 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -1949,7 +1949,7 @@ TEST (rpc, work_generate) auto work_text (response.json.get ("work")); uint64_t work; ASSERT_FALSE (nano::from_string_hex (work_text, work)); - auto result_difficulty (nano::work_difficulty (nano::work_version::work_1, hash, work)); + auto result_difficulty (nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, hash, work)); auto response_difficulty_text (response.json.get ("difficulty")); uint64_t response_difficulty; ASSERT_FALSE (nano::from_string_hex (response_difficulty_text, response_difficulty)); @@ -1980,7 +1980,7 @@ TEST (rpc, work_generate_difficulty) auto work_text (response.get ("work")); uint64_t work; ASSERT_FALSE (nano::from_string_hex (work_text, work)); - auto result_difficulty (nano::work_difficulty (nano::work_version::work_1, hash, work)); + auto result_difficulty (nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, hash, work)); auto response_difficulty_text (response.get ("difficulty")); uint64_t response_difficulty; ASSERT_FALSE (nano::from_string_hex (response_difficulty_text, response_difficulty)); @@ -1997,7 +1997,7 @@ TEST (rpc, work_generate_difficulty) auto work_text (response.get ("work")); uint64_t work; ASSERT_FALSE (nano::from_string_hex (work_text, work)); - auto result_difficulty (nano::work_difficulty (nano::work_version::work_1, hash, work)); + auto result_difficulty (nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, hash, work)); ASSERT_GE (result_difficulty, difficulty); } { @@ -2031,7 +2031,7 @@ TEST (rpc, work_generate_multiplier) ASSERT_TRUE (work_text.is_initialized ()); uint64_t work; ASSERT_FALSE (nano::from_string_hex (*work_text, work)); - auto result_difficulty (nano::work_difficulty (nano::work_version::work_1, hash, work)); + auto result_difficulty (nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, hash, work)); auto response_difficulty_text (response.get ("difficulty")); uint64_t response_difficulty; ASSERT_FALSE (nano::from_string_hex (response_difficulty_text, response_difficulty)); @@ -2062,7 +2062,7 @@ TEST (rpc, work_generate_block_high) nano::keypair key; nano::state_block block (key.pub, 0, nano::dev::genesis_key.pub, nano::Gxrb_ratio, 123, key.prv, key.pub, *node->work_generate_blocking (key.pub)); nano::block_hash hash (block.root ().as_block_hash ()); - auto block_difficulty (nano::work_difficulty (nano::work_version::work_1, hash, block.block_work ())); + auto block_difficulty (nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, hash, block.block_work ())); boost::property_tree::ptree request; request.put ("action", "work_generate"); request.put ("hash", hash.to_string ()); @@ -2103,7 +2103,7 @@ TEST (rpc, work_generate_block_low) uint64_t work; ASSERT_FALSE (nano::from_string_hex (*work_text, work)); ASSERT_NE (block.block_work (), work); - auto result_difficulty (nano::work_difficulty (nano::work_version::work_1, hash, work)); + auto result_difficulty (nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, hash, work)); auto response_difficulty_text (response.get ("difficulty")); uint64_t response_difficulty; ASSERT_FALSE (nano::from_string_hex (response_difficulty_text, response_difficulty)); @@ -2167,7 +2167,7 @@ TEST (rpc, work_generate_block_ledger_epoch_2) ASSERT_TRUE (work_text.is_initialized ()); uint64_t work; ASSERT_FALSE (nano::from_string_hex (*work_text, work)); - auto result_difficulty (nano::work_difficulty (nano::work_version::work_1, hash, work)); + auto result_difficulty (nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, hash, work)); auto response_difficulty_text (response.get ("difficulty")); uint64_t response_difficulty; ASSERT_FALSE (nano::from_string_hex (response_difficulty_text, response_difficulty)); @@ -2215,7 +2215,7 @@ TEST (rpc, work_peer_bad) ASSERT_TRUE (work_a.is_initialized ()); work = *work_a; }); - ASSERT_TIMELY (5s, nano::work_difficulty (nano::work_version::work_1, hash1, work) >= nano::dev::network_params.network.publish_thresholds.threshold_base (nano::work_version::work_1)); + ASSERT_TIMELY (5s, nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, hash1, work) >= nano::dev::network_params.network.publish_thresholds.threshold_base (nano::work_version::work_1)); } TEST (rpc, work_peer_one) @@ -2231,7 +2231,7 @@ TEST (rpc, work_peer_one) ASSERT_TRUE (work_a.is_initialized ()); work = *work_a; }); - ASSERT_TIMELY (5s, nano::work_difficulty (nano::work_version::work_1, key1.pub, work) >= nano::dev::network_params.network.publish_thresholds.threshold_base (nano::work_version::work_1)); + ASSERT_TIMELY (5s, nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, key1.pub, work) >= nano::dev::network_params.network.publish_thresholds.threshold_base (nano::work_version::work_1)); } TEST (rpc, work_peer_many) @@ -2258,7 +2258,7 @@ TEST (rpc, work_peer_many) node1.work_generate (nano::work_version::work_1, key1.pub, node1.network_params.network.publish_thresholds.base, [&work = works[i]] (boost::optional work_a) { work = *work_a; }); - while (nano::work_difficulty (nano::work_version::work_1, key1.pub, works[i]) < nano::dev::network_params.network.publish_thresholds.threshold_base (nano::work_version::work_1)) + while (nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, key1.pub, works[i]) < nano::dev::network_params.network.publish_thresholds.threshold_base (nano::work_version::work_1)) { system1.poll (); system2.poll (); @@ -2744,7 +2744,7 @@ TEST (rpc, work_validate) double multiplier (response.get ("multiplier")); ASSERT_NEAR (multiplier, nano::difficulty::to_multiplier (difficulty, node1->default_difficulty (nano::work_version::work_1)), 1e-6); } - auto result_difficulty (nano::work_difficulty (nano::work_version::work_1, hash, work1)); + auto result_difficulty (nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, hash, work1)); ASSERT_GE (result_difficulty, node1->default_difficulty (nano::work_version::work_1)); request.put ("work", nano::to_string_hex (work1)); request.put ("difficulty", nano::to_string_hex (result_difficulty)); diff --git a/nano/test_common/system.cpp b/nano/test_common/system.cpp index c38af4fb2f..ecc4623e7f 100644 --- a/nano/test_common/system.cpp +++ b/nano/test_common/system.cpp @@ -202,10 +202,11 @@ uint64_t nano::system::work_generate_limited (nano::block_hash const & root_a, u { debug_assert (min_a > 0); uint64_t result = 0; + static nano::network_constants constants; do { result = *work.generate (root_a, min_a); - } while (nano::work_difficulty (nano::work_version::work_1, root_a, result) >= max_a); + } while (constants.publish_thresholds.difficulty (nano::work_version::work_1, root_a, result) >= max_a); return result; } @@ -219,7 +220,7 @@ std::unique_ptr nano::upgrade_epoch (nano::work_pool & pool_a nano::state_block_builder builder; std::error_code ec; - nano::network_constants constants; + static nano::network_constants constants; auto epoch = builder .account (dev_genesis_key.pub) .previous (latest) From 868ec8679a95dec99c456a6d329d0a4f05fdaa4e Mon Sep 17 00:00:00 2001 From: clemahieu Date: Mon, 9 Aug 2021 00:10:02 +0100 Subject: [PATCH 163/346] Moving work_validate from a free function to a member of nano::work_thresholds. --- nano/lib/config.cpp | 5 +++++ nano/lib/config.hpp | 1 + nano/lib/work.cpp | 6 ------ nano/lib/work.hpp | 1 - nano/node/wallet.cpp | 2 +- 5 files changed, 7 insertions(+), 8 deletions(-) diff --git a/nano/lib/config.cpp b/nano/lib/config.cpp index 2470d457f8..90627a5031 100644 --- a/nano/lib/config.cpp +++ b/nano/lib/config.cpp @@ -194,6 +194,11 @@ uint64_t nano::work_thresholds::difficulty (nano::work_version const version_a, return result; } +bool nano::work_thresholds::validate_entry (nano::work_version const version_a, nano::root const & root_a, uint64_t const work_a) +{ + return difficulty (version_a, root_a, work_a) < threshold_entry (version_a, nano::block_type::state); +} + namespace nano { const char * network_constants::active_network_err_msg = "Invalid network. Valid values are live, test, beta and dev."; diff --git a/nano/lib/config.hpp b/nano/lib/config.hpp index 2629bd0be3..4c11b731ef 100644 --- a/nano/lib/config.hpp +++ b/nano/lib/config.hpp @@ -119,6 +119,7 @@ class work_thresholds double normalized_multiplier (double const, uint64_t const); double denormalized_multiplier (double const, uint64_t const); uint64_t difficulty (nano::work_version const, nano::root const &, uint64_t const); + bool validate_entry (nano::work_version const, nano::root const &, uint64_t const); /** Network work thresholds. Define these inline as constexpr when moving to cpp17. */ static const nano::work_thresholds publish_full; diff --git a/nano/lib/work.cpp b/nano/lib/work.cpp index c507997283..90af2490a8 100644 --- a/nano/lib/work.cpp +++ b/nano/lib/work.cpp @@ -28,12 +28,6 @@ bool nano::work_validate_entry (nano::block const & block_a) return block_a.difficulty () < network_constants.publish_thresholds.threshold_entry (block_a.work_version (), block_a.type ()); } -bool nano::work_validate_entry (nano::work_version const version_a, nano::root const & root_a, uint64_t const work_a) -{ - static nano::network_constants network_constants; - return network_constants.publish_thresholds.difficulty (version_a, root_a, work_a) < network_constants.publish_thresholds.threshold_entry (version_a, nano::block_type::state); -} - nano::work_pool::work_pool (nano::network_constants & network_constants, unsigned max_threads_a, std::chrono::nanoseconds pow_rate_limiter_a, std::function (nano::work_version const, nano::root const &, uint64_t, std::atomic &)> opencl_a) : network_constants{ network_constants }, ticket (0), diff --git a/nano/lib/work.hpp b/nano/lib/work.hpp index d97c9b2038..b8c5518c08 100644 --- a/nano/lib/work.hpp +++ b/nano/lib/work.hpp @@ -19,7 +19,6 @@ class block; class block_details; enum class block_type : uint8_t; bool work_validate_entry (nano::block const &); -bool work_validate_entry (nano::work_version const, nano::root const &, uint64_t const); class opencl_work; class work_item final diff --git a/nano/node/wallet.cpp b/nano/node/wallet.cpp index d953c8d3a5..32a53b0cb9 100644 --- a/nano/node/wallet.cpp +++ b/nano/node/wallet.cpp @@ -1130,7 +1130,7 @@ void nano::wallet::send_async (nano::account const & source_a, nano::account con // Update work for account if latest root is root_a void nano::wallet::work_update (nano::transaction const & transaction_a, nano::account const & account_a, nano::root const & root_a, uint64_t work_a) { - debug_assert (!nano::work_validate_entry (nano::work_version::work_1, root_a, work_a)); + debug_assert (!wallets.node.network_params.network.publish_thresholds.validate_entry (nano::work_version::work_1, root_a, work_a)); debug_assert (store.exists (transaction_a, account_a)); auto block_transaction (wallets.node.store.tx_begin_read ()); auto latest (wallets.node.ledger.latest_root (block_transaction, account_a)); From 4dead4c38489e2233e94d48dae86ef2d85633ba2 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Mon, 9 Aug 2021 00:43:53 +0100 Subject: [PATCH 164/346] Moving valide_entry from a free function to a method of work_thresholds. --- nano/lib/config.cpp | 10 +++++++--- nano/lib/config.hpp | 4 +++- nano/lib/work.cpp | 6 ------ nano/lib/work.hpp | 1 - nano/node/blockprocessor.cpp | 4 ++-- nano/node/bootstrap/bootstrap_bulk_pull.cpp | 2 +- nano/node/bootstrap/bootstrap_bulk_push.cpp | 2 +- nano/node/bootstrap/bootstrap_server.cpp | 4 ++-- nano/node/common.cpp | 6 +++--- nano/node/json_handler.cpp | 2 +- nano/qt/qt.cpp | 2 +- nano/secure/ledger.cpp | 3 ++- 12 files changed, 23 insertions(+), 23 deletions(-) diff --git a/nano/lib/config.cpp b/nano/lib/config.cpp index 90627a5031..2385047174 100644 --- a/nano/lib/config.cpp +++ b/nano/lib/config.cpp @@ -49,7 +49,7 @@ get_env_threshold_or_default ("NANO_TEST_EPOCH_2", 0xfffffff800000000), // 8x hi get_env_threshold_or_default ("NANO_TEST_EPOCH_2_RECV", 0xfffffe0000000000) // 8x lower than epoch_1 ); -uint64_t nano::work_thresholds::threshold_entry (nano::work_version const version_a, nano::block_type const type_a) +uint64_t nano::work_thresholds::threshold_entry (nano::work_version const version_a, nano::block_type const type_a) const { uint64_t result{ std::numeric_limits::max () }; if (type_a == nano::block_type::state) @@ -110,12 +110,11 @@ uint64_t nano::work_thresholds::threshold (nano::block_details const & details_a uint64_t nano::work_thresholds::threshold (nano::work_version const version_a, nano::block_details const details_a) { - static nano::network_constants network_constants; uint64_t result{ std::numeric_limits::max () }; switch (version_a) { case nano::work_version::work_1: - result = network_constants.publish_thresholds.threshold (details_a); + result = threshold (details_a); break; default: debug_assert (false && "Invalid version specified to ledger work_threshold"); @@ -199,6 +198,11 @@ bool nano::work_thresholds::validate_entry (nano::work_version const version_a, return difficulty (version_a, root_a, work_a) < threshold_entry (version_a, nano::block_type::state); } +bool nano::work_thresholds::validate_entry (nano::block const & block_a) const +{ + return block_a.difficulty () < threshold_entry (block_a.work_version (), block_a.type ()); +} + namespace nano { const char * network_constants::active_network_err_msg = "Invalid network. Valid values are live, test, beta and dev."; diff --git a/nano/lib/config.hpp b/nano/lib/config.hpp index 4c11b731ef..1bf83ecf3b 100644 --- a/nano/lib/config.hpp +++ b/nano/lib/config.hpp @@ -83,6 +83,7 @@ enum class work_version }; enum class block_type : uint8_t; class root; +class block; class block_details; class work_thresholds @@ -110,7 +111,7 @@ class work_thresholds return other_a; } - uint64_t threshold_entry (nano::work_version const, nano::block_type const); + uint64_t threshold_entry (nano::work_version const, nano::block_type const) const; uint64_t threshold (nano::block_details const &); // Ledger threshold uint64_t threshold (nano::work_version const, nano::block_details const); @@ -120,6 +121,7 @@ class work_thresholds double denormalized_multiplier (double const, uint64_t const); uint64_t difficulty (nano::work_version const, nano::root const &, uint64_t const); bool validate_entry (nano::work_version const, nano::root const &, uint64_t const); + bool validate_entry (nano::block const &) const; /** Network work thresholds. Define these inline as constexpr when moving to cpp17. */ static const nano::work_thresholds publish_full; diff --git a/nano/lib/work.cpp b/nano/lib/work.cpp index 90af2490a8..8a2d7f45e2 100644 --- a/nano/lib/work.cpp +++ b/nano/lib/work.cpp @@ -22,12 +22,6 @@ std::string nano::to_string (nano::work_version const version_a) return result; } -bool nano::work_validate_entry (nano::block const & block_a) -{ - static nano::network_constants network_constants; - return block_a.difficulty () < network_constants.publish_thresholds.threshold_entry (block_a.work_version (), block_a.type ()); -} - nano::work_pool::work_pool (nano::network_constants & network_constants, unsigned max_threads_a, std::chrono::nanoseconds pow_rate_limiter_a, std::function (nano::work_version const, nano::root const &, uint64_t, std::atomic &)> opencl_a) : network_constants{ network_constants }, ticket (0), diff --git a/nano/lib/work.hpp b/nano/lib/work.hpp index b8c5518c08..15ae1291ab 100644 --- a/nano/lib/work.hpp +++ b/nano/lib/work.hpp @@ -18,7 +18,6 @@ std::string to_string (nano::work_version const version_a); class block; class block_details; enum class block_type : uint8_t; -bool work_validate_entry (nano::block const &); class opencl_work; class work_item final diff --git a/nano/node/blockprocessor.cpp b/nano/node/blockprocessor.cpp index 666df9dfea..9e9184add1 100644 --- a/nano/node/blockprocessor.cpp +++ b/nano/node/blockprocessor.cpp @@ -105,7 +105,7 @@ void nano::block_processor::add (std::shared_ptr const & block_a, u void nano::block_processor::add (nano::unchecked_info const & info_a) { - debug_assert (!nano::work_validate_entry (*info_a.block)); + debug_assert (!node.network_params.network.publish_thresholds.validate_entry (*info_a.block)); bool quarter_full (size () > node.flags.block_processor_full_size / 4); if (info_a.verified == nano::signature_verification::unknown && (info_a.block->type () == nano::block_type::state || info_a.block->type () == nano::block_type::open || !info_a.account.is_zero ())) { @@ -124,7 +124,7 @@ void nano::block_processor::add (nano::unchecked_info const & info_a) void nano::block_processor::add_local (nano::unchecked_info const & info_a) { release_assert (info_a.verified == nano::signature_verification::unknown && (info_a.block->type () == nano::block_type::state || !info_a.account.is_zero ())); - debug_assert (!nano::work_validate_entry (*info_a.block)); + debug_assert (!node.network_params.network.publish_thresholds.validate_entry (*info_a.block)); state_block_signature_verification.add (info_a); } diff --git a/nano/node/bootstrap/bootstrap_bulk_pull.cpp b/nano/node/bootstrap/bootstrap_bulk_pull.cpp index 873a490e17..53a83b370f 100644 --- a/nano/node/bootstrap/bootstrap_bulk_pull.cpp +++ b/nano/node/bootstrap/bootstrap_bulk_pull.cpp @@ -208,7 +208,7 @@ void nano::bulk_pull_client::received_block (boost::system::error_code const & e { nano::bufferstream stream (connection->receive_buffer->data (), size_a); auto block (nano::deserialize_block (stream, type_a)); - if (block != nullptr && !nano::work_validate_entry (*block)) + if (block != nullptr && !connection->node->network_params.network.publish_thresholds.validate_entry (*block)) { auto hash (block->hash ()); if (connection->node->config.logging.bulk_pull_logging ()) diff --git a/nano/node/bootstrap/bootstrap_bulk_push.cpp b/nano/node/bootstrap/bootstrap_bulk_push.cpp index 0a1a19e8bf..50e28bfc0f 100644 --- a/nano/node/bootstrap/bootstrap_bulk_push.cpp +++ b/nano/node/bootstrap/bootstrap_bulk_push.cpp @@ -232,7 +232,7 @@ void nano::bulk_push_server::received_block (boost::system::error_code const & e { nano::bufferstream stream (receive_buffer->data (), size_a); auto block (nano::deserialize_block (stream, type_a)); - if (block != nullptr && !nano::work_validate_entry (*block)) + if (block != nullptr && !connection->node->network_params.network.publish_thresholds.validate_entry (*block)) { connection->node->process_active (std::move (block)); throttled_receive (); diff --git a/nano/node/bootstrap/bootstrap_server.cpp b/nano/node/bootstrap/bootstrap_server.cpp index 7a7caf127a..264f32ef36 100644 --- a/nano/node/bootstrap/bootstrap_server.cpp +++ b/nano/node/bootstrap/bootstrap_server.cpp @@ -426,7 +426,7 @@ void nano::bootstrap_server::receive_publish_action (boost::system::error_code c { if (is_realtime_connection ()) { - if (!nano::work_validate_entry (*request->block)) + if (!node->network_params.network.publish_thresholds.validate_entry (*request->block)) { add_request (std::unique_ptr (request.release ())); } @@ -494,7 +494,7 @@ void nano::bootstrap_server::receive_confirm_ack_action (boost::system::error_co if (!vote_block.which ()) { auto const & block (boost::get> (vote_block)); - if (nano::work_validate_entry (*block)) + if (node->network_params.network.publish_thresholds.validate_entry (*block)) { process_vote = false; node->stats.inc_detail_only (nano::stat::type::error, nano::stat::detail::insufficient_work); diff --git a/nano/node/common.cpp b/nano/node/common.cpp index 0583b588c4..7ea7d9f1f5 100644 --- a/nano/node/common.cpp +++ b/nano/node/common.cpp @@ -424,7 +424,7 @@ void nano::message_parser::deserialize_publish (nano::stream & stream_a, nano::m nano::publish incoming (error, stream_a, header_a, digest_a, &block_uniquer); if (!error && at_end (stream_a)) { - if (!nano::work_validate_entry (*incoming.block)) + if (!network.publish_thresholds.validate_entry (*incoming.block)) { visitor.publish (incoming); } @@ -445,7 +445,7 @@ void nano::message_parser::deserialize_confirm_req (nano::stream & stream_a, nan nano::confirm_req incoming (error, stream_a, header_a, &block_uniquer); if (!error && at_end (stream_a)) { - if (incoming.block == nullptr || !nano::work_validate_entry (*incoming.block)) + if (incoming.block == nullptr || !network.publish_thresholds.validate_entry (*incoming.block)) { visitor.confirm_req (incoming); } @@ -471,7 +471,7 @@ void nano::message_parser::deserialize_confirm_ack (nano::stream & stream_a, nan if (!vote_block.which ()) { auto const & block (boost::get> (vote_block)); - if (nano::work_validate_entry (*block)) + if (network.publish_thresholds.validate_entry (*block)) { status = parse_status::insufficient_work; break; diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index 068ce8519c..fe4fef2aad 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -3123,7 +3123,7 @@ void nano::json_handler::process () } if (!rpc_l->ec) { - if (!nano::work_validate_entry (*block)) + if (!rpc_l->node.network_params.network.publish_thresholds.validate_entry (*block)) { if (!is_async) { diff --git a/nano/qt/qt.cpp b/nano/qt/qt.cpp index ea5ce06772..d0e043fbcf 100644 --- a/nano/qt/qt.cpp +++ b/nano/qt/qt.cpp @@ -2003,7 +2003,7 @@ nano_qt::block_entry::block_entry (nano_qt::wallet & wallet_a) : { show_label_ok (*status); this->status->setText (""); - if (!nano::work_validate_entry (*block_l)) + if (!this->wallet.node.network_params.network.publish_thresholds.validate_entry (*block_l)) { this->wallet.node.process_active (std::move (block_l)); } diff --git a/nano/secure/ledger.cpp b/nano/secure/ledger.cpp index 2a433eb60f..eb8f60582b 100644 --- a/nano/secure/ledger.cpp +++ b/nano/secure/ledger.cpp @@ -869,7 +869,8 @@ nano::uint128_t nano::ledger::account_pending (nano::transaction const & transac nano::process_return nano::ledger::process (nano::write_transaction const & transaction_a, nano::block & block_a, nano::signature_verification verification) { - debug_assert (!nano::work_validate_entry (block_a) || constants.genesis == nano::dev::genesis); + static nano::network_constants network_constants; + debug_assert (!network_constants.publish_thresholds.validate_entry (block_a) || constants.genesis == nano::dev::genesis); ledger_processor processor (*this, transaction_a, verification); block_a.visit (processor); if (processor.result.code == nano::process_result::progress) From 0096d2086be2849d79bd3173acaa8402d9a80507 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Mon, 9 Aug 2021 08:57:40 +0100 Subject: [PATCH 165/346] Passing work_thresholds in to ledger_constants and removing static references to nano::network_constants from within the ledger processor. --- nano/core_test/network_filter.cpp | 12 +++++------- nano/secure/common.cpp | 10 +++------- nano/secure/common.hpp | 4 ++-- nano/secure/ledger.cpp | 20 +++++++------------- 4 files changed, 17 insertions(+), 29 deletions(-) diff --git a/nano/core_test/network_filter.cpp b/nano/core_test/network_filter.cpp index 3f5cc981b8..e21af52cd8 100644 --- a/nano/core_test/network_filter.cpp +++ b/nano/core_test/network_filter.cpp @@ -8,7 +8,6 @@ TEST (network_filter, unit) { - nano::ledger_constants constants{ nano::networks::nano_dev_network }; nano::network_filter filter (1); auto one_block = [&filter] (std::shared_ptr const & block_a, bool expect_duplicate_a) { nano::publish message{ nano::dev::network_params.network, block_a }; @@ -32,15 +31,15 @@ TEST (network_filter, unit) ASSERT_NE (nullptr, block); ASSERT_EQ (*block, *block_a); }; - one_block (constants.genesis, false); + one_block (nano::dev::genesis, false); for (int i = 0; i < 10; ++i) { - one_block (constants.genesis, true); + one_block (nano::dev::genesis, true); } nano::state_block_builder builder; auto new_block = builder .account (nano::dev::genesis_key.pub) - .previous (constants.genesis->hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::constants.genesis_amount - 10 * nano::xrb_ratio) .link (nano::public_key ()) @@ -55,14 +54,13 @@ TEST (network_filter, unit) } for (int i = 0; i < 100; ++i) { - one_block (constants.genesis, false); + one_block (nano::dev::genesis, false); one_block (new_block, false); } } TEST (network_filter, many) { - nano::ledger_constants constants{ nano::networks::nano_dev_network }; nano::network_filter filter (4); nano::keypair key1; for (int i = 0; i < 100; ++i) @@ -70,7 +68,7 @@ TEST (network_filter, many) nano::state_block_builder builder; auto block = builder .account (nano::dev::genesis_key.pub) - .previous (constants.genesis->hash ()) + .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) .balance (nano::dev::constants.genesis_amount - i * 10 * nano::xrb_ratio) .link (key1.pub) diff --git a/nano/secure/common.cpp b/nano/secure/common.cpp index fe9358160e..2cac213074 100644 --- a/nano/secure/common.cpp +++ b/nano/secure/common.cpp @@ -86,19 +86,15 @@ nano::ledger_constants & nano::dev::constants{ nano::dev::network_params.ledger std::shared_ptr & nano::dev::genesis = nano::dev::constants.genesis; nano::network_params::network_params (nano::networks network_a) : - network (network_a), ledger (network), voting (network), node (network), portmapping (network), bootstrap (network) + network (network_a), ledger (network.publish_thresholds, network.network ()), voting (network), node (network), portmapping (network), bootstrap (network) { unsigned constexpr kdf_full_work = 64 * 1024; unsigned constexpr kdf_dev_work = 8; kdf_work = network.is_dev_network () ? kdf_dev_work : kdf_full_work; } -nano::ledger_constants::ledger_constants (nano::network_constants & network_constants) : - ledger_constants (network_constants.network ()) -{ -} - -nano::ledger_constants::ledger_constants (nano::networks network_a) : +nano::ledger_constants::ledger_constants (nano::work_thresholds & work, nano::networks network_a) : + work{ work }, zero_key ("0"), nano_beta_account (beta_public_key_data), nano_live_account (live_public_key_data), diff --git a/nano/secure/common.hpp b/nano/secure/common.hpp index 8be2cab4a5..dbbf982d95 100644 --- a/nano/secure/common.hpp +++ b/nano/secure/common.hpp @@ -340,8 +340,8 @@ class network_params; class ledger_constants { public: - ledger_constants (nano::network_constants & network_constants); - ledger_constants (nano::networks network_a); + ledger_constants (nano::work_thresholds & work, nano::networks network_a); + nano::work_thresholds & work; nano::keypair zero_key; nano::account nano_beta_account; nano::account nano_live_account; diff --git a/nano/secure/ledger.cpp b/nano/secure/ledger.cpp index eb8f60582b..ebd584c6e6 100644 --- a/nano/secure/ledger.cpp +++ b/nano/secure/ledger.cpp @@ -346,8 +346,7 @@ void ledger_processor::state_block_impl (nano::state_block & block_a) if (result.code == nano::process_result::progress) { nano::block_details block_details (epoch, is_send, is_receive, false); - nano::network_constants constants; - result.code = block_a.difficulty () >= constants.publish_thresholds.threshold (block_a.work_version (), block_details) ? nano::process_result::progress : nano::process_result::insufficient_work; // Does this block have sufficient work? (Malformed) + result.code = block_a.difficulty () >= ledger.constants.work.threshold (block_a.work_version (), block_details) ? nano::process_result::progress : nano::process_result::insufficient_work; // Does this block have sufficient work? (Malformed) if (result.code == nano::process_result::progress) { ledger.stats.inc (nano::stat::type::ledger, nano::stat::detail::state_block); @@ -447,8 +446,7 @@ void ledger_processor::epoch_block_impl (nano::state_block & block_a) if (result.code == nano::process_result::progress) { nano::block_details block_details (epoch, false, false, true); - nano::network_constants constants; - result.code = block_a.difficulty () >= constants.publish_thresholds.threshold (block_a.work_version (), block_details) ? nano::process_result::progress : nano::process_result::insufficient_work; // Does this block have sufficient work? (Malformed) + result.code = block_a.difficulty () >= ledger.constants.work.threshold (block_a.work_version (), block_details) ? nano::process_result::progress : nano::process_result::insufficient_work; // Does this block have sufficient work? (Malformed) if (result.code == nano::process_result::progress) { ledger.stats.inc (nano::stat::type::ledger, nano::stat::detail::epoch_block); @@ -500,8 +498,7 @@ void ledger_processor::change_block (nano::change_block & block_a) if (result.code == nano::process_result::progress) { nano::block_details block_details (nano::epoch::epoch_0, false /* unused */, false /* unused */, false /* unused */); - nano::network_constants constants; - result.code = block_a.difficulty () >= constants.publish_thresholds.threshold (block_a.work_version (), block_details) ? nano::process_result::progress : nano::process_result::insufficient_work; // Does this block have sufficient work? (Malformed) + result.code = block_a.difficulty () >= ledger.constants.work.threshold (block_a.work_version (), block_details) ? nano::process_result::progress : nano::process_result::insufficient_work; // Does this block have sufficient work? (Malformed) if (result.code == nano::process_result::progress) { debug_assert (!validate_message (account, hash, block_a.signature)); @@ -550,8 +547,7 @@ void ledger_processor::send_block (nano::send_block & block_a) if (result.code == nano::process_result::progress) { nano::block_details block_details (nano::epoch::epoch_0, false /* unused */, false /* unused */, false /* unused */); - nano::network_constants constants; - result.code = block_a.difficulty () >= constants.publish_thresholds.threshold (block_a.work_version (), block_details) ? nano::process_result::progress : nano::process_result::insufficient_work; // Does this block have sufficient work? (Malformed) + result.code = block_a.difficulty () >= ledger.constants.work.threshold (block_a.work_version (), block_details) ? nano::process_result::progress : nano::process_result::insufficient_work; // Does this block have sufficient work? (Malformed) if (result.code == nano::process_result::progress) { debug_assert (!validate_message (account, hash, block_a.signature)); @@ -628,8 +624,7 @@ void ledger_processor::receive_block (nano::receive_block & block_a) if (result.code == nano::process_result::progress) { nano::block_details block_details (nano::epoch::epoch_0, false /* unused */, false /* unused */, false /* unused */); - nano::network_constants constants; - result.code = block_a.difficulty () >= constants.publish_thresholds.threshold (block_a.work_version (), block_details) ? nano::process_result::progress : nano::process_result::insufficient_work; // Does this block have sufficient work? (Malformed) + result.code = block_a.difficulty () >= ledger.constants.work.threshold (block_a.work_version (), block_details) ? nano::process_result::progress : nano::process_result::insufficient_work; // Does this block have sufficient work? (Malformed) if (result.code == nano::process_result::progress) { auto new_balance (info.balance.number () + pending.amount.number ()); @@ -702,8 +697,7 @@ void ledger_processor::open_block (nano::open_block & block_a) if (result.code == nano::process_result::progress) { nano::block_details block_details (nano::epoch::epoch_0, false /* unused */, false /* unused */, false /* unused */); - nano::network_constants constants; - result.code = block_a.difficulty () >= constants.publish_thresholds.threshold (block_a.work_version (), block_details) ? nano::process_result::progress : nano::process_result::insufficient_work; // Does this block have sufficient work? (Malformed) + result.code = block_a.difficulty () >= ledger.constants.work.threshold (block_a.work_version (), block_details) ? nano::process_result::progress : nano::process_result::insufficient_work; // Does this block have sufficient work? (Malformed) if (result.code == nano::process_result::progress) { #ifdef NDEBUG @@ -870,7 +864,7 @@ nano::uint128_t nano::ledger::account_pending (nano::transaction const & transac nano::process_return nano::ledger::process (nano::write_transaction const & transaction_a, nano::block & block_a, nano::signature_verification verification) { static nano::network_constants network_constants; - debug_assert (!network_constants.publish_thresholds.validate_entry (block_a) || constants.genesis == nano::dev::genesis); + debug_assert (!constants.work.validate_entry (block_a) || constants.genesis == nano::dev::genesis); ledger_processor processor (*this, transaction_a, verification); block_a.visit (processor); if (processor.result.code == nano::process_result::progress) From e4e2220d92eb6394f904b5ef12897d3826418234 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Mon, 9 Aug 2021 09:22:19 +0100 Subject: [PATCH 166/346] Removing check for is_dev_network within using_rocksdb_in_tests as it's redundant and removing static instantiation of network_constants. --- nano/lib/rocksdbconfig.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/nano/lib/rocksdbconfig.cpp b/nano/lib/rocksdbconfig.cpp index c3bac1f2e3..e1ec644b6f 100644 --- a/nano/lib/rocksdbconfig.cpp +++ b/nano/lib/rocksdbconfig.cpp @@ -31,7 +31,6 @@ nano::error nano::rocksdb_config::deserialize_toml (nano::tomlconfig & toml) bool nano::rocksdb_config::using_rocksdb_in_tests () { - static nano::network_constants network_constants; auto use_rocksdb_str = std::getenv ("TEST_USE_ROCKSDB"); - return network_constants.is_dev_network () && use_rocksdb_str && (boost::lexical_cast (use_rocksdb_str) == 1); + return use_rocksdb_str && (boost::lexical_cast (use_rocksdb_str) == 1); } From 9d47208735741c25d939b4655fba6f3e5e5692e3 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Mon, 9 Aug 2021 09:56:51 +0100 Subject: [PATCH 167/346] Removing unnecessary check for running within unit test context and associated static instantiation of network_constants. No appreciable difference in unit test speed. --- nano/node/logging.cpp | 46 +++++++++++++++++++----------------------- nano/secure/ledger.cpp | 1 - 2 files changed, 21 insertions(+), 26 deletions(-) diff --git a/nano/node/logging.cpp b/nano/node/logging.cpp index 512319f93c..2b7d007fa4 100644 --- a/nano/node/logging.cpp +++ b/nano/node/logging.cpp @@ -36,38 +36,34 @@ void nano::logging::init (boost::filesystem::path const & application_path_a) boost::log::add_console_log (std::cerr, boost::log::keywords::format = format_with_timestamp); } - nano::network_constants network_constants; - if (!network_constants.is_dev_network ()) - { #ifdef BOOST_WINDOWS - if (nano::event_log_reg_entry_exists () || nano::is_windows_elevated ()) - { - static auto event_sink = boost::make_shared> (boost::log::keywords::log_name = "Nano", boost::log::keywords::log_source = "Nano"); - event_sink->set_formatter (format); + if (nano::event_log_reg_entry_exists () || nano::is_windows_elevated ()) + { + static auto event_sink = boost::make_shared> (boost::log::keywords::log_name = "Nano", boost::log::keywords::log_source = "Nano"); + event_sink->set_formatter (format); - // Currently only mapping sys log errors - boost::log::sinks::event_log::custom_event_type_mapping mapping ("Severity"); - mapping[nano::severity_level::error] = boost::log::sinks::event_log::error; - event_sink->locked_backend ()->set_event_type_mapper (mapping); + // Currently only mapping sys log errors + boost::log::sinks::event_log::custom_event_type_mapping mapping ("Severity"); + mapping[nano::severity_level::error] = boost::log::sinks::event_log::error; + event_sink->locked_backend ()->set_event_type_mapper (mapping); - // Only allow messages or error or greater severity to the event log - event_sink->set_filter (severity >= nano::severity_level::error); - boost::log::core::get ()->add_sink (event_sink); - } + // Only allow messages or error or greater severity to the event log + event_sink->set_filter (severity >= nano::severity_level::error); + boost::log::core::get ()->add_sink (event_sink); + } #else - static auto sys_sink = boost::make_shared> (boost::log::keywords::facility = boost::log::sinks::syslog::user, boost::log::keywords::use_impl = boost::log::sinks::syslog::impl_types::native); - sys_sink->set_formatter (format); + static auto sys_sink = boost::make_shared> (boost::log::keywords::facility = boost::log::sinks::syslog::user, boost::log::keywords::use_impl = boost::log::sinks::syslog::impl_types::native); + sys_sink->set_formatter (format); - // Currently only mapping sys log errors - boost::log::sinks::syslog::custom_severity_mapping mapping ("Severity"); - mapping[nano::severity_level::error] = boost::log::sinks::syslog::error; - sys_sink->locked_backend ()->set_severity_mapper (mapping); + // Currently only mapping sys log errors + boost::log::sinks::syslog::custom_severity_mapping mapping ("Severity"); + mapping[nano::severity_level::error] = boost::log::sinks::syslog::error; + sys_sink->locked_backend ()->set_severity_mapper (mapping); - // Only allow messages or error or greater severity to the sys log - sys_sink->set_filter (severity >= nano::severity_level::error); - boost::log::core::get ()->add_sink (sys_sink); + // Only allow messages or error or greater severity to the sys log + sys_sink->set_filter (severity >= nano::severity_level::error); + boost::log::core::get ()->add_sink (sys_sink); #endif - } //clang-format off #if BOOST_VERSION < 107000 diff --git a/nano/secure/ledger.cpp b/nano/secure/ledger.cpp index ebd584c6e6..0f15c0fcc0 100644 --- a/nano/secure/ledger.cpp +++ b/nano/secure/ledger.cpp @@ -863,7 +863,6 @@ nano::uint128_t nano::ledger::account_pending (nano::transaction const & transac nano::process_return nano::ledger::process (nano::write_transaction const & transaction_a, nano::block & block_a, nano::signature_verification verification) { - static nano::network_constants network_constants; debug_assert (!constants.work.validate_entry (block_a) || constants.genesis == nano::dev::genesis); ledger_processor processor (*this, transaction_a, verification); block_a.visit (processor); From 013104cbb4d973ecb69c7500f3acfab82524d446 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Mon, 9 Aug 2021 12:08:07 +0100 Subject: [PATCH 168/346] This removes debug checks for is_dev_network in several places that don't directly have access to the network constants. node_rpc_config::set_request_callback is used for testing though nothing functionally requires it to be called from a unit test context. write_database_queue::contains checks that it's only called in a unit test context though this is also not functionally required. Calling the count function on several of the db tables has a performance impact though nothing about it is functionally incorrect and the caller needs to determine if the performance hit is acceptable. --- nano/node/node_rpc_config.cpp | 1 - nano/node/rocksdb/rocksdb.cpp | 2 -- nano/node/write_database_queue.cpp | 2 +- 3 files changed, 1 insertion(+), 4 deletions(-) diff --git a/nano/node/node_rpc_config.cpp b/nano/node/node_rpc_config.cpp index c83f8c0904..4847d0cdce 100644 --- a/nano/node/node_rpc_config.cpp +++ b/nano/node/node_rpc_config.cpp @@ -59,6 +59,5 @@ nano::error nano::node_rpc_config::deserialize_json (bool & upgraded_a, nano::js void nano::node_rpc_config::set_request_callback (std::function callback_a) { - debug_assert (nano::network_constants ().is_dev_network ()); request_callback = std::move (callback_a); } diff --git a/nano/node/rocksdb/rocksdb.cpp b/nano/node/rocksdb/rocksdb.cpp index 75af898932..00d3e84711 100644 --- a/nano/node/rocksdb/rocksdb.cpp +++ b/nano/node/rocksdb/rocksdb.cpp @@ -542,7 +542,6 @@ uint64_t nano::rocksdb_store::count (nano::transaction const & transaction_a, ta // otherwise there can be performance issues. else if (table_a == tables::accounts) { - debug_assert (network_constants ().is_dev_network ()); for (auto i (account.begin (transaction_a)), n (account.end ()); i != n; ++i) { ++sum; @@ -558,7 +557,6 @@ uint64_t nano::rocksdb_store::count (nano::transaction const & transaction_a, ta } else if (table_a == tables::confirmation_height) { - debug_assert (network_constants ().is_dev_network ()); for (auto i (confirmation_height.begin (transaction_a)), n (confirmation_height.end ()); i != n; ++i) { ++sum; diff --git a/nano/node/write_database_queue.cpp b/nano/node/write_database_queue.cpp index cf2d30f77a..8bb42fe322 100644 --- a/nano/node/write_database_queue.cpp +++ b/nano/node/write_database_queue.cpp @@ -90,7 +90,7 @@ nano::write_guard nano::write_database_queue::wait (nano::writer writer) bool nano::write_database_queue::contains (nano::writer writer) { - debug_assert (!use_noops && nano::network_constants ().is_dev_network ()); + debug_assert (!use_noops); nano::lock_guard guard (mutex); return std::find (queue.cbegin (), queue.cend (), writer) != queue.cend (); } From 2a94a3bf31a0d5e25e96d34bcf8943644ef53781 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Mon, 9 Aug 2021 15:11:23 +0100 Subject: [PATCH 169/346] Constifying work_threshold functions. --- nano/lib/config.cpp | 18 +++++++++--------- nano/lib/config.hpp | 16 ++++++++-------- 2 files changed, 17 insertions(+), 17 deletions(-) diff --git a/nano/lib/config.cpp b/nano/lib/config.cpp index 2385047174..e07f7cddbb 100644 --- a/nano/lib/config.cpp +++ b/nano/lib/config.cpp @@ -71,7 +71,7 @@ uint64_t nano::work_thresholds::threshold_entry (nano::work_version const versio } #ifndef NANO_FUZZER_TEST -uint64_t nano::work_thresholds::value (nano::root const & root_a, uint64_t work_a) +uint64_t nano::work_thresholds::value (nano::root const & root_a, uint64_t work_a) const { uint64_t result; blake2b_state hash; @@ -82,13 +82,13 @@ uint64_t nano::work_thresholds::value (nano::root const & root_a, uint64_t work_ return result; } #else -uint64_t nano::work_thresholds::value (nano::root const & root_a, uint64_t work_a) +uint64_t nano::work_thresholds::value (nano::root const & root_a, uint64_t work_a) const { return base + 1; } #endif -uint64_t nano::work_thresholds::threshold (nano::block_details const & details_a) +uint64_t nano::work_thresholds::threshold (nano::block_details const & details_a) const { static_assert (nano::epoch::max == nano::epoch::epoch_2, "work_v1::threshold is ill-defined"); @@ -108,7 +108,7 @@ uint64_t nano::work_thresholds::threshold (nano::block_details const & details_a return result; } -uint64_t nano::work_thresholds::threshold (nano::work_version const version_a, nano::block_details const details_a) +uint64_t nano::work_thresholds::threshold (nano::work_version const version_a, nano::block_details const details_a) const { uint64_t result{ std::numeric_limits::max () }; switch (version_a) @@ -122,7 +122,7 @@ uint64_t nano::work_thresholds::threshold (nano::work_version const version_a, n return result; } -double nano::work_thresholds::normalized_multiplier (double const multiplier_a, uint64_t const threshold_a) +double nano::work_thresholds::normalized_multiplier (double const multiplier_a, uint64_t const threshold_a) const { debug_assert (multiplier_a >= 1); auto multiplier (multiplier_a); @@ -151,7 +151,7 @@ double nano::work_thresholds::normalized_multiplier (double const multiplier_a, return multiplier; } -double nano::work_thresholds::denormalized_multiplier (double const multiplier_a, uint64_t const threshold_a) +double nano::work_thresholds::denormalized_multiplier (double const multiplier_a, uint64_t const threshold_a) const { debug_assert (multiplier_a >= 1); auto multiplier (multiplier_a); @@ -165,7 +165,7 @@ double nano::work_thresholds::denormalized_multiplier (double const multiplier_a return multiplier; } -uint64_t nano::work_thresholds::threshold_base (nano::work_version const version_a) +uint64_t nano::work_thresholds::threshold_base (nano::work_version const version_a) const { uint64_t result{ std::numeric_limits::max () }; switch (version_a) @@ -179,7 +179,7 @@ uint64_t nano::work_thresholds::threshold_base (nano::work_version const version return result; } -uint64_t nano::work_thresholds::difficulty (nano::work_version const version_a, nano::root const & root_a, uint64_t const work_a) +uint64_t nano::work_thresholds::difficulty (nano::work_version const version_a, nano::root const & root_a, uint64_t const work_a) const { uint64_t result{ 0 }; switch (version_a) @@ -193,7 +193,7 @@ uint64_t nano::work_thresholds::difficulty (nano::work_version const version_a, return result; } -bool nano::work_thresholds::validate_entry (nano::work_version const version_a, nano::root const & root_a, uint64_t const work_a) +bool nano::work_thresholds::validate_entry (nano::work_version const version_a, nano::root const & root_a, uint64_t const work_a) const { return difficulty (version_a, root_a, work_a) < threshold_entry (version_a, nano::block_type::state); } diff --git a/nano/lib/config.hpp b/nano/lib/config.hpp index 1bf83ecf3b..41f6a0f6ab 100644 --- a/nano/lib/config.hpp +++ b/nano/lib/config.hpp @@ -112,15 +112,15 @@ class work_thresholds } uint64_t threshold_entry (nano::work_version const, nano::block_type const) const; - uint64_t threshold (nano::block_details const &); + uint64_t threshold (nano::block_details const &) const; // Ledger threshold - uint64_t threshold (nano::work_version const, nano::block_details const); - uint64_t threshold_base (nano::work_version const); - uint64_t value (nano::root const & root_a, uint64_t work_a); - double normalized_multiplier (double const, uint64_t const); - double denormalized_multiplier (double const, uint64_t const); - uint64_t difficulty (nano::work_version const, nano::root const &, uint64_t const); - bool validate_entry (nano::work_version const, nano::root const &, uint64_t const); + uint64_t threshold (nano::work_version const, nano::block_details const) const; + uint64_t threshold_base (nano::work_version const) const; + uint64_t value (nano::root const & root_a, uint64_t work_a) const; + double normalized_multiplier (double const, uint64_t const) const; + double denormalized_multiplier (double const, uint64_t const) const; + uint64_t difficulty (nano::work_version const, nano::root const &, uint64_t const) const; + bool validate_entry (nano::work_version const, nano::root const &, uint64_t const) const; bool validate_entry (nano::block const &) const; /** Network work thresholds. Define these inline as constexpr when moving to cpp17. */ From c3ac780af24acc082a8a49e723d976d3e2ff44cb Mon Sep 17 00:00:00 2001 From: clemahieu Date: Mon, 9 Aug 2021 15:47:33 +0100 Subject: [PATCH 170/346] Moving nano::block::difficulty on to nano::work_thresholds. This moves the responsibility of determining difficulty fully on to work_thresholds rather than splitting this responsibliity with nano::block. --- nano/core_test/block.cpp | 2 +- nano/core_test/ledger.cpp | 2 +- nano/core_test/node.cpp | 4 ++-- nano/core_test/wallet.cpp | 14 +++++++------- nano/core_test/work_pool.cpp | 6 +++--- nano/lib/blocks.cpp | 6 ------ nano/lib/blocks.hpp | 1 - nano/lib/config.cpp | 7 ++++++- nano/lib/config.hpp | 1 + nano/nano_node/entry.cpp | 2 +- nano/node/blockprocessor.cpp | 2 +- nano/node/json_handler.cpp | 4 ++-- nano/node/node.cpp | 2 +- nano/node/wallet.cpp | 2 +- nano/rpc_test/rpc.cpp | 18 +++++++++--------- nano/secure/ledger.cpp | 12 ++++++------ 16 files changed, 42 insertions(+), 43 deletions(-) diff --git a/nano/core_test/block.cpp b/nano/core_test/block.cpp index ead77f0ced..e4e5fb581c 100644 --- a/nano/core_test/block.cpp +++ b/nano/core_test/block.cpp @@ -312,7 +312,7 @@ TEST (block, publish_req_serialization) TEST (block, difficulty) { nano::send_block block (0, 1, 2, nano::keypair ().prv, 4, 5); - ASSERT_EQ (block.difficulty (), nano::dev::network_params.network.publish_thresholds.difficulty (block.work_version (), block.root (), block.block_work ())); + ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.difficulty (block), nano::dev::network_params.network.publish_thresholds.difficulty (block.work_version (), block.root (), block.block_work ())); } TEST (state_block, serialization) diff --git a/nano/core_test/ledger.cpp b/nano/core_test/ledger.cpp index 6807d45e7e..7fbd351e9f 100644 --- a/nano/core_test/ledger.cpp +++ b/nano/core_test/ledger.cpp @@ -2895,7 +2895,7 @@ TEST (ledger, work_validation) auto process_block = [&store, &ledger, &pool] (nano::block & block_a, nano::block_details const details_a) { auto threshold = nano::dev::network_params.network.publish_thresholds.threshold (block_a.work_version (), details_a); // Rarely failed with random work, so modify until it doesn't have enough difficulty - while (block_a.difficulty () >= threshold) + while (nano::dev::network_params.network.publish_thresholds.difficulty (block_a) >= threshold) { block_a.block_work_set (block_a.block_work () + 1); } diff --git a/nano/core_test/node.cpp b/nano/core_test/node.cpp index 8a03fa97ff..3c55c62b5a 100644 --- a/nano/core_test/node.cpp +++ b/nano/core_test/node.cpp @@ -4550,7 +4550,7 @@ TEST (node, deferred_dependent_elections) ASSERT_TIMELY (2s, node2.block (send2->hash ())); // Re-processing older blocks with updated work also does not start an election - node.work_generate_blocking (*open, open->difficulty () + 1); + node.work_generate_blocking (*open, nano::dev::network_params.network.publish_thresholds.difficulty (*open) + 1); node.process_local (open); node.block_processor.flush (); node.scheduler.flush (); @@ -4563,7 +4563,7 @@ TEST (node, deferred_dependent_elections) ASSERT_FALSE (node.active.active (open->qualified_root ())); /// The election was dropped but it's still not possible to restart it - node.work_generate_blocking (*open, open->difficulty () + 1); + node.work_generate_blocking (*open, nano::dev::network_params.network.publish_thresholds.difficulty (*open) + 1); ASSERT_FALSE (node.active.active (open->qualified_root ())); node.process_local (open); node.block_processor.flush (); diff --git a/nano/core_test/wallet.cpp b/nano/core_test/wallet.cpp index 0c0a463e1b..82a18a5572 100644 --- a/nano/core_test/wallet.cpp +++ b/nano/core_test/wallet.cpp @@ -822,7 +822,7 @@ TEST (wallet, no_work) auto block (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key2.pub, std::numeric_limits::max (), false)); ASSERT_NE (nullptr, block); ASSERT_NE (0, block->block_work ()); - ASSERT_GE (block->difficulty (), nano::dev::network_params.network.publish_thresholds.threshold (block->work_version (), block->sideband ().details)); + ASSERT_GE (nano::dev::network_params.network.publish_thresholds.difficulty (*block), nano::dev::network_params.network.publish_thresholds.threshold (block->work_version (), block->sideband ().details)); auto transaction (system.wallet (0)->wallets.tx_begin_read ()); uint64_t cached_work (0); system.wallet (0)->store.work_get (transaction, nano::dev::genesis_key.pub, cached_work); @@ -1022,9 +1022,9 @@ TEST (wallet, epoch_2_validation) auto receive = wallet.receive_action (send->hash (), nano::dev::genesis_key.pub, amount, send->link ().as_account (), 1); ASSERT_NE (nullptr, receive); - if (receive->difficulty () < node.network_params.network.publish_thresholds.base) + if (nano::dev::network_params.network.publish_thresholds.difficulty (*receive) < node.network_params.network.publish_thresholds.base) { - ASSERT_GE (receive->difficulty (), node.network_params.network.publish_thresholds.epoch_2_receive); + ASSERT_GE (nano::dev::network_params.network.publish_thresholds.difficulty (*receive), node.network_params.network.publish_thresholds.epoch_2_receive); ASSERT_EQ (nano::epoch::epoch_2, receive->sideband ().details.epoch); ASSERT_EQ (nano::epoch::epoch_2, receive->sideband ().source_epoch); break; @@ -1074,9 +1074,9 @@ TEST (wallet, epoch_2_receive_propagation) auto receive2 = wallet.receive_action (send2->hash (), key.pub, amount, send2->link ().as_account (), 1); ASSERT_NE (nullptr, receive2); - if (receive2->difficulty () < node.network_params.network.publish_thresholds.base) + if (nano::dev::network_params.network.publish_thresholds.difficulty (*receive2) < node.network_params.network.publish_thresholds.base) { - ASSERT_GE (receive2->difficulty (), node.network_params.network.publish_thresholds.epoch_2_receive); + ASSERT_GE (nano::dev::network_params.network.publish_thresholds.difficulty (*receive2), node.network_params.network.publish_thresholds.epoch_2_receive); ASSERT_EQ (nano::epoch::epoch_2, node.store.block.version (node.store.tx_begin_read (), receive2->hash ())); ASSERT_EQ (nano::epoch::epoch_2, receive2->sideband ().source_epoch); break; @@ -1119,9 +1119,9 @@ TEST (wallet, epoch_2_receive_unopened) auto receive1 = wallet.receive_action (send1->hash (), key.pub, amount, send1->link ().as_account (), 1); ASSERT_NE (nullptr, receive1); - if (receive1->difficulty () < node.network_params.network.publish_thresholds.base) + if (nano::dev::network_params.network.publish_thresholds.difficulty (*receive1) < node.network_params.network.publish_thresholds.base) { - ASSERT_GE (receive1->difficulty (), node.network_params.network.publish_thresholds.epoch_2_receive); + ASSERT_GE (nano::dev::network_params.network.publish_thresholds.difficulty (*receive1), node.network_params.network.publish_thresholds.epoch_2_receive); ASSERT_EQ (nano::epoch::epoch_2, node.store.block.version (node.store.tx_begin_read (), receive1->hash ())); ASSERT_EQ (nano::epoch::epoch_1, receive1->sideband ().source_epoch); break; diff --git a/nano/core_test/work_pool.cpp b/nano/core_test/work_pool.cpp index 6c18ac486c..3451c622f4 100644 --- a/nano/core_test/work_pool.cpp +++ b/nano/core_test/work_pool.cpp @@ -19,7 +19,7 @@ TEST (work, one) nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::change_block block (1, 1, nano::keypair ().prv, 3, 4); block.block_work_set (*pool.generate (block.root ())); - ASSERT_LT (nano::dev::network_params.network.publish_thresholds.threshold_base (block.work_version ()), block.difficulty ()); + ASSERT_LT (nano::dev::network_params.network.publish_thresholds.threshold_base (block.work_version ()), nano::dev::network_params.network.publish_thresholds.difficulty (block)); } TEST (work, disabled) @@ -33,9 +33,9 @@ TEST (work, validate) { nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::send_block send_block (1, 1, 2, nano::keypair ().prv, 4, 6); - ASSERT_LT (send_block.difficulty (), nano::dev::network_params.network.publish_thresholds.threshold_base (send_block.work_version ())); + ASSERT_LT (nano::dev::network_params.network.publish_thresholds.difficulty (send_block), nano::dev::network_params.network.publish_thresholds.threshold_base (send_block.work_version ())); send_block.block_work_set (*pool.generate (send_block.root ())); - ASSERT_LT (nano::dev::network_params.network.publish_thresholds.threshold_base (send_block.work_version ()), send_block.difficulty ()); + ASSERT_LT (nano::dev::network_params.network.publish_thresholds.threshold_base (send_block.work_version ()), nano::dev::network_params.network.publish_thresholds.difficulty (send_block)); } TEST (work, cancel) diff --git a/nano/lib/blocks.cpp b/nano/lib/blocks.cpp index b803bfa255..8b6d319c6b 100644 --- a/nano/lib/blocks.cpp +++ b/nano/lib/blocks.cpp @@ -83,12 +83,6 @@ nano::work_version nano::block::work_version () const return nano::work_version::work_1; } -uint64_t nano::block::difficulty () const -{ - static nano::network_constants constants; - return constants.publish_thresholds.difficulty (this->work_version (), this->root (), this->block_work ()); -} - nano::block_hash nano::block::generate_hash () const { nano::block_hash result; diff --git a/nano/lib/blocks.hpp b/nano/lib/blocks.hpp index 29011bacaf..b3412f479d 100644 --- a/nano/lib/blocks.hpp +++ b/nano/lib/blocks.hpp @@ -113,7 +113,6 @@ class block virtual bool valid_predecessor (nano::block const &) const = 0; static size_t size (nano::block_type); virtual nano::work_version work_version () const; - uint64_t difficulty () const; // If there are any changes to the hashables, call this to update the cached hash void refresh (); diff --git a/nano/lib/config.cpp b/nano/lib/config.cpp index e07f7cddbb..6d2dc48e0e 100644 --- a/nano/lib/config.cpp +++ b/nano/lib/config.cpp @@ -193,6 +193,11 @@ uint64_t nano::work_thresholds::difficulty (nano::work_version const version_a, return result; } +uint64_t nano::work_thresholds::difficulty (nano::block const & block_a) const +{ + return difficulty (block_a.work_version (), block_a.root (), block_a.block_work ()); +} + bool nano::work_thresholds::validate_entry (nano::work_version const version_a, nano::root const & root_a, uint64_t const work_a) const { return difficulty (version_a, root_a, work_a) < threshold_entry (version_a, nano::block_type::state); @@ -200,7 +205,7 @@ bool nano::work_thresholds::validate_entry (nano::work_version const version_a, bool nano::work_thresholds::validate_entry (nano::block const & block_a) const { - return block_a.difficulty () < threshold_entry (block_a.work_version (), block_a.type ()); + return difficulty (block_a) < threshold_entry (block_a.work_version (), block_a.type ()); } namespace nano diff --git a/nano/lib/config.hpp b/nano/lib/config.hpp index 41f6a0f6ab..d1f4300dae 100644 --- a/nano/lib/config.hpp +++ b/nano/lib/config.hpp @@ -120,6 +120,7 @@ class work_thresholds double normalized_multiplier (double const, uint64_t const) const; double denormalized_multiplier (double const, uint64_t const) const; uint64_t difficulty (nano::work_version const, nano::root const &, uint64_t const) const; + uint64_t difficulty (nano::block const & block_a) const; bool validate_entry (nano::work_version const, nano::root const &, uint64_t const) const; bool validate_entry (nano::block const &) const; diff --git a/nano/nano_node/entry.cpp b/nano/nano_node/entry.cpp index 425d27861e..de3a146684 100644 --- a/nano/nano_node/entry.cpp +++ b/nano/nano_node/entry.cpp @@ -1567,7 +1567,7 @@ int main (int argc, char * const * argv) } } // Check if block work value is correct - if (block->difficulty () < node->network_params.network.publish_thresholds.threshold (block->work_version (), block->sideband ().details)) + if (node->network_params.network.publish_thresholds.difficulty (*block) < node->network_params.network.publish_thresholds.threshold (block->work_version (), block->sideband ().details)) { print_error_message (boost::str (boost::format ("Invalid work for block %1% value: %2%\n") % hash.to_string () % nano::to_string_hex (block->block_work ()))); } diff --git a/nano/node/blockprocessor.cpp b/nano/node/blockprocessor.cpp index 9e9184add1..e74fb6e823 100644 --- a/nano/node/blockprocessor.cpp +++ b/nano/node/blockprocessor.cpp @@ -501,7 +501,7 @@ nano::process_return nano::block_processor::process_one (nano::write_transaction { if (node.config.logging.ledger_logging ()) { - node.logger.try_log (boost::str (boost::format ("Insufficient work for %1% : %2% (difficulty %3%)") % hash.to_string () % nano::to_string_hex (block->block_work ()) % nano::to_string_hex (block->difficulty ()))); + node.logger.try_log (boost::str (boost::format ("Insufficient work for %1% : %2% (difficulty %3%)") % hash.to_string () % nano::to_string_hex (block->block_work ()) % nano::to_string_hex (node.network_params.network.publish_thresholds.difficulty (*block)))); } break; } diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index fe4fef2aad..7c74c4c377 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -1481,7 +1481,7 @@ void nano::json_handler::block_create () auto block_response_put_l = [rpc_l, this] (nano::block const & block_a) { boost::property_tree::ptree response_l; response_l.put ("hash", block_a.hash ().to_string ()); - response_l.put ("difficulty", nano::to_string_hex (block_a.difficulty ())); + response_l.put ("difficulty", nano::to_string_hex (rpc_l->node.network_params.network.publish_thresholds.difficulty (block_a))); bool json_block_l = request.get ("json_block", false); if (json_block_l) { @@ -4901,7 +4901,7 @@ void nano::json_handler::work_generate () difficulty = difficulty_ledger (*block); } // If optional block difficulty is higher than requested difficulty, send error - if (!ec && block->difficulty () >= difficulty) + if (!ec && node.network_params.network.publish_thresholds.difficulty (*block) >= difficulty) { ec = nano::error_rpc::block_work_enough; } diff --git a/nano/node/node.cpp b/nano/node/node.cpp index 9e6a75be0c..5628468f1c 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -1460,7 +1460,7 @@ void nano::node::epoch_upgrader_impl (nano::raw_key const & prv_a, nano::epoch e auto upgrader_process = [] (nano::node & node_a, std::atomic & counter, std::shared_ptr const & epoch, uint64_t difficulty, nano::public_key const & signer_a, nano::root const & root_a, nano::account const & account_a) { epoch->block_work_set (node_a.work_generate_blocking (nano::work_version::work_1, root_a, difficulty).value_or (0)); bool valid_signature (!nano::validate_message (signer_a, epoch->hash (), epoch->block_signature ())); - bool valid_work (epoch->difficulty () >= difficulty); + bool valid_work (node_a.network_params.network.publish_thresholds.difficulty (*epoch) >= difficulty); nano::process_result result (nano::process_result::old); if (valid_signature && valid_work) { diff --git a/nano/node/wallet.cpp b/nano/node/wallet.cpp index 32a53b0cb9..267b3527ec 100644 --- a/nano/node/wallet.cpp +++ b/nano/node/wallet.cpp @@ -1044,7 +1044,7 @@ bool nano::wallet::action_complete (std::shared_ptr const & block_a if (block_a != nullptr) { auto required_difficulty{ wallets.node.network_params.network.publish_thresholds.threshold (block_a->work_version (), details_a) }; - if (block_a->difficulty () < required_difficulty) + if (wallets.node.network_params.network.publish_thresholds.difficulty (*block_a) < required_difficulty) { wallets.node.logger.try_log (boost::str (boost::format ("Cached or provided work for block %1% account %2% is invalid, regenerating") % block_a->hash ().to_string () % account_a.to_account ())); debug_assert (required_difficulty <= wallets.node.max_work_generate_difficulty (block_a->work_version ())); diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index 49d7b82fbf..134757e875 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -1641,8 +1641,8 @@ TEST (rpc, process_ledger_insufficient_work) auto min_difficulty = node->network_params.network.publish_thresholds.entry; auto max_difficulty = node->network_params.network.publish_thresholds.epoch_1; nano::state_block send (nano::dev::genesis->account (), latest, nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, system.work_generate_limited (latest, min_difficulty, max_difficulty)); - ASSERT_LT (send.difficulty (), max_difficulty); - ASSERT_GE (send.difficulty (), min_difficulty); + ASSERT_LT (nano::dev::network_params.network.publish_thresholds.difficulty (send), max_difficulty); + ASSERT_GE (nano::dev::network_params.network.publish_thresholds.difficulty (send), min_difficulty); boost::property_tree::ptree request; request.put ("action", "process"); std::string json; @@ -2087,7 +2087,7 @@ TEST (rpc, work_generate_block_low) auto threshold (node->default_difficulty (block.work_version ())); block.block_work_set (system.work_generate_limited (block.root ().as_block_hash (), threshold, nano::difficulty::from_multiplier (node->config.max_work_generate_multiplier / 10, threshold))); nano::block_hash hash (block.root ().as_block_hash ()); - auto block_difficulty (block.difficulty ()); + auto block_difficulty (nano::dev::network_params.network.publish_thresholds.difficulty (block)); boost::property_tree::ptree request; request.put ("action", "work_generate"); request.put ("hash", hash.to_string ()); @@ -4228,7 +4228,7 @@ TEST (rpc, block_create) std::string send_hash (response.get ("hash")); ASSERT_EQ (send.hash ().to_string (), send_hash); std::string send_difficulty (response.get ("difficulty")); - ASSERT_EQ (nano::to_string_hex (send.difficulty ()), send_difficulty); + ASSERT_EQ (nano::to_string_hex (nano::dev::network_params.network.publish_thresholds.difficulty (send)), send_difficulty); auto send_text (response.get ("block")); boost::property_tree::ptree block_l; std::stringstream block_stream (send_text); @@ -4360,7 +4360,7 @@ TEST (rpc, block_create_state_open) ASSERT_NE (nullptr, state_block); ASSERT_EQ (nano::block_type::state, state_block->type ()); ASSERT_EQ (state_hash, state_block->hash ().to_string ()); - auto difficulty (state_block->difficulty ()); + auto difficulty (nano::dev::network_params.network.publish_thresholds.difficulty (*state_block)); ASSERT_GT (difficulty, nano::dev::network_params.network.publish_thresholds.threshold (state_block->work_version (), nano::block_details (nano::epoch::epoch_0, false, true, false))); ASSERT_TRUE (node->latest (key.pub).is_zero ()); rpc_ctx->io_scope->reset (); @@ -4406,7 +4406,7 @@ TEST (rpc, block_create_state_request_work) boost::property_tree::read_json (block_stream, block_l); auto block (nano::deserialize_block_json (block_l)); ASSERT_NE (nullptr, block); - ASSERT_GE (block->difficulty (), node->default_difficulty (nano::work_version::work_1)); + ASSERT_GE (nano::dev::network_params.network.publish_thresholds.difficulty (*block), node->default_difficulty (nano::work_version::work_1)); } } @@ -4440,7 +4440,7 @@ TEST (rpc, block_create_open_epoch_v2) ASSERT_NE (nullptr, state_block); ASSERT_EQ (nano::block_type::state, state_block->type ()); ASSERT_EQ (state_hash, state_block->hash ().to_string ()); - auto difficulty (state_block->difficulty ()); + auto difficulty (nano::dev::network_params.network.publish_thresholds.difficulty (*state_block)); ASSERT_GT (difficulty, nano::dev::network_params.network.publish_thresholds.threshold (state_block->work_version (), nano::block_details (nano::epoch::epoch_2, false, true, false))); ASSERT_TRUE (node->latest (key.pub).is_zero ()); rpc_ctx->io_scope->reset (); @@ -4484,7 +4484,7 @@ TEST (rpc, block_create_receive_epoch_v2) ASSERT_NE (nullptr, state_block); ASSERT_EQ (nano::block_type::state, state_block->type ()); ASSERT_EQ (state_hash, state_block->hash ().to_string ()); - auto difficulty (state_block->difficulty ()); + auto difficulty (nano::dev::network_params.network.publish_thresholds.difficulty (*state_block)); ASSERT_GT (difficulty, nano::dev::network_params.network.publish_thresholds.threshold (state_block->work_version (), nano::block_details (nano::epoch::epoch_2, false, true, false))); rpc_ctx->io_scope->reset (); auto process_result (node->process (*state_block)); @@ -4526,7 +4526,7 @@ TEST (rpc, block_create_send_epoch_v2) ASSERT_NE (nullptr, state_block); ASSERT_EQ (nano::block_type::state, state_block->type ()); ASSERT_EQ (state_hash, state_block->hash ().to_string ()); - auto difficulty (state_block->difficulty ()); + auto difficulty (nano::dev::network_params.network.publish_thresholds.difficulty (*state_block)); ASSERT_GT (difficulty, nano::dev::network_params.network.publish_thresholds.threshold (state_block->work_version (), nano::block_details (nano::epoch::epoch_2, true, false, false))); rpc_ctx->io_scope->reset (); auto process_result (node->process (*state_block)); diff --git a/nano/secure/ledger.cpp b/nano/secure/ledger.cpp index 0f15c0fcc0..869b95215c 100644 --- a/nano/secure/ledger.cpp +++ b/nano/secure/ledger.cpp @@ -346,7 +346,7 @@ void ledger_processor::state_block_impl (nano::state_block & block_a) if (result.code == nano::process_result::progress) { nano::block_details block_details (epoch, is_send, is_receive, false); - result.code = block_a.difficulty () >= ledger.constants.work.threshold (block_a.work_version (), block_details) ? nano::process_result::progress : nano::process_result::insufficient_work; // Does this block have sufficient work? (Malformed) + result.code = ledger.constants.work.difficulty (block_a) >= ledger.constants.work.threshold (block_a.work_version (), block_details) ? nano::process_result::progress : nano::process_result::insufficient_work; // Does this block have sufficient work? (Malformed) if (result.code == nano::process_result::progress) { ledger.stats.inc (nano::stat::type::ledger, nano::stat::detail::state_block); @@ -446,7 +446,7 @@ void ledger_processor::epoch_block_impl (nano::state_block & block_a) if (result.code == nano::process_result::progress) { nano::block_details block_details (epoch, false, false, true); - result.code = block_a.difficulty () >= ledger.constants.work.threshold (block_a.work_version (), block_details) ? nano::process_result::progress : nano::process_result::insufficient_work; // Does this block have sufficient work? (Malformed) + result.code = ledger.constants.work.difficulty (block_a) >= ledger.constants.work.threshold (block_a.work_version (), block_details) ? nano::process_result::progress : nano::process_result::insufficient_work; // Does this block have sufficient work? (Malformed) if (result.code == nano::process_result::progress) { ledger.stats.inc (nano::stat::type::ledger, nano::stat::detail::epoch_block); @@ -498,7 +498,7 @@ void ledger_processor::change_block (nano::change_block & block_a) if (result.code == nano::process_result::progress) { nano::block_details block_details (nano::epoch::epoch_0, false /* unused */, false /* unused */, false /* unused */); - result.code = block_a.difficulty () >= ledger.constants.work.threshold (block_a.work_version (), block_details) ? nano::process_result::progress : nano::process_result::insufficient_work; // Does this block have sufficient work? (Malformed) + result.code = ledger.constants.work.difficulty (block_a) >= ledger.constants.work.threshold (block_a.work_version (), block_details) ? nano::process_result::progress : nano::process_result::insufficient_work; // Does this block have sufficient work? (Malformed) if (result.code == nano::process_result::progress) { debug_assert (!validate_message (account, hash, block_a.signature)); @@ -547,7 +547,7 @@ void ledger_processor::send_block (nano::send_block & block_a) if (result.code == nano::process_result::progress) { nano::block_details block_details (nano::epoch::epoch_0, false /* unused */, false /* unused */, false /* unused */); - result.code = block_a.difficulty () >= ledger.constants.work.threshold (block_a.work_version (), block_details) ? nano::process_result::progress : nano::process_result::insufficient_work; // Does this block have sufficient work? (Malformed) + result.code = ledger.constants.work.difficulty (block_a) >= ledger.constants.work.threshold (block_a.work_version (), block_details) ? nano::process_result::progress : nano::process_result::insufficient_work; // Does this block have sufficient work? (Malformed) if (result.code == nano::process_result::progress) { debug_assert (!validate_message (account, hash, block_a.signature)); @@ -624,7 +624,7 @@ void ledger_processor::receive_block (nano::receive_block & block_a) if (result.code == nano::process_result::progress) { nano::block_details block_details (nano::epoch::epoch_0, false /* unused */, false /* unused */, false /* unused */); - result.code = block_a.difficulty () >= ledger.constants.work.threshold (block_a.work_version (), block_details) ? nano::process_result::progress : nano::process_result::insufficient_work; // Does this block have sufficient work? (Malformed) + result.code = ledger.constants.work.difficulty (block_a) >= ledger.constants.work.threshold (block_a.work_version (), block_details) ? nano::process_result::progress : nano::process_result::insufficient_work; // Does this block have sufficient work? (Malformed) if (result.code == nano::process_result::progress) { auto new_balance (info.balance.number () + pending.amount.number ()); @@ -697,7 +697,7 @@ void ledger_processor::open_block (nano::open_block & block_a) if (result.code == nano::process_result::progress) { nano::block_details block_details (nano::epoch::epoch_0, false /* unused */, false /* unused */, false /* unused */); - result.code = block_a.difficulty () >= ledger.constants.work.threshold (block_a.work_version (), block_details) ? nano::process_result::progress : nano::process_result::insufficient_work; // Does this block have sufficient work? (Malformed) + result.code = ledger.constants.work.difficulty (block_a) >= ledger.constants.work.threshold (block_a.work_version (), block_details) ? nano::process_result::progress : nano::process_result::insufficient_work; // Does this block have sufficient work? (Malformed) if (result.code == nano::process_result::progress) { #ifdef NDEBUG From ebcf70e96e5229a3cfe2756ddac1d210ef73c5d8 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Tue, 10 Aug 2021 13:50:57 +0100 Subject: [PATCH 171/346] Pulling a work_thresholds reference through opencl_work class so it doesn't need a static reference. --- nano/core_test/work_pool.cpp | 2 +- nano/nano_node/daemon.cpp | 2 +- nano/nano_node/entry.cpp | 2 +- nano/nano_wallet/entry.cpp | 2 +- nano/node/openclwork.cpp | 12 ++++++------ nano/node/openclwork.hpp | 5 +++-- 6 files changed, 13 insertions(+), 12 deletions(-) diff --git a/nano/core_test/work_pool.cpp b/nano/core_test/work_pool.cpp index 3451c622f4..1487b79d98 100644 --- a/nano/core_test/work_pool.cpp +++ b/nano/core_test/work_pool.cpp @@ -85,7 +85,7 @@ TEST (work, opencl) if (!environment.platforms.empty () && !environment.platforms.begin ()->devices.empty ()) { nano::opencl_config config (0, 0, 16 * 1024); - auto opencl (nano::opencl_work::create (true, config, logger)); + auto opencl (nano::opencl_work::create (true, config, logger, nano::dev::network_params.network.publish_thresholds)); if (opencl != nullptr) { // 0 threads, should add 1 for managing OpenCL diff --git a/nano/nano_node/daemon.cpp b/nano/nano_node/daemon.cpp index 3f37c2062c..6d504c8696 100644 --- a/nano/nano_node/daemon.cpp +++ b/nano/nano_node/daemon.cpp @@ -60,7 +60,7 @@ void nano_daemon::daemon::run (boost::filesystem::path const & data_path, nano:: config.node.logging.init (data_path); nano::logger_mt logger{ config.node.logging.min_time_between_log_output }; boost::asio::io_context io_ctx; - auto opencl (nano::opencl_work::create (config.opencl_enable, config.opencl, logger)); + auto opencl (nano::opencl_work::create (config.opencl_enable, config.opencl, logger, config.node.network_params.network.publish_thresholds)); nano::work_pool opencl_work (config.node.network_params.network, config.node.work_threads, config.node.pow_sleep_interval, opencl ? [&opencl] (nano::work_version const version_a, nano::root const & root_a, uint64_t difficulty_a, std::atomic & ticket_a) { return opencl->generate_work (version_a, root_a, difficulty_a, ticket_a); } diff --git a/nano/nano_node/entry.cpp b/nano/nano_node/entry.cpp index de3a146684..eb6b9fdc3f 100644 --- a/nano/nano_node/entry.cpp +++ b/nano/nano_node/entry.cpp @@ -610,7 +610,7 @@ int main (int argc, char * const * argv) { nano::logger_mt logger; nano::opencl_config config (platform, device, threads); - auto opencl (nano::opencl_work::create (true, config, logger)); + auto opencl (nano::opencl_work::create (true, config, logger, network_constants.publish_thresholds)); nano::work_pool work_pool{ network_constants, 0, std::chrono::nanoseconds (0), opencl ? [&opencl] (nano::work_version const version_a, nano::root const & root_a, uint64_t difficulty_a, std::atomic &) { return opencl->generate_work (version_a, root_a, difficulty_a); } diff --git a/nano/nano_wallet/entry.cpp b/nano/nano_wallet/entry.cpp index b37c7e27db..1ee061bea9 100644 --- a/nano/nano_wallet/entry.cpp +++ b/nano/nano_wallet/entry.cpp @@ -106,7 +106,7 @@ int run_wallet (QApplication & application, int argc, char * const * argv, boost std::shared_ptr node; std::shared_ptr gui; nano::set_application_icon (application); - auto opencl (nano::opencl_work::create (config.opencl_enable, config.opencl, logger)); + auto opencl (nano::opencl_work::create (config.opencl_enable, config.opencl, logger, config.node.network_params.network.publish_thresholds)); nano::work_pool work{ config.node.network_params.network, config.node.work_threads, config.node.pow_sleep_interval, opencl ? [&opencl] (nano::work_version const version_a, nano::root const & root_a, uint64_t difficulty_a, std::atomic &) { return opencl->generate_work (version_a, root_a, difficulty_a); } diff --git a/nano/node/openclwork.cpp b/nano/node/openclwork.cpp index 48a3ed8d21..34e653761a 100644 --- a/nano/node/openclwork.cpp +++ b/nano/node/openclwork.cpp @@ -250,7 +250,7 @@ void nano::opencl_environment::dump (std::ostream & stream) } } -nano::opencl_work::opencl_work (bool & error_a, nano::opencl_config const & config_a, nano::opencl_environment & environment_a, nano::logger_mt & logger_a) : +nano::opencl_work::opencl_work (bool & error_a, nano::opencl_config const & config_a, nano::opencl_environment & environment_a, nano::logger_mt & logger_a, nano::work_thresholds & work) : config (config_a), context (0), attempt_buffer (0), @@ -260,7 +260,8 @@ nano::opencl_work::opencl_work (bool & error_a, nano::opencl_config const & conf program (0), kernel (0), queue (0), - logger (logger_a) + logger (logger_a), + work{ work } { error_a |= config.platform >= environment_a.platforms.size (); if (!error_a) @@ -455,8 +456,7 @@ boost::optional nano::opencl_work::generate_work (nano::work_version c uint64_t result (0); unsigned thread_count (config.threads); size_t work_size[] = { thread_count, 0, 0 }; - static nano::network_constants constants; - while (constants.publish_thresholds.difficulty (version_a, root_a, result) < difficulty_a && !error && ticket_a == ticket_l) + while (work.difficulty (version_a, root_a, result) < difficulty_a && !error && ticket_a == ticket_l) { result = rand.next (); cl_int write_error1 = clEnqueueWriteBuffer (queue, attempt_buffer, false, 0, sizeof (uint64_t), &result, 0, nullptr, nullptr); @@ -522,7 +522,7 @@ boost::optional nano::opencl_work::generate_work (nano::work_version c return value; } -std::unique_ptr nano::opencl_work::create (bool create_a, nano::opencl_config const & config_a, nano::logger_mt & logger_a) +std::unique_ptr nano::opencl_work::create (bool create_a, nano::opencl_config const & config_a, nano::logger_mt & logger_a, nano::work_thresholds & work) { std::unique_ptr result; if (create_a) @@ -534,7 +534,7 @@ std::unique_ptr nano::opencl_work::create (bool create_a, nan logger_a.always_log (stream.str ()); if (!error) { - result.reset (new nano::opencl_work (error, config_a, environment, logger_a)); + result.reset (new nano::opencl_work (error, config_a, environment, logger_a, work)); if (error) { result.reset (); diff --git a/nano/node/openclwork.hpp b/nano/node/openclwork.hpp index b7e4b5041c..2f452e092e 100644 --- a/nano/node/openclwork.hpp +++ b/nano/node/openclwork.hpp @@ -40,11 +40,11 @@ class work_pool; class opencl_work { public: - opencl_work (bool &, nano::opencl_config const &, nano::opencl_environment &, nano::logger_mt &); + opencl_work (bool &, nano::opencl_config const &, nano::opencl_environment &, nano::logger_mt &, nano::work_thresholds & work); ~opencl_work (); boost::optional generate_work (nano::work_version const, nano::root const &, uint64_t const); boost::optional generate_work (nano::work_version const, nano::root const &, uint64_t const, std::atomic &); - static std::unique_ptr create (bool, nano::opencl_config const &, nano::logger_mt &); + static std::unique_ptr create (bool, nano::opencl_config const &, nano::logger_mt &, nano::work_thresholds & work); nano::opencl_config const & config; nano::mutex mutex; cl_context context; @@ -57,5 +57,6 @@ class opencl_work cl_command_queue queue; nano::xorshift1024star rand; nano::logger_mt & logger; + nano::work_thresholds & work; }; } From a56a8d1eee4625f08dfa3b2fe867a7d676889298 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Tue, 10 Aug 2021 15:49:28 +0100 Subject: [PATCH 172/346] Removing empty constructor from network_constants. --- nano/core_test/distributed_work.cpp | 4 ++-- nano/core_test/fakes/work_peer.hpp | 11 ++++------- nano/lib/config.hpp | 5 ----- nano/load_test/entry.cpp | 3 +-- nano/nano_node/entry.cpp | 19 ++++++++----------- nano/nano_rpc/entry.cpp | 4 ++-- nano/node/json_handler.cpp | 2 +- nano/node/node.cpp | 3 +-- nano/node/nodeconfig.cpp | 8 +++----- nano/test_common/system.cpp | 6 ++---- 10 files changed, 24 insertions(+), 41 deletions(-) diff --git a/nano/core_test/distributed_work.cpp b/nano/core_test/distributed_work.cpp index 8c3a67011c..00fbbcbb22 100644 --- a/nano/core_test/distributed_work.cpp +++ b/nano/core_test/distributed_work.cpp @@ -10,7 +10,7 @@ TEST (distributed_work, stopped) { nano::system system (1); system.nodes[0]->distributed_work.stop (); - ASSERT_TRUE (system.nodes[0]->distributed_work.make (nano::work_version::work_1, nano::block_hash (), {}, nano::network_constants ().publish_thresholds.base, {})); + ASSERT_TRUE (system.nodes[0]->distributed_work.make (nano::work_version::work_1, nano::block_hash (), {}, nano::dev::network_params.network.publish_thresholds.base, {})); } TEST (distributed_work, no_peers) @@ -43,7 +43,7 @@ TEST (distributed_work, no_peers_disabled) nano::node_config node_config (nano::get_available_port (), system.logging); node_config.work_threads = 0; auto & node = *system.add_node (node_config); - ASSERT_TRUE (node.distributed_work.make (nano::work_version::work_1, nano::block_hash (), node.config.work_peers, nano::network_constants ().publish_thresholds.base, {})); + ASSERT_TRUE (node.distributed_work.make (nano::work_version::work_1, nano::block_hash (), node.config.work_peers, nano::dev::network_params.network.publish_thresholds.base, {})); } TEST (distributed_work, no_peers_cancel) diff --git a/nano/core_test/fakes/work_peer.hpp b/nano/core_test/fakes/work_peer.hpp index 82a64e97c5..5192b8b168 100644 --- a/nano/core_test/fakes/work_peer.hpp +++ b/nano/core_test/fakes/work_peer.hpp @@ -138,20 +138,17 @@ class work_peer_connection : public std::enable_shared_from_this work_a) { + auto request_difficulty = work_pool.network_constants.publish_thresholds.threshold_base (version); + work_pool.generate (version, hash, request_difficulty, [this_l = shared_from_this (), hash] (boost::optional work_a) { auto result = work_a.value_or (0); - static nano::network_constants constants; - auto result_difficulty (constants.publish_thresholds.difficulty (this_l->version, hash, result)); + auto result_difficulty (this_l->work_pool.network_constants.publish_thresholds.difficulty (this_l->version, hash, result)); ptree::ptree message_l; message_l.put ("work", nano::to_string_hex (result)); message_l.put ("difficulty", nano::to_string_hex (result_difficulty)); - message_l.put ("multiplier", nano::to_string (nano::difficulty::to_multiplier (result_difficulty, constants.publish_thresholds.threshold_base (this_l->version)))); + message_l.put ("multiplier", nano::to_string (nano::difficulty::to_multiplier (result_difficulty, this_l->work_pool.network_constants.publish_thresholds.threshold_base (this_l->version)))); message_l.put ("hash", hash.to_string ()); std::stringstream ostream; ptree::write_json (ostream, message_l); diff --git a/nano/lib/config.hpp b/nano/lib/config.hpp index d1f4300dae..f0b84bb500 100644 --- a/nano/lib/config.hpp +++ b/nano/lib/config.hpp @@ -134,11 +134,6 @@ class work_thresholds class network_constants { public: - network_constants () : - network_constants (network_constants::active_network) - { - } - network_constants (nano::networks network_a) : current_network (network_a), publish_thresholds (is_live_network () ? nano::work_thresholds::publish_full : is_beta_network () ? nano::work_thresholds::publish_beta : is_test_network () ? nano::work_thresholds::publish_test : nano::work_thresholds::publish_dev) diff --git a/nano/load_test/entry.cpp b/nano/load_test/entry.cpp index 042743f3fe..cd4803ccb6 100644 --- a/nano/load_test/entry.cpp +++ b/nano/load_test/entry.cpp @@ -360,8 +360,7 @@ int main (int argc, char * const * argv) data_paths.push_back (std::move (data_path)); } - nano::network_constants network_constants; - auto current_network = network_constants.get_current_network_as_string (); + auto current_network = nano::dev::network_params.network.get_current_network_as_string (); std::vector> nodes; std::vector> rpc_servers; for (auto const & data_path : data_paths) diff --git a/nano/nano_node/entry.cpp b/nano/nano_node/entry.cpp index eb6b9fdc3f..83954349d8 100644 --- a/nano/nano_node/entry.cpp +++ b/nano/nano_node/entry.cpp @@ -139,6 +139,7 @@ int main (int argc, char * const * argv) } } + nano::network_params network_params{ nano::network_constants::active_network }; auto data_path_it = vm.find ("data_path"); boost::filesystem::path data_path ((data_path_it != vm.end ()) ? data_path_it->second.as () : nano::working_path ()); auto ec = nano::handle_node_options (vm); @@ -158,7 +159,7 @@ int main (int argc, char * const * argv) } else if (vm.count ("compare_rep_weights")) { - if (!nano::network_constants ().is_dev_network ()) + if (nano::network_constants::active_network != nano::networks::nano_dev_network) { auto node_flags = nano::inactive_node_flag_defaults (); nano::update_flags (node_flags, vm); @@ -339,9 +340,8 @@ int main (int argc, char * const * argv) << "Public: " << rep.pub.to_string () << "\n" << "Account: " << rep.pub.to_account () << "\n"; } - nano::network_constants network_constants; nano::uint128_t balance (std::numeric_limits::max ()); - nano::open_block genesis_block (reinterpret_cast (genesis.pub), genesis.pub, genesis.pub, genesis.prv, genesis.pub, *work.generate (nano::work_version::work_1, genesis.pub, network_constants.publish_thresholds.epoch_1)); + nano::open_block genesis_block (reinterpret_cast (genesis.pub), genesis.pub, genesis.pub, genesis.prv, genesis.pub, *work.generate (nano::work_version::work_1, genesis.pub, network_params.network.publish_thresholds.epoch_1)); std::cout << genesis_block.to_json (); std::cout.flush (); nano::block_hash previous (genesis_block.hash ()); @@ -353,7 +353,7 @@ int main (int argc, char * const * argv) { debug_assert (balance > weekly_distribution); balance = balance < (weekly_distribution * 2) ? 0 : balance - weekly_distribution; - nano::send_block send (previous, landing.pub, balance, genesis.prv, genesis.pub, *work.generate (nano::work_version::work_1, previous, network_constants.publish_thresholds.epoch_1)); + nano::send_block send (previous, landing.pub, balance, genesis.prv, genesis.pub, *work.generate (nano::work_version::work_1, previous, network_params.network.publish_thresholds.epoch_1)); previous = send.hash (); std::cout << send.to_json (); std::cout.flush (); @@ -455,7 +455,6 @@ int main (int argc, char * const * argv) } else if (vm.count ("debug_profile_generate")) { - nano::network_constants network_constants; uint64_t difficulty{ nano::work_thresholds::publish_full.base }; auto multiplier_it = vm.find ("multiplier"); if (multiplier_it != vm.end ()) @@ -491,7 +490,7 @@ int main (int argc, char * const * argv) pow_rate_limiter = std::chrono::nanoseconds (boost::lexical_cast (pow_sleep_interval_it->second.as ())); } - nano::work_pool work{ network_constants, std::numeric_limits::max (), pow_rate_limiter }; + nano::work_pool work{ network_params.network, std::numeric_limits::max (), pow_rate_limiter }; nano::change_block block (0, 0, nano::keypair ().prv, 0, 0); if (!result) { @@ -508,7 +507,6 @@ int main (int argc, char * const * argv) } else if (vm.count ("debug_profile_validate")) { - nano::network_constants network_constants; uint64_t difficulty{ nano::work_thresholds::publish_full.base }; std::cerr << "Starting validation profile" << std::endl; auto start (std::chrono::steady_clock::now ()); @@ -517,7 +515,7 @@ int main (int argc, char * const * argv) uint64_t count{ 10000000U }; // 10M for (uint64_t i (0); i < count; ++i) { - valid = network_constants.publish_thresholds.value (hash, i) > difficulty; + valid = network_params.network.publish_thresholds.value (hash, i) > difficulty; } std::ostringstream oss (valid ? "true" : "false"); // IO forces compiler to not dismiss the variable auto total_time (std::chrono::duration_cast (std::chrono::steady_clock::now () - start).count ()); @@ -526,7 +524,6 @@ int main (int argc, char * const * argv) } else if (vm.count ("debug_opencl")) { - nano::network_constants network_constants; bool error (false); nano::opencl_environment environment (error); if (!error) @@ -610,8 +607,8 @@ int main (int argc, char * const * argv) { nano::logger_mt logger; nano::opencl_config config (platform, device, threads); - auto opencl (nano::opencl_work::create (true, config, logger, network_constants.publish_thresholds)); - nano::work_pool work_pool{ network_constants, 0, std::chrono::nanoseconds (0), opencl ? [&opencl] (nano::work_version const version_a, nano::root const & root_a, uint64_t difficulty_a, std::atomic &) { + auto opencl (nano::opencl_work::create (true, config, logger, network_params.network.publish_thresholds)); + nano::work_pool work_pool{ network_params.network, 0, std::chrono::nanoseconds (0), opencl ? [&opencl] (nano::work_version const version_a, nano::root const & root_a, uint64_t difficulty_a, std::atomic &) { return opencl->generate_work (version_a, root_a, difficulty_a); } : std::function (nano::work_version const, nano::root const &, uint64_t, std::atomic &)> (nullptr) }; diff --git a/nano/nano_rpc/entry.cpp b/nano/nano_rpc/entry.cpp index 87b4429b5d..c69eb01724 100644 --- a/nano/nano_rpc/entry.cpp +++ b/nano/nano_rpc/entry.cpp @@ -39,9 +39,9 @@ void run (boost::filesystem::path const & data_path, std::vector co boost::system::error_code error_chmod; nano::set_secure_perm_directory (data_path, error_chmod); std::unique_ptr runner; - nano::network_constants network; - nano::rpc_config rpc_config{ network }; + nano::network_params network_params{ nano::network_constants::active_network }; + nano::rpc_config rpc_config{ network_params.network }; auto error = nano::read_rpc_config_toml (data_path, rpc_config, config_overrides); if (!error) { diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index 7c74c4c377..1bee422441 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -60,7 +60,7 @@ void nano::json_handler::process_request (bool unsafe_a) boost::property_tree::read_json (istream, request); if (node_rpc_config.request_callback) { - debug_assert (nano::network_constants ().is_dev_network ()); + debug_assert (node.network_params.network.is_dev_network ()); node_rpc_config.request_callback (request); } action = request.get ("action"); diff --git a/nano/node/node.cpp b/nano/node/node.cpp index 5628468f1c..7bdf6b755b 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -1110,12 +1110,11 @@ int nano::node::price (nano::uint128_t const & balance_a, int amount_a) uint64_t nano::node::default_difficulty (nano::work_version const version_a) const { - nano::network_constants constants; uint64_t result{ std::numeric_limits::max () }; switch (version_a) { case nano::work_version::work_1: - result = constants.publish_thresholds.threshold_base (version_a); + result = network_params.network.publish_thresholds.threshold_base (version_a); break; default: debug_assert (false && "Invalid version specified to default_difficulty"); diff --git a/nano/node/nodeconfig.cpp b/nano/node/nodeconfig.cpp index e5a3fc4b77..14caebbc18 100644 --- a/nano/node/nodeconfig.cpp +++ b/nano/node/nodeconfig.cpp @@ -351,7 +351,6 @@ nano::error nano::node_config::deserialize_toml (nano::tomlconfig & toml) toml.get ("conf_height_processor_batch_min_time", conf_height_processor_batch_min_time_l); conf_height_processor_batch_min_time = std::chrono::milliseconds (conf_height_processor_batch_min_time_l); - nano::network_constants network; toml.get ("max_work_generate_multiplier", max_work_generate_multiplier); toml.get ("max_queued_requests", max_queued_requests); @@ -392,7 +391,7 @@ nano::error nano::node_config::deserialize_toml (nano::tomlconfig & toml) { toml.get_error ().set ("io_threads must be non-zero"); } - if (active_elections_size <= 250 && !network.is_dev_network ()) + if (active_elections_size <= 250 && !network_params.network.is_dev_network ()) { toml.get_error ().set ("active_elections_size must be greater than 250"); } @@ -416,7 +415,7 @@ nano::error nano::node_config::deserialize_toml (nano::tomlconfig & toml) { toml.get_error ().set ((boost::format ("block_processor_batch_max_time value must be equal or larger than %1%ms") % network_params.node.process_confirmed_interval.count ()).str ()); } - if (max_pruning_age < std::chrono::seconds (5 * 60) && !network.is_dev_network ()) + if (max_pruning_age < std::chrono::seconds (5 * 60) && !network_params.network.is_dev_network ()) { toml.get_error ().set ("max_pruning_age must be greater than or equal to 5 minutes"); } @@ -684,7 +683,6 @@ nano::error nano::node_config::deserialize_json (bool & upgraded_a, nano::jsonco json.get ("conf_height_processor_batch_min_time", conf_height_processor_batch_min_time_l); conf_height_processor_batch_min_time = std::chrono::milliseconds (conf_height_processor_batch_min_time_l); - nano::network_constants network; // Validate ranges if (password_fanout < 16 || password_fanout > 1024 * 1024) { @@ -694,7 +692,7 @@ nano::error nano::node_config::deserialize_json (bool & upgraded_a, nano::jsonco { json.get_error ().set ("io_threads must be non-zero"); } - if (active_elections_size <= 250 && !network.is_dev_network ()) + if (active_elections_size <= 250 && !network_params.network.is_dev_network ()) { json.get_error ().set ("active_elections_size must be greater than 250"); } diff --git a/nano/test_common/system.cpp b/nano/test_common/system.cpp index ecc4623e7f..24fd99e136 100644 --- a/nano/test_common/system.cpp +++ b/nano/test_common/system.cpp @@ -202,11 +202,10 @@ uint64_t nano::system::work_generate_limited (nano::block_hash const & root_a, u { debug_assert (min_a > 0); uint64_t result = 0; - static nano::network_constants constants; do { result = *work.generate (root_a, min_a); - } while (constants.publish_thresholds.difficulty (nano::work_version::work_1, root_a, result) >= max_a); + } while (work.network_constants.publish_thresholds.difficulty (nano::work_version::work_1, root_a, result) >= max_a); return result; } @@ -220,7 +219,6 @@ std::unique_ptr nano::upgrade_epoch (nano::work_pool & pool_a nano::state_block_builder builder; std::error_code ec; - static nano::network_constants constants; auto epoch = builder .account (dev_genesis_key.pub) .previous (latest) @@ -228,7 +226,7 @@ std::unique_ptr nano::upgrade_epoch (nano::work_pool & pool_a .link (ledger_a.epoch_link (epoch_a)) .representative (dev_genesis_key.pub) .sign (dev_genesis_key.prv, dev_genesis_key.pub) - .work (*pool_a.generate (latest, constants.publish_thresholds.threshold (nano::work_version::work_1, nano::block_details (epoch_a, false, false, true)))) + .work (*pool_a.generate (latest, pool_a.network_constants.publish_thresholds.threshold (nano::work_version::work_1, nano::block_details (epoch_a, false, false, true)))) .build (ec); bool error{ true }; From a8db7e78a3620535fe405714fdbf56186d385a63 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Tue, 10 Aug 2021 20:37:43 +0100 Subject: [PATCH 173/346] Changing node_config from holding a copy of nano::network_params to holding a reference. --- nano/node/nodeconfig.cpp | 6 +++--- nano/node/nodeconfig.hpp | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/nano/node/nodeconfig.cpp b/nano/node/nodeconfig.cpp index 14caebbc18..2d26bb83ba 100644 --- a/nano/node/nodeconfig.cpp +++ b/nano/node/nodeconfig.cpp @@ -20,12 +20,12 @@ const char * default_live_peer_network = "peering.nano.org"; const std::string default_test_peer_network = nano::get_env_or_default ("NANO_TEST_PEER_NETWORK", "peering-test.nano.org"); } -nano::node_config::node_config () : - node_config (0, nano::logging (), nano::network_params{ nano::network_constants::active_network }) +nano::node_config::node_config (nano::network_params & network_params) : + node_config (0, nano::logging (), network_params) { } -nano::node_config::node_config (uint16_t peering_port_a, nano::logging const & logging_a, nano::network_params network_params) : +nano::node_config::node_config (uint16_t peering_port_a, nano::logging const & logging_a, nano::network_params & network_params) : network_params{ network_params }, peering_port{ peering_port_a }, logging{ logging_a }, diff --git a/nano/node/nodeconfig.hpp b/nano/node/nodeconfig.hpp index 626a673631..3a3ee92db8 100644 --- a/nano/node/nodeconfig.hpp +++ b/nano/node/nodeconfig.hpp @@ -34,15 +34,15 @@ enum class frontiers_confirmation_mode : uint8_t class node_config { public: - node_config (); - node_config (uint16_t, nano::logging const &, nano::network_params network_params = nano::dev::network_params); + node_config (nano::network_params & network_params = nano::dev::network_params); + node_config (uint16_t, nano::logging const &, nano::network_params & network_params = nano::dev::network_params); nano::error serialize_json (nano::jsonconfig &) const; nano::error deserialize_json (bool &, nano::jsonconfig &); nano::error serialize_toml (nano::tomlconfig &) const; nano::error deserialize_toml (nano::tomlconfig &); bool upgrade_json (unsigned, nano::jsonconfig &); nano::account random_representative () const; - nano::network_params network_params; + nano::network_params & network_params; uint16_t peering_port{ 0 }; nano::logging logging; std::vector> work_peers; From 7d4bc91af53c876b66a8e843040db37bc0ecc848 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Tue, 10 Aug 2021 23:02:44 +0100 Subject: [PATCH 174/346] Rewriting how telemetry tests are run so their modifications don't alias with other instances of ledger_constants. --- nano/core_test/telemetry.cpp | 33 ++++++++------------------------- 1 file changed, 8 insertions(+), 25 deletions(-) diff --git a/nano/core_test/telemetry.cpp b/nano/core_test/telemetry.cpp index b46e01ad7f..ae8ebce2fd 100644 --- a/nano/core_test/telemetry.cpp +++ b/nano/core_test/telemetry.cpp @@ -550,20 +550,11 @@ TEST (telemetry, remove_peer_different_genesis) nano::system system (1); auto node0 (system.nodes[0]); ASSERT_EQ (0, node0->network.size ()); - auto node1 (std::make_shared (system.io_ctx, nano::get_available_port (), nano::unique_path (), system.logging, system.work)); // Change genesis block to something else in this test (this is the reference telemetry processing uses). - // Possible TSAN issue in the future if something else uses this, but will only appear in tests. - nano::state_block_builder builder; - auto junk = builder - .account (nano::dev::genesis_key.pub) - .previous (0) - .representative (nano::dev::genesis_key.pub) - .balance (0) - .link (0) - .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (0) - .build_shared (); - node1->network_params.ledger.genesis = junk; + nano::network_params network_params{ nano::networks::nano_dev_network }; + network_params.ledger.genesis = network_params.ledger.nano_live_genesis; + nano::node_config config{ network_params }; + auto node1 (std::make_shared (system.io_ctx, nano::unique_path (), config, system.work)); node1->start (); system.nodes.push_back (node1); node0->network.merge_peer (node1->network.endpoint ()); @@ -590,18 +581,10 @@ TEST (telemetry, remove_peer_different_genesis_udp) nano::system system (1, nano::transport::transport_type::udp, node_flags); auto node0 (system.nodes[0]); ASSERT_EQ (0, node0->network.size ()); - auto node1 (std::make_shared (system.io_ctx, nano::get_available_port (), nano::unique_path (), system.logging, system.work, node_flags)); - nano::state_block_builder builder; - auto junk = builder - .account (nano::dev::genesis_key.pub) - .previous (0) - .representative (nano::dev::genesis_key.pub) - .balance (0) - .link (0) - .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (0) - .build_shared (); - node1->network_params.ledger.genesis = junk; + nano::network_params network_params{ nano::networks::nano_dev_network }; + network_params.ledger.genesis = network_params.ledger.nano_live_genesis; + nano::node_config config{ network_params }; + auto node1 (std::make_shared (system.io_ctx, nano::unique_path (), config, system.work, node_flags)); node1->start (); system.nodes.push_back (node1); auto channel0 (std::make_shared (node1->network.udp_channels, node0->network.endpoint (), node0->network_params.network.protocol_version)); From 54fb102b9f172fb2a05efce054a675ef3e92b31f Mon Sep 17 00:00:00 2001 From: clemahieu Date: Tue, 10 Aug 2021 23:10:10 +0100 Subject: [PATCH 175/346] Moving work_thresholds in to their own object within network_params and including a referencing it within ledger_constants and network_constants instead of creating copies. --- nano/core_test/block.cpp | 2 +- nano/core_test/difficulty.cpp | 28 +++---- nano/core_test/distributed_work.cpp | 34 ++++---- nano/core_test/fakes/work_peer.hpp | 6 +- nano/core_test/ledger.cpp | 4 +- nano/core_test/network.cpp | 6 +- nano/core_test/node.cpp | 16 ++-- nano/core_test/system.cpp | 6 +- nano/core_test/wallet.cpp | 24 +++--- nano/core_test/work_pool.cpp | 30 +++---- nano/lib/config.hpp | 8 +- nano/lib/work.cpp | 6 +- nano/nano_node/daemon.cpp | 2 +- nano/nano_node/entry.cpp | 32 +++---- nano/nano_wallet/entry.cpp | 2 +- nano/node/blockprocessor.cpp | 6 +- nano/node/bootstrap/bootstrap_bulk_pull.cpp | 2 +- nano/node/bootstrap/bootstrap_bulk_push.cpp | 2 +- nano/node/bootstrap/bootstrap_server.cpp | 4 +- nano/node/common.cpp | 6 +- nano/node/distributed_work.cpp | 2 +- nano/node/json_handler.cpp | 24 +++--- nano/node/node.cpp | 10 +-- nano/node/wallet.cpp | 6 +- nano/node/websocket.cpp | 2 +- nano/qt/qt.cpp | 10 +-- nano/qt_test/qt.cpp | 2 +- nano/rpc_test/rpc.cpp | 92 ++++++++++----------- nano/secure/common.cpp | 8 +- nano/secure/common.hpp | 15 ++-- nano/slow_test/node.cpp | 8 +- nano/test_common/system.cpp | 4 +- 32 files changed, 208 insertions(+), 201 deletions(-) diff --git a/nano/core_test/block.cpp b/nano/core_test/block.cpp index e4e5fb581c..3e2274d83b 100644 --- a/nano/core_test/block.cpp +++ b/nano/core_test/block.cpp @@ -312,7 +312,7 @@ TEST (block, publish_req_serialization) TEST (block, difficulty) { nano::send_block block (0, 1, 2, nano::keypair ().prv, 4, 5); - ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.difficulty (block), nano::dev::network_params.network.publish_thresholds.difficulty (block.work_version (), block.root (), block.block_work ())); + ASSERT_EQ (nano::dev::network_params.work.difficulty (block), nano::dev::network_params.work.difficulty (block.work_version (), block.root (), block.block_work ())); } TEST (state_block, serialization) diff --git a/nano/core_test/difficulty.cpp b/nano/core_test/difficulty.cpp index 9f2fe0d945..75a4bd04f9 100644 --- a/nano/core_test/difficulty.cpp +++ b/nano/core_test/difficulty.cpp @@ -128,23 +128,23 @@ TEST (difficulty, network_constants) ASSERT_NEAR (1., nano::difficulty::to_multiplier (dev_thresholds.epoch_2, dev_thresholds.base), 1e-10); nano::work_version version{ nano::work_version::work_1 }; - ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.base, nano::dev::network_params.network.publish_thresholds.epoch_2); - ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.base, nano::dev::network_params.network.publish_thresholds.threshold_base (version)); - ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.entry, nano::dev::network_params.network.publish_thresholds.threshold_entry (version, nano::block_type::state)); - ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_1, nano::dev::network_params.network.publish_thresholds.threshold_entry (version, nano::block_type::send)); - ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_1, nano::dev::network_params.network.publish_thresholds.threshold_entry (version, nano::block_type::receive)); - ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_1, nano::dev::network_params.network.publish_thresholds.threshold_entry (version, nano::block_type::open)); - ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_1, nano::dev::network_params.network.publish_thresholds.threshold_entry (version, nano::block_type::change)); - ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_1, nano::dev::network_params.network.publish_thresholds.threshold (version, nano::block_details (nano::epoch::epoch_0, false, false, false))); - ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_1, nano::dev::network_params.network.publish_thresholds.threshold (version, nano::block_details (nano::epoch::epoch_1, false, false, false))); - ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_1, nano::dev::network_params.network.publish_thresholds.threshold (version, nano::block_details (nano::epoch::epoch_1, false, false, false))); + ASSERT_EQ (nano::dev::network_params.work.base, nano::dev::network_params.work.epoch_2); + ASSERT_EQ (nano::dev::network_params.work.base, nano::dev::network_params.work.threshold_base (version)); + ASSERT_EQ (nano::dev::network_params.work.entry, nano::dev::network_params.work.threshold_entry (version, nano::block_type::state)); + ASSERT_EQ (nano::dev::network_params.work.epoch_1, nano::dev::network_params.work.threshold_entry (version, nano::block_type::send)); + ASSERT_EQ (nano::dev::network_params.work.epoch_1, nano::dev::network_params.work.threshold_entry (version, nano::block_type::receive)); + ASSERT_EQ (nano::dev::network_params.work.epoch_1, nano::dev::network_params.work.threshold_entry (version, nano::block_type::open)); + ASSERT_EQ (nano::dev::network_params.work.epoch_1, nano::dev::network_params.work.threshold_entry (version, nano::block_type::change)); + ASSERT_EQ (nano::dev::network_params.work.epoch_1, nano::dev::network_params.work.threshold (version, nano::block_details (nano::epoch::epoch_0, false, false, false))); + ASSERT_EQ (nano::dev::network_params.work.epoch_1, nano::dev::network_params.work.threshold (version, nano::block_details (nano::epoch::epoch_1, false, false, false))); + ASSERT_EQ (nano::dev::network_params.work.epoch_1, nano::dev::network_params.work.threshold (version, nano::block_details (nano::epoch::epoch_1, false, false, false))); // Send [+ change] - ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_2, nano::dev::network_params.network.publish_thresholds.threshold (version, nano::block_details (nano::epoch::epoch_2, true, false, false))); + ASSERT_EQ (nano::dev::network_params.work.epoch_2, nano::dev::network_params.work.threshold (version, nano::block_details (nano::epoch::epoch_2, true, false, false))); // Change - ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_2, nano::dev::network_params.network.publish_thresholds.threshold (version, nano::block_details (nano::epoch::epoch_2, false, false, false))); + ASSERT_EQ (nano::dev::network_params.work.epoch_2, nano::dev::network_params.work.threshold (version, nano::block_details (nano::epoch::epoch_2, false, false, false))); // Receive [+ change] / Open - ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_2_receive, nano::dev::network_params.network.publish_thresholds.threshold (version, nano::block_details (nano::epoch::epoch_2, false, true, false))); + ASSERT_EQ (nano::dev::network_params.work.epoch_2_receive, nano::dev::network_params.work.threshold (version, nano::block_details (nano::epoch::epoch_2, false, true, false))); // Epoch - ASSERT_EQ (nano::dev::network_params.network.publish_thresholds.epoch_2_receive, nano::dev::network_params.network.publish_thresholds.threshold (version, nano::block_details (nano::epoch::epoch_2, false, false, true))); + ASSERT_EQ (nano::dev::network_params.work.epoch_2_receive, nano::dev::network_params.work.threshold (version, nano::block_details (nano::epoch::epoch_2, false, false, true))); } diff --git a/nano/core_test/distributed_work.cpp b/nano/core_test/distributed_work.cpp index 00fbbcbb22..ce0cfddc38 100644 --- a/nano/core_test/distributed_work.cpp +++ b/nano/core_test/distributed_work.cpp @@ -10,7 +10,7 @@ TEST (distributed_work, stopped) { nano::system system (1); system.nodes[0]->distributed_work.stop (); - ASSERT_TRUE (system.nodes[0]->distributed_work.make (nano::work_version::work_1, nano::block_hash (), {}, nano::dev::network_params.network.publish_thresholds.base, {})); + ASSERT_TRUE (system.nodes[0]->distributed_work.make (nano::work_version::work_1, nano::block_hash (), {}, nano::dev::network_params.work.base, {})); } TEST (distributed_work, no_peers) @@ -25,9 +25,9 @@ TEST (distributed_work, no_peers) work = work_a; done = true; }; - ASSERT_FALSE (node->distributed_work.make (nano::work_version::work_1, hash, node->config.work_peers, node->network_params.network.publish_thresholds.base, callback, nano::account ())); + ASSERT_FALSE (node->distributed_work.make (nano::work_version::work_1, hash, node->config.work_peers, node->network_params.work.base, callback, nano::account ())); ASSERT_TIMELY (5s, done); - ASSERT_GE (nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, hash, *work), node->network_params.network.publish_thresholds.base); + ASSERT_GE (nano::dev::network_params.work.difficulty (nano::work_version::work_1, hash, *work), node->network_params.work.base); // should only be removed after cleanup ASSERT_EQ (1, node->distributed_work.size ()); while (node->distributed_work.size () > 0) @@ -43,7 +43,7 @@ TEST (distributed_work, no_peers_disabled) nano::node_config node_config (nano::get_available_port (), system.logging); node_config.work_threads = 0; auto & node = *system.add_node (node_config); - ASSERT_TRUE (node.distributed_work.make (nano::work_version::work_1, nano::block_hash (), node.config.work_peers, nano::dev::network_params.network.publish_thresholds.base, {})); + ASSERT_TRUE (node.distributed_work.make (nano::work_version::work_1, nano::block_hash (), node.config.work_peers, nano::dev::network_params.work.base, {})); } TEST (distributed_work, no_peers_cancel) @@ -58,7 +58,7 @@ TEST (distributed_work, no_peers_cancel) ASSERT_FALSE (work_a.is_initialized ()); done = true; }; - ASSERT_FALSE (node.distributed_work.make (nano::work_version::work_1, hash, node.config.work_peers, nano::difficulty::from_multiplier (1e6, node.network_params.network.publish_thresholds.base), callback_to_cancel)); + ASSERT_FALSE (node.distributed_work.make (nano::work_version::work_1, hash, node.config.work_peers, nano::difficulty::from_multiplier (1e6, node.network_params.work.base), callback_to_cancel)); ASSERT_EQ (1, node.distributed_work.size ()); // cleanup should not cancel or remove an ongoing work node.distributed_work.cleanup_finished (); @@ -70,7 +70,7 @@ TEST (distributed_work, no_peers_cancel) // now using observer done = false; - ASSERT_FALSE (node.distributed_work.make (nano::work_version::work_1, hash, node.config.work_peers, nano::difficulty::from_multiplier (1e6, node.network_params.network.publish_thresholds.base), callback_to_cancel)); + ASSERT_FALSE (node.distributed_work.make (nano::work_version::work_1, hash, node.config.work_peers, nano::difficulty::from_multiplier (1e6, node.network_params.work.base), callback_to_cancel)); ASSERT_EQ (1, node.distributed_work.size ()); node.observers.work_cancel.notify (hash); ASSERT_TIMELY (20s, done && node.distributed_work.size () == 0); @@ -90,7 +90,7 @@ TEST (distributed_work, no_peers_multi) // Test many works for the same root for (unsigned i{ 0 }; i < total; ++i) { - ASSERT_FALSE (node->distributed_work.make (nano::work_version::work_1, hash, node->config.work_peers, nano::difficulty::from_multiplier (10, node->network_params.network.publish_thresholds.base), callback)); + ASSERT_FALSE (node->distributed_work.make (nano::work_version::work_1, hash, node->config.work_peers, nano::difficulty::from_multiplier (10, node->network_params.work.base), callback)); } ASSERT_TIMELY (5s, count == total); system.deadline_set (5s); @@ -104,7 +104,7 @@ TEST (distributed_work, no_peers_multi) for (unsigned i{ 0 }; i < total; ++i) { nano::block_hash hash_i (i + 1); - ASSERT_FALSE (node->distributed_work.make (nano::work_version::work_1, hash_i, node->config.work_peers, node->network_params.network.publish_thresholds.base, callback)); + ASSERT_FALSE (node->distributed_work.make (nano::work_version::work_1, hash_i, node->config.work_peers, node->network_params.work.base, callback)); } ASSERT_TIMELY (5s, count == total); system.deadline_set (5s); @@ -136,9 +136,9 @@ TEST (distributed_work, peer) work_peer->start (); decltype (node->config.work_peers) peers; peers.emplace_back ("::ffff:127.0.0.1", work_peer->port ()); - ASSERT_FALSE (node->distributed_work.make (nano::work_version::work_1, hash, peers, node->network_params.network.publish_thresholds.base, callback, nano::account ())); + ASSERT_FALSE (node->distributed_work.make (nano::work_version::work_1, hash, peers, node->network_params.work.base, callback, nano::account ())); ASSERT_TIMELY (5s, done); - ASSERT_GE (nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, hash, *work), node->network_params.network.publish_thresholds.base); + ASSERT_GE (nano::dev::network_params.work.difficulty (nano::work_version::work_1, hash, *work), node->network_params.work.base); ASSERT_EQ (1, work_peer->generations_good); ASSERT_EQ (0, work_peer->generations_bad); ASSERT_NO_ERROR (system.poll ()); @@ -162,9 +162,9 @@ TEST (distributed_work, peer_malicious) malicious_peer->start (); decltype (node->config.work_peers) peers; peers.emplace_back ("::ffff:127.0.0.1", malicious_peer->port ()); - ASSERT_FALSE (node->distributed_work.make (nano::work_version::work_1, hash, peers, node->network_params.network.publish_thresholds.base, callback, nano::account ())); + ASSERT_FALSE (node->distributed_work.make (nano::work_version::work_1, hash, peers, node->network_params.work.base, callback, nano::account ())); ASSERT_TIMELY (5s, done); - ASSERT_GE (nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, hash, *work), node->network_params.network.publish_thresholds.base); + ASSERT_GE (nano::dev::network_params.work.difficulty (nano::work_version::work_1, hash, *work), node->network_params.work.base); ASSERT_TIMELY (5s, malicious_peer->generations_bad >= 1); // make sure it was *not* the malicious peer that replied ASSERT_EQ (0, malicious_peer->generations_good); @@ -179,7 +179,7 @@ TEST (distributed_work, peer_malicious) auto malicious_peer2 (std::make_shared (node->work, node->io_ctx, nano::get_available_port (), work_peer_type::malicious)); malicious_peer2->start (); peers[0].second = malicious_peer2->port (); - ASSERT_FALSE (node->distributed_work.make (nano::work_version::work_1, hash, peers, node->network_params.network.publish_thresholds.base, {}, nano::account ())); + ASSERT_FALSE (node->distributed_work.make (nano::work_version::work_1, hash, peers, node->network_params.work.base, {}, nano::account ())); ASSERT_TIMELY (5s, malicious_peer2->generations_bad >= 2); node->distributed_work.cancel (hash); ASSERT_EQ (0, malicious_peer2->cancels); @@ -208,9 +208,9 @@ TEST (distributed_work, peer_multi) peers.emplace_back ("localhost", malicious_peer->port ()); peers.emplace_back ("localhost", slow_peer->port ()); peers.emplace_back ("localhost", good_peer->port ()); - ASSERT_FALSE (node->distributed_work.make (nano::work_version::work_1, hash, peers, node->network_params.network.publish_thresholds.base, callback, nano::account ())); + ASSERT_FALSE (node->distributed_work.make (nano::work_version::work_1, hash, peers, node->network_params.work.base, callback, nano::account ())); ASSERT_TIMELY (5s, done); - ASSERT_GE (nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, hash, *work), node->network_params.network.publish_thresholds.base); + ASSERT_GE (nano::dev::network_params.work.difficulty (nano::work_version::work_1, hash, *work), node->network_params.work.base); ASSERT_TIMELY (5s, slow_peer->cancels == 1); ASSERT_EQ (0, malicious_peer->generations_good); ASSERT_EQ (1, malicious_peer->generations_bad); @@ -239,7 +239,7 @@ TEST (distributed_work, fail_resolve) }; decltype (node->config.work_peers) peers; peers.emplace_back ("beeb.boop.123z", 0); - ASSERT_FALSE (node->distributed_work.make (nano::work_version::work_1, hash, peers, node->network_params.network.publish_thresholds.base, callback, nano::account ())); + ASSERT_FALSE (node->distributed_work.make (nano::work_version::work_1, hash, peers, node->network_params.work.base, callback, nano::account ())); ASSERT_TIMELY (5s, done); - ASSERT_GE (nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, hash, *work), node->network_params.network.publish_thresholds.base); + ASSERT_GE (nano::dev::network_params.work.difficulty (nano::work_version::work_1, hash, *work), node->network_params.work.base); } diff --git a/nano/core_test/fakes/work_peer.hpp b/nano/core_test/fakes/work_peer.hpp index 5192b8b168..7544f910dd 100644 --- a/nano/core_test/fakes/work_peer.hpp +++ b/nano/core_test/fakes/work_peer.hpp @@ -141,14 +141,14 @@ class work_peer_connection : public std::enable_shared_from_this work_a) { auto result = work_a.value_or (0); - auto result_difficulty (this_l->work_pool.network_constants.publish_thresholds.difficulty (this_l->version, hash, result)); + auto result_difficulty (this_l->work_pool.network_constants.work.difficulty (this_l->version, hash, result)); ptree::ptree message_l; message_l.put ("work", nano::to_string_hex (result)); message_l.put ("difficulty", nano::to_string_hex (result_difficulty)); - message_l.put ("multiplier", nano::to_string (nano::difficulty::to_multiplier (result_difficulty, this_l->work_pool.network_constants.publish_thresholds.threshold_base (this_l->version)))); + message_l.put ("multiplier", nano::to_string (nano::difficulty::to_multiplier (result_difficulty, this_l->work_pool.network_constants.work.threshold_base (this_l->version)))); message_l.put ("hash", hash.to_string ()); std::stringstream ostream; ptree::write_json (ostream, message_l); diff --git a/nano/core_test/ledger.cpp b/nano/core_test/ledger.cpp index 7fbd351e9f..6cb0bdd8a6 100644 --- a/nano/core_test/ledger.cpp +++ b/nano/core_test/ledger.cpp @@ -2893,9 +2893,9 @@ TEST (ledger, work_validation) // With random work the block doesn't pass, then modifies the block with sufficient work and ensures a correct result auto process_block = [&store, &ledger, &pool] (nano::block & block_a, nano::block_details const details_a) { - auto threshold = nano::dev::network_params.network.publish_thresholds.threshold (block_a.work_version (), details_a); + auto threshold = nano::dev::network_params.work.threshold (block_a.work_version (), details_a); // Rarely failed with random work, so modify until it doesn't have enough difficulty - while (nano::dev::network_params.network.publish_thresholds.difficulty (block_a) >= threshold) + while (nano::dev::network_params.work.difficulty (block_a) >= threshold) { block_a.block_work_set (block_a.block_work () + 1); } diff --git a/nano/core_test/network.cpp b/nano/core_test/network.cpp index 50521c0b1b..94b39eff9e 100644 --- a/nano/core_test/network.cpp +++ b/nano/core_test/network.cpp @@ -326,20 +326,20 @@ TEST (network, send_insufficient_work) ASSERT_TIMELY (10s, node2.stats.count (nano::stat::type::error, nano::stat::detail::insufficient_work) != 0); ASSERT_EQ (1, node2.stats.count (nano::stat::type::error, nano::stat::detail::insufficient_work)); // Legacy block work between epoch_2_recieve & epoch_1 - auto block2 (std::make_shared (block1->hash (), 1, 20, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, system.work_generate_limited (block1->hash (), node1.network_params.network.publish_thresholds.epoch_2_receive, node1.network_params.network.publish_thresholds.epoch_1 - 1))); + auto block2 (std::make_shared (block1->hash (), 1, 20, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, system.work_generate_limited (block1->hash (), node1.network_params.work.epoch_2_receive, node1.network_params.work.epoch_1 - 1))); nano::publish publish2{ nano::dev::network_params.network, block2 }; tcp_channel->send (publish2, [] (boost::system::error_code const & ec, size_t size) {}); ASSERT_TIMELY (10s, node2.stats.count (nano::stat::type::error, nano::stat::detail::insufficient_work) != 1); ASSERT_EQ (2, node2.stats.count (nano::stat::type::error, nano::stat::detail::insufficient_work)); // Legacy block work epoch_1 - auto block3 (std::make_shared (block2->hash (), 1, 20, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (block2->hash (), node1.network_params.network.publish_thresholds.epoch_2))); + auto block3 (std::make_shared (block2->hash (), 1, 20, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (block2->hash (), node1.network_params.work.epoch_2))); nano::publish publish3{ nano::dev::network_params.network, block3 }; tcp_channel->send (publish3, [] (boost::system::error_code const & ec, size_t size) {}); ASSERT_EQ (0, node2.stats.count (nano::stat::type::message, nano::stat::detail::publish, nano::stat::dir::in)); ASSERT_TIMELY (10s, node2.stats.count (nano::stat::type::message, nano::stat::detail::publish, nano::stat::dir::in) != 0); ASSERT_EQ (1, node2.stats.count (nano::stat::type::message, nano::stat::detail::publish, nano::stat::dir::in)); // State block work epoch_2_recieve - auto block4 (std::make_shared (nano::dev::genesis_key.pub, block1->hash (), nano::dev::genesis_key.pub, 20, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, system.work_generate_limited (block1->hash (), node1.network_params.network.publish_thresholds.epoch_2_receive, node1.network_params.network.publish_thresholds.epoch_1 - 1))); + auto block4 (std::make_shared (nano::dev::genesis_key.pub, block1->hash (), nano::dev::genesis_key.pub, 20, 1, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, system.work_generate_limited (block1->hash (), node1.network_params.work.epoch_2_receive, node1.network_params.work.epoch_1 - 1))); nano::publish publish4{ nano::dev::network_params.network, block4 }; tcp_channel->send (publish4, [] (boost::system::error_code const & ec, size_t size) {}); ASSERT_TIMELY (10s, node2.stats.count (nano::stat::type::message, nano::stat::detail::publish, nano::stat::dir::in) != 0); diff --git a/nano/core_test/node.cpp b/nano/core_test/node.cpp index 3c55c62b5a..6d80f65925 100644 --- a/nano/core_test/node.cpp +++ b/nano/core_test/node.cpp @@ -36,21 +36,21 @@ TEST (node, work_generate) nano::block_hash root{ 1 }; nano::work_version version{ nano::work_version::work_1 }; { - auto difficulty = nano::difficulty::from_multiplier (1.5, node.network_params.network.publish_thresholds.base); + auto difficulty = nano::difficulty::from_multiplier (1.5, node.network_params.work.base); auto work = node.work_generate_blocking (version, root, difficulty); ASSERT_TRUE (work.is_initialized ()); - ASSERT_TRUE (nano::dev::network_params.network.publish_thresholds.difficulty (version, root, *work) >= difficulty); + ASSERT_TRUE (nano::dev::network_params.work.difficulty (version, root, *work) >= difficulty); } { - auto difficulty = nano::difficulty::from_multiplier (0.5, node.network_params.network.publish_thresholds.base); + auto difficulty = nano::difficulty::from_multiplier (0.5, node.network_params.work.base); boost::optional work; do { work = node.work_generate_blocking (version, root, difficulty); - } while (nano::dev::network_params.network.publish_thresholds.difficulty (version, root, *work) >= node.network_params.network.publish_thresholds.base); + } while (nano::dev::network_params.work.difficulty (version, root, *work) >= node.network_params.work.base); ASSERT_TRUE (work.is_initialized ()); - ASSERT_TRUE (nano::dev::network_params.network.publish_thresholds.difficulty (version, root, *work) >= difficulty); - ASSERT_FALSE (nano::dev::network_params.network.publish_thresholds.difficulty (version, root, *work) >= node.network_params.network.publish_thresholds.base); + ASSERT_TRUE (nano::dev::network_params.work.difficulty (version, root, *work) >= difficulty); + ASSERT_FALSE (nano::dev::network_params.work.difficulty (version, root, *work) >= node.network_params.work.base); } } @@ -4550,7 +4550,7 @@ TEST (node, deferred_dependent_elections) ASSERT_TIMELY (2s, node2.block (send2->hash ())); // Re-processing older blocks with updated work also does not start an election - node.work_generate_blocking (*open, nano::dev::network_params.network.publish_thresholds.difficulty (*open) + 1); + node.work_generate_blocking (*open, nano::dev::network_params.work.difficulty (*open) + 1); node.process_local (open); node.block_processor.flush (); node.scheduler.flush (); @@ -4563,7 +4563,7 @@ TEST (node, deferred_dependent_elections) ASSERT_FALSE (node.active.active (open->qualified_root ())); /// The election was dropped but it's still not possible to restart it - node.work_generate_blocking (*open, nano::dev::network_params.network.publish_thresholds.difficulty (*open) + 1); + node.work_generate_blocking (*open, nano::dev::network_params.work.difficulty (*open) + 1); ASSERT_FALSE (node.active.active (open->qualified_root ())); node.process_local (open); node.block_processor.flush (); diff --git a/nano/core_test/system.cpp b/nano/core_test/system.cpp index c084d95531..fd129c8904 100644 --- a/nano/core_test/system.cpp +++ b/nano/core_test/system.cpp @@ -10,12 +10,12 @@ TEST (system, work_generate_limited) { nano::system system; nano::block_hash key (1); - auto min = nano::dev::network_params.network.publish_thresholds.entry; - auto max = nano::dev::network_params.network.publish_thresholds.base; + auto min = nano::dev::network_params.work.entry; + auto max = nano::dev::network_params.work.base; for (int i = 0; i < 5; ++i) { auto work = system.work_generate_limited (key, min, max); - auto difficulty = nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, key, work); + auto difficulty = nano::dev::network_params.work.difficulty (nano::work_version::work_1, key, work); ASSERT_GE (difficulty, min); ASSERT_LT (difficulty, max); } diff --git a/nano/core_test/wallet.cpp b/nano/core_test/wallet.cpp index 82a18a5572..295e02624b 100644 --- a/nano/core_test/wallet.cpp +++ b/nano/core_test/wallet.cpp @@ -645,7 +645,7 @@ TEST (wallet, work) uint64_t work (0); if (!wallet->store.work_get (transaction, nano::dev::genesis_key.pub, work)) { - done = nano::dev::network_params.network.publish_thresholds.difficulty (nano::dev::genesis->work_version (), nano::dev::genesis->hash (), work) >= system.nodes[0]->default_difficulty (nano::dev::genesis->work_version ()); + done = nano::dev::network_params.work.difficulty (nano::dev::genesis->work_version (), nano::dev::genesis->hash (), work) >= system.nodes[0]->default_difficulty (nano::dev::genesis->work_version ()); } ASSERT_NO_ERROR (system.poll ()); } @@ -675,7 +675,7 @@ TEST (wallet, work_generate) ASSERT_NO_ERROR (system.poll ()); auto block_transaction (node1.store.tx_begin_read ()); auto transaction (system.wallet (0)->wallets.tx_begin_read ()); - again = wallet->store.work_get (transaction, account1, work1) || nano::dev::network_params.network.publish_thresholds.difficulty (block->work_version (), node1.ledger.latest_root (block_transaction, account1), work1) < node1.default_difficulty (block->work_version ()); + again = wallet->store.work_get (transaction, account1, work1) || nano::dev::network_params.work.difficulty (block->work_version (), node1.ledger.latest_root (block_transaction, account1), work1) < node1.default_difficulty (block->work_version ()); } } @@ -705,10 +705,10 @@ TEST (wallet, work_cache_delayed) ASSERT_NO_ERROR (system.poll ()); if (!wallet->store.work_get (node1.wallets.tx_begin_read (), account1, work1)) { - again = nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, block2->hash (), work1) < threshold; + again = nano::dev::network_params.work.difficulty (nano::work_version::work_1, block2->hash (), work1) < threshold; } } - ASSERT_GE (nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, block2->hash (), work1), threshold); + ASSERT_GE (nano::dev::network_params.work.difficulty (nano::work_version::work_1, block2->hash (), work1), threshold); } TEST (wallet, insert_locked) @@ -822,7 +822,7 @@ TEST (wallet, no_work) auto block (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key2.pub, std::numeric_limits::max (), false)); ASSERT_NE (nullptr, block); ASSERT_NE (0, block->block_work ()); - ASSERT_GE (nano::dev::network_params.network.publish_thresholds.difficulty (*block), nano::dev::network_params.network.publish_thresholds.threshold (block->work_version (), block->sideband ().details)); + ASSERT_GE (nano::dev::network_params.work.difficulty (*block), nano::dev::network_params.work.threshold (block->work_version (), block->sideband ().details)); auto transaction (system.wallet (0)->wallets.tx_begin_read ()); uint64_t cached_work (0); system.wallet (0)->store.work_get (transaction, nano::dev::genesis_key.pub, cached_work); @@ -1022,9 +1022,9 @@ TEST (wallet, epoch_2_validation) auto receive = wallet.receive_action (send->hash (), nano::dev::genesis_key.pub, amount, send->link ().as_account (), 1); ASSERT_NE (nullptr, receive); - if (nano::dev::network_params.network.publish_thresholds.difficulty (*receive) < node.network_params.network.publish_thresholds.base) + if (nano::dev::network_params.work.difficulty (*receive) < node.network_params.work.base) { - ASSERT_GE (nano::dev::network_params.network.publish_thresholds.difficulty (*receive), node.network_params.network.publish_thresholds.epoch_2_receive); + ASSERT_GE (nano::dev::network_params.work.difficulty (*receive), node.network_params.work.epoch_2_receive); ASSERT_EQ (nano::epoch::epoch_2, receive->sideband ().details.epoch); ASSERT_EQ (nano::epoch::epoch_2, receive->sideband ().source_epoch); break; @@ -1074,9 +1074,9 @@ TEST (wallet, epoch_2_receive_propagation) auto receive2 = wallet.receive_action (send2->hash (), key.pub, amount, send2->link ().as_account (), 1); ASSERT_NE (nullptr, receive2); - if (nano::dev::network_params.network.publish_thresholds.difficulty (*receive2) < node.network_params.network.publish_thresholds.base) + if (nano::dev::network_params.work.difficulty (*receive2) < node.network_params.work.base) { - ASSERT_GE (nano::dev::network_params.network.publish_thresholds.difficulty (*receive2), node.network_params.network.publish_thresholds.epoch_2_receive); + ASSERT_GE (nano::dev::network_params.work.difficulty (*receive2), node.network_params.work.epoch_2_receive); ASSERT_EQ (nano::epoch::epoch_2, node.store.block.version (node.store.tx_begin_read (), receive2->hash ())); ASSERT_EQ (nano::epoch::epoch_2, receive2->sideband ().source_epoch); break; @@ -1112,16 +1112,16 @@ TEST (wallet, epoch_2_receive_unopened) auto send1 = wallet.send_action (nano::dev::genesis_key.pub, key.pub, amount, 1); // Upgrade unopened account to epoch_2 - auto epoch2_unopened = nano::state_block (key.pub, 0, 0, 0, node.network_params.ledger.epochs.link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (key.pub, node.network_params.network.publish_thresholds.epoch_2)); + auto epoch2_unopened = nano::state_block (key.pub, 0, 0, 0, node.network_params.ledger.epochs.link (nano::epoch::epoch_2), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (key.pub, node.network_params.work.epoch_2)); ASSERT_EQ (nano::process_result::progress, node.process (epoch2_unopened).code); wallet.insert_adhoc (key.prv, false); auto receive1 = wallet.receive_action (send1->hash (), key.pub, amount, send1->link ().as_account (), 1); ASSERT_NE (nullptr, receive1); - if (nano::dev::network_params.network.publish_thresholds.difficulty (*receive1) < node.network_params.network.publish_thresholds.base) + if (nano::dev::network_params.work.difficulty (*receive1) < node.network_params.work.base) { - ASSERT_GE (nano::dev::network_params.network.publish_thresholds.difficulty (*receive1), node.network_params.network.publish_thresholds.epoch_2_receive); + ASSERT_GE (nano::dev::network_params.work.difficulty (*receive1), node.network_params.work.epoch_2_receive); ASSERT_EQ (nano::epoch::epoch_2, node.store.block.version (node.store.tx_begin_read (), receive1->hash ())); ASSERT_EQ (nano::epoch::epoch_1, receive1->sideband ().source_epoch); break; diff --git a/nano/core_test/work_pool.cpp b/nano/core_test/work_pool.cpp index 1487b79d98..db66d44bdf 100644 --- a/nano/core_test/work_pool.cpp +++ b/nano/core_test/work_pool.cpp @@ -19,7 +19,7 @@ TEST (work, one) nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::change_block block (1, 1, nano::keypair ().prv, 3, 4); block.block_work_set (*pool.generate (block.root ())); - ASSERT_LT (nano::dev::network_params.network.publish_thresholds.threshold_base (block.work_version ()), nano::dev::network_params.network.publish_thresholds.difficulty (block)); + ASSERT_LT (nano::dev::network_params.work.threshold_base (block.work_version ()), nano::dev::network_params.work.difficulty (block)); } TEST (work, disabled) @@ -33,9 +33,9 @@ TEST (work, validate) { nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::send_block send_block (1, 1, 2, nano::keypair ().prv, 4, 6); - ASSERT_LT (nano::dev::network_params.network.publish_thresholds.difficulty (send_block), nano::dev::network_params.network.publish_thresholds.threshold_base (send_block.work_version ())); + ASSERT_LT (nano::dev::network_params.work.difficulty (send_block), nano::dev::network_params.work.threshold_base (send_block.work_version ())); send_block.block_work_set (*pool.generate (send_block.root ())); - ASSERT_LT (nano::dev::network_params.network.publish_thresholds.threshold_base (send_block.work_version ()), nano::dev::network_params.network.publish_thresholds.difficulty (send_block)); + ASSERT_LT (nano::dev::network_params.work.threshold_base (send_block.work_version ()), nano::dev::network_params.work.difficulty (send_block)); } TEST (work, cancel) @@ -47,7 +47,7 @@ TEST (work, cancel) { nano::root key (1); pool.generate ( - nano::work_version::work_1, key, nano::dev::network_params.network.publish_thresholds.base, [&done] (boost::optional work_a) { + nano::work_version::work_1, key, nano::dev::network_params.work.base, [&done] (boost::optional work_a) { done = !work_a; }); pool.cancel (key); @@ -65,12 +65,12 @@ TEST (work, cancel_many) nano::root key4 (1); nano::root key5 (3); nano::root key6 (1); - pool.generate (nano::work_version::work_1, key1, nano::dev::network_params.network.publish_thresholds.base, [] (boost::optional) {}); - pool.generate (nano::work_version::work_1, key2, nano::dev::network_params.network.publish_thresholds.base, [] (boost::optional) {}); - pool.generate (nano::work_version::work_1, key3, nano::dev::network_params.network.publish_thresholds.base, [] (boost::optional) {}); - pool.generate (nano::work_version::work_1, key4, nano::dev::network_params.network.publish_thresholds.base, [] (boost::optional) {}); - pool.generate (nano::work_version::work_1, key5, nano::dev::network_params.network.publish_thresholds.base, [] (boost::optional) {}); - pool.generate (nano::work_version::work_1, key6, nano::dev::network_params.network.publish_thresholds.base, [] (boost::optional) {}); + pool.generate (nano::work_version::work_1, key1, nano::dev::network_params.work.base, [] (boost::optional) {}); + pool.generate (nano::work_version::work_1, key2, nano::dev::network_params.work.base, [] (boost::optional) {}); + pool.generate (nano::work_version::work_1, key3, nano::dev::network_params.work.base, [] (boost::optional) {}); + pool.generate (nano::work_version::work_1, key4, nano::dev::network_params.work.base, [] (boost::optional) {}); + pool.generate (nano::work_version::work_1, key5, nano::dev::network_params.work.base, [] (boost::optional) {}); + pool.generate (nano::work_version::work_1, key6, nano::dev::network_params.work.base, [] (boost::optional) {}); pool.cancel (key1); } @@ -85,7 +85,7 @@ TEST (work, opencl) if (!environment.platforms.empty () && !environment.platforms.begin ()->devices.empty ()) { nano::opencl_config config (0, 0, 16 * 1024); - auto opencl (nano::opencl_work::create (true, config, logger, nano::dev::network_params.network.publish_thresholds)); + auto opencl (nano::opencl_work::create (true, config, logger, nano::dev::network_params.work)); if (opencl != nullptr) { // 0 threads, should add 1 for managing OpenCL @@ -100,7 +100,7 @@ TEST (work, opencl) { nano::random_pool::generate_block (root.bytes.data (), root.bytes.size ()); auto result (*pool.generate (nano::work_version::work_1, root, difficulty)); - ASSERT_GE (nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, root, result), difficulty); + ASSERT_GE (nano::dev::network_params.work.difficulty (nano::work_version::work_1, root, result), difficulty); difficulty += difficulty_add; } } @@ -141,14 +141,14 @@ TEST (work, difficulty) do { auto work1 = *pool.generate (nano::work_version::work_1, root, difficulty1); - result_difficulty1 = nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, root, work1); + result_difficulty1 = nano::dev::network_params.work.difficulty (nano::work_version::work_1, root, work1); } while (result_difficulty1 > difficulty2); ASSERT_GT (result_difficulty1, difficulty1); uint64_t result_difficulty2 (0); do { auto work2 = *pool.generate (nano::work_version::work_1, root, difficulty2); - result_difficulty2 = nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, root, work2); + result_difficulty2 = nano::dev::network_params.work.difficulty (nano::work_version::work_1, root, work2); } while (result_difficulty2 > difficulty3); ASSERT_GT (result_difficulty2, difficulty2); } @@ -170,7 +170,7 @@ TEST (work, eco_pow) do { auto work = *pool.generate (nano::work_version::work_1, root, difficulty1); - result_difficulty = nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, root, work); + result_difficulty = nano::dev::network_params.work.difficulty (nano::work_version::work_1, root, work); } while (result_difficulty > difficulty2); ASSERT_GT (result_difficulty, difficulty1); } diff --git a/nano/lib/config.hpp b/nano/lib/config.hpp index f0b84bb500..9f75fc00b2 100644 --- a/nano/lib/config.hpp +++ b/nano/lib/config.hpp @@ -134,9 +134,9 @@ class work_thresholds class network_constants { public: - network_constants (nano::networks network_a) : + network_constants (nano::work_thresholds & work, nano::networks network_a) : current_network (network_a), - publish_thresholds (is_live_network () ? nano::work_thresholds::publish_full : is_beta_network () ? nano::work_thresholds::publish_beta : is_test_network () ? nano::work_thresholds::publish_test : nano::work_thresholds::publish_dev) + work{ work } { // A representative is classified as principal based on its weight and this factor principal_weight_factor = 1000; // 0.1% @@ -160,7 +160,7 @@ class network_constants /** The network this param object represents. This may differ from the global active network; this is needed for certain --debug... commands */ nano::networks current_network{ nano::network_constants::active_network }; - nano::work_thresholds publish_thresholds; + nano::work_thresholds & work; unsigned principal_weight_factor; uint16_t default_node_port; @@ -235,7 +235,7 @@ class network_constants return error; } - const char * get_current_network_as_string () const + const char * get_current_network_as_string () { return is_live_network () ? "live" : is_beta_network () ? "beta" : is_test_network () ? "test" : "dev"; } diff --git a/nano/lib/work.cpp b/nano/lib/work.cpp index 8a2d7f45e2..f6afc6ca39 100644 --- a/nano/lib/work.cpp +++ b/nano/lib/work.cpp @@ -90,7 +90,7 @@ void nano::work_pool::loop (uint64_t thread) if (opt_work.is_initialized ()) { work = *opt_work; - output = network_constants.publish_thresholds.value (current_l.item, work); + output = network_constants.work.value (current_l.item, work); } else { @@ -123,7 +123,7 @@ void nano::work_pool::loop (uint64_t thread) { // If the ticket matches what we started with, we're the ones that found the solution debug_assert (output >= current_l.difficulty); - debug_assert (current_l.difficulty == 0 || network_constants.publish_thresholds.value (current_l.item, work) == output); + debug_assert (current_l.difficulty == 0 || network_constants.work.value (current_l.item, work) == output); // Signal other threads to stop their work next time they check ticket ++ticket; pending.pop_front (); @@ -201,7 +201,7 @@ void nano::work_pool::generate (nano::work_version const version_a, nano::root c boost::optional nano::work_pool::generate (nano::root const & root_a) { debug_assert (network_constants.is_dev_network ()); - return generate (nano::work_version::work_1, root_a, network_constants.publish_thresholds.base); + return generate (nano::work_version::work_1, root_a, network_constants.work.base); } boost::optional nano::work_pool::generate (nano::root const & root_a, uint64_t difficulty_a) diff --git a/nano/nano_node/daemon.cpp b/nano/nano_node/daemon.cpp index 6d504c8696..e329f0b35a 100644 --- a/nano/nano_node/daemon.cpp +++ b/nano/nano_node/daemon.cpp @@ -60,7 +60,7 @@ void nano_daemon::daemon::run (boost::filesystem::path const & data_path, nano:: config.node.logging.init (data_path); nano::logger_mt logger{ config.node.logging.min_time_between_log_output }; boost::asio::io_context io_ctx; - auto opencl (nano::opencl_work::create (config.opencl_enable, config.opencl, logger, config.node.network_params.network.publish_thresholds)); + auto opencl (nano::opencl_work::create (config.opencl_enable, config.opencl, logger, config.node.network_params.work)); nano::work_pool opencl_work (config.node.network_params.network, config.node.work_threads, config.node.pow_sleep_interval, opencl ? [&opencl] (nano::work_version const version_a, nano::root const & root_a, uint64_t difficulty_a, std::atomic & ticket_a) { return opencl->generate_work (version_a, root_a, difficulty_a, ticket_a); } diff --git a/nano/nano_node/entry.cpp b/nano/nano_node/entry.cpp index 83954349d8..0cd59c442a 100644 --- a/nano/nano_node/entry.cpp +++ b/nano/nano_node/entry.cpp @@ -325,7 +325,7 @@ int main (int argc, char * const * argv) if (!key.decode_hex (key_it->second.as ())) { nano::keypair genesis (key.to_string ()); - nano::work_pool work{ nano::dev::network_params.network, std::numeric_limits::max () }; + nano::work_pool work{ network_params.network, std::numeric_limits::max () }; std::cout << "Genesis: " << genesis.prv.to_string () << "\n" << "Public: " << genesis.pub.to_string () << "\n" << "Account: " << genesis.pub.to_account () << "\n"; @@ -341,7 +341,7 @@ int main (int argc, char * const * argv) << "Account: " << rep.pub.to_account () << "\n"; } nano::uint128_t balance (std::numeric_limits::max ()); - nano::open_block genesis_block (reinterpret_cast (genesis.pub), genesis.pub, genesis.pub, genesis.prv, genesis.pub, *work.generate (nano::work_version::work_1, genesis.pub, network_params.network.publish_thresholds.epoch_1)); + nano::open_block genesis_block (reinterpret_cast (genesis.pub), genesis.pub, genesis.pub, genesis.prv, genesis.pub, *work.generate (nano::work_version::work_1, genesis.pub, network_params.work.epoch_1)); std::cout << genesis_block.to_json (); std::cout.flush (); nano::block_hash previous (genesis_block.hash ()); @@ -353,7 +353,7 @@ int main (int argc, char * const * argv) { debug_assert (balance > weekly_distribution); balance = balance < (weekly_distribution * 2) ? 0 : balance - weekly_distribution; - nano::send_block send (previous, landing.pub, balance, genesis.prv, genesis.pub, *work.generate (nano::work_version::work_1, previous, network_params.network.publish_thresholds.epoch_1)); + nano::send_block send (previous, landing.pub, balance, genesis.prv, genesis.pub, *work.generate (nano::work_version::work_1, previous, network_params.work.epoch_1)); previous = send.hash (); std::cout << send.to_json (); std::cout.flush (); @@ -515,7 +515,7 @@ int main (int argc, char * const * argv) uint64_t count{ 10000000U }; // 10M for (uint64_t i (0); i < count; ++i) { - valid = network_params.network.publish_thresholds.value (hash, i) > difficulty; + valid = network_params.work.value (hash, i) > difficulty; } std::ostringstream oss (valid ? "true" : "false"); // IO forces compiler to not dismiss the variable auto total_time (std::chrono::duration_cast (std::chrono::steady_clock::now () - start).count ()); @@ -607,7 +607,7 @@ int main (int argc, char * const * argv) { nano::logger_mt logger; nano::opencl_config config (platform, device, threads); - auto opencl (nano::opencl_work::create (true, config, logger, network_params.network.publish_thresholds)); + auto opencl (nano::opencl_work::create (true, config, logger, network_params.work)); nano::work_pool work_pool{ network_params.network, 0, std::chrono::nanoseconds (0), opencl ? [&opencl] (nano::work_version const version_a, nano::root const & root_a, uint64_t difficulty_a, std::atomic &) { return opencl->generate_work (version_a, root_a, difficulty_a); } @@ -914,7 +914,7 @@ int main (int argc, char * const * argv) .balance (genesis_balance) .link (keys[i].pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*node->work.generate (nano::work_version::work_1, genesis_latest, node->network_params.network.publish_thresholds.epoch_1)) + .work (*node->work.generate (nano::work_version::work_1, genesis_latest, node->network_params.work.epoch_1)) .build (); genesis_latest = send->hash (); @@ -927,7 +927,7 @@ int main (int argc, char * const * argv) .balance (balances[i]) .link (genesis_latest) .sign (keys[i].prv, keys[i].pub) - .work (*node->work.generate (nano::work_version::work_1, keys[i].pub, node->network_params.network.publish_thresholds.epoch_1)) + .work (*node->work.generate (nano::work_version::work_1, keys[i].pub, node->network_params.work.epoch_1)) .build (); frontiers[i] = open->hash (); @@ -948,7 +948,7 @@ int main (int argc, char * const * argv) .balance (balances[j]) .link (keys[other].pub) .sign (keys[j].prv, keys[j].pub) - .work (*node->work.generate (nano::work_version::work_1, frontiers[j], node->network_params.network.publish_thresholds.epoch_1)) + .work (*node->work.generate (nano::work_version::work_1, frontiers[j], node->network_params.work.epoch_1)) .build (); frontiers[j] = send->hash (); @@ -963,7 +963,7 @@ int main (int argc, char * const * argv) .balance (balances[other]) .link (frontiers[j].as_block_hash ()) .sign (keys[other].prv, keys[other].pub) - .work (*node->work.generate (nano::work_version::work_1, frontiers[other], node->network_params.network.publish_thresholds.epoch_1)) + .work (*node->work.generate (nano::work_version::work_1, frontiers[other], node->network_params.work.epoch_1)) .build (); frontiers[other] = receive->hash (); @@ -1027,7 +1027,7 @@ int main (int argc, char * const * argv) .balance (genesis_balance) .link (keys[i].pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*node->work.generate (nano::work_version::work_1, genesis_latest, node->network_params.network.publish_thresholds.epoch_1)) + .work (*node->work.generate (nano::work_version::work_1, genesis_latest, node->network_params.work.epoch_1)) .build (); genesis_latest = send->hash (); @@ -1040,7 +1040,7 @@ int main (int argc, char * const * argv) .balance (balance) .link (genesis_latest) .sign (keys[i].prv, keys[i].pub) - .work (*node->work.generate (nano::work_version::work_1, keys[i].pub, node->network_params.network.publish_thresholds.epoch_1)) + .work (*node->work.generate (nano::work_version::work_1, keys[i].pub, node->network_params.work.epoch_1)) .build (); node->ledger.process (transaction, *open); @@ -1059,7 +1059,7 @@ int main (int argc, char * const * argv) .balance (genesis_balance) .link (destination.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*node->work.generate (nano::work_version::work_1, genesis_latest, node->network_params.network.publish_thresholds.epoch_1)) + .work (*node->work.generate (nano::work_version::work_1, genesis_latest, node->network_params.work.epoch_1)) .build (); genesis_latest = send->hash (); @@ -1124,7 +1124,7 @@ int main (int argc, char * const * argv) std::cout << boost::str (boost::format ("Starting generating %1% blocks...\n") % (count * 2)); boost::asio::io_context io_ctx1; boost::asio::io_context io_ctx2; - nano::work_pool work{ nano::dev::network_params.network, std::numeric_limits::max () }; + nano::work_pool work{ network_params.network, std::numeric_limits::max () }; nano::logging logging; auto path1 (nano::unique_path ()); auto path2 (nano::unique_path ()); @@ -1164,7 +1164,7 @@ int main (int argc, char * const * argv) .balance (genesis_balance) .link (key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*work.generate (nano::work_version::work_1, genesis_latest, nano::dev::network_params.network.publish_thresholds.epoch_1)) + .work (*work.generate (nano::work_version::work_1, genesis_latest, nano::dev::network_params.work.epoch_1)) .build (); genesis_latest = send->hash (); @@ -1176,7 +1176,7 @@ int main (int argc, char * const * argv) .balance (1) .link (genesis_latest) .sign (key.prv, key.pub) - .work (*work.generate (nano::work_version::work_1, key.pub, nano::dev::network_params.network.publish_thresholds.epoch_1)) + .work (*work.generate (nano::work_version::work_1, key.pub, nano::dev::network_params.work.epoch_1)) .build (); blocks.push_back (std::move (send)); @@ -1564,7 +1564,7 @@ int main (int argc, char * const * argv) } } // Check if block work value is correct - if (node->network_params.network.publish_thresholds.difficulty (*block) < node->network_params.network.publish_thresholds.threshold (block->work_version (), block->sideband ().details)) + if (node->network_params.work.difficulty (*block) < node->network_params.work.threshold (block->work_version (), block->sideband ().details)) { print_error_message (boost::str (boost::format ("Invalid work for block %1% value: %2%\n") % hash.to_string () % nano::to_string_hex (block->block_work ()))); } diff --git a/nano/nano_wallet/entry.cpp b/nano/nano_wallet/entry.cpp index 1ee061bea9..def208f93d 100644 --- a/nano/nano_wallet/entry.cpp +++ b/nano/nano_wallet/entry.cpp @@ -106,7 +106,7 @@ int run_wallet (QApplication & application, int argc, char * const * argv, boost std::shared_ptr node; std::shared_ptr gui; nano::set_application_icon (application); - auto opencl (nano::opencl_work::create (config.opencl_enable, config.opencl, logger, config.node.network_params.network.publish_thresholds)); + auto opencl (nano::opencl_work::create (config.opencl_enable, config.opencl, logger, config.node.network_params.work)); nano::work_pool work{ config.node.network_params.network, config.node.work_threads, config.node.pow_sleep_interval, opencl ? [&opencl] (nano::work_version const version_a, nano::root const & root_a, uint64_t difficulty_a, std::atomic &) { return opencl->generate_work (version_a, root_a, difficulty_a); } diff --git a/nano/node/blockprocessor.cpp b/nano/node/blockprocessor.cpp index e74fb6e823..b9d59dbb80 100644 --- a/nano/node/blockprocessor.cpp +++ b/nano/node/blockprocessor.cpp @@ -105,7 +105,7 @@ void nano::block_processor::add (std::shared_ptr const & block_a, u void nano::block_processor::add (nano::unchecked_info const & info_a) { - debug_assert (!node.network_params.network.publish_thresholds.validate_entry (*info_a.block)); + debug_assert (!node.network_params.work.validate_entry (*info_a.block)); bool quarter_full (size () > node.flags.block_processor_full_size / 4); if (info_a.verified == nano::signature_verification::unknown && (info_a.block->type () == nano::block_type::state || info_a.block->type () == nano::block_type::open || !info_a.account.is_zero ())) { @@ -124,7 +124,7 @@ void nano::block_processor::add (nano::unchecked_info const & info_a) void nano::block_processor::add_local (nano::unchecked_info const & info_a) { release_assert (info_a.verified == nano::signature_verification::unknown && (info_a.block->type () == nano::block_type::state || !info_a.account.is_zero ())); - debug_assert (!node.network_params.network.publish_thresholds.validate_entry (*info_a.block)); + debug_assert (!node.network_params.work.validate_entry (*info_a.block)); state_block_signature_verification.add (info_a); } @@ -501,7 +501,7 @@ nano::process_return nano::block_processor::process_one (nano::write_transaction { if (node.config.logging.ledger_logging ()) { - node.logger.try_log (boost::str (boost::format ("Insufficient work for %1% : %2% (difficulty %3%)") % hash.to_string () % nano::to_string_hex (block->block_work ()) % nano::to_string_hex (node.network_params.network.publish_thresholds.difficulty (*block)))); + node.logger.try_log (boost::str (boost::format ("Insufficient work for %1% : %2% (difficulty %3%)") % hash.to_string () % nano::to_string_hex (block->block_work ()) % nano::to_string_hex (node.network_params.work.difficulty (*block)))); } break; } diff --git a/nano/node/bootstrap/bootstrap_bulk_pull.cpp b/nano/node/bootstrap/bootstrap_bulk_pull.cpp index 53a83b370f..53301c1489 100644 --- a/nano/node/bootstrap/bootstrap_bulk_pull.cpp +++ b/nano/node/bootstrap/bootstrap_bulk_pull.cpp @@ -208,7 +208,7 @@ void nano::bulk_pull_client::received_block (boost::system::error_code const & e { nano::bufferstream stream (connection->receive_buffer->data (), size_a); auto block (nano::deserialize_block (stream, type_a)); - if (block != nullptr && !connection->node->network_params.network.publish_thresholds.validate_entry (*block)) + if (block != nullptr && !connection->node->network_params.work.validate_entry (*block)) { auto hash (block->hash ()); if (connection->node->config.logging.bulk_pull_logging ()) diff --git a/nano/node/bootstrap/bootstrap_bulk_push.cpp b/nano/node/bootstrap/bootstrap_bulk_push.cpp index 50e28bfc0f..f784ee01be 100644 --- a/nano/node/bootstrap/bootstrap_bulk_push.cpp +++ b/nano/node/bootstrap/bootstrap_bulk_push.cpp @@ -232,7 +232,7 @@ void nano::bulk_push_server::received_block (boost::system::error_code const & e { nano::bufferstream stream (receive_buffer->data (), size_a); auto block (nano::deserialize_block (stream, type_a)); - if (block != nullptr && !connection->node->network_params.network.publish_thresholds.validate_entry (*block)) + if (block != nullptr && !connection->node->network_params.work.validate_entry (*block)) { connection->node->process_active (std::move (block)); throttled_receive (); diff --git a/nano/node/bootstrap/bootstrap_server.cpp b/nano/node/bootstrap/bootstrap_server.cpp index 264f32ef36..ccf0fe8701 100644 --- a/nano/node/bootstrap/bootstrap_server.cpp +++ b/nano/node/bootstrap/bootstrap_server.cpp @@ -426,7 +426,7 @@ void nano::bootstrap_server::receive_publish_action (boost::system::error_code c { if (is_realtime_connection ()) { - if (!node->network_params.network.publish_thresholds.validate_entry (*request->block)) + if (!node->network_params.work.validate_entry (*request->block)) { add_request (std::unique_ptr (request.release ())); } @@ -494,7 +494,7 @@ void nano::bootstrap_server::receive_confirm_ack_action (boost::system::error_co if (!vote_block.which ()) { auto const & block (boost::get> (vote_block)); - if (node->network_params.network.publish_thresholds.validate_entry (*block)) + if (node->network_params.work.validate_entry (*block)) { process_vote = false; node->stats.inc_detail_only (nano::stat::type::error, nano::stat::detail::insufficient_work); diff --git a/nano/node/common.cpp b/nano/node/common.cpp index 7ea7d9f1f5..c564d75e77 100644 --- a/nano/node/common.cpp +++ b/nano/node/common.cpp @@ -424,7 +424,7 @@ void nano::message_parser::deserialize_publish (nano::stream & stream_a, nano::m nano::publish incoming (error, stream_a, header_a, digest_a, &block_uniquer); if (!error && at_end (stream_a)) { - if (!network.publish_thresholds.validate_entry (*incoming.block)) + if (!network.work.validate_entry (*incoming.block)) { visitor.publish (incoming); } @@ -445,7 +445,7 @@ void nano::message_parser::deserialize_confirm_req (nano::stream & stream_a, nan nano::confirm_req incoming (error, stream_a, header_a, &block_uniquer); if (!error && at_end (stream_a)) { - if (incoming.block == nullptr || !network.publish_thresholds.validate_entry (*incoming.block)) + if (incoming.block == nullptr || !network.work.validate_entry (*incoming.block)) { visitor.confirm_req (incoming); } @@ -471,7 +471,7 @@ void nano::message_parser::deserialize_confirm_ack (nano::stream & stream_a, nan if (!vote_block.which ()) { auto const & block (boost::get> (vote_block)); - if (network.publish_thresholds.validate_entry (*block)) + if (network.work.validate_entry (*block)) { status = parse_status::insufficient_work; break; diff --git a/nano/node/distributed_work.cpp b/nano/node/distributed_work.cpp index f06ef17eb3..2583b64169 100644 --- a/nano/node/distributed_work.cpp +++ b/nano/node/distributed_work.cpp @@ -239,7 +239,7 @@ void nano::distributed_work::success (std::string const & body_a, nano::tcp_endp uint64_t work; if (!nano::from_string_hex (work_text, work)) { - if (nano::dev::network_params.network.publish_thresholds.difficulty (request.version, request.root, work) >= request.difficulty) + if (nano::dev::network_params.work.difficulty (request.version, request.root, work) >= request.difficulty) { error = false; node.unresponsive_work_peers = false; diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index 1bee422441..76ba7c08c1 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -414,7 +414,7 @@ uint64_t nano::json_handler::difficulty_ledger (nano::block const & block_a) details_found = true; } } - return details_found ? node.network_params.network.publish_thresholds.threshold (block_a.work_version (), details) : node.default_difficulty (block_a.work_version ()); + return details_found ? node.network_params.work.threshold (block_a.work_version (), details) : node.default_difficulty (block_a.work_version ()); } double nano::json_handler::multiplier_optional_impl (nano::work_version const version_a, uint64_t & difficulty) @@ -829,7 +829,7 @@ void nano::json_handler::account_representative_set () if (!rpc_l->ec) { nano::block_details details (info.epoch (), false, false, false); - if (rpc_l->node.network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, info.head, work) < rpc_l->node.network_params.network.publish_thresholds.threshold (nano::work_version::work_1, details)) + if (rpc_l->node.network_params.work.difficulty (nano::work_version::work_1, info.head, work) < rpc_l->node.network_params.work.threshold (nano::work_version::work_1, details)) { rpc_l->ec = nano::error_common::invalid_work; } @@ -1027,7 +1027,7 @@ void nano::json_handler::active_difficulty () auto const multiplier_active = 1.0; auto const default_difficulty (node.default_difficulty (nano::work_version::work_1)); auto const default_receive_difficulty (node.default_receive_difficulty (nano::work_version::work_1)); - auto const receive_current_denormalized (node.network_params.network.publish_thresholds.denormalized_multiplier (multiplier_active, node.network_params.network.publish_thresholds.epoch_2_receive)); + auto const receive_current_denormalized (node.network_params.work.denormalized_multiplier (multiplier_active, node.network_params.work.epoch_2_receive)); response_l.put ("deprecated", "1"); response_l.put ("network_minimum", nano::to_string_hex (default_difficulty)); response_l.put ("network_receive_minimum", nano::to_string_hex (default_receive_difficulty)); @@ -1481,7 +1481,7 @@ void nano::json_handler::block_create () auto block_response_put_l = [rpc_l, this] (nano::block const & block_a) { boost::property_tree::ptree response_l; response_l.put ("hash", block_a.hash ().to_string ()); - response_l.put ("difficulty", nano::to_string_hex (rpc_l->node.network_params.network.publish_thresholds.difficulty (block_a))); + response_l.put ("difficulty", nano::to_string_hex (rpc_l->node.network_params.work.difficulty (block_a))); bool json_block_l = request.get ("json_block", false); if (json_block_l) { @@ -3123,7 +3123,7 @@ void nano::json_handler::process () } if (!rpc_l->ec) { - if (!rpc_l->node.network_params.network.publish_thresholds.validate_entry (*block)) + if (!rpc_l->node.network_params.work.validate_entry (*block)) { if (!is_async) { @@ -3284,7 +3284,7 @@ void nano::json_handler::receive () head = account; } nano::block_details details (epoch, false, true, false); - if (node.network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, head, work) < node.network_params.network.publish_thresholds.threshold (nano::work_version::work_1, details)) + if (node.network_params.work.difficulty (nano::work_version::work_1, head, work) < node.network_params.work.threshold (nano::work_version::work_1, details)) { ec = nano::error_common::invalid_work; } @@ -3628,7 +3628,7 @@ void nano::json_handler::send () if (!ec && work) { nano::block_details details (info.epoch (), true, false, false); - if (node.network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, info.head, work) < node.network_params.network.publish_thresholds.threshold (nano::work_version::work_1, details)) + if (node.network_params.work.difficulty (nano::work_version::work_1, info.head, work) < node.network_params.work.threshold (nano::work_version::work_1, details)) { ec = nano::error_common::invalid_work; } @@ -4872,7 +4872,7 @@ void nano::json_handler::work_generate () auto hash (hash_impl ()); auto difficulty (difficulty_optional_impl (work_version)); multiplier_optional_impl (work_version, difficulty); - if (!ec && (difficulty > node.max_work_generate_difficulty (work_version) || difficulty < node.network_params.network.publish_thresholds.threshold_entry (work_version, nano::block_type::state))) + if (!ec && (difficulty > node.max_work_generate_difficulty (work_version) || difficulty < node.network_params.work.threshold_entry (work_version, nano::block_type::state))) { ec = nano::error_rpc::difficulty_limit; } @@ -4901,7 +4901,7 @@ void nano::json_handler::work_generate () difficulty = difficulty_ledger (*block); } // If optional block difficulty is higher than requested difficulty, send error - if (!ec && node.network_params.network.publish_thresholds.difficulty (*block) >= difficulty) + if (!ec && node.network_params.work.difficulty (*block) >= difficulty) { ec = nano::error_rpc::block_work_enough; } @@ -4919,7 +4919,7 @@ void nano::json_handler::work_generate () uint64_t work (work_a.value ()); response_l.put ("work", nano::to_string_hex (work)); std::stringstream ostream; - auto result_difficulty (rpc_l->node.network_params.network.publish_thresholds.difficulty (work_version, hash, work)); + auto result_difficulty (rpc_l->node.network_params.work.difficulty (work_version, hash, work)); response_l.put ("difficulty", nano::to_string_hex (result_difficulty)); auto result_multiplier = nano::difficulty::to_multiplier (result_difficulty, node.default_difficulty (work_version)); response_l.put ("multiplier", nano::to_string (result_multiplier)); @@ -5045,13 +5045,13 @@ void nano::json_handler::work_validate () * * valid_receive: the work is valid for a receive block in an epoch_2 upgraded account */ - auto result_difficulty (node.network_params.network.publish_thresholds.difficulty (work_version, hash, work)); + auto result_difficulty (node.network_params.work.difficulty (work_version, hash, work)); if (request.count ("difficulty")) { response_l.put ("valid", (result_difficulty >= difficulty) ? "1" : "0"); } response_l.put ("valid_all", (result_difficulty >= node.default_difficulty (work_version)) ? "1" : "0"); - response_l.put ("valid_receive", (result_difficulty >= node.network_params.network.publish_thresholds.threshold (work_version, nano::block_details (nano::epoch::epoch_2, false, true, false))) ? "1" : "0"); + response_l.put ("valid_receive", (result_difficulty >= node.network_params.work.threshold (work_version, nano::block_details (nano::epoch::epoch_2, false, true, false))) ? "1" : "0"); response_l.put ("difficulty", nano::to_string_hex (result_difficulty)); auto result_multiplier = nano::difficulty::to_multiplier (result_difficulty, node.default_difficulty (work_version)); response_l.put ("multiplier", nano::to_string (result_multiplier)); diff --git a/nano/node/node.cpp b/nano/node/node.cpp index 7bdf6b755b..5dd6149b75 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -1114,7 +1114,7 @@ uint64_t nano::node::default_difficulty (nano::work_version const version_a) con switch (version_a) { case nano::work_version::work_1: - result = network_params.network.publish_thresholds.threshold_base (version_a); + result = network_params.work.threshold_base (version_a); break; default: debug_assert (false && "Invalid version specified to default_difficulty"); @@ -1128,7 +1128,7 @@ uint64_t nano::node::default_receive_difficulty (nano::work_version const versio switch (version_a) { case nano::work_version::work_1: - result = network_params.network.publish_thresholds.epoch_2_receive; + result = network_params.work.epoch_2_receive; break; default: debug_assert (false && "Invalid version specified to default_receive_difficulty"); @@ -1459,7 +1459,7 @@ void nano::node::epoch_upgrader_impl (nano::raw_key const & prv_a, nano::epoch e auto upgrader_process = [] (nano::node & node_a, std::atomic & counter, std::shared_ptr const & epoch, uint64_t difficulty, nano::public_key const & signer_a, nano::root const & root_a, nano::account const & account_a) { epoch->block_work_set (node_a.work_generate_blocking (nano::work_version::work_1, root_a, difficulty).value_or (0)); bool valid_signature (!nano::validate_message (signer_a, epoch->hash (), epoch->block_signature ())); - bool valid_work (node_a.network_params.network.publish_thresholds.difficulty (*epoch) >= difficulty); + bool valid_work (node_a.network_params.work.difficulty (*epoch) >= difficulty); nano::process_result result (nano::process_result::old); if (valid_signature && valid_work) { @@ -1546,7 +1546,7 @@ void nano::node::epoch_upgrader_impl (nano::raw_key const & prv_a, nano::epoch e if (!store.account.get (transaction, account, info) && info.epoch () < epoch_a) { ++attempts; - auto difficulty (network_params.network.publish_thresholds.threshold (nano::work_version::work_1, nano::block_details (epoch_a, false, false, true))); + auto difficulty (network_params.work.threshold (nano::work_version::work_1, nano::block_details (epoch_a, false, false, true))); nano::root const & root (info.head); std::shared_ptr epoch = builder.state () .account (account) @@ -1624,7 +1624,7 @@ void nano::node::epoch_upgrader_impl (nano::raw_key const & prv_a, nano::epoch e { ++attempts; release_assert (nano::epochs::is_sequential (info.epoch, epoch_a)); - auto difficulty (network_params.network.publish_thresholds.threshold (nano::work_version::work_1, nano::block_details (epoch_a, false, false, true))); + auto difficulty (network_params.work.threshold (nano::work_version::work_1, nano::block_details (epoch_a, false, false, true))); nano::root const & root (key.account); nano::account const & account (key.account); std::shared_ptr epoch = builder.state () diff --git a/nano/node/wallet.cpp b/nano/node/wallet.cpp index 267b3527ec..c187dee68f 100644 --- a/nano/node/wallet.cpp +++ b/nano/node/wallet.cpp @@ -1043,8 +1043,8 @@ bool nano::wallet::action_complete (std::shared_ptr const & block_a wallets.delayed_work->erase (account_a); if (block_a != nullptr) { - auto required_difficulty{ wallets.node.network_params.network.publish_thresholds.threshold (block_a->work_version (), details_a) }; - if (wallets.node.network_params.network.publish_thresholds.difficulty (*block_a) < required_difficulty) + auto required_difficulty{ wallets.node.network_params.work.threshold (block_a->work_version (), details_a) }; + if (wallets.node.network_params.work.difficulty (*block_a) < required_difficulty) { wallets.node.logger.try_log (boost::str (boost::format ("Cached or provided work for block %1% account %2% is invalid, regenerating") % block_a->hash ().to_string () % account_a.to_account ())); debug_assert (required_difficulty <= wallets.node.max_work_generate_difficulty (block_a->work_version ())); @@ -1130,7 +1130,7 @@ void nano::wallet::send_async (nano::account const & source_a, nano::account con // Update work for account if latest root is root_a void nano::wallet::work_update (nano::transaction const & transaction_a, nano::account const & account_a, nano::root const & root_a, uint64_t work_a) { - debug_assert (!wallets.node.network_params.network.publish_thresholds.validate_entry (nano::work_version::work_1, root_a, work_a)); + debug_assert (!wallets.node.network_params.work.validate_entry (nano::work_version::work_1, root_a, work_a)); debug_assert (store.exists (transaction_a, account_a)); auto block_transaction (wallets.node.store.tx_begin_read ()); auto latest (wallets.node.ledger.latest_root (block_transaction, account_a)); diff --git a/nano/node/websocket.cpp b/nano/node/websocket.cpp index f99f7f2dac..c1b724d614 100644 --- a/nano/node/websocket.cpp +++ b/nano/node/websocket.cpp @@ -809,7 +809,7 @@ nano::websocket::message nano::websocket::message_builder::work_generation (nano boost::property_tree::ptree result_l; result_l.put ("source", peer_a); result_l.put ("work", nano::to_string_hex (work_a)); - auto result_difficulty_l (nano::dev::network_params.network.publish_thresholds.difficulty (version_a, root_a, work_a)); + auto result_difficulty_l (nano::dev::network_params.work.difficulty (version_a, root_a, work_a)); result_l.put ("difficulty", nano::to_string_hex (result_difficulty_l)); auto result_multiplier_l (nano::difficulty::to_multiplier (result_difficulty_l, publish_threshold_a)); result_l.put ("multiplier", nano::to_string (result_multiplier_l)); diff --git a/nano/qt/qt.cpp b/nano/qt/qt.cpp index d0e043fbcf..d847c49049 100644 --- a/nano/qt/qt.cpp +++ b/nano/qt/qt.cpp @@ -2003,7 +2003,7 @@ nano_qt::block_entry::block_entry (nano_qt::wallet & wallet_a) : { show_label_ok (*status); this->status->setText (""); - if (!this->wallet.node.network_params.network.publish_thresholds.validate_entry (*block_l)) + if (!this->wallet.node.network_params.work.validate_entry (*block_l)) { this->wallet.node.process_active (std::move (block_l)); } @@ -2241,7 +2241,7 @@ void nano_qt::block_creation::create_send () nano::block_details details; details.is_send = true; details.epoch = info.epoch (); - auto const required_difficulty{ wallet.node.network_params.network.publish_thresholds.threshold (send.work_version (), details) }; + auto const required_difficulty{ wallet.node.network_params.work.threshold (send.work_version (), details) }; if (wallet.node.work_generate_blocking (send, required_difficulty).is_initialized ()) { std::string block_l; @@ -2325,7 +2325,7 @@ void nano_qt::block_creation::create_receive () nano::block_details details; details.is_receive = true; details.epoch = std::max (info.epoch (), pending.epoch); - auto required_difficulty{ wallet.node.network_params.network.publish_thresholds.threshold (receive.work_version (), details) }; + auto required_difficulty{ wallet.node.network_params.work.threshold (receive.work_version (), details) }; if (wallet.node.work_generate_blocking (receive, required_difficulty).is_initialized ()) { std::string block_l; @@ -2408,7 +2408,7 @@ void nano_qt::block_creation::create_change () nano::state_block change (account_l, info.head, representative_l, info.balance, 0, key, account_l, 0); nano::block_details details; details.epoch = info.epoch (); - auto const required_difficulty{ wallet.node.network_params.network.publish_thresholds.threshold (change.work_version (), details) }; + auto const required_difficulty{ wallet.node.network_params.work.threshold (change.work_version (), details) }; if (wallet.node.work_generate_blocking (change, required_difficulty).is_initialized ()) { std::string block_l; @@ -2490,7 +2490,7 @@ void nano_qt::block_creation::create_open () nano::block_details details; details.is_receive = true; details.epoch = pending.epoch; - auto const required_difficulty{ wallet.node.network_params.network.publish_thresholds.threshold (open.work_version (), details) }; + auto const required_difficulty{ wallet.node.network_params.work.threshold (open.work_version (), details) }; if (wallet.node.work_generate_blocking (open, required_difficulty).is_initialized ()) { std::string block_l; diff --git a/nano/qt_test/qt.cpp b/nano/qt_test/qt.cpp index 33b1acc617..6ca122007c 100644 --- a/nano/qt_test/qt.cpp +++ b/nano/qt_test/qt.cpp @@ -835,7 +835,7 @@ TEST (wallet, seed_work_generation) ASSERT_NO_ERROR (ec); } auto transaction (system.nodes[0]->store.tx_begin_read ()); - ASSERT_GE (nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, system.nodes[0]->ledger.latest_root (transaction, pub), work), system.nodes[0]->default_difficulty (nano::work_version::work_1)); + ASSERT_GE (nano::dev::network_params.work.difficulty (nano::work_version::work_1, system.nodes[0]->ledger.latest_root (transaction, pub), work), system.nodes[0]->default_difficulty (nano::work_version::work_1)); } TEST (wallet, backup_seed) diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index 134757e875..4b4f070c43 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -524,9 +524,9 @@ TEST (rpc, send_epoch_2) system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv, false); - auto target_difficulty = nano::dev::network_params.network.publish_thresholds.threshold (nano::work_version::work_1, nano::block_details (nano::epoch::epoch_2, true, false, false)); - ASSERT_LT (node->network_params.network.publish_thresholds.entry, target_difficulty); - auto min_difficulty = node->network_params.network.publish_thresholds.entry; + auto target_difficulty = nano::dev::network_params.work.threshold (nano::work_version::work_1, nano::block_details (nano::epoch::epoch_2, true, false, false)); + ASSERT_LT (node->network_params.work.entry, target_difficulty); + auto min_difficulty = node->network_params.work.entry; auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; @@ -1636,13 +1636,13 @@ TEST (rpc, process_ledger_insufficient_work) nano::system system; auto node = add_ipc_enabled_node (system); auto [rpc, rpc_ctx] = add_rpc (system, node); - ASSERT_LT (node->network_params.network.publish_thresholds.entry, node->network_params.network.publish_thresholds.epoch_1); + ASSERT_LT (node->network_params.work.entry, node->network_params.work.epoch_1); auto latest (node->latest (nano::dev::genesis_key.pub)); - auto min_difficulty = node->network_params.network.publish_thresholds.entry; - auto max_difficulty = node->network_params.network.publish_thresholds.epoch_1; + auto min_difficulty = node->network_params.work.entry; + auto max_difficulty = node->network_params.work.epoch_1; nano::state_block send (nano::dev::genesis->account (), latest, nano::dev::genesis->account (), nano::dev::constants.genesis_amount - nano::Gxrb_ratio, nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, system.work_generate_limited (latest, min_difficulty, max_difficulty)); - ASSERT_LT (nano::dev::network_params.network.publish_thresholds.difficulty (send), max_difficulty); - ASSERT_GE (nano::dev::network_params.network.publish_thresholds.difficulty (send), min_difficulty); + ASSERT_LT (nano::dev::network_params.work.difficulty (send), max_difficulty); + ASSERT_GE (nano::dev::network_params.work.difficulty (send), min_difficulty); boost::property_tree::ptree request; request.put ("action", "process"); std::string json; @@ -1949,7 +1949,7 @@ TEST (rpc, work_generate) auto work_text (response.json.get ("work")); uint64_t work; ASSERT_FALSE (nano::from_string_hex (work_text, work)); - auto result_difficulty (nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, hash, work)); + auto result_difficulty (nano::dev::network_params.work.difficulty (nano::work_version::work_1, hash, work)); auto response_difficulty_text (response.json.get ("difficulty")); uint64_t response_difficulty; ASSERT_FALSE (nano::from_string_hex (response_difficulty_text, response_difficulty)); @@ -1980,7 +1980,7 @@ TEST (rpc, work_generate_difficulty) auto work_text (response.get ("work")); uint64_t work; ASSERT_FALSE (nano::from_string_hex (work_text, work)); - auto result_difficulty (nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, hash, work)); + auto result_difficulty (nano::dev::network_params.work.difficulty (nano::work_version::work_1, hash, work)); auto response_difficulty_text (response.get ("difficulty")); uint64_t response_difficulty; ASSERT_FALSE (nano::from_string_hex (response_difficulty_text, response_difficulty)); @@ -1997,7 +1997,7 @@ TEST (rpc, work_generate_difficulty) auto work_text (response.get ("work")); uint64_t work; ASSERT_FALSE (nano::from_string_hex (work_text, work)); - auto result_difficulty (nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, hash, work)); + auto result_difficulty (nano::dev::network_params.work.difficulty (nano::work_version::work_1, hash, work)); ASSERT_GE (result_difficulty, difficulty); } { @@ -2031,7 +2031,7 @@ TEST (rpc, work_generate_multiplier) ASSERT_TRUE (work_text.is_initialized ()); uint64_t work; ASSERT_FALSE (nano::from_string_hex (*work_text, work)); - auto result_difficulty (nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, hash, work)); + auto result_difficulty (nano::dev::network_params.work.difficulty (nano::work_version::work_1, hash, work)); auto response_difficulty_text (response.get ("difficulty")); uint64_t response_difficulty; ASSERT_FALSE (nano::from_string_hex (response_difficulty_text, response_difficulty)); @@ -2062,7 +2062,7 @@ TEST (rpc, work_generate_block_high) nano::keypair key; nano::state_block block (key.pub, 0, nano::dev::genesis_key.pub, nano::Gxrb_ratio, 123, key.prv, key.pub, *node->work_generate_blocking (key.pub)); nano::block_hash hash (block.root ().as_block_hash ()); - auto block_difficulty (nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, hash, block.block_work ())); + auto block_difficulty (nano::dev::network_params.work.difficulty (nano::work_version::work_1, hash, block.block_work ())); boost::property_tree::ptree request; request.put ("action", "work_generate"); request.put ("hash", hash.to_string ()); @@ -2087,7 +2087,7 @@ TEST (rpc, work_generate_block_low) auto threshold (node->default_difficulty (block.work_version ())); block.block_work_set (system.work_generate_limited (block.root ().as_block_hash (), threshold, nano::difficulty::from_multiplier (node->config.max_work_generate_multiplier / 10, threshold))); nano::block_hash hash (block.root ().as_block_hash ()); - auto block_difficulty (nano::dev::network_params.network.publish_thresholds.difficulty (block)); + auto block_difficulty (nano::dev::network_params.work.difficulty (block)); boost::property_tree::ptree request; request.put ("action", "work_generate"); request.put ("hash", hash.to_string ()); @@ -2103,7 +2103,7 @@ TEST (rpc, work_generate_block_low) uint64_t work; ASSERT_FALSE (nano::from_string_hex (*work_text, work)); ASSERT_NE (block.block_work (), work); - auto result_difficulty (nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, hash, work)); + auto result_difficulty (nano::dev::network_params.work.difficulty (nano::work_version::work_1, hash, work)); auto response_difficulty_text (response.get ("difficulty")); uint64_t response_difficulty; ASSERT_FALSE (nano::from_string_hex (response_difficulty_text, response_difficulty)); @@ -2147,7 +2147,7 @@ TEST (rpc, work_generate_block_ledger_epoch_2) auto send_block (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key.pub, nano::Gxrb_ratio)); ASSERT_NE (nullptr, send_block); nano::state_block block (key.pub, 0, nano::dev::genesis_key.pub, nano::Gxrb_ratio, send_block->hash (), key.prv, key.pub, 0); - auto threshold (nano::dev::network_params.network.publish_thresholds.threshold (block.work_version (), nano::block_details (nano::epoch::epoch_2, false, true, false))); + auto threshold (nano::dev::network_params.work.threshold (block.work_version (), nano::block_details (nano::epoch::epoch_2, false, true, false))); block.block_work_set (system.work_generate_limited (block.root ().as_block_hash (), 1, threshold - 1)); nano::block_hash hash (block.root ().as_block_hash ()); auto [rpc, rpc_ctx] = add_rpc (system, node); @@ -2167,13 +2167,13 @@ TEST (rpc, work_generate_block_ledger_epoch_2) ASSERT_TRUE (work_text.is_initialized ()); uint64_t work; ASSERT_FALSE (nano::from_string_hex (*work_text, work)); - auto result_difficulty (nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, hash, work)); + auto result_difficulty (nano::dev::network_params.work.difficulty (nano::work_version::work_1, hash, work)); auto response_difficulty_text (response.get ("difficulty")); uint64_t response_difficulty; ASSERT_FALSE (nano::from_string_hex (response_difficulty_text, response_difficulty)); ASSERT_EQ (result_difficulty, response_difficulty); - ASSERT_GE (result_difficulty, node->network_params.network.publish_thresholds.epoch_2_receive); - finished = result_difficulty < node->network_params.network.publish_thresholds.epoch_1; + ASSERT_GE (result_difficulty, node->network_params.work.epoch_2_receive); + finished = result_difficulty < node->network_params.work.epoch_1; ASSERT_LT (++iteration, 200); } } @@ -2191,7 +2191,7 @@ TEST (rpc, work_cancel) system.deadline_set (10s); while (!done) { - system.work.generate (nano::work_version::work_1, hash1, node1->network_params.network.publish_thresholds.base, [&done] (boost::optional work_a) { + system.work.generate (nano::work_version::work_1, hash1, node1->network_params.work.base, [&done] (boost::optional work_a) { done = !work_a; }); auto response1 (wait_response (system, rpc, request1)); @@ -2211,11 +2211,11 @@ TEST (rpc, work_peer_bad) auto [rpc, rpc_ctx] = add_rpc (system, node1); nano::block_hash hash1 (1); std::atomic work (0); - node2.work_generate (nano::work_version::work_1, hash1, node2.network_params.network.publish_thresholds.base, [&work] (boost::optional work_a) { + node2.work_generate (nano::work_version::work_1, hash1, node2.network_params.work.base, [&work] (boost::optional work_a) { ASSERT_TRUE (work_a.is_initialized ()); work = *work_a; }); - ASSERT_TIMELY (5s, nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, hash1, work) >= nano::dev::network_params.network.publish_thresholds.threshold_base (nano::work_version::work_1)); + ASSERT_TIMELY (5s, nano::dev::network_params.work.difficulty (nano::work_version::work_1, hash1, work) >= nano::dev::network_params.work.threshold_base (nano::work_version::work_1)); } TEST (rpc, work_peer_one) @@ -2227,11 +2227,11 @@ TEST (rpc, work_peer_one) node2.config.work_peers.push_back (std::make_pair (node1->network.endpoint ().address ().to_string (), rpc->config.port)); nano::keypair key1; std::atomic work (0); - node2.work_generate (nano::work_version::work_1, key1.pub, node1->network_params.network.publish_thresholds.base, [&work] (boost::optional work_a) { + node2.work_generate (nano::work_version::work_1, key1.pub, node1->network_params.work.base, [&work] (boost::optional work_a) { ASSERT_TRUE (work_a.is_initialized ()); work = *work_a; }); - ASSERT_TIMELY (5s, nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, key1.pub, work) >= nano::dev::network_params.network.publish_thresholds.threshold_base (nano::work_version::work_1)); + ASSERT_TIMELY (5s, nano::dev::network_params.work.difficulty (nano::work_version::work_1, key1.pub, work) >= nano::dev::network_params.work.threshold_base (nano::work_version::work_1)); } TEST (rpc, work_peer_many) @@ -2255,10 +2255,10 @@ TEST (rpc, work_peer_many) for (auto i (0); i < works.size (); ++i) { nano::keypair key1; - node1.work_generate (nano::work_version::work_1, key1.pub, node1.network_params.network.publish_thresholds.base, [&work = works[i]] (boost::optional work_a) { + node1.work_generate (nano::work_version::work_1, key1.pub, node1.network_params.work.base, [&work = works[i]] (boost::optional work_a) { work = *work_a; }); - while (nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, key1.pub, works[i]) < nano::dev::network_params.network.publish_thresholds.threshold_base (nano::work_version::work_1)) + while (nano::dev::network_params.work.difficulty (nano::work_version::work_1, key1.pub, works[i]) < nano::dev::network_params.work.threshold_base (nano::work_version::work_1)) { system1.poll (); system2.poll (); @@ -2542,9 +2542,9 @@ TEST (rpc, account_representative_set_epoch_2) system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv, false); - auto target_difficulty = nano::dev::network_params.network.publish_thresholds.threshold (nano::work_version::work_1, nano::block_details (nano::epoch::epoch_2, false, false, false)); - ASSERT_LT (node->network_params.network.publish_thresholds.entry, target_difficulty); - auto min_difficulty = node->network_params.network.publish_thresholds.entry; + auto target_difficulty = nano::dev::network_params.work.threshold (nano::work_version::work_1, nano::block_details (nano::epoch::epoch_2, false, false, false)); + ASSERT_LT (node->network_params.work.entry, target_difficulty); + auto min_difficulty = node->network_params.work.entry; auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; @@ -2744,7 +2744,7 @@ TEST (rpc, work_validate) double multiplier (response.get ("multiplier")); ASSERT_NEAR (multiplier, nano::difficulty::to_multiplier (difficulty, node1->default_difficulty (nano::work_version::work_1)), 1e-6); } - auto result_difficulty (nano::dev::network_params.network.publish_thresholds.difficulty (nano::work_version::work_1, hash, work1)); + auto result_difficulty (nano::dev::network_params.work.difficulty (nano::work_version::work_1, hash, work1)); ASSERT_GE (result_difficulty, node1->default_difficulty (nano::work_version::work_1)); request.put ("work", nano::to_string_hex (work1)); request.put ("difficulty", nano::to_string_hex (result_difficulty)); @@ -2761,7 +2761,7 @@ TEST (rpc, work_validate) auto response (wait_response (system, rpc, request)); ASSERT_EQ (result_difficulty >= difficulty4, response.get ("valid")); ASSERT_EQ (result_difficulty >= node1->default_difficulty (nano::work_version::work_1), response.get ("valid_all")); - ASSERT_EQ (result_difficulty >= node1->network_params.network.publish_thresholds.epoch_2_receive, response.get ("valid_all")); + ASSERT_EQ (result_difficulty >= node1->network_params.work.epoch_2_receive, response.get ("valid_all")); } uint64_t work3 (*node1->work_generate_blocking (hash, difficulty4)); request.put ("work", nano::to_string_hex (work3)); @@ -2779,8 +2779,8 @@ TEST (rpc, work_validate_epoch_2) auto node = add_ipc_enabled_node (system); auto epoch1 = system.upgrade_genesis_epoch (*node, nano::epoch::epoch_1); ASSERT_NE (nullptr, epoch1); - ASSERT_EQ (node->network_params.network.publish_thresholds.epoch_2, node->network_params.network.publish_thresholds.base); - auto work = system.work_generate_limited (epoch1->hash (), node->network_params.network.publish_thresholds.epoch_1, node->network_params.network.publish_thresholds.base); + ASSERT_EQ (node->network_params.work.epoch_2, node->network_params.work.base); + auto work = system.work_generate_limited (epoch1->hash (), node->network_params.work.epoch_1, node->network_params.work.base); auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "work_validate"); @@ -2795,7 +2795,7 @@ TEST (rpc, work_validate_epoch_2) uint64_t difficulty{ 0 }; ASSERT_FALSE (nano::from_string_hex (difficulty_text, difficulty)); double multiplier (response.get ("multiplier")); - ASSERT_NEAR (multiplier, nano::difficulty::to_multiplier (difficulty, node->network_params.network.publish_thresholds.epoch_2), 1e-6); + ASSERT_NEAR (multiplier, nano::difficulty::to_multiplier (difficulty, node->network_params.work.epoch_2), 1e-6); }; // After upgrading, the higher difficulty is used to validate and calculate the multiplier rpc_ctx->io_scope->reset (); @@ -4228,7 +4228,7 @@ TEST (rpc, block_create) std::string send_hash (response.get ("hash")); ASSERT_EQ (send.hash ().to_string (), send_hash); std::string send_difficulty (response.get ("difficulty")); - ASSERT_EQ (nano::to_string_hex (nano::dev::network_params.network.publish_thresholds.difficulty (send)), send_difficulty); + ASSERT_EQ (nano::to_string_hex (nano::dev::network_params.work.difficulty (send)), send_difficulty); auto send_text (response.get ("block")); boost::property_tree::ptree block_l; std::stringstream block_stream (send_text); @@ -4360,8 +4360,8 @@ TEST (rpc, block_create_state_open) ASSERT_NE (nullptr, state_block); ASSERT_EQ (nano::block_type::state, state_block->type ()); ASSERT_EQ (state_hash, state_block->hash ().to_string ()); - auto difficulty (nano::dev::network_params.network.publish_thresholds.difficulty (*state_block)); - ASSERT_GT (difficulty, nano::dev::network_params.network.publish_thresholds.threshold (state_block->work_version (), nano::block_details (nano::epoch::epoch_0, false, true, false))); + auto difficulty (nano::dev::network_params.work.difficulty (*state_block)); + ASSERT_GT (difficulty, nano::dev::network_params.work.threshold (state_block->work_version (), nano::block_details (nano::epoch::epoch_0, false, true, false))); ASSERT_TRUE (node->latest (key.pub).is_zero ()); rpc_ctx->io_scope->reset (); auto process_result (node->process (*state_block)); @@ -4406,7 +4406,7 @@ TEST (rpc, block_create_state_request_work) boost::property_tree::read_json (block_stream, block_l); auto block (nano::deserialize_block_json (block_l)); ASSERT_NE (nullptr, block); - ASSERT_GE (nano::dev::network_params.network.publish_thresholds.difficulty (*block), node->default_difficulty (nano::work_version::work_1)); + ASSERT_GE (nano::dev::network_params.work.difficulty (*block), node->default_difficulty (nano::work_version::work_1)); } } @@ -4440,8 +4440,8 @@ TEST (rpc, block_create_open_epoch_v2) ASSERT_NE (nullptr, state_block); ASSERT_EQ (nano::block_type::state, state_block->type ()); ASSERT_EQ (state_hash, state_block->hash ().to_string ()); - auto difficulty (nano::dev::network_params.network.publish_thresholds.difficulty (*state_block)); - ASSERT_GT (difficulty, nano::dev::network_params.network.publish_thresholds.threshold (state_block->work_version (), nano::block_details (nano::epoch::epoch_2, false, true, false))); + auto difficulty (nano::dev::network_params.work.difficulty (*state_block)); + ASSERT_GT (difficulty, nano::dev::network_params.work.threshold (state_block->work_version (), nano::block_details (nano::epoch::epoch_2, false, true, false))); ASSERT_TRUE (node->latest (key.pub).is_zero ()); rpc_ctx->io_scope->reset (); auto process_result (node->process (*state_block)); @@ -4484,8 +4484,8 @@ TEST (rpc, block_create_receive_epoch_v2) ASSERT_NE (nullptr, state_block); ASSERT_EQ (nano::block_type::state, state_block->type ()); ASSERT_EQ (state_hash, state_block->hash ().to_string ()); - auto difficulty (nano::dev::network_params.network.publish_thresholds.difficulty (*state_block)); - ASSERT_GT (difficulty, nano::dev::network_params.network.publish_thresholds.threshold (state_block->work_version (), nano::block_details (nano::epoch::epoch_2, false, true, false))); + auto difficulty (nano::dev::network_params.work.difficulty (*state_block)); + ASSERT_GT (difficulty, nano::dev::network_params.work.threshold (state_block->work_version (), nano::block_details (nano::epoch::epoch_2, false, true, false))); rpc_ctx->io_scope->reset (); auto process_result (node->process (*state_block)); ASSERT_EQ (nano::process_result::progress, process_result.code); @@ -4526,8 +4526,8 @@ TEST (rpc, block_create_send_epoch_v2) ASSERT_NE (nullptr, state_block); ASSERT_EQ (nano::block_type::state, state_block->type ()); ASSERT_EQ (state_hash, state_block->hash ().to_string ()); - auto difficulty (nano::dev::network_params.network.publish_thresholds.difficulty (*state_block)); - ASSERT_GT (difficulty, nano::dev::network_params.network.publish_thresholds.threshold (state_block->work_version (), nano::block_details (nano::epoch::epoch_2, true, false, false))); + auto difficulty (nano::dev::network_params.work.difficulty (*state_block)); + ASSERT_GT (difficulty, nano::dev::network_params.work.threshold (state_block->work_version (), nano::block_details (nano::epoch::epoch_2, true, false, false))); rpc_ctx->io_scope->reset (); auto process_result (node->process (*state_block)); ASSERT_EQ (nano::process_result::progress, process_result.code); @@ -5450,7 +5450,7 @@ TEST (rpc, active_difficulty) nano::system system; auto node = add_ipc_enabled_node (system); auto [rpc, rpc_ctx] = add_rpc (system, node); - ASSERT_EQ (node->default_difficulty (nano::work_version::work_1), node->network_params.network.publish_thresholds.epoch_2); + ASSERT_EQ (node->default_difficulty (nano::work_version::work_1), node->network_params.work.epoch_2); boost::property_tree::ptree request; request.put ("action", "active_difficulty"); auto expected_multiplier{ 1.0 }; @@ -5474,7 +5474,7 @@ TEST (rpc, active_difficulty) uint64_t network_receive_current; ASSERT_FALSE (nano::from_string_hex (network_receive_current_text, network_receive_current)); auto network_receive_current_multiplier (nano::difficulty::to_multiplier (network_receive_current, network_receive_minimum)); - auto network_receive_current_normalized_multiplier (nano::dev::network_params.network.publish_thresholds.normalized_multiplier (network_receive_current_multiplier, network_receive_minimum)); + auto network_receive_current_normalized_multiplier (nano::dev::network_params.work.normalized_multiplier (network_receive_current_multiplier, network_receive_minimum)); ASSERT_NEAR (network_receive_current_normalized_multiplier, multiplier, 1e-6); ASSERT_EQ (response.not_found (), response.find ("difficulty_trend")); } diff --git a/nano/secure/common.cpp b/nano/secure/common.cpp index 2cac213074..95d52d5ba0 100644 --- a/nano/secure/common.cpp +++ b/nano/secure/common.cpp @@ -86,7 +86,13 @@ nano::ledger_constants & nano::dev::constants{ nano::dev::network_params.ledger std::shared_ptr & nano::dev::genesis = nano::dev::constants.genesis; nano::network_params::network_params (nano::networks network_a) : - network (network_a), ledger (network.publish_thresholds, network.network ()), voting (network), node (network), portmapping (network), bootstrap (network) + work{ network_a == nano::networks::nano_live_network ? nano::work_thresholds::publish_full : network_a == nano::networks::nano_beta_network ? nano::work_thresholds::publish_beta : network_a == nano::networks::nano_test_network ? nano::work_thresholds::publish_test : nano::work_thresholds::publish_dev }, + network{ work, network_a }, + ledger{ work, network_a }, + voting{ network }, + node{ network }, + portmapping{ network }, + bootstrap{ network } { unsigned constexpr kdf_full_work = 64 * 1024; unsigned constexpr kdf_dev_work = 8; diff --git a/nano/secure/common.hpp b/nano/secure/common.hpp index dbbf982d95..10c678c9d9 100644 --- a/nano/secure/common.hpp +++ b/nano/secure/common.hpp @@ -439,13 +439,14 @@ class network_params network_params (nano::networks network_a); unsigned kdf_work; - network_constants network; - ledger_constants ledger; - random_constants random; - voting_constants voting; - node_constants node; - portmapping_constants portmapping; - bootstrap_constants bootstrap; + nano::work_thresholds work; + nano::network_constants network; + nano::ledger_constants ledger; + nano::random_constants random; + nano::voting_constants voting; + nano::node_constants node; + nano::portmapping_constants portmapping; + nano::bootstrap_constants bootstrap; }; enum class confirmation_height_mode diff --git a/nano/slow_test/node.cpp b/nano/slow_test/node.cpp index 22b5fb9b66..1af73d1e59 100644 --- a/nano/slow_test/node.cpp +++ b/nano/slow_test/node.cpp @@ -1609,7 +1609,7 @@ TEST (node, mass_epoch_upgrader) .link (info.key.pub) .representative (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*node.work_generate_blocking (latest, nano::dev::network_params.network.publish_thresholds.threshold (nano::work_version::work_1, nano::block_details (nano::epoch::epoch_0, false, false, false)))) + .work (*node.work_generate_blocking (latest, node_config.network_params.work.threshold (nano::work_version::work_1, nano::block_details (nano::epoch::epoch_0, false, false, false)))) .build (ec); ASSERT_FALSE (ec); ASSERT_NE (nullptr, block); @@ -1633,7 +1633,7 @@ TEST (node, mass_epoch_upgrader) .link (info.pending_hash) .representative (info.key.pub) .sign (info.key.prv, info.key.pub) - .work (*node.work_generate_blocking (info.key.pub, nano::dev::network_params.network.publish_thresholds.threshold (nano::work_version::work_1, nano::block_details (nano::epoch::epoch_0, false, false, false)))) + .work (*node.work_generate_blocking (info.key.pub, node_config.network_params.work.threshold (nano::work_version::work_1, nano::block_details (nano::epoch::epoch_0, false, false, false)))) .build (ec); ASSERT_FALSE (ec); ASSERT_NE (nullptr, block); @@ -1723,7 +1723,7 @@ TEST (node, mass_block_new) std::vector keys (num_blocks); nano::state_block_builder builder; std::vector> send_blocks; - auto send_threshold (nano::dev::network_params.network.publish_thresholds.threshold (nano::work_version::work_1, nano::block_details (nano::epoch::epoch_2, true, false, false))); + auto send_threshold (nano::dev::network_params.work.threshold (nano::work_version::work_1, nano::block_details (nano::epoch::epoch_2, true, false, false))); auto latest_genesis = node.latest (nano::dev::genesis_key.pub); for (auto i = 0; i < num_blocks; ++i) { @@ -1746,7 +1746,7 @@ TEST (node, mass_block_new) std::cout << "Send blocks time: " << timer.stop ().count () << " " << timer.unit () << "\n\n"; std::vector> open_blocks; - auto receive_threshold (nano::dev::network_params.network.publish_thresholds.threshold (nano::work_version::work_1, nano::block_details (nano::epoch::epoch_2, false, true, false))); + auto receive_threshold (nano::dev::network_params.work.threshold (nano::work_version::work_1, nano::block_details (nano::epoch::epoch_2, false, true, false))); for (auto i = 0; i < num_blocks; ++i) { auto const & key = keys[i]; diff --git a/nano/test_common/system.cpp b/nano/test_common/system.cpp index 24fd99e136..170ba9d3cc 100644 --- a/nano/test_common/system.cpp +++ b/nano/test_common/system.cpp @@ -205,7 +205,7 @@ uint64_t nano::system::work_generate_limited (nano::block_hash const & root_a, u do { result = *work.generate (root_a, min_a); - } while (work.network_constants.publish_thresholds.difficulty (nano::work_version::work_1, root_a, result) >= max_a); + } while (work.network_constants.work.difficulty (nano::work_version::work_1, root_a, result) >= max_a); return result; } @@ -226,7 +226,7 @@ std::unique_ptr nano::upgrade_epoch (nano::work_pool & pool_a .link (ledger_a.epoch_link (epoch_a)) .representative (dev_genesis_key.pub) .sign (dev_genesis_key.prv, dev_genesis_key.pub) - .work (*pool_a.generate (latest, pool_a.network_constants.publish_thresholds.threshold (nano::work_version::work_1, nano::block_details (epoch_a, false, false, true)))) + .work (*pool_a.generate (latest, pool_a.network_constants.work.threshold (nano::work_version::work_1, nano::block_details (epoch_a, false, false, true)))) .build (ec); bool error{ true }; From 36c18747c352e54d40c1c297656cd58bf7059daf Mon Sep 17 00:00:00 2001 From: clemahieu Date: Thu, 12 Aug 2021 23:10:37 +0100 Subject: [PATCH 176/346] This is a fix where daemon_config was not switching its active network off of nano_dev_network. (#3422) --- nano/core_test/toml.cpp | 2 +- nano/load_test/entry.cpp | 3 ++- nano/nano_node/daemon.cpp | 5 +++-- nano/nano_node/entry.cpp | 2 +- nano/nano_wallet/entry.cpp | 3 ++- nano/node/cli.cpp | 6 ++++-- nano/node/daemonconfig.cpp | 5 +++-- nano/node/daemonconfig.hpp | 2 +- nano/node/node.cpp | 2 +- 9 files changed, 18 insertions(+), 12 deletions(-) diff --git a/nano/core_test/toml.cpp b/nano/core_test/toml.cpp index 2b88026080..e3901a0d4e 100644 --- a/nano/core_test/toml.cpp +++ b/nano/core_test/toml.cpp @@ -69,7 +69,7 @@ TEST (toml, daemon_config_update_array) { nano::tomlconfig t; boost::filesystem::path data_path ("."); - nano::daemon_config c (data_path); + nano::daemon_config c{ data_path, nano::dev::network_params }; c.node.preconfigured_peers.push_back ("dev-peer.org"); c.serialize_toml (t); c.deserialize_toml (t); diff --git a/nano/load_test/entry.cpp b/nano/load_test/entry.cpp index cd4803ccb6..a3d0e90ce9 100644 --- a/nano/load_test/entry.cpp +++ b/nano/load_test/entry.cpp @@ -43,7 +43,8 @@ constexpr auto ipc_port_start = 62000; void write_config_files (boost::filesystem::path const & data_path, int index) { - nano::daemon_config daemon_config (data_path); + nano::network_params network_params{ nano::network_constants::active_network }; + nano::daemon_config daemon_config{ data_path, network_params }; daemon_config.node.peering_port = peering_port_start + index; daemon_config.node.ipc_config.transport_tcp.enabled = true; daemon_config.node.ipc_config.transport_tcp.port = ipc_port_start + index; diff --git a/nano/nano_node/daemon.cpp b/nano/nano_node/daemon.cpp index e329f0b35a..55423a3e27 100644 --- a/nano/nano_node/daemon.cpp +++ b/nano/nano_node/daemon.cpp @@ -24,7 +24,7 @@ constexpr std::size_t OPEN_FILE_DESCRIPTORS_LIMIT = 16384; static void load_and_set_bandwidth_params (std::shared_ptr const & node, boost::filesystem::path const & data_path, nano::node_flags const & flags) { - nano::daemon_config config (data_path); + nano::daemon_config config{ data_path, node->network_params }; auto error = nano::read_node_config_toml (data_path, config, flags.config_overrides); if (!error) @@ -48,7 +48,8 @@ void nano_daemon::daemon::run (boost::filesystem::path const & data_path, nano:: boost::system::error_code error_chmod; nano::set_secure_perm_directory (data_path, error_chmod); std::unique_ptr runner; - nano::daemon_config config (data_path); + nano::network_params network_params{ nano::network_constants::active_network }; + nano::daemon_config config{ data_path, network_params }; auto error = nano::read_node_config_toml (data_path, config, flags.config_overrides); nano::set_use_memory_pools (config.node.use_memory_pools); if (!error) diff --git a/nano/nano_node/entry.cpp b/nano/nano_node/entry.cpp index 0cd59c442a..c54807d297 100644 --- a/nano/nano_node/entry.cpp +++ b/nano/nano_node/entry.cpp @@ -1135,7 +1135,7 @@ int main (int argc, char * const * argv) { config_overrides = nano::config_overrides (config->second.as> ()); } - nano::daemon_config daemon_config (data_path); + nano::daemon_config daemon_config{ data_path, network_params }; auto error = nano::read_node_config_toml (data_path, daemon_config, config_overrides); nano::node_config config1 = daemon_config.node; diff --git a/nano/nano_wallet/entry.cpp b/nano/nano_wallet/entry.cpp index def208f93d..e590514241 100644 --- a/nano/nano_wallet/entry.cpp +++ b/nano/nano_wallet/entry.cpp @@ -79,7 +79,8 @@ int run_wallet (QApplication & application, int argc, char * const * argv, boost splash->showMessage (QSplashScreen::tr ("Remember - Back Up Your Wallet Seed"), Qt::AlignBottom | Qt::AlignHCenter, Qt::darkGray); application.processEvents (); - nano::daemon_config config (data_path); + nano::network_params network_params{ nano::network_constants::active_network }; + nano::daemon_config config{ data_path, network_params }; nano::wallet_config wallet_config; auto error = nano::read_node_config_toml (data_path, config, flags.config_overrides); diff --git a/nano/node/cli.cpp b/nano/node/cli.cpp index 1ab8fb118e..7034014b46 100644 --- a/nano/node/cli.cpp +++ b/nano/node/cli.cpp @@ -658,7 +658,8 @@ std::error_code nano::handle_node_options (boost::program_options::variables_map if (type == "node") { valid_type = true; - nano::daemon_config config (data_path); + nano::network_params network_params{ nano::network_constants::active_network }; + nano::daemon_config config{ data_path, network_params }; config.serialize_toml (toml); } else if (type == "rpc") @@ -1311,7 +1312,8 @@ void reset_confirmation_heights (nano::write_transaction const & transaction, na bool is_using_rocksdb (boost::filesystem::path const & data_path, boost::program_options::variables_map const & vm, std::error_code & ec) { - nano::daemon_config config (data_path); + nano::network_params network_params{ nano::network_constants::active_network }; + nano::daemon_config config{ data_path, network_params }; // Config overriding auto config_arg (vm.find ("config")); diff --git a/nano/node/daemonconfig.cpp b/nano/node/daemonconfig.cpp index 5706dad305..817263f307 100644 --- a/nano/node/daemonconfig.cpp +++ b/nano/node/daemonconfig.cpp @@ -7,8 +7,9 @@ #include #include -nano::daemon_config::daemon_config (boost::filesystem::path const & data_path_a) : - data_path (data_path_a) +nano::daemon_config::daemon_config (boost::filesystem::path const & data_path_a, nano::network_params & network_params) : + node{ network_params }, + data_path{ data_path_a } { } diff --git a/nano/node/daemonconfig.hpp b/nano/node/daemonconfig.hpp index f6cb849c61..42e47220ef 100644 --- a/nano/node/daemonconfig.hpp +++ b/nano/node/daemonconfig.hpp @@ -16,7 +16,7 @@ class daemon_config { public: daemon_config () = default; - daemon_config (boost::filesystem::path const & data_path); + daemon_config (boost::filesystem::path const & data_path, nano::network_params & network_params); nano::error deserialize_json (bool &, nano::jsonconfig &); nano::error serialize_json (nano::jsonconfig &); nano::error deserialize_toml (nano::tomlconfig &); diff --git a/nano/node/node.cpp b/nano/node/node.cpp index 5dd6149b75..a32bdced38 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -1772,7 +1772,7 @@ nano::node_wrapper::node_wrapper (boost::filesystem::path const & path_a, boost: */ boost::filesystem::create_directories (path_a); nano::set_secure_perm_directory (path_a, error_chmod); - nano::daemon_config daemon_config (path_a); + nano::daemon_config daemon_config{ path_a, nano::dev::network_params }; auto error = nano::read_node_config_toml (config_path_a, daemon_config, node_flags_a.config_overrides); if (error) { From 68936b4702b437d245a5a7271b924fd23077b36e Mon Sep 17 00:00:00 2001 From: Zach Hyatt Date: Thu, 12 Aug 2021 17:57:39 -0500 Subject: [PATCH 177/346] Update major version to 23 and add pre release version 99 as non-release build indicator (#3416) --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 339b46ae79..60d2407b38 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -46,10 +46,10 @@ if(MSVC) add_definitions(/MP) endif() -set(CPACK_PACKAGE_VERSION_MAJOR "22") +set(CPACK_PACKAGE_VERSION_MAJOR "23") set(CPACK_PACKAGE_VERSION_MINOR "0") set(CPACK_PACKAGE_VERSION_PATCH "0") -set(CPACK_PACKAGE_VERSION_PRE_RELEASE "0") +set(CPACK_PACKAGE_VERSION_PRE_RELEASE "99") set(CPACK_PACKAGE_VENDOR "Nano Currency") if(CI_BUILD) From db6c1624c9550b6ac887d8102bfe517b81a7b5c9 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Tue, 31 Aug 2021 18:32:28 +0100 Subject: [PATCH 178/346] Fixing issue where the selected_ratio_button assert was being checked before being corrected for out-of-bounds values. Also fixed issue where the button id was assumed to be the index but it's actually a free-mapping. Changed mapped keys to be actual button index. (#3428) --- nano/qt/qt.cpp | 30 ++++++++++-------------------- 1 file changed, 10 insertions(+), 20 deletions(-) diff --git a/nano/qt/qt.cpp b/nano/qt/qt.cpp index d847c49049..c1595aad25 100644 --- a/nano/qt/qt.cpp +++ b/nano/qt/qt.cpp @@ -1765,9 +1765,9 @@ nano_qt::advanced_actions::advanced_actions (nano_qt::wallet & wallet_a) : wallet (wallet_a) { ratio_group->addButton (nano_unit); + ratio_group->setId (nano_unit, ratio_group->buttons ().size () - 1); ratio_group->addButton (raw_unit); - ratio_group->setId (nano_unit, 2); - ratio_group->setId (raw_unit, 3); + ratio_group->setId (raw_unit, ratio_group->buttons ().size () - 1); scale_layout->addWidget (scale_label); scale_layout->addWidget (nano_unit); scale_layout->addWidget (raw_unit); @@ -1825,35 +1825,25 @@ nano_qt::advanced_actions::advanced_actions (nano_qt::wallet & wallet_a) : QObject::connect (nano_unit, &QRadioButton::toggled, [this] () { if (nano_unit->isChecked ()) { - QSettings ().setValue (saved_ratio_key, ratio_group->id (nano_unit)); this->wallet.change_rendering_ratio (nano::Mxrb_ratio); + QSettings ().setValue (saved_ratio_key, ratio_group->id (nano_unit)); } }); QObject::connect (raw_unit, &QRadioButton::toggled, [this] () { if (raw_unit->isChecked ()) { - QSettings ().setValue (saved_ratio_key, ratio_group->id (raw_unit)); this->wallet.change_rendering_ratio (nano::raw_ratio); + QSettings ().setValue (saved_ratio_key, ratio_group->id (raw_unit)); } }); - auto selected_ratio_id (QSettings ().value (saved_ratio_key, ratio_group->id (nano_unit)).toInt ()); - auto selected_ratio_button = ratio_group->button (selected_ratio_id); - debug_assert (selected_ratio_button != nullptr); - - // Make sure value is not out of bounds - if (selected_ratio_id < 0 || selected_ratio_id > 1) + auto selected_ratio_button = ratio_group->button (QSettings ().value (saved_ratio_key).toInt ()); + if (selected_ratio_button == nullptr) { - QSettings ().setValue (saved_ratio_key, 0); - selected_ratio_id = 0; - } - if (selected_ratio_button) - { - selected_ratio_button->click (); - } - else - { - nano_unit->click (); + selected_ratio_button = nano_unit; } + debug_assert (selected_ratio_button != nullptr); + selected_ratio_button->click (); + QSettings ().setValue (saved_ratio_key, ratio_group->id (selected_ratio_button)); QObject::connect (wallet_refresh, &QPushButton::released, [this] () { this->wallet.accounts.refresh (); this->wallet.accounts.refresh_wallet_balance (); From 82153c8775fa57339fe0d56a223f277d409e4e77 Mon Sep 17 00:00:00 2001 From: slact Date: Wed, 1 Sep 2021 07:01:09 -0400 Subject: [PATCH 179/346] fix failing build with boost >= 1.76 (#3433) --- nano/node/common.hpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/nano/node/common.hpp b/nano/node/common.hpp index 3d29457f46..d3b5627e92 100644 --- a/nano/node/common.hpp +++ b/nano/node/common.hpp @@ -112,6 +112,7 @@ struct hash<::nano::tcp_endpoint> return ehash (endpoint_a); } }; +#ifndef BOOST_ASIO_HAS_STD_HASH template <> struct hash { @@ -121,6 +122,7 @@ struct hash return ihash (ip_a); } }; +#endif } namespace boost { From 122e113938c08bf5d2a4628301bca8a90ad39074 Mon Sep 17 00:00:00 2001 From: slact Date: Wed, 1 Sep 2021 07:02:08 -0400 Subject: [PATCH 180/346] fix failure to build with GCC11 (#3434) --- nano/lib/threading.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/nano/lib/threading.hpp b/nano/lib/threading.hpp index dd7112bd90..61452faa5e 100644 --- a/nano/lib/threading.hpp +++ b/nano/lib/threading.hpp @@ -8,6 +8,7 @@ #include #include +#include namespace nano { From a09a3a32bceb9952cc1f496e182b2ed4c93eec02 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Thu, 2 Sep 2021 10:25:16 +0100 Subject: [PATCH 181/346] nano::bootstrap_connections is composed of nano::bootstrap_connection. Convert nano::bootstrap_connection::connections to a reference since it doesn't manage lifetime. (#3435) --- nano/node/bootstrap/bootstrap_bulk_pull.cpp | 6 +++--- nano/node/bootstrap/bootstrap_connections.cpp | 8 ++++---- nano/node/bootstrap/bootstrap_connections.hpp | 4 ++-- nano/node/bootstrap/bootstrap_frontier.cpp | 2 +- 4 files changed, 10 insertions(+), 10 deletions(-) diff --git a/nano/node/bootstrap/bootstrap_bulk_pull.cpp b/nano/node/bootstrap/bootstrap_bulk_pull.cpp index 53301c1489..9f6178d3f7 100644 --- a/nano/node/bootstrap/bootstrap_bulk_pull.cpp +++ b/nano/node/bootstrap/bootstrap_bulk_pull.cpp @@ -187,7 +187,7 @@ void nano::bulk_pull_client::received_type () // Avoid re-using slow peers, or peers that sent the wrong blocks. if (!connection->pending_stop && (expected == pull.end || (pull.count != 0 && pull.count == pull_blocks))) { - connection->connections->pool_connection (connection); + connection->connections.pool_connection (connection); } break; } @@ -253,7 +253,7 @@ void nano::bulk_pull_client::received_block (boost::system::error_code const & e } else if (stop_pull && block_expected) { - connection->connections->pool_connection (connection); + connection->connections.pool_connection (connection); } } else if (block == nullptr) @@ -376,7 +376,7 @@ void nano::bulk_pull_account_client::receive_pending () } else { - this_l->connection->connections->pool_connection (this_l->connection); + this_l->connection->connections.pool_connection (this_l->connection); } } else diff --git a/nano/node/bootstrap/bootstrap_connections.cpp b/nano/node/bootstrap/bootstrap_connections.cpp index 09a4e761d1..cfba8e7ca3 100644 --- a/nano/node/bootstrap/bootstrap_connections.cpp +++ b/nano/node/bootstrap/bootstrap_connections.cpp @@ -13,7 +13,7 @@ constexpr double nano::bootstrap_limits::bootstrap_minimum_termination_time_sec; constexpr unsigned nano::bootstrap_limits::bootstrap_max_new_connections; constexpr unsigned nano::bootstrap_limits::requeued_pulls_processed_blocks_factor; -nano::bootstrap_client::bootstrap_client (std::shared_ptr const & node_a, std::shared_ptr const & connections_a, std::shared_ptr const & channel_a, std::shared_ptr const & socket_a) : +nano::bootstrap_client::bootstrap_client (std::shared_ptr const & node_a, nano::bootstrap_connections & connections_a, std::shared_ptr const & channel_a, std::shared_ptr const & socket_a) : node (node_a), connections (connections_a), channel (channel_a), @@ -21,14 +21,14 @@ nano::bootstrap_client::bootstrap_client (std::shared_ptr const & no receive_buffer (std::make_shared> ()), start_time_m (std::chrono::steady_clock::now ()) { - ++connections->connections_count; + ++connections.connections_count; receive_buffer->resize (256); channel->set_endpoint (); } nano::bootstrap_client::~bootstrap_client () { - --connections->connections_count; + --connections.connections_count; } double nano::bootstrap_client::sample_block_rate () @@ -154,7 +154,7 @@ void nano::bootstrap_connections::connect_client (nano::tcp_endpoint const & end { this_l->node.logger.try_log (boost::str (boost::format ("Connection established to %1%") % endpoint_a)); } - auto client (std::make_shared (this_l->node.shared (), this_l, std::make_shared (*this_l->node.shared (), socket), socket)); + auto client (std::make_shared (this_l->node.shared (), *this_l, std::make_shared (*this_l->node.shared (), socket), socket)); this_l->pool_connection (client, true, push_front); } else diff --git a/nano/node/bootstrap/bootstrap_connections.hpp b/nano/node/bootstrap/bootstrap_connections.hpp index dbc63940cb..4b47bb68f4 100644 --- a/nano/node/bootstrap/bootstrap_connections.hpp +++ b/nano/node/bootstrap/bootstrap_connections.hpp @@ -21,7 +21,7 @@ class pull_info; class bootstrap_client final : public std::enable_shared_from_this { public: - bootstrap_client (std::shared_ptr const & node_a, std::shared_ptr const & connections_a, std::shared_ptr const & channel_a, std::shared_ptr const & socket_a); + bootstrap_client (std::shared_ptr const & node_a, nano::bootstrap_connections & connections_a, std::shared_ptr const & channel_a, std::shared_ptr const & socket_a); ~bootstrap_client (); std::shared_ptr shared (); void stop (bool force); @@ -29,7 +29,7 @@ class bootstrap_client final : public std::enable_shared_from_this node; - std::shared_ptr connections; + nano::bootstrap_connections & connections; std::shared_ptr channel; std::shared_ptr socket; std::shared_ptr> receive_buffer; diff --git a/nano/node/bootstrap/bootstrap_frontier.cpp b/nano/node/bootstrap/bootstrap_frontier.cpp index 6f6daf45b9..c15d791348 100644 --- a/nano/node/bootstrap/bootstrap_frontier.cpp +++ b/nano/node/bootstrap/bootstrap_frontier.cpp @@ -199,7 +199,7 @@ void nano::frontier_req_client::received_frontier (boost::system::error_code con catch (std::future_error &) { } - connection->connections->pool_connection (connection); + connection->connections.pool_connection (connection); } } else From 7337ea536fd3f6e4d7c529e8434b4ff4adee24e6 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Tue, 7 Sep 2021 15:57:51 +0100 Subject: [PATCH 182/346] Removing unused variable. (#3440) --- nano/node/transport/tcp.cpp | 5 ----- nano/node/transport/tcp.hpp | 1 - 2 files changed, 6 deletions(-) diff --git a/nano/node/transport/tcp.cpp b/nano/node/transport/tcp.cpp index 6951751b85..2791806768 100644 --- a/nano/node/transport/tcp.cpp +++ b/nano/node/transport/tcp.cpp @@ -20,11 +20,6 @@ nano::transport::channel_tcp::~channel_tcp () { socket_l->close (); } - // Remove response server - if (auto response_server_l = response_server.lock ()) - { - response_server_l->stop (); - } } } diff --git a/nano/node/transport/tcp.hpp b/nano/node/transport/tcp.hpp index 8fde8f2a8e..e3ed8cb0a9 100644 --- a/nano/node/transport/tcp.hpp +++ b/nano/node/transport/tcp.hpp @@ -44,7 +44,6 @@ namespace transport return &node == &other_a.node && socket.lock () == other_a.socket.lock (); } std::weak_ptr socket; - std::weak_ptr response_server; /* Mark for temporary channels. Usually remote ports of these channels are ephemeral and received from incoming connections to server. If remote part has open listening port, temporary channel will be replaced with direct connection to listening port soon. But if other side is behing NAT or firewall this connection can be pemanent. */ std::atomic temporary{ false }; From 2e769bf5b99256c799e3b39d584dd12ac3691977 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Thu, 9 Sep 2021 09:15:59 +0100 Subject: [PATCH 183/346] Removing null checks for nano::bootstrap::socket since it's required to be non-null on construction and is never nulled out during execution. (#3441) --- nano/node/bootstrap/bootstrap_server.cpp | 29 ++++++++---------------- nano/node/bootstrap/bootstrap_server.hpp | 2 +- 2 files changed, 10 insertions(+), 21 deletions(-) diff --git a/nano/node/bootstrap/bootstrap_server.cpp b/nano/node/bootstrap/bootstrap_server.cpp index ccf0fe8701..0e32bd2921 100644 --- a/nano/node/bootstrap/bootstrap_server.cpp +++ b/nano/node/bootstrap/bootstrap_server.cpp @@ -136,10 +136,7 @@ void nano::bootstrap_server::stop () { if (!stopped.exchange (true)) { - if (socket != nullptr) - { - socket->close (); - } + socket->close (); } } @@ -583,25 +580,17 @@ void nano::bootstrap_server::finish_request_async () void nano::bootstrap_server::timeout () { - if (socket != nullptr) + if (socket->has_timed_out ()) { - if (socket->has_timed_out ()) + if (node->config.logging.bulk_pull_logging ()) { - if (node->config.logging.bulk_pull_logging ()) - { - node->logger.try_log ("Closing incoming tcp / bootstrap server by timeout"); - } - { - nano::lock_guard lock (node->bootstrap.mutex); - node->bootstrap.connections.erase (this); - } - socket->close (); + node->logger.try_log ("Closing incoming tcp / bootstrap server by timeout"); } - } - else - { - nano::lock_guard lock (node->bootstrap.mutex); - node->bootstrap.connections.erase (this); + { + nano::lock_guard lock (node->bootstrap.mutex); + node->bootstrap.connections.erase (this); + } + socket->close (); } } diff --git a/nano/node/bootstrap/bootstrap_server.hpp b/nano/node/bootstrap/bootstrap_server.hpp index 7c0e424bdd..1b6b4a3e2f 100644 --- a/nano/node/bootstrap/bootstrap_server.hpp +++ b/nano/node/bootstrap/bootstrap_server.hpp @@ -59,7 +59,7 @@ class bootstrap_server final : public std::enable_shared_from_this> receive_buffer; - std::shared_ptr socket; + std::shared_ptr const socket; std::shared_ptr node; nano::mutex mutex; std::queue> requests; From 2280ff155644823dfbdba9f8dde6ce4d0cb04311 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Mon, 13 Sep 2021 13:31:25 +0100 Subject: [PATCH 184/346] Remove node_id_handshake_sockets as unneeded. (#3442) Original commit references a leak, however, none of the clearing operations actually close the socket, they simply decrement the shared_ptr counter. Additionally, removal operations are incorrectly implemented as they delete the shared_ptr in question and every shared_ptr following until the end of the container. --- nano/core_test/node.cpp | 1 - nano/node/transport/tcp.cpp | 35 ----------------------------------- nano/node/transport/tcp.hpp | 5 ----- 3 files changed, 41 deletions(-) diff --git a/nano/core_test/node.cpp b/nano/core_test/node.cpp index 6d80f65925..0968dc4b8c 100644 --- a/nano/core_test/node.cpp +++ b/nano/core_test/node.cpp @@ -177,7 +177,6 @@ TEST (node, send_single_many_peers) for (auto node : system.nodes) { ASSERT_TRUE (node->stopped); - ASSERT_TRUE (node->network.tcp_channels.node_id_handhake_sockets_empty ()); } } diff --git a/nano/node/transport/tcp.cpp b/nano/node/transport/tcp.cpp index 2791806768..a02f8bcbb4 100644 --- a/nano/node/transport/tcp.cpp +++ b/nano/node/transport/tcp.cpp @@ -358,7 +358,6 @@ void nano::transport::tcp_channels::stop () } } channels.clear (); - node_id_handshake_sockets.clear (); } bool nano::transport::tcp_channels::max_ip_connections (nano::tcp_endpoint const & endpoint_a) @@ -407,13 +406,11 @@ std::unique_ptr nano::transport::tcp_channels::c nano::lock_guard guard (mutex); channels_count = channels.size (); attemps_count = attempts.size (); - node_id_handshake_sockets_count = node_id_handshake_sockets.size (); } auto composite = std::make_unique (name); composite->add_component (std::make_unique (container_info{ "channels", channels_count, sizeof (decltype (channels)::value_type) })); composite->add_component (std::make_unique (container_info{ "attempts", attemps_count, sizeof (decltype (attempts)::value_type) })); - composite->add_component (std::make_unique (container_info{ "node_id_handshake_sockets", node_id_handshake_sockets_count, sizeof (decltype (node_id_handshake_sockets)::value_type) })); return composite; } @@ -430,12 +427,6 @@ void nano::transport::tcp_channels::purge (std::chrono::steady_clock::time_point // Check if any tcp channels belonging to old protocol versions which may still be alive due to async operations auto lower_bound = channels.get ().lower_bound (node.network_params.network.protocol_version_min); channels.get ().erase (channels.get ().begin (), lower_bound); - - // Cleanup any sockets which may still be existing from failed node id handshakes - node_id_handshake_sockets.erase (std::remove_if (node_id_handshake_sockets.begin (), node_id_handshake_sockets.end (), [this] (auto socket) { - return channels.get ().find (socket->remote_endpoint ()) == channels.get ().end (); - }), - node_id_handshake_sockets.end ()); } void nano::transport::tcp_channels::ongoing_keepalive () @@ -525,28 +516,6 @@ void nano::transport::tcp_channels::update (nano::tcp_endpoint const & endpoint_ } } -bool nano::transport::tcp_channels::node_id_handhake_sockets_empty () const -{ - nano::lock_guard guard (mutex); - return node_id_handshake_sockets.empty (); -} - -void nano::transport::tcp_channels::push_node_id_handshake_socket (std::shared_ptr const & socket_a) -{ - nano::lock_guard guard (mutex); - node_id_handshake_sockets.push_back (socket_a); -} - -void nano::transport::tcp_channels::remove_node_id_handshake_socket (std::shared_ptr const & socket_a) -{ - std::weak_ptr node_w (node.shared ()); - if (auto node_l = node_w.lock ()) - { - nano::lock_guard guard (mutex); - node_id_handshake_sockets.erase (std::remove (node_id_handshake_sockets.begin (), node_id_handshake_sockets.end (), socket_a), node_id_handshake_sockets.end ()); - } -} - void nano::transport::tcp_channels::start_tcp (nano::endpoint const & endpoint_a, std::function const &)> const & callback_a) { if (node.flags.disable_tcp_realtime) @@ -574,7 +543,6 @@ void nano::transport::tcp_channels::start_tcp (nano::endpoint const & endpoint_a channel->set_endpoint (); std::shared_ptr> receive_buffer (std::make_shared> ()); receive_buffer->resize (256); - node_l->network.tcp_channels.push_node_id_handshake_socket (socket); channel->send (message, [node_w, channel, endpoint_a, receive_buffer, callback_a] (boost::system::error_code const & ec, size_t size_a) { if (auto node_l = node_w.lock ()) { @@ -586,7 +554,6 @@ void nano::transport::tcp_channels::start_tcp (nano::endpoint const & endpoint_a { if (auto socket_l = channel->socket.lock ()) { - node_l->network.tcp_channels.remove_node_id_handshake_socket (socket_l); socket_l->close (); } if (node_l->config.logging.network_node_id_handshake_logging ()) @@ -616,7 +583,6 @@ void nano::transport::tcp_channels::start_tcp_receive_node_id (std::shared_ptrnetwork.tcp_channels.remove_node_id_handshake_socket (socket_l); socket_l->close (); } } @@ -688,7 +654,6 @@ void nano::transport::tcp_channels::start_tcp_receive_node_id (std::shared_ptrsocket->type_set (nano::socket::type_t::realtime_response_server); response_server->remote_node_id = channel_a->get_node_id (); response_server->receive (); - node_l->network.tcp_channels.remove_node_id_handshake_socket (socket_l); if (!node_l->flags.disable_initial_telemetry_requests) { diff --git a/nano/node/transport/tcp.hpp b/nano/node/transport/tcp.hpp index e3ed8cb0a9..f33bd922af 100644 --- a/nano/node/transport/tcp.hpp +++ b/nano/node/transport/tcp.hpp @@ -105,9 +105,6 @@ namespace transport void start_tcp (nano::endpoint const &, std::function const &)> const & = nullptr); void start_tcp_receive_node_id (std::shared_ptr const &, nano::endpoint const &, std::shared_ptr> const &, std::function const &)> const &); void udp_fallback (nano::endpoint const &, std::function const &)> const &); - void push_node_id_handshake_socket (std::shared_ptr const & socket_a); - void remove_node_id_handshake_socket (std::shared_ptr const & socket_a); - bool node_id_handhake_sockets_empty () const; nano::node & node; private: @@ -228,8 +225,6 @@ namespace transport mi::member>>> attempts; // clang-format on - // This owns the sockets until the node_id_handshake has been completed. Needed to prevent self referencing callbacks, they are periodically removed if any are dangling. - std::vector> node_id_handshake_sockets; std::atomic stopped{ false }; friend class network_peer_max_tcp_attempts_subnetwork_Test; From 84f4efd593f9cef9342836297a8f4674838a808b Mon Sep 17 00:00:00 2001 From: clemahieu Date: Mon, 13 Sep 2021 17:44:00 +0100 Subject: [PATCH 185/346] Fill_keepalive_self sets special values in index 0 and 1 to refer to the peering port of the node. Values are also filled from the lowest index so the lowest entries would get clobbered. Preserve these values in index 2 and 3. (#3445) --- nano/core_test/network.cpp | 8 ++++++++ nano/node/network.cpp | 4 ++++ 2 files changed, 12 insertions(+) diff --git a/nano/core_test/network.cpp b/nano/core_test/network.cpp index 94b39eff9e..5d6040f300 100644 --- a/nano/core_test/network.cpp +++ b/nano/core_test/network.cpp @@ -1262,3 +1262,11 @@ TEST (network, filter) node1.network.inbound (keepalive, std::make_shared (node1)); ASSERT_EQ (1, node1.stats.count (nano::stat::type::message, nano::stat::detail::invalid_network)); } + +TEST (network, fill_keepalive_self) +{ + nano::system system{ 2 }; + std::array target; + system.nodes[0]->network.fill_keepalive_self (target); + ASSERT_TRUE (target[2].port () == system.nodes[1]->network.port); +} diff --git a/nano/node/network.cpp b/nano/node/network.cpp index 7c90706ddf..1295131491 100644 --- a/nano/node/network.cpp +++ b/nano/node/network.cpp @@ -684,6 +684,10 @@ void nano::network::random_fill (std::array & target_a) const void nano::network::fill_keepalive_self (std::array & target_a) const { random_fill (target_a); + // We will clobber values in index 0 and 1 and if there are only 2 nodes in the system, these are the only positions occupied + // Move these items to index 2 and 3 so they propagate + target_a[2] = target_a[0]; + target_a[3] = target_a[1]; // Replace part of message with node external address or listening port target_a[1] = nano::endpoint (boost::asio::ip::address_v6{}, 0); // For node v19 (response channels) if (node.config.external_address != boost::asio::ip::address_v6{}.to_string () && node.config.external_port != 0) From 4e2ffe9993030e170b0f53ae579ac272f15402f1 Mon Sep 17 00:00:00 2001 From: cryptocode Date: Mon, 13 Sep 2021 19:49:16 +0200 Subject: [PATCH 186/346] Have cmake copy flatbuffer schema files to simplify dev (#3446) --- nano/ipc_flatbuffers_lib/CMakeLists.txt | 6 ++++++ nano/node/ipc/flatbuffers_handler.cpp | 18 ++++-------------- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/nano/ipc_flatbuffers_lib/CMakeLists.txt b/nano/ipc_flatbuffers_lib/CMakeLists.txt index d7e1d9ad4c..1cf92097d6 100644 --- a/nano/ipc_flatbuffers_lib/CMakeLists.txt +++ b/nano/ipc_flatbuffers_lib/CMakeLists.txt @@ -48,6 +48,12 @@ foreach(file ${files}) message( "Generating flatbuffers code for: ${flatbuffers_filename} into ${CMAKE_CURRENT_SOURCE_DIR}/generated/flatbuffers" ) + + configure_file( + ${file} + ${PROJECT_BINARY_DIR}/${CMAKE_BUILD_TYPE}/api/flatbuffers/${flatbuffers_filename}.fbs + COPYONLY) + add_custom_command( OUTPUT ${CMAKE_CURRENT_SOURCE_DIR}/generated/flatbuffers/${flatbuffers_filename}_generated.h diff --git a/nano/node/ipc/flatbuffers_handler.cpp b/nano/node/ipc/flatbuffers_handler.cpp index ca91f527a9..01ca293796 100644 --- a/nano/node/ipc/flatbuffers_handler.cpp +++ b/nano/node/ipc/flatbuffers_handler.cpp @@ -35,25 +35,15 @@ std::string make_error_response (std::string const & error_message) /** * Returns the 'api/flatbuffers' directory, boost::none if not found. - * This searches the binary path as well as the parent (which is mostly useful for development) */ boost::optional get_api_path () { - auto parent_path = boost::dll::program_location ().parent_path (); - if (!boost::filesystem::exists (parent_path / "api" / "flatbuffers")) + boost::filesystem::path const fb_path = "api/flatbuffers"; + if (!boost::filesystem::exists (fb_path)) { - // See if the parent directory has the api subdirectories - if (parent_path.has_parent_path ()) - { - parent_path = boost::dll::program_location ().parent_path ().parent_path (); - } - - if (!boost::filesystem::exists (parent_path / "api" / "flatbuffers")) - { - return boost::none; - } + return boost::none; } - return parent_path / "api" / "flatbuffers"; + return fb_path; } } From ce29ba079fddad0bec199aee59d3683c861d57cc Mon Sep 17 00:00:00 2001 From: clemahieu Date: Sat, 11 Sep 2021 14:07:35 +0100 Subject: [PATCH 187/346] Cleanup nano::transport::establish_tcp Removes usage of start_tcp callback and replace it with simple polling for an established connection. --- nano/test_common/network.cpp | 22 +++++++--------------- 1 file changed, 7 insertions(+), 15 deletions(-) diff --git a/nano/test_common/network.cpp b/nano/test_common/network.cpp index 316218a91b..ae3add44e5 100644 --- a/nano/test_common/network.cpp +++ b/nano/test_common/network.cpp @@ -8,27 +8,19 @@ #include #include +using namespace std::chrono_literals; + std::shared_ptr nano::establish_tcp (nano::system & system, nano::node & node, nano::endpoint const & endpoint) { - using namespace std::chrono_literals; debug_assert (node.network.endpoint () != endpoint && "Establishing TCP to self is not allowed"); std::shared_ptr result; debug_assert (!node.flags.disable_tcp_realtime); - std::promise> promise; - auto callback = [&promise] (std::shared_ptr channel_a) { promise.set_value (channel_a); }; - auto future = promise.get_future (); - node.network.tcp_channels.start_tcp (endpoint, callback); - auto error = system.poll_until_true (2s, [&future] { return future.wait_for (0s) == std::future_status::ready; }); - if (!error) - { - auto channel = future.get (); - EXPECT_NE (nullptr, channel); - if (channel) - { - result = node.network.tcp_channels.find_channel (channel->get_tcp_endpoint ()); - } - } + node.network.tcp_channels.start_tcp (endpoint); + auto error = system.poll_until_true (2s, [&result, &node, &endpoint] { + result = node.network.tcp_channels.find_channel (nano::transport::map_endpoint_to_tcp (endpoint)); + return result != nullptr; + }); return result; } From 942e12e7e6859f373dda800cea04c418cbdab13e Mon Sep 17 00:00:00 2001 From: clemahieu Date: Sat, 11 Sep 2021 14:25:45 +0100 Subject: [PATCH 188/346] Remove keepalive_tcp_callback as unnecessary. --- nano/core_test/network.cpp | 6 +++--- nano/core_test/node.cpp | 2 +- nano/test_common/network.cpp | 10 ---------- nano/test_common/network.hpp | 3 --- 4 files changed, 4 insertions(+), 17 deletions(-) diff --git a/nano/core_test/network.cpp b/nano/core_test/network.cpp index 5d6040f300..28497be63b 100644 --- a/nano/core_test/network.cpp +++ b/nano/core_test/network.cpp @@ -112,7 +112,7 @@ TEST (network, send_node_id_handshake_tcp) auto initial_node1 (node1->stats.count (nano::stat::type::message, nano::stat::detail::node_id_handshake, nano::stat::dir::in)); auto initial_keepalive (node0->stats.count (nano::stat::type::message, nano::stat::detail::keepalive, nano::stat::dir::in)); std::weak_ptr node_w (node0); - node0->network.tcp_channels.start_tcp (node1->network.endpoint (), nano::keepalive_tcp_callback (*node1)); + node0->network.tcp_channels.start_tcp (node1->network.endpoint ()); ASSERT_EQ (0, node0->network.size ()); ASSERT_EQ (0, node1->network.size ()); ASSERT_TIMELY (10s, node0->stats.count (nano::stat::type::message, nano::stat::detail::node_id_handshake, nano::stat::dir::in) >= initial + 2); @@ -189,13 +189,13 @@ TEST (network, multi_keepalive) system.nodes.push_back (node1); ASSERT_EQ (0, node1->network.size ()); ASSERT_EQ (0, node0->network.size ()); - node1->network.tcp_channels.start_tcp (node0->network.endpoint (), nano::keepalive_tcp_callback (*node1)); + node1->network.tcp_channels.start_tcp (node0->network.endpoint ()); ASSERT_TIMELY (10s, node0->network.size () == 1 && node0->stats.count (nano::stat::type::message, nano::stat::detail::keepalive) >= 1); auto node2 (std::make_shared (system.io_ctx, nano::get_available_port (), nano::unique_path (), system.logging, system.work)); ASSERT_FALSE (node2->init_error ()); node2->start (); system.nodes.push_back (node2); - node2->network.tcp_channels.start_tcp (node0->network.endpoint (), nano::keepalive_tcp_callback (*node2)); + node2->network.tcp_channels.start_tcp (node0->network.endpoint ()); ASSERT_TIMELY (10s, node1->network.size () == 2 && node0->network.size () == 2 && node2->network.size () == 2 && node0->stats.count (nano::stat::type::message, nano::stat::detail::keepalive) >= 2); } diff --git a/nano/core_test/node.cpp b/nano/core_test/node.cpp index 0968dc4b8c..ba8380d43e 100644 --- a/nano/core_test/node.cpp +++ b/nano/core_test/node.cpp @@ -262,7 +262,7 @@ TEST (node, node_receive_quorum) system2.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); ASSERT_TRUE (node1.balance (key.pub).is_zero ()); - node1.network.tcp_channels.start_tcp (system2.nodes[0]->network.endpoint (), nano::keepalive_tcp_callback (node1)); + node1.network.tcp_channels.start_tcp (system2.nodes[0]->network.endpoint ()); while (node1.balance (key.pub).is_zero ()) { ASSERT_NO_ERROR (system.poll ()); diff --git a/nano/test_common/network.cpp b/nano/test_common/network.cpp index ae3add44e5..1ef0faed95 100644 --- a/nano/test_common/network.cpp +++ b/nano/test_common/network.cpp @@ -23,13 +23,3 @@ std::shared_ptr nano::establish_tcp (nano::system }); return result; } - -std::function channel_a)> nano::keepalive_tcp_callback (nano::node & node_a) -{ - return [node_w = std::weak_ptr (node_a.shared ())] (std::shared_ptr channel_a) { - if (auto node_l = node_w.lock ()) - { - node_l->network.send_keepalive (channel_a); - }; - }; -} diff --git a/nano/test_common/network.hpp b/nano/test_common/network.hpp index 316330a23b..4eeea69a4b 100644 --- a/nano/test_common/network.hpp +++ b/nano/test_common/network.hpp @@ -15,7 +15,4 @@ namespace transport /** Waits until a TCP connection is established and returns the TCP channel on success*/ std::shared_ptr establish_tcp (nano::system &, nano::node &, nano::endpoint const &); - -/** Returns a callback to be used for start_tcp to send a keepalive*/ -std::function channel_a)> keepalive_tcp_callback (nano::node &); } From 3159a5cdc836c1caed40d78502846ff4e8a950b0 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Sat, 11 Sep 2021 14:35:34 +0100 Subject: [PATCH 189/346] Removing usage of callback to send keepalive as unnecessary. --- nano/core_test/network.cpp | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/nano/core_test/network.cpp b/nano/core_test/network.cpp index 28497be63b..e5bfd2cdb9 100644 --- a/nano/core_test/network.cpp +++ b/nano/core_test/network.cpp @@ -1215,12 +1215,7 @@ TEST (network, cleanup_purge) ASSERT_EQ (0, node1.network.size ()); std::weak_ptr node_w = node1.shared (); - node1.network.tcp_channels.start_tcp (node2->network.endpoint (), [node_w] (std::shared_ptr const & channel_a) { - if (auto node_l = node_w.lock ()) - { - node_l->network.send_keepalive (channel_a); - } - }); + node1.network.tcp_channels.start_tcp (node2->network.endpoint ()); ASSERT_TIMELY (3s, node1.network.size () == 1); node1.network.cleanup (test_start); From ff76c1eb37d9a9a013855edf7e7cdc7a0009c96c Mon Sep 17 00:00:00 2001 From: clemahieu Date: Sat, 11 Sep 2021 15:03:32 +0100 Subject: [PATCH 190/346] Remove direct rep_crawler query in add_initial_peers as all peers are queried via an observer set in rep_crawler::rep_crawler. --- nano/node/node.cpp | 4 ---- 1 file changed, 4 deletions(-) diff --git a/nano/node/node.cpp b/nano/node/node.cpp index a32bdced38..0d48d28f9f 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -1218,10 +1218,6 @@ void nano::node::add_initial_peers () if (auto node_l = node_w.lock ()) { node_l->network.send_keepalive (channel_a); - if (!node_l->flags.disable_rep_crawler) - { - node_l->rep_crawler.query (channel_a); - } } }); } From c12ee369db0f27204a810255df92243b1a497147 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Sat, 11 Sep 2021 18:25:43 +0100 Subject: [PATCH 191/346] Remove keepalive callback from add_initial_peer. --- nano/node/node.cpp | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/nano/node/node.cpp b/nano/node/node.cpp index 0d48d28f9f..aec1c3b65f 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -1213,13 +1213,7 @@ void nano::node::add_initial_peers () nano::endpoint endpoint (boost::asio::ip::address_v6 (i->first.address_bytes ()), i->first.port ()); if (!network.reachout (endpoint, config.allow_local_peers)) { - std::weak_ptr node_w (shared_from_this ()); - network.tcp_channels.start_tcp (endpoint, [node_w] (std::shared_ptr const & channel_a) { - if (auto node_l = node_w.lock ()) - { - node_l->network.send_keepalive (channel_a); - } - }); + network.tcp_channels.start_tcp (endpoint); } } } From 6552a82c7e902100022f355030bc4a321cdd16da Mon Sep 17 00:00:00 2001 From: clemahieu Date: Sat, 11 Sep 2021 21:28:58 +0100 Subject: [PATCH 192/346] Removing keepalive callback passed in through start_tcp as unnecessary. --- nano/node/node.cpp | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/nano/node/node.cpp b/nano/node/node.cpp index aec1c3b65f..7cea3f8131 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -45,12 +45,7 @@ void nano::node::keepalive (std::string const & address_a, uint16_t port_a) auto channel (node_l->network.find_channel (endpoint)); if (!channel) { - node_l->network.tcp_channels.start_tcp (endpoint, [node_w] (std::shared_ptr const & channel_a) { - if (auto node_l = node_w.lock ()) - { - node_l->network.send_keepalive (channel_a); - } - }); + node_l->network.tcp_channels.start_tcp (endpoint); } else { From e055092826a29ba51878c7e03b26b8dd0eecc6ae Mon Sep 17 00:00:00 2001 From: clemahieu Date: Sat, 11 Sep 2021 22:45:59 +0100 Subject: [PATCH 193/346] Connect to node2 over TCP instead of falling back to UDP as this is unnecessary. --- nano/core_test/node.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nano/core_test/node.cpp b/nano/core_test/node.cpp index ba8380d43e..ef056cc3bb 100644 --- a/nano/core_test/node.cpp +++ b/nano/core_test/node.cpp @@ -2277,8 +2277,8 @@ TEST (node, rep_remove) auto vote2 = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, nano::dev::genesis); node.rep_crawler.response (channel1, vote2); ASSERT_TIMELY (10s, node.rep_crawler.representative_count () == 1); - // Add inactive TCP representative channel auto node2 (std::make_shared (system.io_ctx, nano::unique_path (), nano::node_config (nano::get_available_port (), system.logging), system.work)); + node2->start (); std::weak_ptr node_w (node.shared ()); auto vote3 = std::make_shared (keypair2.pub, keypair2.prv, 0, nano::dev::genesis); node.network.tcp_channels.start_tcp (node2->network.endpoint (), [node_w, &vote3] (std::shared_ptr const & channel2) { From 372a1289c360c04053b531a7d3c4e8ba5f125118 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Sat, 11 Sep 2021 22:47:15 +0100 Subject: [PATCH 194/346] Removing start_tcp callback and poll for channel to node2 from node. --- nano/core_test/node.cpp | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/nano/core_test/node.cpp b/nano/core_test/node.cpp index ef056cc3bb..4cc186f247 100644 --- a/nano/core_test/node.cpp +++ b/nano/core_test/node.cpp @@ -2281,12 +2281,10 @@ TEST (node, rep_remove) node2->start (); std::weak_ptr node_w (node.shared ()); auto vote3 = std::make_shared (keypair2.pub, keypair2.prv, 0, nano::dev::genesis); - node.network.tcp_channels.start_tcp (node2->network.endpoint (), [node_w, &vote3] (std::shared_ptr const & channel2) { - if (auto node_l = node_w.lock ()) - { - ASSERT_FALSE (node_l->rep_crawler.response (channel2, vote3)); - } - }); + node.network.tcp_channels.start_tcp (node2->network.endpoint ()); + std::shared_ptr channel2; + ASSERT_TIMELY (10s, (channel2 = node.network.tcp_channels.find_channel (nano::transport::map_endpoint_to_tcp (node2->network.endpoint ()))) != nullptr); + ASSERT_FALSE (node.rep_crawler.response (channel2, vote3)); ASSERT_TIMELY (10s, node.rep_crawler.representative_count () == 2); node2->stop (); ASSERT_TIMELY (10s, node.rep_crawler.representative_count () == 1); From 809e50bf5db8442fcca467dc9b5b1b0567f66368 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Sun, 12 Sep 2021 10:56:58 +0100 Subject: [PATCH 195/346] Removing callback passed through merge_peer as it's only used for udp_fallback. Directly call send_keepalive in place of using this callback. --- nano/node/network.cpp | 7 +------ nano/node/transport/tcp.cpp | 8 ++++++-- 2 files changed, 7 insertions(+), 8 deletions(-) diff --git a/nano/node/network.cpp b/nano/node/network.cpp index 1295131491..a564c42b58 100644 --- a/nano/node/network.cpp +++ b/nano/node/network.cpp @@ -575,12 +575,7 @@ void nano::network::merge_peer (nano::endpoint const & peer_a) if (!reachout (peer_a, node.config.allow_local_peers)) { std::weak_ptr node_w (node.shared ()); - node.network.tcp_channels.start_tcp (peer_a, [node_w] (std::shared_ptr const & channel_a) { - if (auto node_l = node_w.lock ()) - { - node_l->network.send_keepalive (channel_a); - } - }); + node.network.tcp_channels.start_tcp (peer_a); } } diff --git a/nano/node/transport/tcp.cpp b/nano/node/transport/tcp.cpp index a02f8bcbb4..12a1387887 100644 --- a/nano/node/transport/tcp.cpp +++ b/nano/node/transport/tcp.cpp @@ -714,9 +714,13 @@ void nano::transport::tcp_channels::udp_fallback (nano::endpoint const & endpoin nano::lock_guard lock (mutex); attempts.get ().erase (nano::transport::map_endpoint_to_tcp (endpoint_a)); } - if (callback_a && !node.flags.disable_udp) + if (!node.flags.disable_udp) { auto channel_udp (node.network.udp_channels.create (endpoint_a)); - callback_a (channel_udp); + node.network.send_keepalive (channel_udp); + if (callback_a) + { + callback_a (channel_udp); + } } } From e1786a40f0e62e88984852e0d00d72de45a4e5df Mon Sep 17 00:00:00 2001 From: clemahieu Date: Sun, 12 Sep 2021 11:13:39 +0100 Subject: [PATCH 196/346] Remove callbacks passed through start_tcp as they're no longer used. --- nano/node/transport/tcp.cpp | 50 ++++++++++++++++--------------------- nano/node/transport/tcp.hpp | 6 ++--- 2 files changed, 24 insertions(+), 32 deletions(-) diff --git a/nano/node/transport/tcp.cpp b/nano/node/transport/tcp.cpp index 12a1387887..65976419f6 100644 --- a/nano/node/transport/tcp.cpp +++ b/nano/node/transport/tcp.cpp @@ -516,11 +516,11 @@ void nano::transport::tcp_channels::update (nano::tcp_endpoint const & endpoint_ } } -void nano::transport::tcp_channels::start_tcp (nano::endpoint const & endpoint_a, std::function const &)> const & callback_a) +void nano::transport::tcp_channels::start_tcp (nano::endpoint const & endpoint_a) { if (node.flags.disable_tcp_realtime) { - node.network.tcp_channels.udp_fallback (endpoint_a, callback_a); + node.network.tcp_channels.udp_fallback (endpoint_a); return; } auto socket = std::make_shared (node, boost::none); @@ -528,7 +528,7 @@ void nano::transport::tcp_channels::start_tcp (nano::endpoint const & endpoint_a auto channel (std::make_shared (node, socket_w)); std::weak_ptr node_w (node.shared ()); socket->async_connect (nano::transport::map_endpoint_to_tcp (endpoint_a), - [node_w, channel, socket, endpoint_a, callback_a] (boost::system::error_code const & ec) { + [node_w, channel, socket, endpoint_a] (boost::system::error_code const & ec) { if (auto node_l = node_w.lock ()) { if (!ec && channel) @@ -543,12 +543,12 @@ void nano::transport::tcp_channels::start_tcp (nano::endpoint const & endpoint_a channel->set_endpoint (); std::shared_ptr> receive_buffer (std::make_shared> ()); receive_buffer->resize (256); - channel->send (message, [node_w, channel, endpoint_a, receive_buffer, callback_a] (boost::system::error_code const & ec, size_t size_a) { + channel->send (message, [node_w, channel, endpoint_a, receive_buffer] (boost::system::error_code const & ec, size_t size_a) { if (auto node_l = node_w.lock ()) { if (!ec) { - node_l->network.tcp_channels.start_tcp_receive_node_id (channel, endpoint_a, receive_buffer, callback_a); + node_l->network.tcp_channels.start_tcp_receive_node_id (channel, endpoint_a, receive_buffer); } else { @@ -560,25 +560,25 @@ void nano::transport::tcp_channels::start_tcp (nano::endpoint const & endpoint_a { node_l->logger.try_log (boost::str (boost::format ("Error sending node_id_handshake to %1%: %2%") % endpoint_a % ec.message ())); } - node_l->network.tcp_channels.udp_fallback (endpoint_a, callback_a); + node_l->network.tcp_channels.udp_fallback (endpoint_a); } } }); } else { - node_l->network.tcp_channels.udp_fallback (endpoint_a, callback_a); + node_l->network.tcp_channels.udp_fallback (endpoint_a); } } }); } -void nano::transport::tcp_channels::start_tcp_receive_node_id (std::shared_ptr const & channel_a, nano::endpoint const & endpoint_a, std::shared_ptr> const & receive_buffer_a, std::function const &)> const & callback_a) +void nano::transport::tcp_channels::start_tcp_receive_node_id (std::shared_ptr const & channel_a, nano::endpoint const & endpoint_a, std::shared_ptr> const & receive_buffer_a) { std::weak_ptr node_w (node.shared ()); if (auto socket_l = channel_a->socket.lock ()) { - auto cleanup_node_id_handshake_socket = [socket_w = channel_a->socket, node_w] (nano::endpoint const & endpoint_a, std::function)> const & callback_a) { + auto cleanup_node_id_handshake_socket = [socket_w = channel_a->socket, node_w] (nano::endpoint const & endpoint_a) { if (auto node_l = node_w.lock ()) { if (auto socket_l = socket_w.lock ()) @@ -588,15 +588,15 @@ void nano::transport::tcp_channels::start_tcp_receive_node_id (std::shared_ptrsocket, node_w, cleanup_node_id_handshake_socket] (nano::endpoint const & endpoint_a, std::function)> const & callback_a) { + auto cleanup_and_udp_fallback = [socket_w = channel_a->socket, node_w, cleanup_node_id_handshake_socket] (nano::endpoint const & endpoint_a) { if (auto node_l = node_w.lock ()) { - node_l->network.tcp_channels.udp_fallback (endpoint_a, callback_a); - cleanup_node_id_handshake_socket (endpoint_a, callback_a); + node_l->network.tcp_channels.udp_fallback (endpoint_a); + cleanup_node_id_handshake_socket (endpoint_a); } }; - socket_l->async_read (receive_buffer_a, 8 + sizeof (nano::account) + sizeof (nano::account) + sizeof (nano::signature), [node_w, channel_a, endpoint_a, receive_buffer_a, callback_a, cleanup_and_udp_fallback, cleanup_node_id_handshake_socket] (boost::system::error_code const & ec, size_t size_a) { + socket_l->async_read (receive_buffer_a, 8 + sizeof (nano::account) + sizeof (nano::account) + sizeof (nano::signature), [node_w, channel_a, endpoint_a, receive_buffer_a, cleanup_and_udp_fallback, cleanup_node_id_handshake_socket] (boost::system::error_code const & ec, size_t size_a) { if (auto node_l = node_w.lock ()) { if (!ec && channel_a) @@ -635,7 +635,7 @@ void nano::transport::tcp_channels::start_tcp_receive_node_id (std::shared_ptrlogger.try_log (boost::str (boost::format ("Node ID handshake response sent with node ID %1% to %2%: query %3%") % node_l->node_id.pub.to_node_id () % endpoint_a % (*message.query).to_string ())); } - channel_a->send (response_message, [node_w, channel_a, endpoint_a, callback_a, cleanup_and_udp_fallback] (boost::system::error_code const & ec, size_t size_a) { + channel_a->send (response_message, [node_w, channel_a, endpoint_a, cleanup_and_udp_fallback] (boost::system::error_code const & ec, size_t size_a) { if (auto node_l = node_w.lock ()) { if (!ec && channel_a) @@ -646,10 +646,6 @@ void nano::transport::tcp_channels::start_tcp_receive_node_id (std::shared_ptrset_last_packet_sent (std::chrono::steady_clock::now ()); auto response_server = std::make_shared (socket_l, node_l); node_l->network.tcp_channels.insert (channel_a, socket_l, response_server); - if (callback_a) - { - callback_a (channel_a); - } // Listen for possible responses response_server->socket->type_set (nano::socket::type_t::realtime_response_server); response_server->remote_node_id = channel_a->get_node_id (); @@ -669,7 +665,7 @@ void nano::transport::tcp_channels::start_tcp_receive_node_id (std::shared_ptrlogger.try_log (boost::str (boost::format ("Error sending node_id_handshake to %1%: %2%") % endpoint_a % ec.message ())); } - cleanup_and_udp_fallback (endpoint_a, callback_a); + cleanup_and_udp_fallback (endpoint_a); } } }); @@ -677,13 +673,13 @@ void nano::transport::tcp_channels::start_tcp_receive_node_id (std::shared_ptr lock (node_l->network.tcp_channels.mutex); node_l->network.tcp_channels.attempts.get ().erase (nano::transport::map_endpoint_to_tcp (endpoint_a)); @@ -692,7 +688,7 @@ void nano::transport::tcp_channels::start_tcp_receive_node_id (std::shared_ptrlogger.try_log (boost::str (boost::format ("Error reading node_id_handshake from %1%: %2%") % endpoint_a % ec.message ())); } - cleanup_and_udp_fallback (endpoint_a, callback_a); + cleanup_and_udp_fallback (endpoint_a); } } }); } } -void nano::transport::tcp_channels::udp_fallback (nano::endpoint const & endpoint_a, std::function const &)> const & callback_a) +void nano::transport::tcp_channels::udp_fallback (nano::endpoint const & endpoint_a) { { nano::lock_guard lock (mutex); @@ -716,11 +712,7 @@ void nano::transport::tcp_channels::udp_fallback (nano::endpoint const & endpoin } if (!node.flags.disable_udp) { - auto channel_udp (node.network.udp_channels.create (endpoint_a)); + auto channel_udp = node.network.udp_channels.create (endpoint_a); node.network.send_keepalive (channel_udp); - if (callback_a) - { - callback_a (channel_udp); - } } } diff --git a/nano/node/transport/tcp.hpp b/nano/node/transport/tcp.hpp index f33bd922af..9e7fe0112e 100644 --- a/nano/node/transport/tcp.hpp +++ b/nano/node/transport/tcp.hpp @@ -102,9 +102,9 @@ namespace transport void modify (std::shared_ptr const &, std::function const &)>); void update (nano::tcp_endpoint const &); // Connection start - void start_tcp (nano::endpoint const &, std::function const &)> const & = nullptr); - void start_tcp_receive_node_id (std::shared_ptr const &, nano::endpoint const &, std::shared_ptr> const &, std::function const &)> const &); - void udp_fallback (nano::endpoint const &, std::function const &)> const &); + void start_tcp (nano::endpoint const &); + void start_tcp_receive_node_id (std::shared_ptr const &, nano::endpoint const &, std::shared_ptr> const &); + void udp_fallback (nano::endpoint const &); nano::node & node; private: From 75149ef6b5fbc9fa1029992a4434b3e9900e01da Mon Sep 17 00:00:00 2001 From: theohax <81556890+theohax@users.noreply.github.com> Date: Thu, 16 Sep 2021 15:19:11 +0300 Subject: [PATCH 197/346] Fix CI clang-format script to tell if clang-format cannot be found (#3450) --- ci/clang-format-all.sh | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/ci/clang-format-all.sh b/ci/clang-format-all.sh index 17661f1912..ee0b013c2b 100755 --- a/ci/clang-format-all.sh +++ b/ci/clang-format-all.sh @@ -2,7 +2,12 @@ set -e -REPO_ROOT=$(git rev-parse --show-toplevel) -cd "${REPO_ROOT}" -./ci/update-clang-format -find nano -iname '*.h' -o -iname '*.hpp' -o -iname '*.cpp' | xargs clang-format -i +CLANG_FORMAT="clang-format" +if [ $(builtin type -p "$CLANG_FORMAT") ]; then + REPO_ROOT=$(git rev-parse --show-toplevel) + cd "$REPO_ROOT" + ./ci/update-clang-format + find nano -iname '*.h' -o -iname '*.hpp' -o -iname '*.cpp' | xargs "$CLANG_FORMAT" -i +else + echo "'$CLANG_FORMAT' could not be detected in your PATH. Do you have it installed?" +fi From 89e6f44f618086ece6beeb207c8ed940f21ca6f2 Mon Sep 17 00:00:00 2001 From: theohax <81556890+theohax@users.noreply.github.com> Date: Fri, 17 Sep 2021 14:15:55 +0300 Subject: [PATCH 198/346] Require fixed version of clang-format (#3454) * Force a fixed required version of clang-format * Update github action to install clang-format 12 instead of 10 * Update GitHub actions agent OS to Ubuntu 20.04 instead of 18.04 * More verbose CI script --- .github/workflows/analyzers.yml | 8 ++-- .github/workflows/beta_artifacts.yml | 4 +- .github/workflows/coverage.yml | 4 +- .github/workflows/develop.yml | 2 +- .github/workflows/live_artifacts.yml | 4 +- .github/workflows/test_network_artifacts.yml | 4 +- .github/workflows/tests.yml | 2 +- ci/check-commit-format.sh | 44 ++++---------------- ci/clang-format-all.sh | 17 ++++---- ci/cmake-format-all.sh | 18 +++++--- ci/common.sh | 5 +++ ci/detect-clang-format.sh | 41 ++++++++++++++++++ ci/update-clang-format | 8 ++-- 13 files changed, 92 insertions(+), 69 deletions(-) create mode 100644 ci/common.sh create mode 100644 ci/detect-clang-format.sh diff --git a/.github/workflows/analyzers.yml b/.github/workflows/analyzers.yml index f30a0fa356..22dc8e6a2d 100644 --- a/.github/workflows/analyzers.yml +++ b/.github/workflows/analyzers.yml @@ -4,19 +4,19 @@ on: [push, pull_request] jobs: clang_format: - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository steps: - uses: actions/checkout@50fbc622fc4ef5163becd7fab6573eac35f8462e - - name: Installing clang-format 10 + - name: Installing clang-format 12 env: DEBIAN_FRONTEND: noninteractive - run: sudo apt-get install clang-format-10 + run: sudo apt-get install clang-format-12 - name: Clang Format run: ci/check-commit-format.sh cmake_format: - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository steps: - uses: actions/checkout@50fbc622fc4ef5163becd7fab6573eac35f8462e diff --git a/.github/workflows/beta_artifacts.yml b/.github/workflows/beta_artifacts.yml index 4f88d957ac..73025532a1 100644 --- a/.github/workflows/beta_artifacts.yml +++ b/.github/workflows/beta_artifacts.yml @@ -41,7 +41,7 @@ jobs: AWS_DEFAULT_REGION: us-east-2 linux_job: - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 timeout-minutes: 90 steps: - name: tag @@ -66,7 +66,7 @@ jobs: AWS_DEFAULT_REGION: us-east-2 linux_docker_job: - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 timeout-minutes: 90 steps: - name: tag diff --git a/.github/workflows/coverage.yml b/.github/workflows/coverage.yml index 18d2d3aeca..b0a9f5f3ec 100644 --- a/.github/workflows/coverage.yml +++ b/.github/workflows/coverage.yml @@ -17,7 +17,7 @@ jobs: LCOV: 1 COMPILER: gcc BOOST_ROOT: /tmp/boost - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 strategy: matrix: TEST_USE_ROCKSDB: [0, 1] @@ -48,7 +48,7 @@ jobs: parallel: true finish: needs: coverage_test - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 steps: - uses: coverallsapp/github-action@8cbef1dea373ebce56de0a14c68d6267baa10b44 with: diff --git a/.github/workflows/develop.yml b/.github/workflows/develop.yml index 0350abf8fa..a556f38fb4 100644 --- a/.github/workflows/develop.yml +++ b/.github/workflows/develop.yml @@ -6,7 +6,7 @@ on: - develop jobs: linux_job: - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 steps: - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f with: diff --git a/.github/workflows/live_artifacts.yml b/.github/workflows/live_artifacts.yml index 3fd7b24106..f87b98c03c 100644 --- a/.github/workflows/live_artifacts.yml +++ b/.github/workflows/live_artifacts.yml @@ -40,7 +40,7 @@ jobs: AWS_DEFAULT_REGION: us-east-2 linux_job: - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 timeout-minutes: 90 steps: - name: tag @@ -65,7 +65,7 @@ jobs: AWS_DEFAULT_REGION: us-east-2 linux_docker_job: - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 timeout-minutes: 90 steps: - name: tag diff --git a/.github/workflows/test_network_artifacts.yml b/.github/workflows/test_network_artifacts.yml index ce473cb96b..fca13da3f5 100644 --- a/.github/workflows/test_network_artifacts.yml +++ b/.github/workflows/test_network_artifacts.yml @@ -41,7 +41,7 @@ jobs: AWS_DEFAULT_REGION: us-east-2 linux_job: - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 timeout-minutes: 90 steps: - name: tag @@ -66,7 +66,7 @@ jobs: AWS_DEFAULT_REGION: us-east-2 linux_docker_job: - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 timeout-minutes: 90 steps: - name: tag diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 15d0702938..5111350767 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -48,7 +48,7 @@ jobs: COMPILER: [gcc, clang-6] RELEASE: - ${{ startsWith(github.ref, 'refs/tags/') }} - runs-on: ubuntu-18.04 + runs-on: ubuntu-20.04 env: COMPILER: ${{ matrix.COMPILER }} TEST_USE_ROCKSDB: ${{ matrix.TEST_USE_ROCKSDB }} diff --git a/ci/check-commit-format.sh b/ci/check-commit-format.sh index c69a18b418..a9e8649200 100755 --- a/ci/check-commit-format.sh +++ b/ci/check-commit-format.sh @@ -1,44 +1,16 @@ #!/usr/bin/env bash -FOUND=0 +set -e -# hard requirement of clang-format 10.0.0 -CF_EXECUTABLE=' - clang-format-10.0.0 - clang-format-10.0 - clang-format-10 - clang-format -' +source "$(dirname "$BASH_SOURCE")/detect-clang-format.sh" +source "$(dirname "$BASH_SOURCE")/common.sh" -# check different executable strings -for executable in $CF_EXECUTABLE; do - if type -p "$executable" >/dev/null; then - clang_format="$executable" - FOUND=1 - break - fi -done +"$REPO_ROOT/ci/update-clang-format" -# alert if not installed -if [ $FOUND == 0 ]; then - echo "clang-format not found, please install 10.0.0 first" - exit 1 -fi - -# check if old version is found -if ! "$clang_format" --version | grep '10.0.0' &>/dev/null; then - echo "clang-format version 10.0.0 is required, please update it" - exit 1 -fi - - -REPO_ROOT=$(git rev-parse --show-toplevel) - -"${REPO_ROOT}/ci/update-clang-format" - -RESULT=$(python $REPO_ROOT/ci/git-clang-format.py --diff --extensions "hpp,cpp") -if [ "$RESULT" != "no modified files to format" ] && [ "$RESULT" != "clang-format did not modify any files" ]; then - python $REPO_ROOT/ci/git-clang-format.py --diff --extensions "hpp,cpp" +clang_format_result=$(python "$REPO_ROOT/ci/git-clang-format.py" --diff --extensions "hpp,cpp") +if [[ $clang_format_result != "no modified files to format" ]] && + [[ $clang_format_result != "clang-format did not modify any files" ]]; then + python "$REPO_ROOT/ci/git-clang-format.py" --diff --extensions "hpp,cpp" echo echo "Code formatting differs from expected - please run ci/clang-format-all.sh" exit 1 diff --git a/ci/clang-format-all.sh b/ci/clang-format-all.sh index ee0b013c2b..c2a0665557 100755 --- a/ci/clang-format-all.sh +++ b/ci/clang-format-all.sh @@ -1,13 +1,10 @@ -#!/bin/bash +#!/usr/bin/env bash set -e -CLANG_FORMAT="clang-format" -if [ $(builtin type -p "$CLANG_FORMAT") ]; then - REPO_ROOT=$(git rev-parse --show-toplevel) - cd "$REPO_ROOT" - ./ci/update-clang-format - find nano -iname '*.h' -o -iname '*.hpp' -o -iname '*.cpp' | xargs "$CLANG_FORMAT" -i -else - echo "'$CLANG_FORMAT' could not be detected in your PATH. Do you have it installed?" -fi +source $(dirname $BASH_SOURCE)/detect-clang-format.sh +source $(dirname $BASH_SOURCE)/common.sh + +cd "$REPO_ROOT" +./ci/update-clang-format +find nano -iname '*.h' -o -iname '*.hpp' -o -iname '*.cpp' | xargs "$CLANG_FORMAT" -i diff --git a/ci/cmake-format-all.sh b/ci/cmake-format-all.sh index ea8199c08f..c5bde79a82 100755 --- a/ci/cmake-format-all.sh +++ b/ci/cmake-format-all.sh @@ -1,11 +1,19 @@ -#!/bin/bash +#!/usr/bin/env bash set -e -if ! command -v cmake-format &>/dev/null; then +source "$(dirname "$BASH_SOURCE")/common.sh" + +if ! [[ $(builtin type -p cmake-format) ]]; then echo "pip install cmake-format to continue" exit 1 fi -REPO_ROOT=$(git rev-parse --show-toplevel) -cd "${REPO_ROOT}" -find "${REPO_ROOT}" -iwholename "${REPO_ROOT}/nano/*/CMakeLists.txt" -o -iwholename "${REPO_ROOT}/CMakeLists.txt" -o -iwholename "${REPO_ROOT}/coverage/CMakeLists.txt" | xargs cmake-format -i + +cd "$REPO_ROOT" + +find "$REPO_ROOT" -iwholename "$REPO_ROOT/nano/*/CMakeLists.txt" \ + -o \ + -iwholename "$REPO_ROOT/CMakeLists.txt" \ + -o \ + -iwholename "$REPO_ROOT/coverage/CMakeLists.txt" \ + | xargs -i{} cmake-format -i {} diff --git a/ci/common.sh b/ci/common.sh new file mode 100644 index 0000000000..5205c3a1d2 --- /dev/null +++ b/ci/common.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +set -e + +REPO_ROOT=$(git rev-parse --show-toplevel) diff --git a/ci/detect-clang-format.sh b/ci/detect-clang-format.sh new file mode 100644 index 0000000000..cc2831e2ee --- /dev/null +++ b/ci/detect-clang-format.sh @@ -0,0 +1,41 @@ +#!/usr/bin/env bash + +set -e + +is_clang_format_usable() +{ + if [[ $(builtin type -p $1) ]]; then + local output=$($1 --version) + if [[ $output =~ ^(.)*clang-format\ version\ $2(.)*$ ]]; then + echo "0" + else + echo $output + fi + else + echo "1" + fi +} + +CLANG_FORMAT="" +CLANG_FORMAT_VERSION="12" + +clang_format_attempts=("clang-format" + "clang-format-$CLANG_FORMAT_VERSION") + +for itr in ${clang_format_attempts[@]}; do + result=$(is_clang_format_usable $itr $CLANG_FORMAT_VERSION) + if [[ $result == "0" ]]; then + CLANG_FORMAT=$itr + break + elif [[ $result == "1" ]]; then + continue + else + echo "Detected '$itr' with version '$result' " \ + "(different than '$CLANG_FORMAT_VERSION'), skipping it." + fi +done + +if [[ -z $CLANG_FORMAT ]]; then + echo "No 'clang-format' of version '$CLANG_FORMAT_VERSION' could be detected in your PATH." + exit 1 +fi diff --git a/ci/update-clang-format b/ci/update-clang-format index 4c28567740..56bc73a87b 100755 --- a/ci/update-clang-format +++ b/ci/update-clang-format @@ -1,10 +1,10 @@ -#! /usr/bin/env bash - -ci_dir="$(dirname "${BASH_SOURCE[0]}")" +#!/usr/bin/env bash set -e -cd "${ci_dir}/.." +source "$(dirname "$BASH_SOURCE")/common.sh" + +cd "$REPO_ROOT" retval='1' From 5c66c28dab693c37880264bdad8c3ac14c78213e Mon Sep 17 00:00:00 2001 From: theohax <81556890+theohax@users.noreply.github.com> Date: Mon, 20 Sep 2021 17:54:05 +0300 Subject: [PATCH 199/346] Fix a crash that would sometimes happen in debug builds at handshakes (#3459) --- nano/node/transport/tcp.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nano/node/transport/tcp.cpp b/nano/node/transport/tcp.cpp index a02f8bcbb4..f6bb20267b 100644 --- a/nano/node/transport/tcp.cpp +++ b/nano/node/transport/tcp.cpp @@ -538,7 +538,7 @@ void nano::transport::tcp_channels::start_tcp (nano::endpoint const & endpoint_a nano::node_id_handshake message (node_l->network_params.network, cookie, boost::none); if (node_l->config.logging.network_node_id_handshake_logging ()) { - node_l->logger.try_log (boost::str (boost::format ("Node ID handshake request sent with node ID %1% to %2%: query %3%") % node_l->node_id.pub.to_node_id () % endpoint_a % (*cookie).to_string ())); + node_l->logger.try_log (boost::str (boost::format ("Node ID handshake request sent with node ID %1% to %2%: query %3%") % node_l->node_id.pub.to_node_id () % endpoint_a % (cookie.has_value() ? cookie->to_string() : "not set"))); } channel->set_endpoint (); std::shared_ptr> receive_buffer (std::make_shared> ()); From 08e24fae0c4fa9d45237d6dc4a547548e08eff6a Mon Sep 17 00:00:00 2001 From: Shryder Date: Tue, 21 Sep 2021 15:52:30 +0100 Subject: [PATCH 200/346] Replace "pending" with "receivable"/"ready to receive" in node logs (#3438) --- nano/node/wallet.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/nano/node/wallet.cpp b/nano/node/wallet.cpp index c187dee68f..2c4f36f773 100644 --- a/nano/node/wallet.cpp +++ b/nano/node/wallet.cpp @@ -1169,7 +1169,7 @@ bool nano::wallet::search_pending (nano::transaction const & wallet_transaction_ auto result (!store.valid_password (wallet_transaction_a)); if (!result) { - wallets.node.logger.try_log ("Beginning pending block search"); + wallets.node.logger.try_log ("Beginning receivable block search"); for (auto i (store.begin (wallet_transaction_a)), n (store.end ()); i != n; ++i) { auto block_transaction (wallets.node.store.tx_begin_read ()); @@ -1185,7 +1185,7 @@ bool nano::wallet::search_pending (nano::transaction const & wallet_transaction_ auto amount (pending.amount.number ()); if (wallets.node.config.receive_minimum.number () <= amount) { - wallets.node.logger.try_log (boost::str (boost::format ("Found a pending block %1% for account %2%") % hash.to_string () % pending.source.to_account ())); + wallets.node.logger.try_log (boost::str (boost::format ("Found a receivable block %1% for account %2%") % hash.to_string () % pending.source.to_account ())); if (wallets.node.ledger.block_confirmed (block_transaction, hash)) { auto representative = store.representative (wallet_transaction_a); @@ -1205,7 +1205,7 @@ bool nano::wallet::search_pending (nano::transaction const & wallet_transaction_ } } } - wallets.node.logger.try_log ("Pending block search phase complete"); + wallets.node.logger.try_log ("Receivable block search phase completed"); } else { From cffdc236594381a3c26b996f95aa2e650abbb2b6 Mon Sep 17 00:00:00 2001 From: Shryder Date: Tue, 21 Sep 2021 15:54:32 +0100 Subject: [PATCH 201/346] Add "confirmed" field to "account_history" RPC response (#3424) (#3429) --- nano/node/json_handler.cpp | 1 + nano/rpc_test/rpc.cpp | 9 +++++++-- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index 76ba7c08c1..2e2e03cdcf 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -2547,6 +2547,7 @@ void nano::json_handler::account_history () entry.put ("local_timestamp", std::to_string (block->sideband ().timestamp)); entry.put ("height", std::to_string (block->sideband ().height)); entry.put ("hash", hash.to_string ()); + entry.put ("confirmed", node.ledger.block_confirmed (transaction, hash)); if (output_raw) { entry.put ("work", nano::to_string_hex (block->block_work ())); diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index 4b4f070c43..a5d70dd95e 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -1164,11 +1164,11 @@ TEST (rpc, account_history) request.put ("account", nano::dev::genesis->account ().to_account ()); request.put ("count", 100); auto response (wait_response (system, rpc, request, 10s)); - std::vector> history_l; + std::vector> history_l; auto & history_node (response.get_child ("history")); for (auto i (history_node.begin ()), n (history_node.end ()); i != n; ++i) { - history_l.push_back (std::make_tuple (i->second.get ("type"), i->second.get ("account"), i->second.get ("amount"), i->second.get ("hash"), i->second.get ("height"))); + history_l.push_back (std::make_tuple (i->second.get ("type"), i->second.get ("account"), i->second.get ("amount"), i->second.get ("hash"), i->second.get ("height"), i->second.get ("confirmed"))); } ASSERT_EQ (5, history_l.size ()); @@ -1177,26 +1177,31 @@ TEST (rpc, account_history) ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), std::get<1> (history_l[0])); ASSERT_EQ (nano::Gxrb_ratio.convert_to (), std::get<2> (history_l[0])); ASSERT_EQ ("6", std::get<4> (history_l[0])); // change block (height 7) is skipped by account_history since "raw" is not set + ASSERT_FALSE (std::get<5> (history_l[0])); ASSERT_EQ ("send", std::get<0> (history_l[1])); ASSERT_EQ (usend.hash ().to_string (), std::get<3> (history_l[1])); ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), std::get<1> (history_l[1])); ASSERT_EQ (nano::Gxrb_ratio.convert_to (), std::get<2> (history_l[1])); ASSERT_EQ ("5", std::get<4> (history_l[1])); + ASSERT_FALSE (std::get<5> (history_l[1])); ASSERT_EQ ("receive", std::get<0> (history_l[2])); ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), std::get<1> (history_l[2])); ASSERT_EQ (node0->config.receive_minimum.to_string_dec (), std::get<2> (history_l[2])); ASSERT_EQ (receive->hash ().to_string (), std::get<3> (history_l[2])); ASSERT_EQ ("4", std::get<4> (history_l[2])); + ASSERT_FALSE (std::get<5> (history_l[2])); ASSERT_EQ ("send", std::get<0> (history_l[3])); ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), std::get<1> (history_l[3])); ASSERT_EQ (node0->config.receive_minimum.to_string_dec (), std::get<2> (history_l[3])); ASSERT_EQ (send->hash ().to_string (), std::get<3> (history_l[3])); ASSERT_EQ ("3", std::get<4> (history_l[3])); + ASSERT_FALSE (std::get<5> (history_l[3])); ASSERT_EQ ("receive", std::get<0> (history_l[4])); ASSERT_EQ (nano::dev::genesis_key.pub.to_account (), std::get<1> (history_l[4])); ASSERT_EQ (nano::dev::constants.genesis_amount.convert_to (), std::get<2> (history_l[4])); ASSERT_EQ (nano::dev::genesis->hash ().to_string (), std::get<3> (history_l[4])); ASSERT_EQ ("1", std::get<4> (history_l[4])); // change block (height 2) is skipped + ASSERT_TRUE (std::get<5> (history_l[4])); } // Test count and reverse { From 4255a384f9d9485fa4dfd26bb253f9bb580e4771 Mon Sep 17 00:00:00 2001 From: theohax <81556890+theohax@users.noreply.github.com> Date: Tue, 21 Sep 2021 23:14:07 +0300 Subject: [PATCH 202/346] Fix for the bootstrap request queue processing (#3461) --- nano/node/bootstrap/bootstrap_server.cpp | 42 +++++++++++------------- 1 file changed, 19 insertions(+), 23 deletions(-) diff --git a/nano/node/bootstrap/bootstrap_server.cpp b/nano/node/bootstrap/bootstrap_server.cpp index 0e32bd2921..15f107b235 100644 --- a/nano/node/bootstrap/bootstrap_server.cpp +++ b/nano/node/bootstrap/bootstrap_server.cpp @@ -551,20 +551,26 @@ void nano::bootstrap_server::finish_request () { nano::unique_lock lock (mutex); requests.pop (); - if (!requests.empty ()) - { - run_next (lock); - } - else + + while (!requests.empty ()) { - std::weak_ptr this_w (shared_from_this ()); - node->workers.add_timed_task (std::chrono::steady_clock::now () + (node->config.tcp_io_timeout * 2) + std::chrono::seconds (1), [this_w] () { - if (auto this_l = this_w.lock ()) - { - this_l->timeout (); - } - }); + if (!requests.front ()) + { + requests.pop (); + } + else + { + run_next (lock); + } } + + std::weak_ptr this_w (shared_from_this ()); + node->workers.add_timed_task (std::chrono::steady_clock::now () + (node->config.tcp_io_timeout * 2) + std::chrono::seconds (1), [this_w] () { + if (auto this_l = this_w.lock ()) + { + this_l->timeout (); + } + }); } void nano::bootstrap_server::finish_request_async () @@ -725,19 +731,9 @@ void nano::bootstrap_server::run_next (nano::unique_lock & lock_a) // Realtime auto request (std::move (requests.front ())); requests.pop (); - auto timeout_check (requests.empty ()); lock_a.unlock (); request->visit (visitor); - if (timeout_check) - { - std::weak_ptr this_w (shared_from_this ()); - node->workers.add_timed_task (std::chrono::steady_clock::now () + (node->config.tcp_io_timeout * 2) + std::chrono::seconds (1), [this_w] () { - if (auto this_l = this_w.lock ()) - { - this_l->timeout (); - } - }); - } + lock_a.lock (); } } From 38026fc25c25e813c804345b5ccdc1148a883043 Mon Sep 17 00:00:00 2001 From: theohax <81556890+theohax@users.noreply.github.com> Date: Tue, 21 Sep 2021 23:14:41 +0300 Subject: [PATCH 203/346] Make code formatting compliant with clang-format 12 (#3460) --- nano/core_test/work_pool.cpp | 4 ++-- nano/crypto_lib/secure_memory.cpp | 2 +- nano/lib/config.hpp | 20 +++++++++++++++----- nano/lib/rpcconfig.hpp | 3 ++- nano/lib/threading.hpp | 1 + nano/lib/utility.cpp | 2 +- nano/nano_node/daemon.cpp | 2 +- nano/nano_node/entry.cpp | 6 +++--- nano/nano_wallet/entry.cpp | 6 +++--- nano/node/active_transactions.cpp | 3 ++- nano/node/common.cpp | 3 ++- nano/node/repcrawler.cpp | 3 ++- nano/node/websocket.cpp | 3 ++- nano/secure/common.cpp | 20 +++++++++++++++----- nano/secure/ledger.cpp | 3 ++- 15 files changed, 54 insertions(+), 27 deletions(-) diff --git a/nano/core_test/work_pool.cpp b/nano/core_test/work_pool.cpp index db66d44bdf..9b4c11c8ca 100644 --- a/nano/core_test/work_pool.cpp +++ b/nano/core_test/work_pool.cpp @@ -90,8 +90,8 @@ TEST (work, opencl) { // 0 threads, should add 1 for managing OpenCL nano::work_pool pool{ nano::dev::network_params.network, 0, std::chrono::nanoseconds (0), [&opencl] (nano::work_version const version_a, nano::root const & root_a, uint64_t difficulty_a, std::atomic & ticket_a) { - return opencl->generate_work (version_a, root_a, difficulty_a); - } }; + return opencl->generate_work (version_a, root_a, difficulty_a); + } }; ASSERT_NE (nullptr, pool.opencl); nano::root root; uint64_t difficulty (0xff00000000000000); diff --git a/nano/crypto_lib/secure_memory.cpp b/nano/crypto_lib/secure_memory.cpp index a0b643b35c..9c7d228257 100644 --- a/nano/crypto_lib/secure_memory.cpp +++ b/nano/crypto_lib/secure_memory.cpp @@ -42,7 +42,7 @@ void NOT_OPTIMIZED nano::secure_wipe_memory (void * v, size_t n) #elif defined(HAVE_EXPLICIT_BZERO) explicit_bzero (v, n); #else - static void * (*const volatile memset_sec) (void *, int, size_t) = &memset; + static void * (*const volatile memset_sec)(void *, int, size_t) = &memset; memset_sec (v, 0, n); #endif } diff --git a/nano/lib/config.hpp b/nano/lib/config.hpp index 9f75fc00b2..53412f3aac 100644 --- a/nano/lib/config.hpp +++ b/nano/lib/config.hpp @@ -141,10 +141,18 @@ class network_constants // A representative is classified as principal based on its weight and this factor principal_weight_factor = 1000; // 0.1% - default_node_port = is_live_network () ? 7075 : is_beta_network () ? 54000 : is_test_network () ? test_node_port () : 44000; - default_rpc_port = is_live_network () ? 7076 : is_beta_network () ? 55000 : is_test_network () ? test_rpc_port () : 45000; - default_ipc_port = is_live_network () ? 7077 : is_beta_network () ? 56000 : is_test_network () ? test_ipc_port () : 46000; - default_websocket_port = is_live_network () ? 7078 : is_beta_network () ? 57000 : is_test_network () ? test_websocket_port () : 47000; + default_node_port = is_live_network () ? 7075 : is_beta_network () ? 54000 + : is_test_network () ? test_node_port () + : 44000; + default_rpc_port = is_live_network () ? 7076 : is_beta_network () ? 55000 + : is_test_network () ? test_rpc_port () + : 45000; + default_ipc_port = is_live_network () ? 7077 : is_beta_network () ? 56000 + : is_test_network () ? test_ipc_port () + : 46000; + default_websocket_port = is_live_network () ? 7078 : is_beta_network () ? 57000 + : is_test_network () ? test_websocket_port () + : 47000; request_interval_ms = is_dev_network () ? 20 : 500; cleanup_period = is_dev_network () ? std::chrono::seconds (1) : std::chrono::seconds (60); idle_timeout = is_dev_network () ? cleanup_period * 15 : cleanup_period * 2; @@ -237,7 +245,9 @@ class network_constants const char * get_current_network_as_string () { - return is_live_network () ? "live" : is_beta_network () ? "beta" : is_test_network () ? "test" : "dev"; + return is_live_network () ? "live" : is_beta_network () ? "beta" + : is_test_network () ? "test" + : "dev"; } bool is_live_network () const diff --git a/nano/lib/rpcconfig.hpp b/nano/lib/rpcconfig.hpp index 5952881397..87338dcd2d 100644 --- a/nano/lib/rpcconfig.hpp +++ b/nano/lib/rpcconfig.hpp @@ -53,7 +53,8 @@ class rpc_process_config final unsigned io_threads{ (4 < std::thread::hardware_concurrency ()) ? std::thread::hardware_concurrency () : 4 }; std::string ipc_address; uint16_t ipc_port{ network_constants.default_ipc_port }; - unsigned num_ipc_connections{ (network_constants.is_live_network () || network_constants.is_test_network ()) ? 8u : network_constants.is_beta_network () ? 4u : 1u }; + unsigned num_ipc_connections{ (network_constants.is_live_network () || network_constants.is_test_network ()) ? 8u : network_constants.is_beta_network () ? 4u + : 1u }; static unsigned json_version () { return 1; diff --git a/nano/lib/threading.hpp b/nano/lib/threading.hpp index 61452faa5e..5180880e98 100644 --- a/nano/lib/threading.hpp +++ b/nano/lib/threading.hpp @@ -8,6 +8,7 @@ #include #include + #include namespace nano diff --git a/nano/lib/utility.cpp b/nano/lib/utility.cpp index 53d9bbaf20..badc47fb7d 100644 --- a/nano/lib/utility.cpp +++ b/nano/lib/utility.cpp @@ -37,7 +37,7 @@ std::size_t nano::get_file_descriptor_limit () { - std::size_t fd_limit = (std::numeric_limits::max) (); + std::size_t fd_limit = (std::numeric_limits::max)(); #ifndef _WIN32 rlimit limit{}; if (getrlimit (RLIMIT_NOFILE, &limit) == 0) diff --git a/nano/nano_node/daemon.cpp b/nano/nano_node/daemon.cpp index 55423a3e27..8b5926ec7b 100644 --- a/nano/nano_node/daemon.cpp +++ b/nano/nano_node/daemon.cpp @@ -65,7 +65,7 @@ void nano_daemon::daemon::run (boost::filesystem::path const & data_path, nano:: nano::work_pool opencl_work (config.node.network_params.network, config.node.work_threads, config.node.pow_sleep_interval, opencl ? [&opencl] (nano::work_version const version_a, nano::root const & root_a, uint64_t difficulty_a, std::atomic & ticket_a) { return opencl->generate_work (version_a, root_a, difficulty_a, ticket_a); } - : std::function (nano::work_version const, nano::root const &, uint64_t, std::atomic &)> (nullptr)); + : std::function (nano::work_version const, nano::root const &, uint64_t, std::atomic &)> (nullptr)); try { // This avoid a blank prompt during any node initialization delays diff --git a/nano/nano_node/entry.cpp b/nano/nano_node/entry.cpp index c54807d297..43411b19cb 100644 --- a/nano/nano_node/entry.cpp +++ b/nano/nano_node/entry.cpp @@ -609,9 +609,9 @@ int main (int argc, char * const * argv) nano::opencl_config config (platform, device, threads); auto opencl (nano::opencl_work::create (true, config, logger, network_params.work)); nano::work_pool work_pool{ network_params.network, 0, std::chrono::nanoseconds (0), opencl ? [&opencl] (nano::work_version const version_a, nano::root const & root_a, uint64_t difficulty_a, std::atomic &) { - return opencl->generate_work (version_a, root_a, difficulty_a); - } - : std::function (nano::work_version const, nano::root const &, uint64_t, std::atomic &)> (nullptr) }; + return opencl->generate_work (version_a, root_a, difficulty_a); + } + : std::function (nano::work_version const, nano::root const &, uint64_t, std::atomic &)> (nullptr) }; nano::change_block block (0, 0, nano::keypair ().prv, 0, 0); std::cerr << boost::str (boost::format ("Starting OpenCL generation profiling. Platform: %1%. Device: %2%. Threads: %3%. Difficulty: %4$#x (%5%x from base difficulty %6$#x)\n") % platform % device % threads % difficulty % nano::to_string (nano::difficulty::to_multiplier (difficulty, nano::work_thresholds::publish_full.base), 4) % nano::work_thresholds::publish_full.base); for (uint64_t i (0); true; ++i) diff --git a/nano/nano_wallet/entry.cpp b/nano/nano_wallet/entry.cpp index e590514241..f6967dd19b 100644 --- a/nano/nano_wallet/entry.cpp +++ b/nano/nano_wallet/entry.cpp @@ -109,9 +109,9 @@ int run_wallet (QApplication & application, int argc, char * const * argv, boost nano::set_application_icon (application); auto opencl (nano::opencl_work::create (config.opencl_enable, config.opencl, logger, config.node.network_params.work)); nano::work_pool work{ config.node.network_params.network, config.node.work_threads, config.node.pow_sleep_interval, opencl ? [&opencl] (nano::work_version const version_a, nano::root const & root_a, uint64_t difficulty_a, std::atomic &) { - return opencl->generate_work (version_a, root_a, difficulty_a); - } - : std::function (nano::work_version const, nano::root const &, uint64_t, std::atomic &)> (nullptr) }; + return opencl->generate_work (version_a, root_a, difficulty_a); + } + : std::function (nano::work_version const, nano::root const &, uint64_t, std::atomic &)> (nullptr) }; node = std::make_shared (io_ctx, data_path, config.node, work, flags); if (!node->init_error ()) { diff --git a/nano/node/active_transactions.cpp b/nano/node/active_transactions.cpp index 2a8f8907ba..a2e83e36f6 100644 --- a/nano/node/active_transactions.cpp +++ b/nano/node/active_transactions.cpp @@ -1259,7 +1259,8 @@ nano::inactive_cache_status nano::active_transactions::inactive_votes_bootstrap_ { debug_assert (!lock_a.owns_lock ()); nano::inactive_cache_status status (previously_a); - const unsigned election_start_voters_min = node.network_params.network.is_dev_network () ? 2 : node.network_params.network.is_beta_network () ? 5 : 15; + const unsigned election_start_voters_min = node.network_params.network.is_dev_network () ? 2 : node.network_params.network.is_beta_network () ? 5 + : 15; status.tally = tally_a; if (!previously_a.confirmed && tally_a >= node.online_reps.delta ()) { diff --git a/nano/node/common.cpp b/nano/node/common.cpp index c564d75e77..11358d1bfd 100644 --- a/nano/node/common.cpp +++ b/nano/node/common.cpp @@ -1535,7 +1535,8 @@ bool nano::parse_tcp_endpoint (std::string const & string, nano::tcp_endpoint & std::chrono::seconds nano::telemetry_cache_cutoffs::network_to_time (network_constants const & network_constants) { - return std::chrono::seconds{ (network_constants.is_live_network () || network_constants.is_test_network ()) ? live : network_constants.is_beta_network () ? beta : dev }; + return std::chrono::seconds{ (network_constants.is_live_network () || network_constants.is_test_network ()) ? live : network_constants.is_beta_network () ? beta + : dev }; } nano::node_singleton_memory_pool_purge_guard::node_singleton_memory_pool_purge_guard () : diff --git a/nano/node/repcrawler.cpp b/nano/node/repcrawler.cpp index 700be05f37..39d56d3768 100644 --- a/nano/node/repcrawler.cpp +++ b/nano/node/repcrawler.cpp @@ -91,7 +91,8 @@ void nano::rep_crawler::ongoing_crawl () node.keepalive_preconfigured (node.config.preconfigured_peers); } // Reduce crawl frequency when there's enough total peer weight - unsigned next_run_ms = node.network_params.network.is_dev_network () ? 100 : sufficient_weight ? 7000 : 3000; + unsigned next_run_ms = node.network_params.network.is_dev_network () ? 100 : sufficient_weight ? 7000 + : 3000; std::weak_ptr node_w (node.shared ()); node.workers.add_timed_task (now + std::chrono::milliseconds (next_run_ms), [node_w, this] () { if (auto node_l = node_w.lock ()) diff --git a/nano/node/websocket.cpp b/nano/node/websocket.cpp index c1b724d614..9f25f94432 100644 --- a/nano/node/websocket.cpp +++ b/nano/node/websocket.cpp @@ -793,7 +793,8 @@ nano::websocket::message nano::websocket::message_builder::work_generation (nano // Active difficulty information boost::property_tree::ptree work_l; work_l.put ("success", completed_a ? "true" : "false"); - work_l.put ("reason", completed_a ? "" : cancelled_a ? "cancelled" : "failure"); + work_l.put ("reason", completed_a ? "" : cancelled_a ? "cancelled" + : "failure"); work_l.put ("duration", duration_a.count ()); boost::property_tree::ptree request_l; diff --git a/nano/secure/common.cpp b/nano/secure/common.cpp index 95d52d5ba0..b4391594bf 100644 --- a/nano/secure/common.cpp +++ b/nano/secure/common.cpp @@ -86,7 +86,9 @@ nano::ledger_constants & nano::dev::constants{ nano::dev::network_params.ledger std::shared_ptr & nano::dev::genesis = nano::dev::constants.genesis; nano::network_params::network_params (nano::networks network_a) : - work{ network_a == nano::networks::nano_live_network ? nano::work_thresholds::publish_full : network_a == nano::networks::nano_beta_network ? nano::work_thresholds::publish_beta : network_a == nano::networks::nano_test_network ? nano::work_thresholds::publish_test : nano::work_thresholds::publish_dev }, + work{ network_a == nano::networks::nano_live_network ? nano::work_thresholds::publish_full : network_a == nano::networks::nano_beta_network ? nano::work_thresholds::publish_beta + : network_a == nano::networks::nano_test_network ? nano::work_thresholds::publish_test + : nano::work_thresholds::publish_dev }, network{ work, network_a }, ledger{ work, network_a }, voting{ network }, @@ -109,19 +111,25 @@ nano::ledger_constants::ledger_constants (nano::work_thresholds & work, nano::ne nano_beta_genesis (parse_block_from_genesis_data (beta_genesis_data)), nano_live_genesis (parse_block_from_genesis_data (live_genesis_data)), nano_test_genesis (parse_block_from_genesis_data (test_genesis_data)), - genesis (network_a == nano::networks::nano_dev_network ? nano_dev_genesis : network_a == nano::networks::nano_beta_network ? nano_beta_genesis : network_a == nano::networks::nano_test_network ? nano_test_genesis : nano_live_genesis), + genesis (network_a == nano::networks::nano_dev_network ? nano_dev_genesis : network_a == nano::networks::nano_beta_network ? nano_beta_genesis + : network_a == nano::networks::nano_test_network ? nano_test_genesis + : nano_live_genesis), genesis_amount{ std::numeric_limits::max () }, burn_account (0), nano_dev_final_votes_canary_account (dev_public_key_data), nano_beta_final_votes_canary_account (beta_canary_public_key_data), nano_live_final_votes_canary_account (live_canary_public_key_data), nano_test_final_votes_canary_account (test_canary_public_key_data), - final_votes_canary_account (network_a == nano::networks::nano_dev_network ? nano_dev_final_votes_canary_account : network_a == nano::networks::nano_beta_network ? nano_beta_final_votes_canary_account : network_a == nano::networks::nano_test_network ? nano_test_final_votes_canary_account : nano_live_final_votes_canary_account), + final_votes_canary_account (network_a == nano::networks::nano_dev_network ? nano_dev_final_votes_canary_account : network_a == nano::networks::nano_beta_network ? nano_beta_final_votes_canary_account + : network_a == nano::networks::nano_test_network ? nano_test_final_votes_canary_account + : nano_live_final_votes_canary_account), nano_dev_final_votes_canary_height (1), nano_beta_final_votes_canary_height (1), nano_live_final_votes_canary_height (1), nano_test_final_votes_canary_height (1), - final_votes_canary_height (network_a == nano::networks::nano_dev_network ? nano_dev_final_votes_canary_height : network_a == nano::networks::nano_beta_network ? nano_beta_final_votes_canary_height : network_a == nano::networks::nano_test_network ? nano_test_final_votes_canary_height : nano_live_final_votes_canary_height) + final_votes_canary_height (network_a == nano::networks::nano_dev_network ? nano_dev_final_votes_canary_height : network_a == nano::networks::nano_beta_network ? nano_beta_final_votes_canary_height + : network_a == nano::networks::nano_test_network ? nano_test_final_votes_canary_height + : nano_live_final_votes_canary_height) { nano_beta_genesis->sideband_set (nano::block_sideband (nano_beta_genesis->account (), 0, std::numeric_limits::max (), 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); nano_dev_genesis->sideband_set (nano::block_sideband (nano_dev_genesis->account (), 0, std::numeric_limits::max (), 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); @@ -137,7 +145,9 @@ nano::ledger_constants::ledger_constants (nano::work_thresholds & work, nano::ne nano::account nano_live_epoch_v2_signer; auto error (nano_live_epoch_v2_signer.decode_account ("nano_3qb6o6i1tkzr6jwr5s7eehfxwg9x6eemitdinbpi7u8bjjwsgqfj4wzser3x")); debug_assert (!error); - auto epoch_v2_signer (network_a == nano::networks::nano_dev_network ? nano::dev::genesis_key.pub : network_a == nano::networks::nano_beta_network ? nano_beta_account : network_a == nano::networks::nano_test_network ? nano_test_account : nano_live_epoch_v2_signer); + auto epoch_v2_signer (network_a == nano::networks::nano_dev_network ? nano::dev::genesis_key.pub : network_a == nano::networks::nano_beta_network ? nano_beta_account + : network_a == nano::networks::nano_test_network ? nano_test_account + : nano_live_epoch_v2_signer); const char * epoch_message_v2 ("epoch v2 block"); strncpy ((char *)epoch_link_v2.bytes.data (), epoch_message_v2, epoch_link_v2.bytes.size ()); epochs.add (nano::epoch::epoch_2, epoch_v2_signer, epoch_link_v2); diff --git a/nano/secure/ledger.cpp b/nano/secure/ledger.cpp index 869b95215c..eb97206d79 100644 --- a/nano/secure/ledger.cpp +++ b/nano/secure/ledger.cpp @@ -1121,7 +1121,8 @@ nano::uint128_t nano::ledger::amount_safe (nano::transaction const & transaction debug_assert (block); auto block_balance (balance (transaction_a, hash_a)); auto previous_balance (balance_safe (transaction_a, block->previous (), error_a)); - return error_a ? 0 : block_balance > previous_balance ? block_balance - previous_balance : previous_balance - block_balance; + return error_a ? 0 : block_balance > previous_balance ? block_balance - previous_balance + : previous_balance - block_balance; } // Return latest block for account From f4277a96a3e74f91035528760535558c6d2e8ed9 Mon Sep 17 00:00:00 2001 From: Dimitrios Siganos Date: Wed, 15 Sep 2021 16:34:21 +0100 Subject: [PATCH 204/346] Bugfix: node_wrapper using dev net params instead of active (issue #3447) The node_wrapper was using dev network params instead of active network params. This caused some CLI commands (at least --wallet_create and wallet_list) to fail. To fix the bug, for now, I created a local copy of network_params in node_wrapper and initialise it with active_network. However, it would be better to have a network_param reference passed down so that we do not have multiple copies of network_params. I created an issue for that improvement: https://github.com/nanocurrency/nano-node-internalonly/issues/73 --- nano/node/node.cpp | 5 +++-- nano/node/node.hpp | 1 + 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/nano/node/node.cpp b/nano/node/node.cpp index a32bdced38..4e66574cad 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -1762,8 +1762,9 @@ void nano::node::populate_backlog () } nano::node_wrapper::node_wrapper (boost::filesystem::path const & path_a, boost::filesystem::path const & config_path_a, nano::node_flags const & node_flags_a) : + network_params{ nano::network_constants::active_network }, io_context (std::make_shared ()), - work{ nano::dev::network_params.network, 1 } + work{ network_params.network, 1 } { boost::system::error_code error_chmod; @@ -1772,7 +1773,7 @@ nano::node_wrapper::node_wrapper (boost::filesystem::path const & path_a, boost: */ boost::filesystem::create_directories (path_a); nano::set_secure_perm_directory (path_a, error_chmod); - nano::daemon_config daemon_config{ path_a, nano::dev::network_params }; + nano::daemon_config daemon_config{ path_a, network_params }; auto error = nano::read_node_config_toml (config_path_a, daemon_config, node_flags_a.config_overrides); if (error) { diff --git a/nano/node/node.hpp b/nano/node/node.hpp index 3bd4edf834..a6e4c50852 100644 --- a/nano/node/node.hpp +++ b/nano/node/node.hpp @@ -223,6 +223,7 @@ class node_wrapper final node_wrapper (boost::filesystem::path const & path_a, boost::filesystem::path const & config_path_a, nano::node_flags const & node_flags_a); ~node_wrapper (); + nano::network_params network_params; std::shared_ptr io_context; nano::work_pool work; std::shared_ptr node; From ce8ed17e014af6bce3bc4824ba8fb977f5fba058 Mon Sep 17 00:00:00 2001 From: Dimitrios Siganos Date: Tue, 21 Sep 2021 18:27:37 +0100 Subject: [PATCH 205/346] CLI command debug_block_dump Prints all ledger blocks to stdout in text form --- nano/nano_node/entry.cpp | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/nano/nano_node/entry.cpp b/nano/nano_node/entry.cpp index 43411b19cb..143667299f 100644 --- a/nano/nano_node/entry.cpp +++ b/nano/nano_node/entry.cpp @@ -74,6 +74,7 @@ int main (int argc, char * const * argv) ("config", boost::program_options::value>()->multitoken(), "Pass node configuration values. This takes precedence over any values in the configuration file. This option can be repeated multiple times.") ("daemon", "Start node daemon") ("compare_rep_weights", "Display a summarized comparison between the hardcoded bootstrap weights and representative weights from the ledger. Full comparison is output to logs") + ("debug_block_dump", "Display all the blocks in the ledger in text format") ("debug_block_count", "Display the number of blocks") ("debug_bootstrap_generate", "Generate bootstrap sequence of blocks") ("debug_dump_frontier_unchecked_dependents", "Dump frontiers which have matching unchecked keys") @@ -307,6 +308,21 @@ int main (int argc, char * const * argv) result = -1; } } + else if (vm.count ("debug_block_dump")) + { + auto inactive_node = nano::default_inactive_node (data_path, vm); + auto transaction = inactive_node->node->store.tx_begin_read (); + auto i = inactive_node->node->store.block.begin (transaction); + auto end = inactive_node->node->store.block.end (); + for (; i != end; ++i) + { + nano::block_hash hash = i->first; + nano::block_w_sideband sideband = i->second; + std::shared_ptr b = sideband.block; + std::cout << hash.to_string () << std::endl + << b->to_json (); + } + } else if (vm.count ("debug_block_count")) { auto node_flags = nano::inactive_node_flag_defaults (); From fc239a880818fa2fb9c98ec1611b4c8a31fb970e Mon Sep 17 00:00:00 2001 From: Dimitrios Siganos Date: Tue, 21 Sep 2021 21:16:51 +0100 Subject: [PATCH 206/346] Add --initialize command The --initialize command initialises the data folder, if it is not already initialised. It creates a ledger file and adds the genesis block. --- nano/node/cli.cpp | 10 +++++++- systest/node_initialize.sh | 49 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 1 deletion(-) create mode 100755 systest/node_initialize.sh diff --git a/nano/node/cli.cpp b/nano/node/cli.cpp index 7034014b46..c8ea3456f1 100644 --- a/nano/node/cli.cpp +++ b/nano/node/cli.cpp @@ -44,6 +44,7 @@ void nano::add_node_options (boost::program_options::options_description & descr { // clang-format off description_a.add_options () + ("initialize", "Initialize the data folder, if it is not already initialised. This command is meant to be run when the data folder is empty, to populate it with the genesis block.") ("account_create", "Insert next deterministic key in to ") ("account_get", "Get account number for the ") ("account_key", "Get the public key for ") @@ -262,7 +263,14 @@ std::error_code nano::handle_node_options (boost::program_options::variables_map std::error_code ec; boost::filesystem::path data_path = vm.count ("data_path") ? boost::filesystem::path (vm["data_path"].as ()) : nano::working_path (); - if (vm.count ("account_create")) + if (vm.count ("initialize")) + { + auto node_flags = nano::inactive_node_flag_defaults (); + node_flags.read_only = false; + nano::update_flags (node_flags, vm); + nano::inactive_node node (data_path, node_flags); + } + else if (vm.count ("account_create")) { if (vm.count ("wallet") == 1) { diff --git a/systest/node_initialize.sh b/systest/node_initialize.sh new file mode 100755 index 0000000000..ae80e33d9a --- /dev/null +++ b/systest/node_initialize.sh @@ -0,0 +1,49 @@ +#!/bin/sh + +set -e + +DATADIR=data.systest + +# the caller should set the env var NANO_NODE_EXE to point to the nano_node executable +# if NANO_NODE_EXE is unser ot empty then "../../build/nano_node" is used +NANO_NODE_EXE=${NANO_NODE_EXE:-../../build/nano_node} + +clean_data_dir() { + rm -f "$DATADIR"/log/log_*.log + rm -f "$DATADIR"/wallets.ldb* + rm -f "$DATADIR"/data.ldb* + rm -f "$DATADIR"/config-*.toml +} + +test_initialize_cmd() { + netmatch="$1" + netcmd="$2" + netarg="$3" + genesishash="$4" + + clean_data_dir + + # initialise data directory + $NANO_NODE_EXE --initialize --data_path "$DATADIR" "$netcmd" "$netarg" + + # check that it is the live network + grep -q "Active network: $netmatch" "$DATADIR"/log/log_*.log + + # check that the ledger file is created + test -e "$DATADIR/data.ldb" + $NANO_NODE_EXE --debug_block_count --data_path "$DATADIR" "$netcmd" "$netarg" | grep -q 'Block count: 1' + + # check the genesis block is correct + $NANO_NODE_EXE --debug_block_dump --data_path "$DATADIR" "$netcmd" "$netarg" | head -n 1 | grep -qi "$genesishash" +} + +mkdir -p "$DATADIR/log" + +test_initialize_cmd "live" "" "" "991CF190094C00F0B68E2E5F75F6BEE95A2E0BD93CEAA4A6734DB9F19B728948" +test_initialize_cmd "live" "--network" "live" "991CF190094C00F0B68E2E5F75F6BEE95A2E0BD93CEAA4A6734DB9F19B728948" +test_initialize_cmd "beta" "--network" "beta" "01A92459E69440D5C1088D3B31F4CA678BE944BAB3776C2E6B7665E9BD99BD5A" +test_initialize_cmd "test" "--network" "test" "B1D60C0B886B57401EF5A1DAA04340E53726AA6F4D706C085706F31BBD100CEE" + +# if it got this far then it is a pass +echo $0: PASSED +exit 0 From 776be1370dbdfe9dc1f3c05c24036a72cfc9d505 Mon Sep 17 00:00:00 2001 From: Dimitrios Siganos Date: Tue, 21 Sep 2021 21:37:33 +0100 Subject: [PATCH 207/346] Improve existing systests --- systest/.gitignore | 1 + systest/RUNALL | 9 +++++++ systest/set_bandwidth_params.sh | 47 ++++++++++++++++++++++----------- 3 files changed, 41 insertions(+), 16 deletions(-) create mode 100644 systest/.gitignore create mode 100755 systest/RUNALL diff --git a/systest/.gitignore b/systest/.gitignore new file mode 100644 index 0000000000..72d072bebc --- /dev/null +++ b/systest/.gitignore @@ -0,0 +1 @@ +/data.systest diff --git a/systest/RUNALL b/systest/RUNALL new file mode 100755 index 0000000000..b53cb0a641 --- /dev/null +++ b/systest/RUNALL @@ -0,0 +1,9 @@ +#!/bin/sh + +set -e + +for script in *.sh; do + ./$script; +done + +echo All systest passed. diff --git a/systest/set_bandwidth_params.sh b/systest/set_bandwidth_params.sh index 4c02291a3d..e6905c34a2 100755 --- a/systest/set_bandwidth_params.sh +++ b/systest/set_bandwidth_params.sh @@ -1,24 +1,40 @@ #!/bin/sh +set -e + +DATADIR=data.systest + +clean_data_dir() { + rm -f "$DATADIR"/log/log_*.log + rm -f "$DATADIR"/wallets.ldb* + rm -f "$DATADIR"/data.ldb* + rm -f "$DATADIR"/config-*.toml +} + +msg() { + : + #echo "$@" +} + # the caller should set the env var NANO_NODE_EXE to point to the nano_node executable -# if NANO_NODE_EXE is unser ot empty then "../../build/nano_node" is used +# if NANO_NODE_EXE is unset ot empty then "../../build/nano_node" is used NANO_NODE_EXE=${NANO_NODE_EXE:-../../build/nano_node} -mkdir -p data/log -rm data/log/log_*.log +mkdir -p "$DATADIR/log" +clean_data_dir # start nano_node and store its pid so we can later send it # the SIGHUP signal and so we can terminate it -echo start nano_node -$NANO_NODE_EXE --daemon --data_path data & +msg start nano_node +$NANO_NODE_EXE --daemon --data_path "$DATADIR" >/dev/null & pid=$! -echo pid=$pid +msg pid=$pid # wait for the node to start-up sleep 2 # set bandwidth params 42 and 43 in the config file -cat > data/config-node.toml < "$DATADIR/config-node.toml" < data/config-node.toml < "$DATADIR/config-node.toml" < Date: Tue, 21 Sep 2021 22:14:14 +0100 Subject: [PATCH 208/346] Test for wallet_create cli command --- systest/cli_wallet_create.sh | 37 ++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100755 systest/cli_wallet_create.sh diff --git a/systest/cli_wallet_create.sh b/systest/cli_wallet_create.sh new file mode 100755 index 0000000000..00a794611d --- /dev/null +++ b/systest/cli_wallet_create.sh @@ -0,0 +1,37 @@ +#!/bin/sh + +set -e + +DATADIR=data.systest + +SEED=CEEDCEEDCEEDCEEDCEEDCEEDCEEDCEEDCEEDCEEDCEEDCEEDCEEDCEEDCEEDCEED + +# the caller should set the env var NANO_NODE_EXE to point to the nano_node executable +# if NANO_NODE_EXE is unser ot empty then "../../build/nano_node" is used +NANO_NODE_EXE=${NANO_NODE_EXE:-../../build/nano_node} + +clean_data_dir() { + rm -f $DATADIR/log/log_*.log + rm -f $DATADIR/wallets.ldb* + rm -f $DATADIR/data.ldb* + rm -f $DATADIR/config-*.toml +} + +mkdir -p $DATADIR/log +clean_data_dir + +# initialise data directory +$NANO_NODE_EXE --initialize --data_path $DATADIR + +# create a wallet and store the wallet ID +wallet_id=`$NANO_NODE_EXE --wallet_create --data_path $DATADIR --seed $SEED` + +# decrypt the wallet and check the seed +$NANO_NODE_EXE --wallet_decrypt_unsafe --wallet $wallet_id --data_path $DATADIR | grep -q "Seed: $SEED" + +# list the wallet and check the wallet ID +$NANO_NODE_EXE --wallet_list --data_path $DATADIR | grep -q "Wallet ID: $wallet_id" + +# if it got this far then it is a pass +echo $0: PASSED +exit 0 From 8ecbb1d251aa44444ade9c753f0c985641866690 Mon Sep 17 00:00:00 2001 From: theohax <81556890+theohax@users.noreply.github.com> Date: Wed, 22 Sep 2021 16:55:47 +0300 Subject: [PATCH 209/346] Improve clang-format detection & enforcement (#3462) * Improve the detection of non-clang-format-compliant commits/diffs * Fix formatting * Add .clang-format to version control; have it consistent and fixed across environments --- .clang-format.base => .clang-format | 1 - .gitignore | 3 - ci/check-commit-format.sh | 22 +- ci/clang-format-all.sh | 8 +- ci/detect-clang-format.sh | 2 + ci/git-clang-format.py | 641 ---------------------------- ci/update-clang-format | 39 -- nano/node/transport/tcp.cpp | 2 +- 8 files changed, 18 insertions(+), 700 deletions(-) rename .clang-format.base => .clang-format (98%) delete mode 100644 ci/git-clang-format.py delete mode 100755 ci/update-clang-format diff --git a/.clang-format.base b/.clang-format similarity index 98% rename from .clang-format.base rename to .clang-format index a1e26efb78..23958ffc7f 100644 --- a/.clang-format.base +++ b/.clang-format @@ -34,7 +34,6 @@ BraceWrapping: AfterClass: true BeforeCatch: true BeforeElse: true - BeforeLambdaBody: true SplitEmptyRecord: true SplitEmptyNamespace: true SortIncludes: true diff --git a/.gitignore b/.gitignore index edd1b4e0eb..032d0349ba 100644 --- a/.gitignore +++ b/.gitignore @@ -82,6 +82,3 @@ Testing # Autogenerated Build Prep artifacts util/build_prep/*/prep.sh - -# Autogenerated Tooling -.clang-format diff --git a/ci/check-commit-format.sh b/ci/check-commit-format.sh index a9e8649200..8a1c1e44a8 100755 --- a/ci/check-commit-format.sh +++ b/ci/check-commit-format.sh @@ -2,19 +2,21 @@ set -e -source "$(dirname "$BASH_SOURCE")/detect-clang-format.sh" +if [[ ! -z $(git status --untracked-files=no --porcelain) ]]; then + echo "Unable to run script: working directory not clean (see git status)" + exit 1 +fi + source "$(dirname "$BASH_SOURCE")/common.sh" -"$REPO_ROOT/ci/update-clang-format" +"$REPO_ROOT/ci/clang-format-all.sh" -clang_format_result=$(python "$REPO_ROOT/ci/git-clang-format.py" --diff --extensions "hpp,cpp") -if [[ $clang_format_result != "no modified files to format" ]] && - [[ $clang_format_result != "clang-format did not modify any files" ]]; then - python "$REPO_ROOT/ci/git-clang-format.py" --diff --extensions "hpp,cpp" - echo +if [[ ! -z $(git status --untracked-files=no --porcelain) ]]; then echo "Code formatting differs from expected - please run ci/clang-format-all.sh" + git diff + git reset --hard HEAD > /dev/null exit 1 -else - echo "clang-format passed" - exit 0 fi + +echo "clang-format passed" +exit 0 diff --git a/ci/clang-format-all.sh b/ci/clang-format-all.sh index c2a0665557..c24018337c 100755 --- a/ci/clang-format-all.sh +++ b/ci/clang-format-all.sh @@ -2,9 +2,7 @@ set -e -source $(dirname $BASH_SOURCE)/detect-clang-format.sh -source $(dirname $BASH_SOURCE)/common.sh +source "$(dirname "$BASH_SOURCE")/detect-clang-format.sh" +source "$(dirname "$BASH_SOURCE")/common.sh" -cd "$REPO_ROOT" -./ci/update-clang-format -find nano -iname '*.h' -o -iname '*.hpp' -o -iname '*.cpp' | xargs "$CLANG_FORMAT" -i +find "$REPO_ROOT/nano" -iname '*.h' -o -iname '*.hpp' -o -iname '*.cpp' | xargs "$CLANG_FORMAT" -i -style=file diff --git a/ci/detect-clang-format.sh b/ci/detect-clang-format.sh index cc2831e2ee..4179ec889b 100644 --- a/ci/detect-clang-format.sh +++ b/ci/detect-clang-format.sh @@ -39,3 +39,5 @@ if [[ -z $CLANG_FORMAT ]]; then echo "No 'clang-format' of version '$CLANG_FORMAT_VERSION' could be detected in your PATH." exit 1 fi + +echo "Using '$CLANG_FORMAT' version '$CLANG_FORMAT_VERSION'" diff --git a/ci/git-clang-format.py b/ci/git-clang-format.py deleted file mode 100644 index a8ae48a0ef..0000000000 --- a/ci/git-clang-format.py +++ /dev/null @@ -1,641 +0,0 @@ -# ============================================================================== -# LLVM Release License -# ============================================================================== -# University of Illinois/NCSA -# Open Source License - -# Copyright (c) 2007-2016 University of Illinois at Urbana-Champaign. -# All rights reserved. - -# Developed by: - -# LLVM Team - -# University of Illinois at Urbana-Champaign - -# http://llvm.org - -# Permission is hereby granted, free of charge, to any person obtaining a copy of -# this software and associated documentation files (the "Software"), to deal with -# the Software without restriction, including without limitation the rights to -# use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies -# of the Software, and to permit persons to whom the Software is furnished to do -# so, subject to the following conditions: - -# * Redistributions of source code must retain the above copyright notice, -# this list of conditions and the following disclaimers. - -# * Redistributions in binary form must reproduce the above copyright notice, -# this list of conditions and the following disclaimers in the -# documentation and/or other materials provided with the distribution. - -# * Neither the names of the LLVM Team, University of Illinois at -# Urbana-Champaign, nor the names of its contributors may be used to -# endorse or promote products derived from this Software without specific -# prior written permission. - -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS -# FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# CONTRIBUTORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS WITH THE -# SOFTWARE. - -# ============================================================================== -# The LLVM software contains code written by third parties. Such software will -# have its own individual LICENSE.TXT file in the directory in which it appears. -# This file will describe the copyrights, license, and restrictions which apply -# to that code. - -# The disclaimer of warranty in the University of Illinois Open Source License -# applies to all code in the LLVM Distribution, and nothing in any of the -# other licenses gives permission to use the names of the LLVM Team or the -# University of Illinois to endorse or promote products derived from this -# Software. - -# The following pieces of software have additional or alternate copyrights, -# licenses, and/or restrictions: - -# Program Directory -# ------- --------- -# - -r""" -clang-format git integration -============================ - -This file provides a clang-format integration for git. Put it somewhere in your -path and ensure that it is executable. Then, "git clang-format" will invoke -clang-format on the changes in current files or a specific commit. - -For further details, run: -git clang-format -h - -Requires Python 2.7 or Python 3 -""" - -from __future__ import print_function -import argparse -import collections -import contextlib -import errno -import os -import re -import subprocess -import sys - -usage = 'git clang-format [OPTIONS] [] [] [--] [...]' - -desc = ''' -If zero or one commits are given, run clang-format on all lines that differ -between the working directory and , which defaults to HEAD. Changes are -only applied to the working directory. - -If two commits are given (requires --diff), run clang-format on all lines in the -second that differ from the first . - -The following git-config settings set the default of the corresponding option: - clangFormat.binary - clangFormat.commit - clangFormat.extension - clangFormat.style -''' - -# Name of the temporary index file in which save the output of clang-format. -# This file is created within the .git directory. -temp_index_basename = 'clang-format-index' - - -Range = collections.namedtuple('Range', 'start, count') - - -def main(): - config = load_git_config() - - # In order to keep '--' yet allow options after positionals, we need to - # check for '--' ourselves. (Setting nargs='*' throws away the '--', while - # nargs=argparse.REMAINDER disallows options after positionals.) - argv = sys.argv[1:] - try: - idx = argv.index('--') - except ValueError: - dash_dash = [] - else: - dash_dash = argv[idx:] - argv = argv[:idx] - - default_extensions = ','.join([ - # From clang/lib/Frontend/FrontendOptions.cpp, all lower case - 'c', 'h', # C - 'm', # ObjC - 'mm', # ObjC++ - 'cc', 'cp', 'cpp', 'c++', 'cxx', 'hpp', # C++ - # Other languages that clang-format supports - 'proto', 'protodevel', # Protocol Buffers - 'java', # Java - 'js', # JavaScript - 'ts', # TypeScript - ]) - - p = argparse.ArgumentParser( - usage=usage, formatter_class=argparse.RawDescriptionHelpFormatter, - description=desc) - p.add_argument('--binary', - default=config.get('clangformat.binary', 'clang-format'), - help='path to clang-format'), - p.add_argument('--commit', - default=config.get('clangformat.commit', 'HEAD'), - help='default commit to use if none is specified'), - p.add_argument('--diff', action='store_true', - help='print a diff instead of applying the changes') - p.add_argument('--extensions', - default=config.get('clangformat.extensions', - default_extensions), - help=('comma-separated list of file extensions to format, ' - 'excluding the period and case-insensitive')), - p.add_argument('-f', '--force', action='store_true', - help='allow changes to unstaged files') - p.add_argument('-p', '--patch', action='store_true', - help='select hunks interactively') - p.add_argument('-q', '--quiet', action='count', default=0, - help='print less information') - p.add_argument('--style', - default=config.get('clangformat.style', None), - help='passed to clang-format'), - p.add_argument('-v', '--verbose', action='count', default=0, - help='print extra information') - # We gather all the remaining positional arguments into 'args' since we need - # to use some heuristics to determine whether or not was present. - # However, to print pretty messages, we make use of metavar and help. - p.add_argument('args', nargs='*', metavar='', - help='revision from which to compute the diff') - p.add_argument('ignored', nargs='*', metavar='...', - help='if specified, only consider differences in these files') - opts = p.parse_args(argv) - - opts.verbose -= opts.quiet - del opts.quiet - - commits, files = interpret_args(opts.args, dash_dash, opts.commit) - if len(commits) > 1: - if not opts.diff: - die('--diff is required when two commits are given') - else: - if len(commits) > 2: - die('at most two commits allowed; %d given' % len(commits)) - changed_lines = compute_diff_and_extract_lines(commits, files) - if opts.verbose >= 1: - ignored_files = set(changed_lines) - filter_by_extension(changed_lines, opts.extensions.lower().split(',')) - if opts.verbose >= 1: - ignored_files.difference_update(changed_lines) - if ignored_files: - print('Ignoring changes in the following files (wrong extension):') - for filename in ignored_files: - print(' %s' % filename) - if changed_lines: - print('Running clang-format on the following files:') - for filename in changed_lines: - print(' %s' % filename) - if not changed_lines: - print('no modified files to format') - return - # The computed diff outputs absolute paths, so we must cd before accessing - # those files. - cd_to_toplevel() - if len(commits) > 1: - old_tree = commits[1] - new_tree = run_clang_format_and_save_to_tree(changed_lines, - revision=commits[1], - binary=opts.binary, - style=opts.style) - else: - old_tree = create_tree_from_workdir(changed_lines) - new_tree = run_clang_format_and_save_to_tree(changed_lines, - binary=opts.binary, - style=opts.style) - if opts.verbose >= 1: - print('old tree: %s' % old_tree) - print('new tree: %s' % new_tree) - if old_tree == new_tree: - if opts.verbose >= 0: - print('clang-format did not modify any files') - elif opts.diff: - print_diff(old_tree, new_tree) - else: - changed_files = apply_changes(old_tree, new_tree, force=opts.force, - patch_mode=opts.patch) - if (opts.verbose >= 0 and not opts.patch) or opts.verbose >= 1: - print('changed files:') - for filename in changed_files: - print(' %s' % filename) - - -def load_git_config(non_string_options=None): - """Return the git configuration as a dictionary. - - All options are assumed to be strings unless in `non_string_options`, in which - is a dictionary mapping option name (in lower case) to either "--bool" or - "--int".""" - if non_string_options is None: - non_string_options = {} - out = {} - for entry in run('git', 'config', '--list', '--null').split('\0'): - if entry: - name, value = entry.split('\n', 1) - if name in non_string_options: - value = run('git', 'config', non_string_options[name], name) - out[name] = value - return out - - -def interpret_args(args, dash_dash, default_commit): - """Interpret `args` as "[commits] [--] [files]" and return (commits, files). - - It is assumed that "--" and everything that follows has been removed from - args and placed in `dash_dash`. - - If "--" is present (i.e., `dash_dash` is non-empty), the arguments to its - left (if present) are taken as commits. Otherwise, the arguments are checked - from left to right if they are commits or files. If commits are not given, - a list with `default_commit` is used.""" - if dash_dash: - if len(args) == 0: - commits = [default_commit] - else: - commits = args - for commit in commits: - object_type = get_object_type(commit) - if object_type not in ('commit', 'tag'): - if object_type is None: - die("'%s' is not a commit" % commit) - else: - die("'%s' is a %s, but a commit was expected" % - (commit, object_type)) - files = dash_dash[1:] - elif args: - commits = [] - while args: - if not disambiguate_revision(args[0]): - break - commits.append(args.pop(0)) - if not commits: - commits = [default_commit] - files = args - else: - commits = [default_commit] - files = [] - return commits, files - - -def disambiguate_revision(value): - """Returns True if `value` is a revision, False if it is a file, or dies.""" - # If `value` is ambiguous (neither a commit nor a file), the following - # command will die with an appropriate error message. - run('git', 'rev-parse', value, verbose=False) - object_type = get_object_type(value) - if object_type is None: - return False - if object_type in ('commit', 'tag'): - return True - die('`%s` is a %s, but a commit or filename was expected' % - (value, object_type)) - - -def get_object_type(value): - """Returns a string description of an object's type, or None if it is not - a valid git object.""" - cmd = ['git', 'cat-file', '-t', value] - p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE) - stdout, stderr = p.communicate() - if p.returncode != 0: - return None - return convert_string(stdout.strip()) - - -def compute_diff_and_extract_lines(commits, files): - """Calls compute_diff() followed by extract_lines().""" - diff_process = compute_diff(commits, files) - changed_lines = extract_lines(diff_process.stdout) - diff_process.stdout.close() - diff_process.wait() - if diff_process.returncode != 0: - # Assume error was already printed to stderr. - sys.exit(2) - return changed_lines - - -def compute_diff(commits, files): - """Return a subprocess object producing the diff from `commits`. - - The return value's `stdin` file object will produce a patch with the - differences between the working directory and the first commit if a single - one was specified, or the difference between both specified commits, filtered - on `files` (if non-empty). Zero context lines are used in the patch.""" - git_tool = 'diff-index' - if len(commits) > 1: - git_tool = 'diff-tree' - cmd = ['git', git_tool, '-p', '-U0'] + commits + ['--'] - cmd.extend(files) - p = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE) - p.stdin.close() - return p - - -def extract_lines(patch_file): - """Extract the changed lines in `patch_file`. - - The return value is a dictionary mapping filename to a list of (start_line, - line_count) pairs. - - The input must have been produced with ``-U0``, meaning unidiff format with - zero lines of context. The return value is a dict mapping filename to a - list of line `Range`s.""" - matches = {} - for line in patch_file: - line = convert_string(line) - match = re.search(r'^\+\+\+\ [^/]+/(.*)', line) - if match: - filename = match.group(1).rstrip('\r\n') - match = re.search(r'^@@ -[0-9,]+ \+(\d+)(,(\d+))?', line) - if match: - start_line = int(match.group(1)) - line_count = 1 - if match.group(3): - line_count = int(match.group(3)) - if line_count > 0: - matches.setdefault(filename, []).append( - Range(start_line, line_count)) - return matches - - -def filter_by_extension(dictionary, allowed_extensions): - """Delete every key in `dictionary` that doesn't have an allowed extension. - - `allowed_extensions` must be a collection of lowercase file extensions, - excluding the period.""" - allowed_extensions = frozenset(allowed_extensions) - for filename in list(dictionary.keys()): - base_ext = filename.rsplit('.', 1) - if len(base_ext) == 1 and '' in allowed_extensions: - continue - if len(base_ext) == 1 or base_ext[1].lower() not in allowed_extensions: - del dictionary[filename] - - -def cd_to_toplevel(): - """Change to the top level of the git repository.""" - toplevel = run('git', 'rev-parse', '--show-toplevel') - os.chdir(toplevel) - - -def create_tree_from_workdir(filenames): - """Create a new git tree with the given files from the working directory. - - Returns the object ID (SHA-1) of the created tree.""" - return create_tree(filenames, '--stdin') - - -def run_clang_format_and_save_to_tree(changed_lines, revision=None, - binary='clang-format', style=None): - """Run clang-format on each file and save the result to a git tree. - - Returns the object ID (SHA-1) of the created tree.""" - def iteritems(container): - try: - return container.iteritems() # Python 2 - except AttributeError: - return container.items() # Python 3 - - def index_info_generator(): - for filename, line_ranges in iteritems(changed_lines): - if revision: - git_metadata_cmd = ['git', 'ls-tree', - '%s:%s' % ( - revision, os.path.dirname(filename)), - os.path.basename(filename)] - git_metadata = subprocess.Popen(git_metadata_cmd, stdin=subprocess.PIPE, - stdout=subprocess.PIPE) - stdout = git_metadata.communicate()[0] - mode = oct(int(stdout.split()[0], 8)) - else: - mode = oct(os.stat(filename).st_mode) - # Adjust python3 octal format so that it matches what git expects - if mode.startswith('0o'): - mode = '0' + mode[2:] - blob_id = clang_format_to_blob(filename, line_ranges, - revision=revision, - binary=binary, - style=style) - yield '%s %s\t%s' % (mode, blob_id, filename) - return create_tree(index_info_generator(), '--index-info') - - -def create_tree(input_lines, mode): - """Create a tree object from the given input. - - If mode is '--stdin', it must be a list of filenames. If mode is - '--index-info' is must be a list of values suitable for "git update-index - --index-info", such as " ". Any other mode - is invalid.""" - assert mode in ('--stdin', '--index-info') - cmd = ['git', 'update-index', '--add', '-z', mode] - with temporary_index_file(): - p = subprocess.Popen(cmd, stdin=subprocess.PIPE) - for line in input_lines: - p.stdin.write(to_bytes('%s\0' % line)) - p.stdin.close() - if p.wait() != 0: - die('`%s` failed' % ' '.join(cmd)) - tree_id = run('git', 'write-tree') - return tree_id - - -def clang_format_to_blob(filename, line_ranges, revision=None, - binary='clang-format', style=None): - """Run clang-format on the given file and save the result to a git blob. - - Runs on the file in `revision` if not None, or on the file in the working - directory if `revision` is None. - - Returns the object ID (SHA-1) of the created blob.""" - clang_format_cmd = [binary] - if style: - clang_format_cmd.extend(['-style='+style]) - clang_format_cmd.extend([ - '-lines=%s:%s' % (start_line, start_line+line_count-1) - for start_line, line_count in line_ranges]) - if revision: - clang_format_cmd.extend(['-assume-filename='+filename]) - git_show_cmd = ['git', 'cat-file', 'blob', - '%s:%s' % (revision, filename)] - git_show = subprocess.Popen(git_show_cmd, stdin=subprocess.PIPE, - stdout=subprocess.PIPE) - git_show.stdin.close() - clang_format_stdin = git_show.stdout - else: - clang_format_cmd.extend([filename]) - git_show = None - clang_format_stdin = subprocess.PIPE - try: - clang_format = subprocess.Popen(clang_format_cmd, stdin=clang_format_stdin, - stdout=subprocess.PIPE) - if clang_format_stdin == subprocess.PIPE: - clang_format_stdin = clang_format.stdin - except OSError as e: - if e.errno == errno.ENOENT: - die('cannot find executable "%s"' % binary) - else: - raise - clang_format_stdin.close() - hash_object_cmd = ['git', 'hash-object', - '-w', '--path='+filename, '--stdin'] - hash_object = subprocess.Popen(hash_object_cmd, stdin=clang_format.stdout, - stdout=subprocess.PIPE) - clang_format.stdout.close() - stdout = hash_object.communicate()[0] - if hash_object.returncode != 0: - die('`%s` failed' % ' '.join(hash_object_cmd)) - if clang_format.wait() != 0: - die('`%s` failed' % ' '.join(clang_format_cmd)) - if git_show and git_show.wait() != 0: - die('`%s` failed' % ' '.join(git_show_cmd)) - return convert_string(stdout).rstrip('\r\n') - - -@contextlib.contextmanager -def temporary_index_file(tree=None): - """Context manager for setting GIT_INDEX_FILE to a temporary file and deleting - the file afterward.""" - index_path = create_temporary_index(tree) - old_index_path = os.environ.get('GIT_INDEX_FILE') - os.environ['GIT_INDEX_FILE'] = index_path - try: - yield - finally: - if old_index_path is None: - del os.environ['GIT_INDEX_FILE'] - else: - os.environ['GIT_INDEX_FILE'] = old_index_path - os.remove(index_path) - - -def create_temporary_index(tree=None): - """Create a temporary index file and return the created file's path. - - If `tree` is not None, use that as the tree to read in. Otherwise, an - empty index is created.""" - gitdir = run('git', 'rev-parse', '--git-dir') - path = os.path.join(gitdir, temp_index_basename) - if tree is None: - tree = '--empty' - run('git', 'read-tree', '--index-output='+path, tree) - return path - - -def print_diff(old_tree, new_tree): - """Print the diff between the two trees to stdout.""" - # We use the porcelain 'diff' and not plumbing 'diff-tree' because the output - # is expected to be viewed by the user, and only the former does nice things - # like color and pagination. - # - # We also only print modified files since `new_tree` only contains the files - # that were modified, so unmodified files would show as deleted without the - # filter. - subprocess.check_call(['git', 'diff', '--diff-filter=M', old_tree, new_tree, - '--']) - - -def apply_changes(old_tree, new_tree, force=False, patch_mode=False): - """Apply the changes in `new_tree` to the working directory. - - Bails if there are local changes in those files and not `force`. If - `patch_mode`, runs `git checkout --patch` to select hunks interactively.""" - changed_files = run('git', 'diff-tree', '--diff-filter=M', '-r', '-z', - '--name-only', old_tree, - new_tree).rstrip('\0').split('\0') - if not force: - unstaged_files = run('git', 'diff-files', - '--name-status', *changed_files) - if unstaged_files: - print('The following files would be modified but ' - 'have unstaged changes:', file=sys.stderr) - print(unstaged_files, file=sys.stderr) - print('Please commit, stage, or stash them first.', file=sys.stderr) - sys.exit(2) - if patch_mode: - # In patch mode, we could just as well create an index from the new tree - # and checkout from that, but then the user will be presented with a - # message saying "Discard ... from worktree". Instead, we use the old - # tree as the index and checkout from new_tree, which gives the slightly - # better message, "Apply ... to index and worktree". This is not quite - # right, since it won't be applied to the user's index, but oh well. - with temporary_index_file(old_tree): - subprocess.check_call(['git', 'checkout', '--patch', new_tree]) - index_tree = old_tree - else: - with temporary_index_file(new_tree): - run('git', 'checkout-index', '-a', '-f') - return changed_files - - -def run(*args, **kwargs): - stdin = kwargs.pop('stdin', '') - verbose = kwargs.pop('verbose', True) - strip = kwargs.pop('strip', True) - for name in kwargs: - raise TypeError("run() got an unexpected keyword argument '%s'" % name) - p = subprocess.Popen(args, stdout=subprocess.PIPE, stderr=subprocess.PIPE, - stdin=subprocess.PIPE) - stdout, stderr = p.communicate(input=stdin) - - stdout = convert_string(stdout) - stderr = convert_string(stderr) - - if p.returncode == 0: - if stderr: - if verbose: - print('`%s` printed to stderr:' % - ' '.join(args), file=sys.stderr) - print(stderr.rstrip(), file=sys.stderr) - if strip: - stdout = stdout.rstrip('\r\n') - return stdout - if verbose: - print('`%s` returned %s' % - (' '.join(args), p.returncode), file=sys.stderr) - if stderr: - print(stderr.rstrip(), file=sys.stderr) - sys.exit(2) - - -def die(message): - print('error:', message, file=sys.stderr) - sys.exit(2) - - -def to_bytes(str_input): - # Encode to UTF-8 to get binary data. - if isinstance(str_input, bytes): - return str_input - return str_input.encode('utf-8') - - -def to_string(bytes_input): - if isinstance(bytes_input, str): - return bytes_input - return bytes_input.encode('utf-8') - - -def convert_string(bytes_input): - try: - return to_string(bytes_input.decode('utf-8')) - except AttributeError: # 'str' object has no attribute 'decode'. - return str(bytes_input) - except UnicodeError: - return str(bytes_input) - - -if __name__ == '__main__': - main() diff --git a/ci/update-clang-format b/ci/update-clang-format deleted file mode 100755 index 56bc73a87b..0000000000 --- a/ci/update-clang-format +++ /dev/null @@ -1,39 +0,0 @@ -#!/usr/bin/env bash - -set -e - -source "$(dirname "$BASH_SOURCE")/common.sh" - -cd "$REPO_ROOT" - -retval='1' - -rm -f .clang-format -cp .clang-format.base .clang-format -for try in {1..10}; do - errors="$(clang-format -dump-config 2>&1 >/dev/null)" || : - if [ -z "${errors}" ]; then - retval='0' - - break - fi - - errors_line="$(echo "${errors}" | awk ' - /^YAML:/{ - sub(/^YAML:/, ""); - sub(/:.*/, ""); - print; - exit; - } - ')" - - if ! [ "${errors_line}" -gt -1 ] 2>/dev/null; then - break - fi - - rm -f .clang-format.new - sed "${errors_line} d" .clang-format >.clang-format.new - mv .clang-format.new .clang-format -done - -exit "${retval}" diff --git a/nano/node/transport/tcp.cpp b/nano/node/transport/tcp.cpp index f6bb20267b..378f432d85 100644 --- a/nano/node/transport/tcp.cpp +++ b/nano/node/transport/tcp.cpp @@ -538,7 +538,7 @@ void nano::transport::tcp_channels::start_tcp (nano::endpoint const & endpoint_a nano::node_id_handshake message (node_l->network_params.network, cookie, boost::none); if (node_l->config.logging.network_node_id_handshake_logging ()) { - node_l->logger.try_log (boost::str (boost::format ("Node ID handshake request sent with node ID %1% to %2%: query %3%") % node_l->node_id.pub.to_node_id () % endpoint_a % (cookie.has_value() ? cookie->to_string() : "not set"))); + node_l->logger.try_log (boost::str (boost::format ("Node ID handshake request sent with node ID %1% to %2%: query %3%") % node_l->node_id.pub.to_node_id () % endpoint_a % (cookie.has_value () ? cookie->to_string () : "not set"))); } channel->set_endpoint (); std::shared_ptr> receive_buffer (std::make_shared> ()); From 9e2e8d259eb808d3d5023eb1ea26b62f6fa79694 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Wed, 22 Sep 2021 16:05:18 +0100 Subject: [PATCH 210/346] Formatting workaround to make clang-format happy on OSX (#3467) Co-authored-by: theohax --- nano/crypto_lib/secure_memory.cpp | 3 +-- nano/lib/utility.cpp | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/nano/crypto_lib/secure_memory.cpp b/nano/crypto_lib/secure_memory.cpp index 9c7d228257..b5f9ae91de 100644 --- a/nano/crypto_lib/secure_memory.cpp +++ b/nano/crypto_lib/secure_memory.cpp @@ -42,7 +42,6 @@ void NOT_OPTIMIZED nano::secure_wipe_memory (void * v, size_t n) #elif defined(HAVE_EXPLICIT_BZERO) explicit_bzero (v, n); #else - static void * (*const volatile memset_sec)(void *, int, size_t) = &memset; - memset_sec (v, 0, n); + memset (v, 0, n); #endif } diff --git a/nano/lib/utility.cpp b/nano/lib/utility.cpp index badc47fb7d..c560260894 100644 --- a/nano/lib/utility.cpp +++ b/nano/lib/utility.cpp @@ -37,7 +37,7 @@ std::size_t nano::get_file_descriptor_limit () { - std::size_t fd_limit = (std::numeric_limits::max)(); + std::size_t fd_limit = std::numeric_limits::max (); #ifndef _WIN32 rlimit limit{}; if (getrlimit (RLIMIT_NOFILE, &limit) == 0) From a15f23989ce6b31650d845ccdaa4cffd48d93686 Mon Sep 17 00:00:00 2001 From: theohax <81556890+theohax@users.noreply.github.com> Date: Wed, 22 Sep 2021 21:11:24 +0300 Subject: [PATCH 211/346] Fix Windows build (#3469) --- nano/lib/utility.cpp | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/nano/lib/utility.cpp b/nano/lib/utility.cpp index c560260894..9bca0f7f6d 100644 --- a/nano/lib/utility.cpp +++ b/nano/lib/utility.cpp @@ -5,6 +5,13 @@ #include #include + +#ifdef _WIN32 +#ifndef NOMINMAX +#define NOMINMAX +#endif +#endif + #include #include #include From 96f18684c61e784c38deeeb586470b97835f2362 Mon Sep 17 00:00:00 2001 From: dsiganos Date: Mon, 27 Sep 2021 12:26:09 +0100 Subject: [PATCH 212/346] Add some flags to the command line options list (#3474) The following flags become settable from command line: disable_ongoing_bootstrap disable_rep_crawler disable_request_loop --- nano/node/cli.cpp | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/nano/node/cli.cpp b/nano/node/cli.cpp index c8ea3456f1..c144431472 100644 --- a/nano/node/cli.cpp +++ b/nano/node/cli.cpp @@ -95,6 +95,9 @@ void nano::add_node_flag_options (boost::program_options::options_description & ("disable_lazy_bootstrap", "Disables lazy bootstrap") ("disable_legacy_bootstrap", "Disables legacy bootstrap") ("disable_wallet_bootstrap", "Disables wallet lazy bootstrap") + ("disable_ongoing_bootstrap", "Disable ongoing bootstrap") + ("disable_rep_crawler", "Disable rep crawler") + ("disable_request_loop", "Disable request loop") ("disable_bootstrap_listener", "Disables bootstrap processing for TCP listener (not including realtime network TCP connections)") ("disable_tcp_realtime", "Disables TCP realtime network") ("disable_udp", "(Deprecated) UDP is disabled by default") @@ -122,6 +125,9 @@ std::error_code nano::update_flags (nano::node_flags & flags_a, boost::program_o flags_a.disable_lazy_bootstrap = (vm.count ("disable_lazy_bootstrap") > 0); flags_a.disable_legacy_bootstrap = (vm.count ("disable_legacy_bootstrap") > 0); flags_a.disable_wallet_bootstrap = (vm.count ("disable_wallet_bootstrap") > 0); + flags_a.disable_ongoing_bootstrap = (vm.count ("disable_ongoing_bootstrap") > 0); + flags_a.disable_rep_crawler = (vm.count ("disable_rep_crawler") > 0); + flags_a.disable_request_loop = (vm.count ("disable_request_loop") > 0); if (!flags_a.inactive_node) { flags_a.disable_bootstrap_listener = (vm.count ("disable_bootstrap_listener") > 0); From 65048c8640ee37917f3363853fcbabe7a912a4d4 Mon Sep 17 00:00:00 2001 From: Dimitrios Siganos Date: Sun, 26 Sep 2021 13:38:01 +0100 Subject: [PATCH 213/346] Node flag to disable calling add_initial_peers function The add inital peers function reads the peers table and contacts all the peers listed in it. It is called at startup. To disable outgoing connections set: --disable_rep_crawler and --disable_add_initial_peers --- nano/node/cli.cpp | 2 ++ nano/node/node.cpp | 6 ++++++ nano/node/nodeconfig.hpp | 1 + 3 files changed, 9 insertions(+) diff --git a/nano/node/cli.cpp b/nano/node/cli.cpp index c144431472..3c457937a0 100644 --- a/nano/node/cli.cpp +++ b/nano/node/cli.cpp @@ -91,6 +91,7 @@ void nano::add_node_flag_options (boost::program_options::options_description & { // clang-format off description_a.add_options() + ("disable_add_initial_peers", "Disable contacting the peer in the peers table at startup") ("disable_backup", "Disable wallet automatic backups") ("disable_lazy_bootstrap", "Disables lazy bootstrap") ("disable_legacy_bootstrap", "Disables legacy bootstrap") @@ -121,6 +122,7 @@ void nano::add_node_flag_options (boost::program_options::options_description & std::error_code nano::update_flags (nano::node_flags & flags_a, boost::program_options::variables_map const & vm) { std::error_code ec; + flags_a.disable_add_initial_peers = (vm.count ("disable_add_initial_peers") > 0); flags_a.disable_backup = (vm.count ("disable_backup") > 0); flags_a.disable_lazy_bootstrap = (vm.count ("disable_lazy_bootstrap") > 0); flags_a.disable_legacy_bootstrap = (vm.count ("disable_legacy_bootstrap") > 0); diff --git a/nano/node/node.cpp b/nano/node/node.cpp index 4e66574cad..aeefd89ee9 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -1207,6 +1207,12 @@ boost::optional nano::node::work_generate_blocking (nano::root const & void nano::node::add_initial_peers () { + if (flags.disable_add_initial_peers) + { + logger.always_log ("Skipping add_initial_peers because disable_add_initial_peers is set"); + return; + } + auto transaction (store.tx_begin_read ()); for (auto i (store.peer.begin (transaction)), n (store.peer.end ()); i != n; ++i) { diff --git a/nano/node/nodeconfig.hpp b/nano/node/nodeconfig.hpp index 3a3ee92db8..12ce39a8c4 100644 --- a/nano/node/nodeconfig.hpp +++ b/nano/node/nodeconfig.hpp @@ -121,6 +121,7 @@ class node_flags final public: std::vector config_overrides; std::vector rpc_config_overrides; + bool disable_add_initial_peers{ false }; // For testing only bool disable_backup{ false }; bool disable_lazy_bootstrap{ false }; bool disable_legacy_bootstrap{ false }; From b897c73afd262ce77b903b71e6d3853ae051937f Mon Sep 17 00:00:00 2001 From: Dimitrios Siganos Date: Mon, 27 Sep 2021 14:54:54 +0100 Subject: [PATCH 214/346] Fix for unit test rpc.epoch_upgrade #3476 The unit test rpc.epoch_upgrade had a race condition. It tries to detect the transient state where the upgrade is in progress but it is not guaranteed that that state can be detected every time. Fixes #3476 --- nano/rpc_test/rpc.cpp | 2 -- 1 file changed, 2 deletions(-) diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index a5d70dd95e..536dcfc9b8 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -5664,8 +5664,6 @@ TEST (rpc, epoch_upgrade) request.put ("key", epoch_signer.prv.to_string ()); auto response (wait_response (system, rpc, request)); ASSERT_EQ ("1", response.get ("started")); - auto response_fail (wait_response (system, rpc, request)); - ASSERT_EQ ("0", response_fail.get ("started")); ASSERT_TIMELY (10s, 4 == node->store.account.count (node->store.tx_begin_read ())); // Check upgrade { From a2cb393f9f9f9bfe1b02c3ff537d23220b777bb2 Mon Sep 17 00:00:00 2001 From: dsiganos Date: Tue, 28 Sep 2021 12:38:45 +0100 Subject: [PATCH 215/346] Fix unit test case node.search_pending_pruned (#3479) The test does some asserts that are not directly relevant to the test case and they are race conditions. This commits removes those asserts. Fixes #3478 --- nano/core_test/node.cpp | 7 ------- 1 file changed, 7 deletions(-) diff --git a/nano/core_test/node.cpp b/nano/core_test/node.cpp index 0968dc4b8c..bdf36925ad 100644 --- a/nano/core_test/node.cpp +++ b/nano/core_test/node.cpp @@ -490,13 +490,6 @@ TEST (node, search_pending_pruned) // Receive pruned block system.wallet (1)->insert_adhoc (key2.prv); ASSERT_FALSE (system.wallet (1)->search_pending (system.wallet (1)->wallets.tx_begin_read ())); - { - nano::lock_guard guard (node2->active.mutex); - auto existing1 (node2->active.blocks.find (send1->hash ())); - ASSERT_EQ (node2->active.blocks.end (), existing1); - auto existing2 (node2->active.blocks.find (send2->hash ())); - ASSERT_EQ (node2->active.blocks.end (), existing2); - } ASSERT_TIMELY (10s, node2->balance (key2.pub) == 2 * node2->config.receive_minimum.number ()); } From 736af8f386ccc6239891c62456907678a806127c Mon Sep 17 00:00:00 2001 From: dsiganos Date: Tue, 28 Sep 2021 16:52:58 +0100 Subject: [PATCH 216/346] Add systests to CI and fix for rocksdb mode (issue #3447) (issue #3452) (#3468) Fix systests when running in rocksdb mode (different ledger files) Fix for CI build of nano_node that default to dev network Add systests into github per commit CI. --- ci/test.sh | 6 +++++- systest/RUNALL | 5 ++++- systest/cli_wallet_create.sh | 9 +++++---- systest/node_initialize.sh | 14 +++++++------- systest/set_bandwidth_params.sh | 9 +++++---- 5 files changed, 26 insertions(+), 17 deletions(-) diff --git a/ci/test.sh b/ci/test.sh index 817c6873ec..5d748db0b6 100755 --- a/ci/test.sh +++ b/ci/test.sh @@ -70,10 +70,14 @@ run_tests() { xvfb_run_ ./qt_test qt_test_res=${?} + (cd ../systest && export NANO_NODE_EXE=../build/nano_node && ${TIMEOUT_CMD} ${TIMEOUT_TIME_ARG} 300 ./RUNALL) + sys_test_res=${?} + echo "Core Test return code: ${core_test_res}" echo "RPC Test return code: ${rpc_test_res}" echo "QT Test return code: ${qt_test_res}" - if [[ ${core_test_res} != 0 || ${rpc_test_res} != 0 || ${qt_test_res} != 0 ]]; then + echo "Sys Test return code: ${sys_test_res}" + if [[ ${core_test_res} != 0 || ${rpc_test_res} != 0 || ${qt_test_res} != 0 || ${sys_test_res} != 0 ]]; then return 1 else return 0 diff --git a/systest/RUNALL b/systest/RUNALL index b53cb0a641..873785be06 100755 --- a/systest/RUNALL +++ b/systest/RUNALL @@ -2,8 +2,11 @@ set -e +failed=0 + for script in *.sh; do + echo Running script: $script ./$script; done -echo All systest passed. +echo All systests passed. diff --git a/systest/cli_wallet_create.sh b/systest/cli_wallet_create.sh index 00a794611d..d2ac7b35d4 100755 --- a/systest/cli_wallet_create.sh +++ b/systest/cli_wallet_create.sh @@ -11,10 +11,11 @@ SEED=CEEDCEEDCEEDCEEDCEEDCEEDCEEDCEEDCEEDCEEDCEEDCEEDCEEDCEEDCEEDCEED NANO_NODE_EXE=${NANO_NODE_EXE:-../../build/nano_node} clean_data_dir() { - rm -f $DATADIR/log/log_*.log - rm -f $DATADIR/wallets.ldb* - rm -f $DATADIR/data.ldb* - rm -f $DATADIR/config-*.toml + rm -f $DATADIR/log/log_*.log + rm -f $DATADIR/wallets.ldb* + rm -f $DATADIR/data.ldb* + rm -f $DATADIR/config-*.toml + rm -rf "$DATADIR"/rocksdb/ } mkdir -p $DATADIR/log diff --git a/systest/node_initialize.sh b/systest/node_initialize.sh index ae80e33d9a..bf434f27c3 100755 --- a/systest/node_initialize.sh +++ b/systest/node_initialize.sh @@ -9,10 +9,11 @@ DATADIR=data.systest NANO_NODE_EXE=${NANO_NODE_EXE:-../../build/nano_node} clean_data_dir() { - rm -f "$DATADIR"/log/log_*.log - rm -f "$DATADIR"/wallets.ldb* - rm -f "$DATADIR"/data.ldb* - rm -f "$DATADIR"/config-*.toml + rm -f "$DATADIR"/log/log_*.log + rm -f "$DATADIR"/wallets.ldb* + rm -f "$DATADIR"/data.ldb* + rm -f "$DATADIR"/config-*.toml + rm -rf "$DATADIR"/rocksdb/ } test_initialize_cmd() { @@ -29,8 +30,7 @@ test_initialize_cmd() { # check that it is the live network grep -q "Active network: $netmatch" "$DATADIR"/log/log_*.log - # check that the ledger file is created - test -e "$DATADIR/data.ldb" + # check that the ledger file is created and has one block, the genesis block $NANO_NODE_EXE --debug_block_count --data_path "$DATADIR" "$netcmd" "$netarg" | grep -q 'Block count: 1' # check the genesis block is correct @@ -39,7 +39,7 @@ test_initialize_cmd() { mkdir -p "$DATADIR/log" -test_initialize_cmd "live" "" "" "991CF190094C00F0B68E2E5F75F6BEE95A2E0BD93CEAA4A6734DB9F19B728948" +#test_initialize_cmd "live" "" "" "991CF190094C00F0B68E2E5F75F6BEE95A2E0BD93CEAA4A6734DB9F19B728948" test_initialize_cmd "live" "--network" "live" "991CF190094C00F0B68E2E5F75F6BEE95A2E0BD93CEAA4A6734DB9F19B728948" test_initialize_cmd "beta" "--network" "beta" "01A92459E69440D5C1088D3B31F4CA678BE944BAB3776C2E6B7665E9BD99BD5A" test_initialize_cmd "test" "--network" "test" "B1D60C0B886B57401EF5A1DAA04340E53726AA6F4D706C085706F31BBD100CEE" diff --git a/systest/set_bandwidth_params.sh b/systest/set_bandwidth_params.sh index e6905c34a2..2b63088938 100755 --- a/systest/set_bandwidth_params.sh +++ b/systest/set_bandwidth_params.sh @@ -5,10 +5,11 @@ set -e DATADIR=data.systest clean_data_dir() { - rm -f "$DATADIR"/log/log_*.log - rm -f "$DATADIR"/wallets.ldb* - rm -f "$DATADIR"/data.ldb* - rm -f "$DATADIR"/config-*.toml + rm -f "$DATADIR"/log/log_*.log + rm -f "$DATADIR"/wallets.ldb* + rm -f "$DATADIR"/data.ldb* + rm -f "$DATADIR"/config-*.toml + rm -rf "$DATADIR"/rocksdb/ } msg() { From 9f397d28222779c32258903a491517764a1e7df9 Mon Sep 17 00:00:00 2001 From: Shryder Date: Tue, 28 Sep 2021 16:55:46 +0100 Subject: [PATCH 217/346] Replace "pending" with "receivable"/"ready to receive" in QT wallet (#3411) (#3437) * Replace "pending" with "receivable"/"ready to receive" in QT wallet (#3411) * Change wording for a QT tooltip --- nano/qt/qt.cpp | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/nano/qt/qt.cpp b/nano/qt/qt.cpp index c1595aad25..dfe5d5aa0e 100644 --- a/nano/qt/qt.cpp +++ b/nano/qt/qt.cpp @@ -115,7 +115,7 @@ void nano_qt::self_pane::set_balance_text (std::pairsetText (QString (final_text.c_str ())); } @@ -272,7 +272,7 @@ void nano_qt::accounts::refresh_wallet_balance () auto final_text (std::string ("Balance: ") + wallet.format_balance (balance)); if (!pending.is_zero ()) { - final_text += "\nPending: " + wallet.format_balance (pending); + final_text += "\nReady to receive: " + wallet.format_balance (pending); } wallet_balance_label->setText (QString (final_text.c_str ())); this->wallet.node.workers.add_timed_task (std::chrono::steady_clock::now () + std::chrono::seconds (60), [this] () { @@ -777,7 +777,7 @@ nano_qt::account_viewer::account_viewer (nano_qt::wallet & wallet_a) : auto final_text (std::string ("Balance (NANO): ") + wallet.format_balance (balance.first)); if (!balance.second.is_zero ()) { - final_text += "\nPending: " + wallet.format_balance (balance.second); + final_text += "\nReady to receive: " + wallet.format_balance (balance.second); } balance_label->setText (QString (final_text.c_str ())); } @@ -1908,7 +1908,7 @@ nano_qt::advanced_actions::advanced_actions (nano_qt::wallet & wallet_a) : }); bootstrap->setToolTip ("Multi-connection bootstrap to random peers"); - search_for_receivables->setToolTip ("Search for pending blocks"); + search_for_receivables->setToolTip ("Search for ready to be received blocks"); create_block->setToolTip ("Create block in JSON format"); enter_block->setToolTip ("Enter block in JSON format"); } @@ -2353,7 +2353,7 @@ void nano_qt::block_creation::create_receive () else { show_label_error (*status); - status->setText ("Source block is not pending to receive"); + status->setText ("Source block is not ready to be received"); } } else @@ -2518,7 +2518,7 @@ void nano_qt::block_creation::create_open () else { show_label_error (*status); - status->setText ("Source block is not pending to receive"); + status->setText ("Source block is not ready to be received"); } } else From c9236bbf03c9398da1824a49c2f3cd209b36df02 Mon Sep 17 00:00:00 2001 From: theohax <81556890+theohax@users.noreply.github.com> Date: Wed, 29 Sep 2021 16:26:38 +0300 Subject: [PATCH 218/346] Fix cmake-format-all.sh script + friendlier xargs usage (#3470) * Fix calling xargs on OSX * Fix cmake-format-all.sh script * Design ci/cmake-format-all.sh and ci/check-cmake-format.sh to be consistent with the clang ones --- ci/check-cmake-format.sh | 30 ++++++++++++++++----------- ci/clang-format-all.sh | 8 +++++++- ci/cmake-format-all.sh | 11 +++------- ci/detect-cmake-format.sh | 43 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 71 insertions(+), 21 deletions(-) create mode 100644 ci/detect-cmake-format.sh diff --git a/ci/check-cmake-format.sh b/ci/check-cmake-format.sh index 633f818221..47e7b24ca7 100755 --- a/ci/check-cmake-format.sh +++ b/ci/check-cmake-format.sh @@ -1,16 +1,22 @@ -#!/bin/bash +#!/usr/bin/env bash -if ! command -v cmake-format &>/dev/null; then - echo "pip install cmake-format and try again" +set -e + +if [[ ! -z $(git status --untracked-files=no --porcelain) ]]; then + echo "Unable to run script: working directory not clean (see git status)" exit 1 fi -REPO_ROOT=$(git rev-parse --show-toplevel) -cd "${REPO_ROOT}" -find "${REPO_ROOT}" -iwholename "${REPO_ROOT}/nano/*/CMakeLists.txt" -o -iwholename "${REPO_ROOT}/CMakeLists.txt" -o -iwholename "${REPO_ROOT}/coverage/CMakeLists.txt" | xargs cmake-format --check &>.cmake_format_check -if [[ $(wc -l .cmake_format_check | cut -f1 -d ' ') != 0 ]]; then - echo - echo "Code formatting differs from expected - please run \n\t'bash ci/cmake-format-all.sh'" - RET=1 + +source "$(dirname "$BASH_SOURCE")/common.sh" + +"$REPO_ROOT/ci/cmake-format-all.sh" + +if [[ ! -z $(git status --untracked-files=no --porcelain) ]]; then + echo "CMake formatting differs from expected - please run ci/cmake-format-all.sh" + git diff + git reset --hard HEAD > /dev/null + exit 1 fi -rm -fr .cmake_format_check -exit ${RET-0} + +echo "cmake-format passed" +exit 0 diff --git a/ci/clang-format-all.sh b/ci/clang-format-all.sh index c24018337c..fe9ba2fe63 100755 --- a/ci/clang-format-all.sh +++ b/ci/clang-format-all.sh @@ -5,4 +5,10 @@ set -e source "$(dirname "$BASH_SOURCE")/detect-clang-format.sh" source "$(dirname "$BASH_SOURCE")/common.sh" -find "$REPO_ROOT/nano" -iname '*.h' -o -iname '*.hpp' -o -iname '*.cpp' | xargs "$CLANG_FORMAT" -i -style=file +find "$REPO_ROOT/nano" -iname "*.h" \ + -o \ + -iname "*.hpp" \ + -o \ + -iname "*.cpp" \ + | xargs -I sourceFile \ + "$CLANG_FORMAT" -i -style=file "sourceFile" diff --git a/ci/cmake-format-all.sh b/ci/cmake-format-all.sh index c5bde79a82..90f6ca1342 100755 --- a/ci/cmake-format-all.sh +++ b/ci/cmake-format-all.sh @@ -2,18 +2,13 @@ set -e +source "$(dirname "$BASH_SOURCE")/detect-cmake-format.sh" source "$(dirname "$BASH_SOURCE")/common.sh" -if ! [[ $(builtin type -p cmake-format) ]]; then - echo "pip install cmake-format to continue" - exit 1 -fi - -cd "$REPO_ROOT" - find "$REPO_ROOT" -iwholename "$REPO_ROOT/nano/*/CMakeLists.txt" \ -o \ -iwholename "$REPO_ROOT/CMakeLists.txt" \ -o \ -iwholename "$REPO_ROOT/coverage/CMakeLists.txt" \ - | xargs -i{} cmake-format -i {} + | xargs -I cmakeListsFile \ + "$CMAKE_FORMAT" -i "cmakeListsFile" diff --git a/ci/detect-cmake-format.sh b/ci/detect-cmake-format.sh new file mode 100644 index 0000000000..d0917e7a55 --- /dev/null +++ b/ci/detect-cmake-format.sh @@ -0,0 +1,43 @@ +#!/usr/bin/env bash + +set -e + +is_cmake_format_usable() +{ + if [[ $(builtin type -p $1) ]]; then + local output=$($1 --version) + if [[ $output =~ ^(.)*$2(.)*$ ]]; then + echo "0" + else + echo $output + fi + else + echo "1" + fi +} + +CMAKE_FORMAT="" +CMAKE_FORMAT_VERSION="0.6.13" + +cmake_format_attempts=("cmake-format") + +for itr in ${cmake_format_attempts[@]}; do + result=$(is_cmake_format_usable $itr $CMAKE_FORMAT_VERSION) + if [[ $result == "0" ]]; then + CMAKE_FORMAT=$itr + break + elif [[ $result == "1" ]]; then + continue + else + echo "Detected '$itr' with version '$result' " \ + "(different than '$CMAKE_FORMAT_VERSION'), skipping it." + fi +done + +if [[ -z $CMAKE_FORMAT ]]; then + echo "No 'cmake-format' of version '$CMAKE_FORMAT_VERSION' could be detected in your PATH." \ + "Try pip/pip3 install cmake-format. Or try up/down-grading if you installed it differently." + exit 1 +fi + +echo "Using '$CMAKE_FORMAT' version '$CMAKE_FORMAT_VERSION'" From 6bff63efce4ed333bafeeb8014b437901c15175f Mon Sep 17 00:00:00 2001 From: theohax <81556890+theohax@users.noreply.github.com> Date: Thu, 30 Sep 2021 10:37:09 +0300 Subject: [PATCH 219/346] Redesign CI format check/update scripts according to review (#3486) * Redesign CI format check/update scripts according to review * Address code review #2 --- .github/workflows/analyzers.yml | 6 +- ci/check-cmake-format.sh | 22 ------- ci/check-commit-format.sh | 22 ------- ci/clang-format-all.sh | 14 ----- ci/clang-format-check.sh | 27 ++++++++ ci/clang-format-do.sh | 15 +++++ ci/cmake-format-all.sh | 14 ----- ci/cmake-format-check.sh | 27 ++++++++ ci/cmake-format-do.sh | 15 +++++ ci/common.sh | 5 -- ci/detect-clang-format.sh | 43 ------------- ci/detect-cmake-format.sh | 43 ------------- ci/impl/clang-format.sh | 102 ++++++++++++++++++++++++++++++ ci/impl/cmake-format.sh | 108 ++++++++++++++++++++++++++++++++ ci/impl/common.sh | 7 +++ 15 files changed, 304 insertions(+), 166 deletions(-) delete mode 100755 ci/check-cmake-format.sh delete mode 100755 ci/check-commit-format.sh delete mode 100755 ci/clang-format-all.sh create mode 100755 ci/clang-format-check.sh create mode 100755 ci/clang-format-do.sh delete mode 100755 ci/cmake-format-all.sh create mode 100755 ci/cmake-format-check.sh create mode 100755 ci/cmake-format-do.sh delete mode 100644 ci/common.sh delete mode 100644 ci/detect-clang-format.sh delete mode 100644 ci/detect-cmake-format.sh create mode 100644 ci/impl/clang-format.sh create mode 100644 ci/impl/cmake-format.sh create mode 100644 ci/impl/common.sh diff --git a/.github/workflows/analyzers.yml b/.github/workflows/analyzers.yml index 22dc8e6a2d..cea239a81e 100644 --- a/.github/workflows/analyzers.yml +++ b/.github/workflows/analyzers.yml @@ -12,8 +12,8 @@ jobs: env: DEBIAN_FRONTEND: noninteractive run: sudo apt-get install clang-format-12 - - name: Clang Format - run: ci/check-commit-format.sh + - name: Check clang-format + run: ci/clang-format-check.sh cmake_format: runs-on: ubuntu-20.04 @@ -29,4 +29,4 @@ jobs: packages: | cmake-format - name: Check cmake-format - run: bash ci/check-cmake-format.sh + run: ci/cmake-format-check.sh diff --git a/ci/check-cmake-format.sh b/ci/check-cmake-format.sh deleted file mode 100755 index 47e7b24ca7..0000000000 --- a/ci/check-cmake-format.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env bash - -set -e - -if [[ ! -z $(git status --untracked-files=no --porcelain) ]]; then - echo "Unable to run script: working directory not clean (see git status)" - exit 1 -fi - -source "$(dirname "$BASH_SOURCE")/common.sh" - -"$REPO_ROOT/ci/cmake-format-all.sh" - -if [[ ! -z $(git status --untracked-files=no --porcelain) ]]; then - echo "CMake formatting differs from expected - please run ci/cmake-format-all.sh" - git diff - git reset --hard HEAD > /dev/null - exit 1 -fi - -echo "cmake-format passed" -exit 0 diff --git a/ci/check-commit-format.sh b/ci/check-commit-format.sh deleted file mode 100755 index 8a1c1e44a8..0000000000 --- a/ci/check-commit-format.sh +++ /dev/null @@ -1,22 +0,0 @@ -#!/usr/bin/env bash - -set -e - -if [[ ! -z $(git status --untracked-files=no --porcelain) ]]; then - echo "Unable to run script: working directory not clean (see git status)" - exit 1 -fi - -source "$(dirname "$BASH_SOURCE")/common.sh" - -"$REPO_ROOT/ci/clang-format-all.sh" - -if [[ ! -z $(git status --untracked-files=no --porcelain) ]]; then - echo "Code formatting differs from expected - please run ci/clang-format-all.sh" - git diff - git reset --hard HEAD > /dev/null - exit 1 -fi - -echo "clang-format passed" -exit 0 diff --git a/ci/clang-format-all.sh b/ci/clang-format-all.sh deleted file mode 100755 index fe9ba2fe63..0000000000 --- a/ci/clang-format-all.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env bash - -set -e - -source "$(dirname "$BASH_SOURCE")/detect-clang-format.sh" -source "$(dirname "$BASH_SOURCE")/common.sh" - -find "$REPO_ROOT/nano" -iname "*.h" \ - -o \ - -iname "*.hpp" \ - -o \ - -iname "*.cpp" \ - | xargs -I sourceFile \ - "$CLANG_FORMAT" -i -style=file "sourceFile" diff --git a/ci/clang-format-check.sh b/ci/clang-format-check.sh new file mode 100755 index 0000000000..358f955fb6 --- /dev/null +++ b/ci/clang-format-check.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash + +################################################################################################### + +source "$(dirname "$BASH_SOURCE")/impl/common.sh" +source "$(dirname "$BASH_SOURCE")/impl/clang-format.sh" + +################################################################################################### + +does_clang_format_exist +if [[ $? == 0 ]]; then + clang_format_check + result=$? + + if [[ $result == 2 ]]; then + exit $result + fi + + if [[ $result == 1 ]]; then + echo "Source code formatting differs from expected - please run ci/clang-format-do.sh" + exit 1 + fi + + echo "clang-format check passed" +fi + +################################################################################################### diff --git a/ci/clang-format-do.sh b/ci/clang-format-do.sh new file mode 100755 index 0000000000..66d9b8ab44 --- /dev/null +++ b/ci/clang-format-do.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash + +################################################################################################### + +source "$(dirname "$BASH_SOURCE")/impl/common.sh" +source "$(dirname "$BASH_SOURCE")/impl/clang-format.sh" + +################################################################################################### + +does_clang_format_exist +if [[ $? == 0 ]]; then + clang_format_do +fi + +################################################################################################### diff --git a/ci/cmake-format-all.sh b/ci/cmake-format-all.sh deleted file mode 100755 index 90f6ca1342..0000000000 --- a/ci/cmake-format-all.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env bash - -set -e - -source "$(dirname "$BASH_SOURCE")/detect-cmake-format.sh" -source "$(dirname "$BASH_SOURCE")/common.sh" - -find "$REPO_ROOT" -iwholename "$REPO_ROOT/nano/*/CMakeLists.txt" \ - -o \ - -iwholename "$REPO_ROOT/CMakeLists.txt" \ - -o \ - -iwholename "$REPO_ROOT/coverage/CMakeLists.txt" \ - | xargs -I cmakeListsFile \ - "$CMAKE_FORMAT" -i "cmakeListsFile" diff --git a/ci/cmake-format-check.sh b/ci/cmake-format-check.sh new file mode 100755 index 0000000000..c9314a9108 --- /dev/null +++ b/ci/cmake-format-check.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash + +################################################################################################### + +source "$(dirname "$BASH_SOURCE")/impl/common.sh" +source "$(dirname "$BASH_SOURCE")/impl/cmake-format.sh" + +################################################################################################### + +does_cmake_format_exist +if [[ $? == 0 ]]; then + cmake_format_check + result=$? + + if [[ $result == 2 ]]; then + exit $result + fi + + if [[ $result == 1 ]]; then + echo "CMake formatting differs from expected - please run ci/cmake-format-do.sh" + exit 1 + fi + + echo "cmake-format check passed" +fi + +################################################################################################### diff --git a/ci/cmake-format-do.sh b/ci/cmake-format-do.sh new file mode 100755 index 0000000000..94f44c34d9 --- /dev/null +++ b/ci/cmake-format-do.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash + +################################################################################################### + +source "$(dirname "$BASH_SOURCE")/impl/common.sh" +source "$(dirname "$BASH_SOURCE")/impl/cmake-format.sh" + +################################################################################################### + +does_cmake_format_exist +if [[ $? == 0 ]]; then + cmake_format_do +fi + +################################################################################################### diff --git a/ci/common.sh b/ci/common.sh deleted file mode 100644 index 5205c3a1d2..0000000000 --- a/ci/common.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash - -set -e - -REPO_ROOT=$(git rev-parse --show-toplevel) diff --git a/ci/detect-clang-format.sh b/ci/detect-clang-format.sh deleted file mode 100644 index 4179ec889b..0000000000 --- a/ci/detect-clang-format.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env bash - -set -e - -is_clang_format_usable() -{ - if [[ $(builtin type -p $1) ]]; then - local output=$($1 --version) - if [[ $output =~ ^(.)*clang-format\ version\ $2(.)*$ ]]; then - echo "0" - else - echo $output - fi - else - echo "1" - fi -} - -CLANG_FORMAT="" -CLANG_FORMAT_VERSION="12" - -clang_format_attempts=("clang-format" - "clang-format-$CLANG_FORMAT_VERSION") - -for itr in ${clang_format_attempts[@]}; do - result=$(is_clang_format_usable $itr $CLANG_FORMAT_VERSION) - if [[ $result == "0" ]]; then - CLANG_FORMAT=$itr - break - elif [[ $result == "1" ]]; then - continue - else - echo "Detected '$itr' with version '$result' " \ - "(different than '$CLANG_FORMAT_VERSION'), skipping it." - fi -done - -if [[ -z $CLANG_FORMAT ]]; then - echo "No 'clang-format' of version '$CLANG_FORMAT_VERSION' could be detected in your PATH." - exit 1 -fi - -echo "Using '$CLANG_FORMAT' version '$CLANG_FORMAT_VERSION'" diff --git a/ci/detect-cmake-format.sh b/ci/detect-cmake-format.sh deleted file mode 100644 index d0917e7a55..0000000000 --- a/ci/detect-cmake-format.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env bash - -set -e - -is_cmake_format_usable() -{ - if [[ $(builtin type -p $1) ]]; then - local output=$($1 --version) - if [[ $output =~ ^(.)*$2(.)*$ ]]; then - echo "0" - else - echo $output - fi - else - echo "1" - fi -} - -CMAKE_FORMAT="" -CMAKE_FORMAT_VERSION="0.6.13" - -cmake_format_attempts=("cmake-format") - -for itr in ${cmake_format_attempts[@]}; do - result=$(is_cmake_format_usable $itr $CMAKE_FORMAT_VERSION) - if [[ $result == "0" ]]; then - CMAKE_FORMAT=$itr - break - elif [[ $result == "1" ]]; then - continue - else - echo "Detected '$itr' with version '$result' " \ - "(different than '$CMAKE_FORMAT_VERSION'), skipping it." - fi -done - -if [[ -z $CMAKE_FORMAT ]]; then - echo "No 'cmake-format' of version '$CMAKE_FORMAT_VERSION' could be detected in your PATH." \ - "Try pip/pip3 install cmake-format. Or try up/down-grading if you installed it differently." - exit 1 -fi - -echo "Using '$CMAKE_FORMAT' version '$CMAKE_FORMAT_VERSION'" diff --git a/ci/impl/clang-format.sh b/ci/impl/clang-format.sh new file mode 100644 index 0000000000..3a3d69626e --- /dev/null +++ b/ci/impl/clang-format.sh @@ -0,0 +1,102 @@ +#!/usr/bin/env bash + +################################################################################################### + +CLANG_FORMAT="" +CLANG_FORMAT_VERSION="12" + +################################################################################################### + +does_clang_format_exist() +{ + local attempts=("clang-format" "clang-format-$CLANG_FORMAT_VERSION") + for itr in ${attempts[@]}; do + version=$(_is_clang_format_usable $itr $CLANG_FORMAT_VERSION) + if [[ $? == 1 ]]; then + continue + fi + + if [[ $? == 0 ]]; then + CLANG_FORMAT=$itr + break + fi + + echo "Detected '$itr' with version '$version' " \ + "(different than '$CLANG_FORMAT_VERSION'), skipping it." + done + + if [[ -z $CLANG_FORMAT ]]; then + echo "No 'clang-format' of version '$CLANG_FORMAT_VERSION' could be detected in your " \ + "PATH. Try 'sudo apt-get install clang-format-$CLANG_FORMAT_VERSION' or, if macOS, " \ + "'brew install clang-format'. Or up/down grade, if installed differently." + return 1 + fi + + echo "Using '$CLANG_FORMAT' version '$CLANG_FORMAT_VERSION'" + return 0 +} + +################################################################################################### + +clang_format_do() +{ + _clang_format_perform "do" +} + +################################################################################################### + +clang_format_check() +{ + _clang_format_perform "check" +} + +################################################################################################### + +_is_clang_format_usable() +{ + if [[ $(builtin type -p $1) ]]; then + local output=$($1 --version) + if [[ $output =~ ^(.)*$2(.)*$ ]]; then + return 0 + fi + + echo $output + return 1 + fi + + return 2 +} + +################################################################################################### + +_clang_format_perform() +{ + if [[ -z "$CLANG_FORMAT" ]]; then + echo "Logic error: '_lang_format_perform' called, but 'CLANG_FORMAT' " \ + "is empty. Have you called 'does_clang_format_exist'?" + return 2 + fi + + find "$ROOTPATH/nano" -type f \( -iname "*.hpp" \ + -o \ + -iname "*.cpp" \ + \) \ + -print0 | + while read -d $'\0' file + do + if [[ $1 == "do" ]]; then + "$CLANG_FORMAT" -i "$file" + elif [[ $1 == "check" ]]; then + "$CLANG_FORMAT" -style=file -Werror --dry-run "$file" + if [[ $? != 0 ]]; then + return 1 + fi + else + echo "Logic error: '_clang_format_perform' called " \ + "with neither 'do' nor 'check' as argument, but '$1'" + return 2 + fi + done +} + +################################################################################################### diff --git a/ci/impl/cmake-format.sh b/ci/impl/cmake-format.sh new file mode 100644 index 0000000000..9a8c187319 --- /dev/null +++ b/ci/impl/cmake-format.sh @@ -0,0 +1,108 @@ +#!/usr/bin/env bash + +################################################################################################### + +CMAKE_FORMAT="" +CMAKE_FORMAT_VERSION="0.6.13" + +################################################################################################### + +does_cmake_format_exist() +{ + local attempts=("cmake-format") + for itr in ${attempts[@]}; do + version=$(_is_cmake_format_usable $itr $CMAKE_FORMAT_VERSION) + if [[ $? == 1 ]]; then + continue + fi + + if [[ $? == 0 ]]; then + CMAKE_FORMAT=$itr + break + fi + + echo "Detected '$itr' with version '$version' " \ + "(different than '$CMAKE_FORMAT_VERSION'), skipping it." + done + + if [[ -z $CMAKE_FORMAT ]]; then + echo "No 'cmake-format' of version '$CMAKE_FORMAT_VERSION' could be detected in your " \ + "PATH. Try 'pip3 install cmake-format'. Or up/down grade, if installed differently." + return 1 + fi + + echo "Using '$CMAKE_FORMAT' version '$CMAKE_FORMAT_VERSION'" + return 0 +} + +################################################################################################### + +cmake_format_do() +{ + _cmake_format_perform "do" +} + +################################################################################################### + +cmake_format_check() +{ + _cmake_format_perform "check" +} + +################################################################################################### + +_is_cmake_format_usable() +{ + if [[ $(builtin type -p $1) ]]; then + local output=$($1 --version) + if [[ $output =~ ^(.)*$2(.)*$ ]]; then + return 0 + fi + + echo $output + return 1 + fi + + return 2 +} + +################################################################################################### + +_cmake_format_perform() +{ + if [[ -z "$CMAKE_FORMAT" ]]; then + echo "Logic error: '_cmake_format_perform' called, but 'CMAKE_FORMAT' " \ + "is empty. Have you called 'does_cmake_format_exist'?" + return 2 + fi + + find "$ROOTPATH" -type f \( -iwholename "$ROOTPATH/CMakeLists.txt" \ + -o \ + -iwholename "$ROOTPATH/coverage/CMakeLists.txt" \ + -o \ + -iwholename "$ROOTPATH/nano/*/CMakeLists.txt" \ + \) \ + -print0 | + while read -d $'\0' file + do + if [[ $1 == "do" ]]; then + "$CMAKE_FORMAT" -i "$file" + elif [[ $1 == "check" ]]; then + "$CMAKE_FORMAT" "$file" -o tmp + + diff "$file" tmp > /dev/null + if [[ $? != 0 ]]; then + rm tmp + return 1 + fi + + rm tmp + else + echo "Logic error: '_cmake_format_perform' called " \ + "with neither 'do' nor 'check' as argument, but '$1'" + return 2 + fi + done +} + +################################################################################################### diff --git a/ci/impl/common.sh b/ci/impl/common.sh new file mode 100644 index 0000000000..dc97b26204 --- /dev/null +++ b/ci/impl/common.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +################################################################################################### + +ROOTPATH="$(git rev-parse --show-toplevel)" + +################################################################################################### From 468b4c10daa576a51a3581d79f25b54d84dde6c2 Mon Sep 17 00:00:00 2001 From: ArTombado Date: Sat, 2 Oct 2021 09:46:46 -0300 Subject: [PATCH 220/346] Changed dev ports. --- nano/lib/config.hpp | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/nano/lib/config.hpp b/nano/lib/config.hpp index 792055f407..62628e2e20 100644 --- a/nano/lib/config.hpp +++ b/nano/lib/config.hpp @@ -65,10 +65,10 @@ class network_constants // A representative is classified as principal based on its weight and this factor principal_weight_factor = 1000; // 0.1% - default_node_port = is_live_network () ? 7071 : is_beta_network () ? 54000 : 44000; - default_rpc_port = is_live_network () ? 7072 : is_beta_network () ? 55000 : 45000; - default_ipc_port = is_live_network () ? 7073 : is_beta_network () ? 56000 : 46000; - default_websocket_port = is_live_network () ? 7074 : is_beta_network () ? 57000 : 47000; + default_node_port = is_live_network () ? 7071 : is_beta_network () ? 54000 : 40000; + default_rpc_port = is_live_network () ? 7072 : is_beta_network () ? 55000 : 41000; + default_ipc_port = is_live_network () ? 7073 : is_beta_network () ? 56000 : 42000; + default_websocket_port = is_live_network () ? 7074 : is_beta_network () ? 57000 : 43000; request_interval_ms = is_test_network () ? (is_sanitizer_build ? 100 : 20) : 500; } From 1e8c0416577e4902e30d6cf0475ada6500f1d870 Mon Sep 17 00:00:00 2001 From: dsiganos Date: Sun, 3 Oct 2021 13:36:51 +0100 Subject: [PATCH 221/346] Minor improvements to slow_test (#3487) --- nano/slow_test/node.cpp | 18 +++++++++++++----- 1 file changed, 13 insertions(+), 5 deletions(-) diff --git a/nano/slow_test/node.cpp b/nano/slow_test/node.cpp index 1af73d1e59..061eae1cdc 100644 --- a/nano/slow_test/node.cpp +++ b/nano/slow_test/node.cpp @@ -124,6 +124,12 @@ TEST (ledger, deep_account_compute) } } +/* + * This test case creates a node and a wallet primed with the genesis account credentials. + * Then it spawns 'num_of_threads' threads, each doing 'num_of_sends' async sends + * of 1000 raw each time. The test is considered a success, if the balance of the genesis account + * reduces by 'num_of_threads * num_of_sends * 1000'. + */ TEST (wallet, multithreaded_send_async) { std::vector threads; @@ -133,10 +139,12 @@ TEST (wallet, multithreaded_send_async) auto wallet_l (system.wallet (0)); wallet_l->insert_adhoc (nano::dev::genesis_key.prv); wallet_l->insert_adhoc (key.prv); - for (auto i (0); i < 20; ++i) + int num_of_threads = 20; + int num_of_sends = 1000; + for (auto i (0); i < num_of_threads; ++i) { - threads.push_back (boost::thread ([wallet_l, &key] () { - for (auto i (0); i < 1000; ++i) + threads.push_back (boost::thread ([wallet_l, &key, num_of_threads, num_of_sends] () { + for (auto i (0); i < num_of_sends; ++i) { wallet_l->send_async (nano::dev::genesis_key.pub, key.pub, 1000, [] (std::shared_ptr const & block_a) { ASSERT_FALSE (block_a == nullptr); @@ -145,7 +153,7 @@ TEST (wallet, multithreaded_send_async) } })); } - ASSERT_TIMELY (1000s, system.nodes[0]->balance (nano::dev::genesis_key.pub) == (nano::dev::constants.genesis_amount - 20 * 1000 * 1000)); + ASSERT_TIMELY (1000s, system.nodes[0]->balance (nano::dev::genesis_key.pub) == (nano::dev::constants.genesis_amount - num_of_threads * num_of_sends * 1000)); } for (auto i (threads.begin ()), n (threads.end ()); i != n; ++i) { @@ -394,7 +402,7 @@ TEST (store, unchecked_load) auto & node (*system.nodes[0]); auto block (std::make_shared (0, 0, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); constexpr auto num_unchecked = 1000000; - for (auto i (0); i < 1000000; ++i) + for (auto i (0); i < num_unchecked; ++i) { auto transaction (node.store.tx_begin_write ()); node.store.unchecked.put (transaction, i, block); From 485e9943b45210abdfdfd097249c5c9631896b82 Mon Sep 17 00:00:00 2001 From: dsiganos Date: Wed, 6 Oct 2021 14:57:06 +0100 Subject: [PATCH 222/346] Comment on_connection_requeue_delayed (#3492) --- nano/node/socket.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/nano/node/socket.cpp b/nano/node/socket.cpp index ee4f9341f5..b4f39c3127 100644 --- a/nano/node/socket.cpp +++ b/nano/node/socket.cpp @@ -305,6 +305,9 @@ void nano::server_socket::on_connection (std::function const &, boost::system::error_code const &)> callback_a) { auto this_l (std::static_pointer_cast (shared_from_this ())); From 1eefcaf70da5dd9b1f8e05f31ffd17478c827b2c Mon Sep 17 00:00:00 2001 From: theohax <81556890+theohax@users.noreply.github.com> Date: Wed, 6 Oct 2021 19:34:48 +0300 Subject: [PATCH 223/346] Refer to empty/null accounts as nano::account{nullptr} (#3388) * Introduce null accounts as nano::account{nullptr} * Fix formatting * Default nano::account constructor to nano::account{0} * Fix formatting * Introduce nano::public_key::null() method instead of std::nullptr_t constructor * Fix formatting * Address code review #3 * Last code review addressing * Fix formatting * Address code review #4 --- nano/core_test/active_transactions.cpp | 4 +- nano/core_test/block_store.cpp | 12 ++-- nano/core_test/ledger.cpp | 6 +- nano/core_test/network.cpp | 2 +- nano/core_test/node.cpp | 11 ++++ nano/core_test/system.cpp | 2 +- nano/core_test/wallet.cpp | 4 +- nano/lib/blocks.cpp | 25 ++++++-- nano/lib/blocks.hpp | 2 +- nano/lib/numbers.cpp | 26 ++++++++ nano/lib/numbers.hpp | 10 +++- nano/lib/walletconfig.hpp | 2 +- nano/nano_node/entry.cpp | 4 +- nano/node/active_transactions.cpp | 8 +-- nano/node/active_transactions.hpp | 2 +- nano/node/bootstrap/bootstrap.hpp | 2 +- nano/node/bootstrap/bootstrap_attempt.cpp | 4 +- nano/node/bootstrap/bootstrap_bulk_pull.cpp | 2 +- nano/node/bootstrap/bootstrap_frontier.cpp | 12 ++-- nano/node/bootstrap/bootstrap_legacy.hpp | 2 +- nano/node/bootstrap/bootstrap_server.hpp | 2 +- nano/node/common.cpp | 3 +- nano/node/common.hpp | 2 +- nano/node/election.cpp | 8 +-- nano/node/ipc/action_handler.cpp | 3 +- nano/node/ipc/ipc_broker.cpp | 3 +- nano/node/json_handler.cpp | 18 +++--- nano/node/node.cpp | 2 +- nano/node/nodeconfig.cpp | 4 +- nano/node/repcrawler.hpp | 2 +- nano/node/wallet.cpp | 8 +-- nano/node/websocket.cpp | 9 +-- nano/rpc_test/rpc.cpp | 13 ++-- nano/secure/common.cpp | 20 +++++-- nano/secure/common.hpp | 63 ++++++++++---------- nano/secure/ledger.cpp | 8 +-- nano/secure/store/frontier_store_partial.hpp | 2 +- nano/secure/versioning.hpp | 6 +- 38 files changed, 195 insertions(+), 123 deletions(-) diff --git a/nano/core_test/active_transactions.cpp b/nano/core_test/active_transactions.cpp index 142da6b554..555cc9ab6e 100644 --- a/nano/core_test/active_transactions.cpp +++ b/nano/core_test/active_transactions.cpp @@ -50,7 +50,7 @@ TEST (active_transactions, confirm_active) nano::lock_guard guard (node2.rep_crawler.probable_reps_mutex); node2.rep_crawler.probable_reps.emplace (nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount, *peers.begin ()); } - ASSERT_TIMELY (5s, election->votes ().size () != 1); // Votes were inserted (except for not_an_account) + ASSERT_TIMELY (5s, election->votes ().size () != 1); // Votes were inserted (except for the null account) auto confirm_req_count (election->confirmation_request_count.load ()); // At least one confirmation request ASSERT_GT (confirm_req_count, 0u); @@ -62,7 +62,7 @@ TEST (active_transactions, confirm_active) ASSERT_TIMELY (10s, node2.ledger.cache.cemented_count == 2 && node2.active.empty ()); // At least one more confirmation request ASSERT_GT (election->confirmation_request_count, confirm_req_count); - // Blocks were cleared (except for not_an_account) + // Blocks were cleared (except for the null account) ASSERT_EQ (1, election->blocks ().size ()); } } diff --git a/nano/core_test/block_store.cpp b/nano/core_test/block_store.cpp index 0e4411b665..f4529dc7db 100644 --- a/nano/core_test/block_store.cpp +++ b/nano/core_test/block_store.cpp @@ -523,7 +523,7 @@ TEST (block_store, frontier_retrieval) nano::logger_mt logger; auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); - nano::account account1 (0); + nano::account account1{}; nano::account_info info1 (0, 0, 0, 0, 0, 0, nano::epoch::epoch_0); auto transaction (store->tx_begin_write ()); store->confirmation_height.put (transaction, account1, { 0, nano::block_hash (0) }); @@ -538,7 +538,7 @@ TEST (block_store, one_account) nano::logger_mt logger; auto store = nano::make_store (logger, nano::unique_path (), nano::dev::constants); ASSERT_TRUE (!store->init_error ()); - nano::account account (0); + nano::account account{}; nano::block_hash hash (0); auto transaction (store->tx_begin_write ()); store->confirmation_height.put (transaction, account, { 20, nano::block_hash (15) }); @@ -783,7 +783,7 @@ TEST (block_store, large_iteration) store->account.put (transaction, account, nano::account_info ()); } std::unordered_set accounts2; - nano::account previous (0); + nano::account previous{}; auto transaction (store->tx_begin_read ()); for (auto i (store->account.begin (transaction, 0)), n (store->account.end ()); i != n; ++i) { @@ -1874,9 +1874,9 @@ TEST (block_store, confirmation_height) nano::logger_mt logger; auto store = nano::make_store (logger, path, nano::dev::constants); - nano::account account1 (0); - nano::account account2 (1); - nano::account account3 (2); + nano::account account1{}; + nano::account account2{ 1 }; + nano::account account3{ 2 }; nano::block_hash cemented_frontier1 (3); nano::block_hash cemented_frontier2 (4); nano::block_hash cemented_frontier3 (5); diff --git a/nano/core_test/ledger.cpp b/nano/core_test/ledger.cpp index 6cb0bdd8a6..357249df54 100644 --- a/nano/core_test/ledger.cpp +++ b/nano/core_test/ledger.cpp @@ -1525,13 +1525,13 @@ TEST (ledger, block_destination_source) ASSERT_TRUE (ledger.block_source (transaction, block1).is_zero ()); ASSERT_EQ (nano::dev::genesis->account (), ledger.block_destination (transaction, block2)); ASSERT_TRUE (ledger.block_source (transaction, block2).is_zero ()); - ASSERT_TRUE (ledger.block_destination (transaction, block3).is_zero ()); + ASSERT_TRUE (ledger.block_destination (transaction, block3) == nullptr); ASSERT_EQ (block2.hash (), ledger.block_source (transaction, block3)); ASSERT_EQ (dest.pub, ledger.block_destination (transaction, block4)); ASSERT_TRUE (ledger.block_source (transaction, block4).is_zero ()); ASSERT_EQ (nano::dev::genesis->account (), ledger.block_destination (transaction, block5)); ASSERT_TRUE (ledger.block_source (transaction, block5).is_zero ()); - ASSERT_TRUE (ledger.block_destination (transaction, block6).is_zero ()); + ASSERT_TRUE (ledger.block_destination (transaction, block6) == nullptr); ASSERT_EQ (block5.hash (), ledger.block_source (transaction, block6)); } @@ -2411,7 +2411,7 @@ TEST (ledger, epoch_blocks_fork) store->initialize (transaction, ledger.cache); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::keypair destination; - nano::send_block send1 (nano::dev::genesis->hash (), nano::account (0), nano::dev::constants.genesis_amount, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); + nano::send_block send1 (nano::dev::genesis->hash (), nano::account{}, nano::dev::constants.genesis_amount, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::progress, ledger.process (transaction, send1).code); nano::state_block epoch1 (nano::dev::genesis->account (), nano::dev::genesis->hash (), nano::dev::genesis->account (), nano::dev::constants.genesis_amount, ledger.epoch_link (nano::epoch::epoch_1), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); ASSERT_EQ (nano::process_result::fork, ledger.process (transaction, epoch1).code); diff --git a/nano/core_test/network.cpp b/nano/core_test/network.cpp index e5bfd2cdb9..8dda64b817 100644 --- a/nano/core_test/network.cpp +++ b/nano/core_test/network.cpp @@ -797,7 +797,7 @@ TEST (tcp_listener, tcp_node_id_handshake) ASSERT_TIMELY (5s, write_done); - boost::optional> response_zero (std::make_pair (nano::account (0), nano::signature (0))); + boost::optional> response_zero (std::make_pair (nano::account{}, nano::signature (0))); nano::node_id_handshake node_id_handshake_response{ nano::dev::network_params.network, boost::none, response_zero }; auto output (node_id_handshake_response.to_bytes ()); std::atomic done (false); diff --git a/nano/core_test/node.cpp b/nano/core_test/node.cpp index 0180db06af..edd90a3c4a 100644 --- a/nano/core_test/node.cpp +++ b/nano/core_test/node.cpp @@ -20,6 +20,17 @@ namespace void add_required_children_node_config_tree (nano::jsonconfig & tree); } +TEST (node, null_account) +{ + const auto & null_account = nano::account::null (); + ASSERT_TRUE (null_account == nullptr); + ASSERT_FALSE (null_account != nullptr); + + nano::account default_account{}; + ASSERT_FALSE (default_account == nullptr); + ASSERT_TRUE (default_account != nullptr); +} + TEST (node, stop) { nano::system system (1); diff --git a/nano/core_test/system.cpp b/nano/core_test/system.cpp index fd129c8904..4854fbd73f 100644 --- a/nano/core_test/system.cpp +++ b/nano/core_test/system.cpp @@ -106,7 +106,7 @@ TEST (system, DISABLED_generate_send_new) // This indirectly waits for online weight to stabilize, required to prevent intermittent failures ASSERT_TIMELY (5s, node1.wallets.reps ().voting > 0); system.generate_send_new (node1, accounts); - nano::account new_account (0); + nano::account new_account{}; { auto transaction (node1.wallets.tx_begin_read ()); auto iterator2 (system.wallet (0)->store.begin (transaction)); diff --git a/nano/core_test/wallet.cpp b/nano/core_test/wallet.cpp index 295e02624b..010b135cbb 100644 --- a/nano/core_test/wallet.cpp +++ b/nano/core_test/wallet.cpp @@ -335,7 +335,7 @@ TEST (wallet, rekey) TEST (account, encode_zero) { - nano::account number0 (0); + nano::account number0{}; std::string str0; number0.encode_account (str0); @@ -367,7 +367,7 @@ TEST (account, encode_all) TEST (account, encode_fail) { - nano::account number0 (0); + nano::account number0{}; std::string str0; number0.encode_account (str0); str0[16] ^= 1; diff --git a/nano/lib/blocks.cpp b/nano/lib/blocks.cpp index 8b6d319c6b..28996148a0 100644 --- a/nano/lib/blocks.cpp +++ b/nano/lib/blocks.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include @@ -151,8 +152,8 @@ bool nano::block::has_sideband () const nano::account const & nano::block::representative () const { - static nano::account rep{ 0 }; - return rep; + static nano::account representative{}; + return representative; } nano::block_hash const & nano::block::source () const @@ -163,7 +164,7 @@ nano::block_hash const & nano::block::source () const nano::account const & nano::block::destination () const { - static nano::account destination{ 0 }; + static nano::account destination{}; return destination; } @@ -175,7 +176,7 @@ nano::link const & nano::block::link () const nano::account const & nano::block::account () const { - static nano::account account{ 0 }; + static nano::account account{}; return account; } @@ -363,6 +364,8 @@ nano::send_block::send_block (nano::block_hash const & previous_a, nano::account signature (nano::sign_message (prv_a, pub_a, hash ())), work (work_a) { + debug_assert (destination_a != nullptr); + debug_assert (pub_a != nullptr); } nano::send_block::send_block (bool & error_a, nano::stream & stream_a) : @@ -524,13 +527,18 @@ nano::open_block::open_block (nano::block_hash const & source_a, nano::account c signature (nano::sign_message (prv_a, pub_a, hash ())), work (work_a) { - debug_assert (!representative_a.is_zero ()); + debug_assert (representative_a != nullptr); + debug_assert (account_a != nullptr); + debug_assert (pub_a != nullptr); } nano::open_block::open_block (nano::block_hash const & source_a, nano::account const & representative_a, nano::account const & account_a, std::nullptr_t) : hashables (source_a, representative_a, account_a), work (0) { + debug_assert (representative_a != nullptr); + debug_assert (account_a != nullptr); + signature.clear (); } @@ -787,6 +795,8 @@ nano::change_block::change_block (nano::block_hash const & previous_a, nano::acc signature (nano::sign_message (prv_a, pub_a, hash ())), work (work_a) { + debug_assert (representative_a != nullptr); + debug_assert (pub_a != nullptr); } nano::change_block::change_block (bool & error_a, nano::stream & stream_a) : @@ -1060,6 +1070,10 @@ nano::state_block::state_block (nano::account const & account_a, nano::block_has signature (nano::sign_message (prv_a, pub_a, hash ())), work (work_a) { + debug_assert (account_a != nullptr); + debug_assert (representative_a != nullptr); + debug_assert (link_a.as_account () != nullptr); + debug_assert (pub_a != nullptr); } nano::state_block::state_block (bool & error_a, nano::stream & stream_a) : @@ -1505,6 +1519,7 @@ nano::receive_block::receive_block (nano::block_hash const & previous_a, nano::b signature (nano::sign_message (prv_a, pub_a, hash ())), work (work_a) { + debug_assert (pub_a != nullptr); } nano::receive_block::receive_block (bool & error_a, nano::stream & stream_a) : diff --git a/nano/lib/blocks.hpp b/nano/lib/blocks.hpp index b3412f479d..5a5b875e84 100644 --- a/nano/lib/blocks.hpp +++ b/nano/lib/blocks.hpp @@ -64,7 +64,7 @@ class block_sideband final bool deserialize (nano::stream &, nano::block_type); static size_t size (nano::block_type); nano::block_hash successor{ 0 }; - nano::account account{ 0 }; + nano::account account{}; nano::amount balance{ 0 }; uint64_t height{ 0 }; uint64_t timestamp{ 0 }; diff --git a/nano/lib/numbers.cpp b/nano/lib/numbers.cpp index 2798cc96be..e6206aa512 100644 --- a/nano/lib/numbers.cpp +++ b/nano/lib/numbers.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include #include @@ -61,6 +62,16 @@ std::string nano::public_key::to_account () const return result; } +nano::public_key::public_key () : + uint256_union{ 0 } +{ +} + +const nano::public_key & nano::public_key::null () +{ + return nano::hardened_constants::get ().not_an_account; +} + std::string nano::public_key::to_node_id () const { return to_account ().replace (0, 4, "node"); @@ -781,6 +792,11 @@ std::string nano::uint128_union::to_string_dec () const return result; } +nano::hash_or_account::hash_or_account () : + account{} +{ +} + nano::hash_or_account::hash_or_account (uint64_t value_a) : raw (value_a) { @@ -939,6 +955,16 @@ nano::public_key::operator nano::hash_or_account const & () const return reinterpret_cast (*this); } +bool nano::public_key::operator== (std::nullptr_t) const +{ + return bytes == null ().bytes; +} + +bool nano::public_key::operator!= (std::nullptr_t) const +{ + return !(*this == nullptr); +} + nano::block_hash::operator nano::link const & () const { return reinterpret_cast (*this); diff --git a/nano/lib/numbers.hpp b/nano/lib/numbers.hpp index 3e2e64eb0c..fc9542110a 100644 --- a/nano/lib/numbers.hpp +++ b/nano/lib/numbers.hpp @@ -115,6 +115,10 @@ class public_key final : public uint256_union public: using uint256_union::uint256_union; + public_key (); + + static const public_key & null (); + std::string to_node_id () const; bool decode_node_id (std::string const & source_a); void encode_account (std::string &) const; @@ -124,6 +128,10 @@ class public_key final : public uint256_union operator nano::link const & () const; operator nano::root const & () const; operator nano::hash_or_account const & () const; + bool operator== (std::nullptr_t) const; + bool operator!= (std::nullptr_t) const; + using uint256_union::operator==; + using uint256_union::operator!=; }; class wallet_id : public uint256_union @@ -137,7 +145,7 @@ using account = public_key; class hash_or_account { public: - hash_or_account () = default; + hash_or_account (); hash_or_account (uint64_t value_a); bool is_zero () const; diff --git a/nano/lib/walletconfig.hpp b/nano/lib/walletconfig.hpp index 68f9fcc1df..6a04206a90 100644 --- a/nano/lib/walletconfig.hpp +++ b/nano/lib/walletconfig.hpp @@ -19,6 +19,6 @@ class wallet_config final nano::error serialize_toml (nano::tomlconfig & toml_a) const; nano::error deserialize_toml (nano::tomlconfig & toml_a); nano::wallet_id wallet; - nano::account account{ 0 }; + nano::account account{}; }; } diff --git a/nano/nano_node/entry.cpp b/nano/nano_node/entry.cpp index 143667299f..593a68695c 100644 --- a/nano/nano_node/entry.cpp +++ b/nano/nano_node/entry.cpp @@ -1459,7 +1459,7 @@ int main (int argc, char * const * argv) } } uint64_t previous_timestamp (0); - nano::account calculated_representative (0); + nano::account calculated_representative{}; while (!hash.is_zero () && block != nullptr) { ++block_count; @@ -1704,7 +1704,7 @@ int main (int argc, char * const * argv) else { // Check if pending destination is correct - nano::account destination (0); + nano::account destination{}; bool previous_pruned = node->ledger.pruning && node->store.pruned.exists (transaction, block->previous ()); if (previous_pruned) { diff --git a/nano/node/active_transactions.cpp b/nano/node/active_transactions.cpp index a2e83e36f6..b296c024b0 100644 --- a/nano/node/active_transactions.cpp +++ b/nano/node/active_transactions.cpp @@ -180,11 +180,11 @@ void nano::active_transactions::block_cemented_callback (std::shared_ptrhash (), account, amount, is_state_send, is_state_epoch, pending_account); node.observers.blocks.notify (nano::election_status{ block_a, 0, 0, std::chrono::duration_cast (std::chrono::system_clock::now ().time_since_epoch ()), std::chrono::duration_values::zero (), 0, 1, 0, nano::election_status_type::inactive_confirmation_height }, {}, account, amount, is_state_send, is_state_epoch); } @@ -206,11 +206,11 @@ void nano::active_transactions::block_cemented_callback (std::shared_ptrlink ().is_zero () ? block_a->destination () : block_a->link ().as_account ()); node.receive_confirmed (transaction, hash, destination); - nano::account account (0); + nano::account account{}; nano::uint128_t amount (0); bool is_state_send (false); bool is_state_epoch (false); - nano::account pending_account (0); + nano::account pending_account{}; node.process_confirmed_data (transaction, block_a, hash, account, amount, is_state_send, is_state_epoch, pending_account); election_lk.lock (); election->status.type = *election_status_type; diff --git a/nano/node/active_transactions.hpp b/nano/node/active_transactions.hpp index e4432b3afa..4fe84eb34d 100644 --- a/nano/node/active_transactions.hpp +++ b/nano/node/active_transactions.hpp @@ -279,7 +279,7 @@ class active_transactions final void confirm_expired_frontiers_pessimistically (nano::transaction const &, uint64_t, uint64_t &); void frontiers_confirmation (nano::unique_lock &); bool insert_election_from_frontiers_confirmation (std::shared_ptr const &, nano::account const &, nano::uint128_t, nano::election_behavior); - nano::account next_frontier_account{ 0 }; + nano::account next_frontier_account{}; std::chrono::steady_clock::time_point next_frontier_check{ std::chrono::steady_clock::now () }; constexpr static size_t max_active_elections_frontier_insertion{ 1000 }; prioritize_num_uncemented priority_wallet_cementable_frontiers; diff --git a/nano/node/bootstrap/bootstrap.hpp b/nano/node/bootstrap/bootstrap.hpp index 4d70bab086..b26d55f98e 100644 --- a/nano/node/bootstrap/bootstrap.hpp +++ b/nano/node/bootstrap/bootstrap.hpp @@ -82,7 +82,7 @@ class bootstrap_initiator final explicit bootstrap_initiator (nano::node &); ~bootstrap_initiator (); void bootstrap (nano::endpoint const &, bool add_to_peers = true, std::string id_a = ""); - void bootstrap (bool force = false, std::string id_a = "", uint32_t const frontiers_age_a = std::numeric_limits::max (), nano::account const & start_account_a = nano::account (0)); + void bootstrap (bool force = false, std::string id_a = "", uint32_t const frontiers_age_a = std::numeric_limits::max (), nano::account const & start_account_a = nano::account{}); bool bootstrap_lazy (nano::hash_or_account const &, bool force = false, bool confirmed = true, std::string id_a = ""); void bootstrap_wallet (std::deque &); void run_bootstrap (); diff --git a/nano/node/bootstrap/bootstrap_attempt.cpp b/nano/node/bootstrap/bootstrap_attempt.cpp index eac672c1d3..801c7f0a8e 100644 --- a/nano/node/bootstrap/bootstrap_attempt.cpp +++ b/nano/node/bootstrap/bootstrap_attempt.cpp @@ -23,9 +23,9 @@ nano::bootstrap_attempt::bootstrap_attempt (std::shared_ptr const & { if (id.empty ()) { - nano::random_constants constants; - id = constants.random_128.to_string (); + id = nano::hardened_constants::get ().random_128.to_string (); } + node->logger.always_log (boost::str (boost::format ("Starting %1% bootstrap attempt with ID %2%") % mode_text () % id)); node->bootstrap_initiator.notify_listeners (true); if (node->websocket_server) diff --git a/nano/node/bootstrap/bootstrap_bulk_pull.cpp b/nano/node/bootstrap/bootstrap_bulk_pull.cpp index 9f6178d3f7..0f87250f97 100644 --- a/nano/node/bootstrap/bootstrap_bulk_pull.cpp +++ b/nano/node/bootstrap/bootstrap_bulk_pull.cpp @@ -21,7 +21,7 @@ nano::pull_info::pull_info (nano::hash_or_account const & account_or_head_a, nan nano::bulk_pull_client::bulk_pull_client (std::shared_ptr const & connection_a, std::shared_ptr const & attempt_a, nano::pull_info const & pull_a) : connection (connection_a), attempt (attempt_a), - known_account (0), + known_account{}, pull (pull_a), pull_blocks (0), unexpected_count (0) diff --git a/nano/node/bootstrap/bootstrap_frontier.cpp b/nano/node/bootstrap/bootstrap_frontier.cpp index c15d791348..277ef0da5a 100644 --- a/nano/node/bootstrap/bootstrap_frontier.cpp +++ b/nano/node/bootstrap/bootstrap_frontier.cpp @@ -224,11 +224,11 @@ void nano::frontier_req_client::next () nano::account const & account (i->first); accounts.emplace_back (account, info.head); } - /* If loop breaks before max_size, then accounts_end () is reached - Add empty record */ + + /* If loop breaks before max_size, then accounts_end () is reached. Add empty record */ if (accounts.size () != max_size) { - accounts.emplace_back (nano::account (0), nano::block_hash (0)); + accounts.emplace_back (nano::account{}, nano::block_hash (0)); } } // Retrieving accounts from deque @@ -360,11 +360,11 @@ void nano::frontier_req_server::next () } } } - /* If loop breaks before max_size, then accounts_end () is reached - Add empty record to finish frontier_req_server */ + + /* If loop breaks before max_size, then accounts_end () is reached. Add empty record to finish frontier_req_server */ if (accounts.size () != max_size) { - accounts.emplace_back (nano::account (0), nano::block_hash (0)); + accounts.emplace_back (nano::account{}, nano::block_hash (0)); } } // Retrieving accounts from deque diff --git a/nano/node/bootstrap/bootstrap_legacy.hpp b/nano/node/bootstrap/bootstrap_legacy.hpp index 0abe0f901c..7387556e43 100644 --- a/nano/node/bootstrap/bootstrap_legacy.hpp +++ b/nano/node/bootstrap/bootstrap_legacy.hpp @@ -33,7 +33,7 @@ class bootstrap_attempt_legacy : public bootstrap_attempt std::weak_ptr push; std::deque frontier_pulls; std::vector> bulk_push_targets; - nano::account start_account{ 0 }; + nano::account start_account{}; std::atomic account_count{ 0 }; uint32_t frontiers_age; }; diff --git a/nano/node/bootstrap/bootstrap_server.hpp b/nano/node/bootstrap/bootstrap_server.hpp index 1b6b4a3e2f..58ee8958a4 100644 --- a/nano/node/bootstrap/bootstrap_server.hpp +++ b/nano/node/bootstrap/bootstrap_server.hpp @@ -66,7 +66,7 @@ class bootstrap_server final : public std::enable_shared_from_this stopped{ false }; // Remote enpoint used to remove response channel even after socket closing nano::tcp_endpoint remote_endpoint{ boost::asio::ip::address_v6::any (), 0 }; - nano::account remote_node_id{ 0 }; + nano::account remote_node_id{}; std::chrono::steady_clock::time_point last_telemetry_req{ std::chrono::steady_clock::time_point () }; }; } diff --git a/nano/node/common.cpp b/nano/node/common.cpp index 11358d1bfd..4dda2bed4d 100644 --- a/nano/node/common.cpp +++ b/nano/node/common.cpp @@ -23,14 +23,13 @@ std::chrono::seconds constexpr nano::telemetry_cache_cutoffs::live; uint64_t nano::ip_address_hash_raw (boost::asio::ip::address const & ip_a, uint16_t port) { - static nano::random_constants constants; debug_assert (ip_a.is_v6 ()); uint64_t result; nano::uint128_union address; address.bytes = ip_a.to_v6 ().to_bytes (); blake2b_state state; blake2b_init (&state, sizeof (result)); - blake2b_update (&state, constants.random_128.bytes.data (), constants.random_128.bytes.size ()); + blake2b_update (&state, nano::hardened_constants::get ().random_128.bytes.data (), nano::hardened_constants::get ().random_128.bytes.size ()); if (port != 0) { blake2b_update (&state, &port, sizeof (port)); diff --git a/nano/node/common.hpp b/nano/node/common.hpp index d3b5627e92..1b2739cd59 100644 --- a/nano/node/common.hpp +++ b/nano/node/common.hpp @@ -354,7 +354,7 @@ class telemetry_data { public: nano::signature signature{ 0 }; - nano::account node_id{ 0 }; + nano::account node_id{}; uint64_t block_count{ 0 }; uint64_t cemented_count{ 0 }; uint64_t unchecked_count{ 0 }; diff --git a/nano/node/election.cpp b/nano/node/election.cpp index e730f15796..22d3421baf 100644 --- a/nano/node/election.cpp +++ b/nano/node/election.cpp @@ -28,7 +28,7 @@ nano::election::election (nano::node & node_a, std::shared_ptr cons root (block_a->root ()), qualified_root (block_a->qualified_root ()) { - last_votes.emplace (node.network_params.random.not_an_account, nano::vote_info{ std::chrono::steady_clock::now (), 0, block_a->hash () }); + last_votes.emplace (nano::account::null (), nano::vote_info{ std::chrono::steady_clock::now (), 0, block_a->hash () }); last_blocks.emplace (block_a->hash (), block_a); if (node.config.enable_voting && node.wallets.reps ().voting > 0) { @@ -319,7 +319,7 @@ void nano::election::log_votes (nano::tally_t const & tally_a, std::string const } for (auto i (last_votes.begin ()), n (last_votes.end ()); i != n; ++i) { - if (i->first != node.network_params.random.not_an_account) + if (i->first != nullptr) { tally << boost::str (boost::format ("%1%%2% %3% %4%") % line_end % i->first.to_account () % std::to_string (i->second.timestamp) % i->second.hash.to_string ()); } @@ -459,7 +459,7 @@ size_t nano::election::insert_inactive_votes_cache (nano::inactive_cache_informa node.stats.add (nano::stat::type::election, nano::stat::detail::late_block_seconds, nano::stat::dir::in, delay.count (), true); } } - if (last_votes.size () > 1) // not_an_account + if (last_votes.size () > 1) // null account { // Even if no votes were in cache, they could be in the election confirm_if_quorum (lock); @@ -629,7 +629,7 @@ std::vector nano::election::votes_with_weight () co auto votes_l (votes ()); for (auto const & vote_l : votes_l) { - if (vote_l.first != node.network_params.random.not_an_account) + if (vote_l.first != nullptr) { auto amount (node.ledger.cache.rep_weights.representation_get (vote_l.first)); nano::vote_with_weight_info vote_info{ vote_l.first, vote_l.second.time, vote_l.second.timestamp, vote_l.second.hash, amount }; diff --git a/nano/node/ipc/action_handler.cpp b/nano/node/ipc/action_handler.cpp index 76086e737c..db191f77b2 100644 --- a/nano/node/ipc/action_handler.cpp +++ b/nano/node/ipc/action_handler.cpp @@ -11,11 +11,12 @@ namespace { nano::account parse_account (std::string const & account, bool & out_is_deprecated_format) { - nano::account result (0); + nano::account result{}; if (account.empty ()) { throw nano::error (nano::error_common::bad_account_number); } + if (result.decode_account (account)) { throw nano::error (nano::error_common::bad_account_number); diff --git a/nano/node/ipc/ipc_broker.cpp b/nano/node/ipc/ipc_broker.cpp index 77712bfc0a..9b3477c25d 100644 --- a/nano/node/ipc/ipc_broker.cpp +++ b/nano/node/ipc/ipc_broker.cpp @@ -144,7 +144,8 @@ void nano::ipc::broker::broadcast (std::shared_ptr if (itr->topic->options->all_local_accounts) { auto transaction_l (this->node.wallets.tx_begin_read ()); - nano::account source_l (0), destination_l (0); + nano::account source_l{}; + nano::account destination_l{}; auto decode_source_ok_l (!source_l.decode_account (state->account)); auto decode_destination_ok_l (!destination_l.decode_account (state->link_as_account)); (void)decode_source_ok_l; diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index 2e2e03cdcf..4d6ac1c3ab 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -235,7 +235,7 @@ bool nano::json_handler::wallet_account_impl (nano::transaction const & transact nano::account nano::json_handler::account_impl (std::string account_text, std::error_code ec_a) { - nano::account result (0); + nano::account result{}; if (!ec) { if (account_text.empty ()) @@ -671,7 +671,7 @@ void nano::json_handler::account_info () response_l.put ("representative", info.representative.to_account ()); if (include_confirmed) { - nano::account confirmed_representative{ 0 }; + nano::account confirmed_representative{}; if (confirmed_frontier_block) { confirmed_representative = confirmed_frontier_block->representative (); @@ -1053,7 +1053,7 @@ void nano::json_handler::available_supply () auto genesis_balance (node.balance (node.network_params.ledger.genesis->account ())); // Cold storage genesis auto landing_balance (node.balance (nano::account ("059F68AAB29DE0D3A27443625C7EA9CDDB6517A8B76FE37727EF6A4D76832AD5"))); // Active unavailable account auto faucet_balance (node.balance (nano::account ("8E319CE6F3025E5B2DF66DA7AB1467FE48F1679C13DD43BFDB29FA2E9FC40D3B"))); // Faucet account - auto burned_balance ((node.balance_pending (nano::account (0), false)).second); // Burning 0 account + auto burned_balance ((node.balance_pending (nano::account{}, false)).second); // Burning 0 account auto available (nano::dev::constants.genesis_amount - genesis_balance - landing_balance - faucet_balance - burned_balance); response_l.put ("available", available.convert_to ()); response_errors (); @@ -1360,19 +1360,19 @@ void nano::json_handler::block_create () ec = nano::error_common::bad_wallet_number; } } - nano::account account (0); + nano::account account{}; boost::optional account_text (request.get_optional ("account")); if (!ec && account_text.is_initialized ()) { account = account_impl (account_text.get ()); } - nano::account representative (0); + nano::account representative{}; boost::optional representative_text (request.get_optional ("representative")); if (!ec && representative_text.is_initialized ()) { representative = account_impl (representative_text.get (), nano::error_rpc::bad_representative_number); } - nano::account destination (0); + nano::account destination{}; boost::optional destination_text (request.get_optional ("destination")); if (!ec && destination_text.is_initialized ()) { @@ -1739,7 +1739,7 @@ void nano::json_handler::bootstrap_any () const bool force = request.get ("force", false); if (!node.flags.disable_legacy_bootstrap) { - nano::account start_account (0); + nano::account start_account{}; boost::optional account_text (request.get_optional ("account")); if (account_text.is_initialized ()) { @@ -2095,7 +2095,7 @@ void nano::json_handler::delegators () auto threshold (threshold_optional_impl ()); auto start_account_text (request.get_optional ("start")); - nano::account start_account (0); + nano::account start_account{}; if (!ec && start_account_text.is_initialized ()) { start_account = account_impl (start_account_text.get ()); @@ -2622,7 +2622,7 @@ void nano::json_handler::ledger () auto threshold (threshold_optional_impl ()); if (!ec) { - nano::account start (0); + nano::account start{}; boost::optional account_text (request.get_optional ("account")); if (account_text.is_initialized ()) { diff --git a/nano/node/node.cpp b/nano/node/node.cpp index c3767f4625..743e9d27ac 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -1481,7 +1481,7 @@ void nano::node::epoch_upgrader_impl (nano::raw_key const & prv_a, nano::epoch e class account_upgrade_item final { public: - nano::account account{ 0 }; + nano::account account{}; uint64_t modified{ 0 }; }; class account_tag diff --git a/nano/node/nodeconfig.cpp b/nano/node/nodeconfig.cpp index 2d26bb83ba..aa68fa4aa2 100644 --- a/nano/node/nodeconfig.cpp +++ b/nano/node/nodeconfig.cpp @@ -248,7 +248,7 @@ nano::error nano::node_config::deserialize_toml (nano::tomlconfig & toml) { preconfigured_representatives.clear (); toml.array_entries_required ("preconfigured_representatives", [this, &toml] (std::string entry) { - nano::account representative (0); + nano::account representative{}; if (representative.decode_account (entry)) { toml.get_error ().set ("Invalid representative account: " + entry); @@ -583,7 +583,7 @@ nano::error nano::node_config::deserialize_json (bool & upgraded_a, nano::jsonco auto preconfigured_representatives_l (json.get_required_child ("preconfigured_representatives")); preconfigured_representatives.clear (); preconfigured_representatives_l.array_entries ([this, &json] (std::string entry) { - nano::account representative (0); + nano::account representative{}; if (representative.decode_account (entry)) { json.get_error ().set ("Invalid representative account: " + entry); diff --git a/nano/node/repcrawler.hpp b/nano/node/repcrawler.hpp index cfe7fb9821..7586945a50 100644 --- a/nano/node/repcrawler.hpp +++ b/nano/node/repcrawler.hpp @@ -41,7 +41,7 @@ class representative { return account == other_a.account; } - nano::account account{ 0 }; + nano::account account{}; nano::amount weight{ 0 }; std::shared_ptr channel; std::chrono::steady_clock::time_point last_request{ std::chrono::steady_clock::time_point () }; diff --git a/nano/node/wallet.cpp b/nano/node/wallet.cpp index 2c4f36f773..7924aa2557 100644 --- a/nano/node/wallet.cpp +++ b/nano/node/wallet.cpp @@ -238,7 +238,7 @@ void nano::fan::value_set (nano::raw_key const & value_a) } // Wallet version number -nano::account const nano::wallet_store::version_special (0); +nano::account const nano::wallet_store::version_special{}; // Random number used to salt private key encryption nano::account const nano::wallet_store::salt_special (1); // Key used to encrypt wallet keys, encrypted itself by the user password @@ -714,7 +714,7 @@ bool nano::wallet::enter_password (nano::transaction const & transaction_a, std: nano::public_key nano::wallet::deterministic_insert (nano::transaction const & transaction_a, bool generate_work_a) { - nano::public_key key (0); + nano::public_key key{}; if (store.valid_password (transaction_a)) { key = store.deterministic_insert (transaction_a); @@ -735,7 +735,7 @@ nano::public_key nano::wallet::deterministic_insert (nano::transaction const & t nano::public_key nano::wallet::deterministic_insert (uint32_t const index, bool generate_work_a) { auto transaction (wallets.tx_begin_write ()); - nano::public_key key (0); + nano::public_key key{}; if (store.valid_password (transaction)) { key = store.deterministic_insert (transaction, index); @@ -756,7 +756,7 @@ nano::public_key nano::wallet::deterministic_insert (bool generate_work_a) nano::public_key nano::wallet::insert_adhoc (nano::raw_key const & key_a, bool generate_work_a) { - nano::public_key key (0); + nano::public_key key{}; auto transaction (wallets.tx_begin_write ()); if (store.valid_password (transaction)) { diff --git a/nano/node/websocket.cpp b/nano/node/websocket.cpp index 9f25f94432..92b23cc857 100644 --- a/nano/node/websocket.cpp +++ b/nano/node/websocket.cpp @@ -68,7 +68,7 @@ nano::websocket::confirmation_options::confirmation_options (boost::property_tre has_account_filtering_options = true; for (auto account_l : *accounts_l) { - nano::account result_l (0); + nano::account result_l{}; if (!result_l.decode_account (account_l.second.data ())) { // Do not insert the given raw data to keep old prefix support @@ -114,7 +114,8 @@ bool nano::websocket::confirmation_options::should_filter (nano::websocket::mess if (all_local_accounts) { auto transaction_l (wallets.tx_begin_read ()); - nano::account source_l (0), destination_l (0); + nano::account source_l{}; + nano::account destination_l{}; auto decode_source_ok_l (!source_l.decode_account (source_text_l)); auto decode_destination_ok_l (!destination_l.decode_account (destination_opt_l.get ())); (void)decode_source_ok_l; @@ -140,7 +141,7 @@ bool nano::websocket::confirmation_options::update (boost::property_tree::ptree this->has_account_filtering_options = true; for (auto const & account_l : accounts_text_a) { - nano::account result_l (0); + nano::account result_l{}; if (!result_l.decode_account (account_l.second.data ())) { // Re-encode to keep old prefix support @@ -197,7 +198,7 @@ nano::websocket::vote_options::vote_options (boost::property_tree::ptree const & { for (auto representative_l : *representatives_l) { - nano::account result_l (0); + nano::account result_l{}; if (!result_l.decode_account (representative_l.second.data ())) { // Do not insert the given raw data to keep old prefix support diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index 536dcfc9b8..2489782449 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -494,7 +494,7 @@ TEST (rpc, send_idempotent) request.put ("wallet", wallet); request.put ("action", "send"); request.put ("source", nano::dev::genesis_key.pub.to_account ()); - request.put ("destination", nano::account (0).to_account ()); + request.put ("destination", nano::account{}.to_account ()); request.put ("amount", (nano::dev::constants.genesis_amount - (nano::dev::constants.genesis_amount / 4)).convert_to ()); request.put ("id", "123abc"); auto response (wait_response (system, rpc, request)); @@ -710,7 +710,7 @@ TEST (rpc, wallet_representative_set_force) auto transaction (node->wallets.tx_begin_read ()); ASSERT_EQ (key.pub, node->wallets.items.begin ()->second->store.representative (transaction)); } - nano::account representative (0); + nano::account representative{}; while (representative != key.pub) { auto transaction (node->store.tx_begin_read ()); @@ -1007,7 +1007,7 @@ TEST (rpc, frontier) auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "frontiers"); - request.put ("account", nano::account (0).to_account ()); + request.put ("account", nano::account{}.to_account ()); request.put ("count", std::to_string (std::numeric_limits::max ())); auto response (wait_response (system, rpc, request)); auto & frontiers_node (response.get_child ("frontiers")); @@ -1045,7 +1045,7 @@ TEST (rpc, frontier_limited) auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; request.put ("action", "frontiers"); - request.put ("account", nano::account (0).to_account ()); + request.put ("account", nano::account{}.to_account ()); request.put ("count", std::to_string (100)); auto response (wait_response (system, rpc, request)); auto & frontiers_node (response.get_child ("frontiers")); @@ -1859,16 +1859,15 @@ TEST (rpc, pending_burn) { nano::system system; auto node = add_ipc_enabled_node (system); - nano::account burn (0); system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); - auto block1 (system.wallet (0)->send_action (nano::dev::genesis_key.pub, burn, 100)); + auto block1 (system.wallet (0)->send_action (nano::dev::genesis_key.pub, nano::dev::constants.burn_account, 100)); auto [rpc, rpc_ctx] = add_rpc (system, node); node->scheduler.flush (); ASSERT_TIMELY (5s, !node->active.active (*block1)); ASSERT_TIMELY (5s, node->ledger.cache.cemented_count == 2 && node->confirmation_height_processor.current ().is_zero () && node->confirmation_height_processor.awaiting_processing_size () == 0); boost::property_tree::ptree request; request.put ("action", "pending"); - request.put ("account", burn.to_account ()); + request.put ("account", nano::dev::constants.burn_account.to_account ()); request.put ("count", "100"); { auto response (wait_response (system, rpc, request)); diff --git a/nano/secure/common.cpp b/nano/secure/common.cpp index b4391594bf..879c8925a7 100644 --- a/nano/secure/common.cpp +++ b/nano/secure/common.cpp @@ -38,7 +38,7 @@ char const * dev_genesis_data = R"%%%({ "account": "xrb_3e3j5tkog48pnny9dmfzj1r16pg8t1e76dz5tmac6iq689wyjfpiij4txtdo", "work": "7b42a00ee91d5810", "signature": "ECDA914373A2F0CA1296475BAEE40500A7F0A7AD72A5A80C81D7FAB7F6C802B2CC7DB50F5DD0FB25B2EF11761FA7344A158DD5A700B21BD47DE5BD0F63153A02" - })%%%"; + })%%%"; char const * beta_genesis_data = R"%%%({ "type": "open", @@ -47,7 +47,7 @@ char const * beta_genesis_data = R"%%%({ "account": "nano_1betagoxpxwykx4kw86dnhosc8t3s7ix8eeentwkcg1hbpez1outjrcyg4n1", "work": "79d4e27dc873c6f2", "signature": "4BD7F96F9ED2721BCEE5EAED400EA50AD00524C629AE55E9AFF11220D2C1B00C3D4B3BB770BF67D4F8658023B677F91110193B6C101C2666931F57046A6DB806" - })%%%"; + })%%%"; char const * live_genesis_data = R"%%%({ "type": "open", @@ -56,7 +56,7 @@ char const * live_genesis_data = R"%%%({ "account": "xrb_3t6k35gi95xu6tergt6p69ck76ogmitsa8mnijtpxm9fkcm736xtoncuohr3", "work": "62f05417dd3fb691", "signature": "9F0C933C8ADE004D808EA1985FA746A7E95BA2A38F867640F53EC8F180BDFE9E2C1268DEAD7C2664F356E37ABA362BC58E46DBA03E523A7B5A19E4B6EB12BB02" - })%%%"; + })%%%"; std::string const test_genesis_data = nano::get_env_or_default ("NANO_TEST_GENESIS_BLOCK", R"%%%({ "type": "open", @@ -65,7 +65,7 @@ std::string const test_genesis_data = nano::get_env_or_default ("NANO_TEST_GENES "account": "nano_1jg8zygjg3pp5w644emqcbmjqpnzmubfni3kfe1s8pooeuxsw49fdq1mco9j", "work": "bc1ef279c1a34eb1", "signature": "15049467CAEE3EC768639E8E35792399B6078DA763DA4EBA8ECAD33B0EDC4AF2E7403893A5A602EB89B978DABEF1D6606BB00F3C0EE11449232B143B6E07170E" - })%%%"); + })%%%"); std::shared_ptr parse_block_from_genesis_data (std::string const & genesis_data_a) { @@ -115,7 +115,7 @@ nano::ledger_constants::ledger_constants (nano::work_thresholds & work, nano::ne : network_a == nano::networks::nano_test_network ? nano_test_genesis : nano_live_genesis), genesis_amount{ std::numeric_limits::max () }, - burn_account (0), + burn_account{}, nano_dev_final_votes_canary_account (dev_public_key_data), nano_beta_final_votes_canary_account (beta_canary_public_key_data), nano_live_final_votes_canary_account (live_canary_public_key_data), @@ -153,7 +153,15 @@ nano::ledger_constants::ledger_constants (nano::work_thresholds & work, nano::ne epochs.add (nano::epoch::epoch_2, epoch_v2_signer, epoch_link_v2); } -nano::random_constants::random_constants () +nano::hardened_constants & nano::hardened_constants::get () +{ + static hardened_constants instance{}; + return instance; +} + +nano::hardened_constants::hardened_constants () : + not_an_account{}, + random_128{} { nano::random_pool::generate_block (not_an_account.bytes.data (), not_an_account.bytes.size ()); nano::random_pool::generate_block (random_128.bytes.data (), random_128.bytes.size ()); diff --git a/nano/secure/common.hpp b/nano/secure/common.hpp index 10c678c9d9..d42d5d0f49 100644 --- a/nano/secure/common.hpp +++ b/nano/secure/common.hpp @@ -72,9 +72,9 @@ struct hash<::nano::root> namespace nano { /** - * A key pair. The private key is generated from the random pool, or passed in - * as a hex string. The public key is derived using ed25519. - */ + * A key pair. The private key is generated from the random pool, or passed in + * as a hex string. The public key is derived using ed25519. + */ class keypair { public: @@ -86,8 +86,8 @@ class keypair }; /** - * Latest information about an account - */ + * Latest information about an account + */ class account_info final { public: @@ -99,7 +99,7 @@ class account_info final size_t db_size () const; nano::epoch epoch () const; nano::block_hash head{ 0 }; - nano::account representative{ 0 }; + nano::account representative{}; nano::block_hash open_block{ 0 }; nano::amount balance{ 0 }; /** Seconds since posix epoch */ @@ -109,8 +109,8 @@ class account_info final }; /** - * Information on an uncollected send - */ + * Information on an uncollected send + */ class pending_info final { public: @@ -119,7 +119,7 @@ class pending_info final size_t db_size () const; bool deserialize (nano::stream &); bool operator== (nano::pending_info const &) const; - nano::account source{ 0 }; + nano::account source{}; nano::amount amount{ 0 }; nano::epoch epoch{ nano::epoch::epoch_0 }; }; @@ -131,7 +131,7 @@ class pending_key final bool deserialize (nano::stream &); bool operator== (nano::pending_key const &) const; nano::account const & key () const; - nano::account account{ 0 }; + nano::account account{}; nano::block_hash hash{ 0 }; }; @@ -141,19 +141,19 @@ class endpoint_key final endpoint_key () = default; /* - * @param address_a This should be in network byte order - * @param port_a This should be in host byte order - */ + * @param address_a This should be in network byte order + * @param port_a This should be in host byte order + */ endpoint_key (const std::array & address_a, uint16_t port_a); /* - * @return The ipv6 address in network byte order - */ + * @return The ipv6 address in network byte order + */ const std::array & address_bytes () const; /* - * @return The port in host byte order - */ + * @return The port in host byte order + */ uint16_t port () const; private: @@ -181,8 +181,8 @@ class unchecked_key final }; /** - * Tag for block signature verification result - */ + * Tag for block signature verification result + */ enum class signature_verification : uint8_t { unknown = 0, @@ -192,8 +192,8 @@ enum class signature_verification : uint8_t }; /** - * Information on an unchecked block - */ + * Information on an unchecked block + */ class unchecked_info final { public: @@ -202,7 +202,7 @@ class unchecked_info final void serialize (nano::stream &) const; bool deserialize (nano::stream &); std::shared_ptr block; - nano::account account{ 0 }; + nano::account account{}; /** Seconds since posix epoch */ uint64_t modified{ 0 }; nano::signature_verification verified{ nano::signature_verification::unknown }; @@ -214,7 +214,7 @@ class block_info final public: block_info () = default; block_info (nano::account const &, nano::amount const &); - nano::account account{ 0 }; + nano::account account{}; nano::amount balance{ 0 }; }; @@ -275,8 +275,8 @@ class vote final static const std::string hash_prefix; }; /** - * This class serves to find and return unique variants of a vote in order to minimize memory usage - */ + * This class serves to find and return unique variants of a vote in order to minimize memory usage + */ class vote_uniquer final { public: @@ -374,13 +374,17 @@ namespace dev extern std::shared_ptr & genesis; } -/** Constants which depend on random values (this class should never be used globally due to CryptoPP globals potentially not being initialized) */ -class random_constants +/** Constants which depend on random values (always used as singleton) */ +class hardened_constants { public: - random_constants (); + static hardened_constants & get (); + nano::account not_an_account; nano::uint128_union random_128; + +private: + hardened_constants (); }; /** Node related constants whose value depends on the active network */ @@ -442,7 +446,6 @@ class network_params nano::work_thresholds work; nano::network_constants network; nano::ledger_constants ledger; - nano::random_constants random; nano::voting_constants voting; nano::node_constants node; nano::portmapping_constants portmapping; @@ -457,7 +460,7 @@ enum class confirmation_height_mode }; /* Holds flags for various cacheable data. For most CLI operations caching is unnecessary - * (e.g getting the cemented block count) so it can be disabled for performance reasons. */ + * (e.g getting the cemented block count) so it can be disabled for performance reasons. */ class generate_cache { public: diff --git a/nano/secure/ledger.cpp b/nano/secure/ledger.cpp index eb97206d79..8d96206ccc 100644 --- a/nano/secure/ledger.cpp +++ b/nano/secure/ledger.cpp @@ -116,7 +116,7 @@ class rollback_visitor : public nano::block_visitor } auto balance (ledger.balance (transaction, block_a.hashables.previous)); auto is_send (block_a.hashables.balance < balance); - nano::account representative{ 0 }; + nano::account representative{}; if (!rep_block_hash.is_zero ()) { // Move existing representation & add in amount delta @@ -958,8 +958,8 @@ nano::account const & nano::ledger::block_destination (nano::transaction const & { return state_block->hashables.link.as_account (); } - static nano::account result (0); - return result; + + return nano::account::null (); } nano::block_hash nano::ledger::block_source (nano::transaction const & transaction_a, nano::block const & block_a) @@ -1533,7 +1533,7 @@ bool nano::ledger::migrate_lmdb_to_rocksdb (boost::filesystem::path const & data error |= rocksdb_store->account.get (rocksdb_transaction, account, account_info); // If confirmation height exists in the lmdb ledger for this account it should exist in the rocksdb ledger - nano::confirmation_height_info confirmation_height_info; + nano::confirmation_height_info confirmation_height_info{}; if (!store.confirmation_height.get (lmdb_transaction, account, confirmation_height_info)) { error |= rocksdb_store->confirmation_height.get (rocksdb_transaction, account, confirmation_height_info); diff --git a/nano/secure/store/frontier_store_partial.hpp b/nano/secure/store/frontier_store_partial.hpp index 9bec58444c..66d05cbeae 100644 --- a/nano/secure/store/frontier_store_partial.hpp +++ b/nano/secure/store/frontier_store_partial.hpp @@ -40,7 +40,7 @@ class frontier_store_partial : public frontier_store nano::db_val value; auto status (store.get (transaction_a, tables::frontiers, nano::db_val (block_a), value)); release_assert (store.success (status) || store.not_found (status)); - nano::account result (0); + nano::account result{}; if (store.success (status)) { result = static_cast (value); diff --git a/nano/secure/versioning.hpp b/nano/secure/versioning.hpp index 953ab410b9..429de22d97 100644 --- a/nano/secure/versioning.hpp +++ b/nano/secure/versioning.hpp @@ -15,7 +15,7 @@ class pending_info_v14 final size_t db_size () const; bool deserialize (nano::stream &); bool operator== (nano::pending_info_v14 const &) const; - nano::account source{ 0 }; + nano::account source{}; nano::amount amount{ 0 }; nano::epoch epoch{ nano::epoch::epoch_0 }; }; @@ -44,7 +44,7 @@ class block_sideband_v14 final static size_t size (nano::block_type); nano::block_type type{ nano::block_type::invalid }; nano::block_hash successor{ 0 }; - nano::account account{ 0 }; + nano::account account{}; nano::amount balance{ 0 }; uint64_t height{ 0 }; uint64_t timestamp{ 0 }; @@ -65,7 +65,7 @@ class block_sideband_v18 final bool deserialize (nano::stream &, nano::block_type); static size_t size (nano::block_type); nano::block_hash successor{ 0 }; - nano::account account{ 0 }; + nano::account account{}; nano::amount balance{ 0 }; uint64_t height{ 0 }; uint64_t timestamp{ 0 }; From 30b3e39d3d01d52196092f1124e0cb0a26c87a00 Mon Sep 17 00:00:00 2001 From: dsiganos Date: Tue, 12 Oct 2021 13:14:41 +0100 Subject: [PATCH 224/346] Cleanup qt_system remnants (#3189) (#3488) Fixes #3189 --- .gitignore | 1 - coverage/CMakeLists.txt | 3 +-- nano/qt_system/entry.cpp | 49 ---------------------------------------- 3 files changed, 1 insertion(+), 52 deletions(-) delete mode 100644 nano/qt_system/entry.cpp diff --git a/.gitignore b/.gitignore index 032d0349ba..eef7f3c2df 100644 --- a/.gitignore +++ b/.gitignore @@ -61,7 +61,6 @@ Release # Autogenerated Qt artifacts packaging qrc_resources.cpp -qt_system resources.qrc.depends # Autogenerated Flatbuffers source files diff --git a/coverage/CMakeLists.txt b/coverage/CMakeLists.txt index 2646419411..8f1e6143bc 100644 --- a/coverage/CMakeLists.txt +++ b/coverage/CMakeLists.txt @@ -38,8 +38,7 @@ add_custom_target( '${PROJECT_SOURCE_DIR}/nano/nano_rpc/*' '${PROJECT_SOURCE_DIR}/nano/rpc_test/*' '${PROJECT_SOURCE_DIR}/nano/qt_test/*' '${PROJECT_SOURCE_DIR}/nano/qt/*' - '${PROJECT_SOURCE_DIR}/nano/test_common/*' - '${PROJECT_SOURCE_DIR}/nano/qt_system/*' --output-file + '${PROJECT_SOURCE_DIR}/nano/test_common/*' --output-file ${PROJECT_SOURCE_DIR}/coverage/lcov.info -q WORKING_DIRECTORY ${CMAKE_BINARY_DIR} DEPENDS coverage_tests) diff --git a/nano/qt_system/entry.cpp b/nano/qt_system/entry.cpp deleted file mode 100644 index ae55f0f071..0000000000 --- a/nano/qt_system/entry.cpp +++ /dev/null @@ -1,49 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#include - -#include -int main (int argc, char ** argv) -{ - nano::force_nano_dev_network (); - nano::node_singleton_memory_pool_purge_guard memory_pool_cleanup_guard; - QApplication application (argc, argv); - QCoreApplication::setOrganizationName ("Nano"); - QCoreApplication::setOrganizationDomain ("nano.org"); - QCoreApplication::setApplicationName ("Nano Wallet"); - nano_qt::eventloop_processor processor; - const uint16_t count (16); - nano::system system (count); - nano::thread_runner runner (system.io_ctx, system.nodes[0]->config.io_threads); - std::unique_ptr client_tabs (new QTabWidget); - std::vector> guis; - for (auto i (0); i < count; ++i) - { - auto wallet (system.nodes[i]->wallets.create (nano::random_wallet_id ())); - nano::keypair key; - wallet->insert_adhoc (key.prv); - guis.push_back (std::make_unique (application, processor, *system.nodes[i], wallet, key.pub)); - client_tabs->addTab (guis.back ()->client_window, boost::str (boost::format ("Wallet %1%") % i).c_str ()); - } - client_tabs->show (); - QObject::connect (&application, &QApplication::aboutToQuit, [&] () { - system.stop (); - }); - int result; - try - { - result = application.exec (); - } - catch (...) - { - result = -1; - debug_assert (false); - } - runner.join (); - return result; -} From fb49976f021d9828d3eb4a997d767b66968b59cc Mon Sep 17 00:00:00 2001 From: theohax <81556890+theohax@users.noreply.github.com> Date: Tue, 12 Oct 2021 17:04:51 +0300 Subject: [PATCH 225/346] Possible race condition fix in ledger_walker.ladder_geometry test (#3497) --- nano/core_test/ledger_walker.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/nano/core_test/ledger_walker.cpp b/nano/core_test/ledger_walker.cpp index 59ce82420a..a985f8c31a 100644 --- a/nano/core_test/ledger_walker.cpp +++ b/nano/core_test/ledger_walker.cpp @@ -151,6 +151,7 @@ TEST (ledger_walker, ladder_geometry) { system.wallet (0)->insert_adhoc (keys[itr].prv); const auto block = system.wallet (0)->send_action (nano::dev::genesis_key.pub, keys[itr].pub, 1000); + ASSERT_TRUE (block); ASSERT_TIMELY (3s, 1 + (itr + 1) * 2 == node->ledger.cache.cemented_count); } @@ -166,14 +167,12 @@ TEST (ledger_walker, ladder_geometry) const auto send = system.wallet (0)->send_action (keys[source_index].pub, keys[destination_index].pub, amounts_to_send[itr]); ASSERT_TRUE (send); - ASSERT_TIMELY (3s, 1 + keys.size () * 2 + (itr + 1) * 2 == node->ledger.cache.cemented_count); } ASSERT_TRUE (last_destination); - const auto transaction = node->ledger.store.tx_begin_read (); nano::account_info last_destination_info{}; - const auto last_destination_read_error = node->ledger.store.account.get (transaction, *last_destination, last_destination_info); + const auto last_destination_read_error = node->ledger.store.account.get (node->ledger.store.tx_begin_read (), *last_destination, last_destination_info); ASSERT_FALSE (last_destination_read_error); // This is how we expect chains to look like (for 3 accounts and 10 amounts to be sent) @@ -192,7 +191,7 @@ TEST (ledger_walker, ladder_geometry) nano::amount previous_balance{}; if (!block->previous ().is_zero ()) { - const auto previous_block = node->ledger.store.block.get_no_sideband (transaction, block->previous ()); + const auto previous_block = node->ledger.store.block.get_no_sideband (node->ledger.store.tx_begin_read (), block->previous ()); previous_balance = previous_block->balance (); } @@ -211,7 +210,7 @@ TEST (ledger_walker, ladder_geometry) nano::amount previous_balance{}; if (!block->previous ().is_zero ()) { - const auto previous_block = node->ledger.store.block.get_no_sideband (transaction, block->previous ()); + const auto previous_block = node->ledger.store.block.get_no_sideband (node->ledger.store.tx_begin_read (), block->previous ()); previous_balance = previous_block->balance (); } From 6063f5f011ecdaeb50384b4d728708a72bfc8e00 Mon Sep 17 00:00:00 2001 From: dsiganos Date: Wed, 13 Oct 2021 14:33:33 +0100 Subject: [PATCH 226/346] Fix handling of SIGSEGV and SIGABRT in nano_node (#3502) The handling of SIGSEGV and SIGABRT did not have the desired effect of generating stack traces of the source code that caused the signal. That's because the signals were handled by the signal manager, which first switches stack context to one that is safe to execute any code. However, for SIGSEGV and SIGABRT we want to print the stacktrace of the problem and therefore we cannot switch context. So, I am setting the handling of SIGSEGV and SIGABRT to use the classic signal function, like before the signal manager was introduced. --- nano/lib/signal_manager.cpp | 8 -------- nano/lib/signal_manager.hpp | 3 --- nano/nano_node/daemon.cpp | 24 ++++++++++++++++++++---- 3 files changed, 20 insertions(+), 15 deletions(-) diff --git a/nano/lib/signal_manager.cpp b/nano/lib/signal_manager.cpp index ffaae2d425..5b1fab2468 100644 --- a/nano/lib/signal_manager.cpp +++ b/nano/lib/signal_manager.cpp @@ -49,14 +49,6 @@ void nano::signal_manager::register_signal_handler (int signum, std::function nano::signal_manager::get_debug_files_handler (void) -{ - return [] (int) { - nano::dump_crash_stacktrace (); - nano::create_load_memory_address_files (); - }; -} - void nano::signal_manager::base_handler (nano::signal_manager::signal_descriptor descriptor, const boost::system::error_code & error, int signum) { if (!error) diff --git a/nano/lib/signal_manager.hpp b/nano/lib/signal_manager.hpp index b667ae561f..d3e8de9d63 100644 --- a/nano/lib/signal_manager.hpp +++ b/nano/lib/signal_manager.hpp @@ -33,9 +33,6 @@ class signal_manager final */ void register_signal_handler (int signum, std::function handler, bool repeat); - /** returns a signal handler that prints a stacktrace and creates some debug files */ - std::function get_debug_files_handler (void); - private: struct signal_descriptor final { diff --git a/nano/nano_node/daemon.cpp b/nano/nano_node/daemon.cpp index 8b5926ec7b..11eb7a2a54 100644 --- a/nano/nano_node/daemon.cpp +++ b/nano/nano_node/daemon.cpp @@ -17,6 +17,16 @@ namespace { +void nano_abort_signal_handler (int signum) +{ + // create some debugging log files + nano::dump_crash_stacktrace (); + nano::create_load_memory_address_files (); + + // re-raise signal to call the default handler and exit + raise (signum); +} + volatile sig_atomic_t sig_int_or_term = 0; constexpr std::size_t OPEN_FILE_DESCRIPTORS_LIMIT = 16384; @@ -39,10 +49,14 @@ static void load_and_set_bandwidth_params (std::shared_ptr const & n void nano_daemon::daemon::run (boost::filesystem::path const & data_path, nano::node_flags const & flags) { - // Override segmentation fault and aborting. - nano::signal_manager sigman; - sigman.register_signal_handler (SIGSEGV, sigman.get_debug_files_handler (), false); - sigman.register_signal_handler (SIGABRT, sigman.get_debug_files_handler (), false); + // We catch signal SIGSEGV and SIGABRT not via the signal manager because we want these signal handlers + // to be executed in the stack of the code that caused the signal, so we can dump the stacktrace. + struct sigaction sa = {}; + sa.sa_handler = nano_abort_signal_handler; + sigemptyset (&sa.sa_mask); + sa.sa_flags = SA_RESETHAND; + sigaction (SIGSEGV, &sa, NULL); + sigaction (SIGABRT, &sa, NULL); boost::filesystem::create_directories (data_path); boost::system::error_code error_chmod; @@ -155,6 +169,8 @@ void nano_daemon::daemon::run (boost::filesystem::path const & data_path, nano:: sig_int_or_term = 1; }; + nano::signal_manager sigman; + // keep trapping Ctrl-C to avoid a second Ctrl-C interrupting tasks started by the first sigman.register_signal_handler (SIGINT, &nano::signal_handler, true); From c2fe0eb8f30a15e7e567521b1b4999b83c4092ef Mon Sep 17 00:00:00 2001 From: dsiganos Date: Wed, 13 Oct 2021 14:36:01 +0100 Subject: [PATCH 227/346] Endianess fix for vote timestamp field (does not affect x86) (#3500) This change will have no effect on little endianess machines (x86). But it would fix big endian machines. --- nano/secure/common.cpp | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/nano/secure/common.cpp b/nano/secure/common.cpp index 879c8925a7..b809b66892 100644 --- a/nano/secure/common.cpp +++ b/nano/secure/common.cpp @@ -636,7 +636,7 @@ void nano::vote::serialize (nano::stream & stream_a, nano::block_type type) cons { write (stream_a, account); write (stream_a, signature); - write (stream_a, timestamp); + write (stream_a, boost::endian::native_to_little (timestamp)); for (auto const & block : blocks) { if (block.which ()) @@ -662,7 +662,7 @@ void nano::vote::serialize (nano::stream & stream_a) const { write (stream_a, account); write (stream_a, signature); - write (stream_a, timestamp); + write (stream_a, boost::endian::native_to_little (timestamp)); for (auto const & block : blocks) { if (block.which ()) @@ -685,6 +685,7 @@ bool nano::vote::deserialize (nano::stream & stream_a, nano::block_uniquer * uni nano::read (stream_a, account); nano::read (stream_a, signature); nano::read (stream_a, timestamp); + boost::endian::little_to_native_inplace (timestamp); nano::block_type type; From 48f3dacd03696b3b32bfb363fcf3e54099aacb46 Mon Sep 17 00:00:00 2001 From: coranos Date: Thu, 14 Oct 2021 18:07:02 -0500 Subject: [PATCH 228/346] Update common.cpp --- nano/secure/common.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/nano/secure/common.cpp b/nano/secure/common.cpp index a3db37a54d..faad5ef18f 100644 --- a/nano/secure/common.cpp +++ b/nano/secure/common.cpp @@ -74,9 +74,9 @@ std::shared_ptr parse_block_from_genesis_data (std::string const & return nano::deserialize_block_json (tree); } -char const * beta_canary_public_key_data = "868C6A9F79D4506E029B378262B91538C5CB26D7C346B63902FFEB365F1C1947"; // nano_33nefchqmo4ifr3bpfw4ecwjcg87semfhit8prwi7zzd8shjr8c9qdxeqmnx -char const * live_canary_public_key_data = "B614401AA37ACFC973ED36CE9E30E471D8971762A9557E6A00E9D7FFDA6EF410"; // nano_1z7ty8bc8xjxou6zmgp3pd8zesgr8thra17nqjfdbgjjr17tnj16fjntfqfn -std::string const test_canary_public_key_data = nano::get_env_or_default ("NANO_TEST_CANARY_PUB", "3BAD2C554ACE05F5E528FBBCE79D51E552C55FA765CCFD89B289C4835DE5F04A"); // nano_1gxf7jcnomi7yqkkjyxwwygo5sckrohtgsgezp6u74g6ifgydw4cajwbk8bf +char const * beta_canary_public_key_data = "B61453D27E843EB30B8288E37D5E7C64447F9202E589AB9E573DA4460DF7B21B"; // ban_3finchb9x33ype7r7495hoh9rs46hyb17sebogh7ghf6ar8zheiucm87mfha +char const * live_canary_public_key_data = "B61453D27E843EB30B8288E37D5E7C64447F9202E589AB9E573DA4460DF7B21B"; // ban_3finchb9x33ype7r7495hoh9rs46hyb17sebogh7ghf6ar8zheiucm87mfha +std::string const test_canary_public_key_data = nano::get_env_or_default ("NANO_TEST_CANARY_PUB", "B61453D27E843EB30B8288E37D5E7C64447F9202E589AB9E573DA4460DF7B21B"); // ban_3finchb9x33ype7r7495hoh9rs46hyb17sebogh7ghf6ar8zheiucm87mfha } nano::network_params::network_params () : From 820097f28d6e7c55348e147f470d8d16fed36363 Mon Sep 17 00:00:00 2001 From: coranos Date: Thu, 14 Oct 2021 20:06:52 -0500 Subject: [PATCH 229/346] Update CMakeLists.txt --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f61db1b783..c66671bea2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -38,7 +38,7 @@ if(MSVC) endif() set(CPACK_PACKAGE_VERSION_MAJOR "22") -set(CPACK_PACKAGE_VERSION_MINOR "1") +set(CPACK_PACKAGE_VERSION_MINOR "2") set(CPACK_PACKAGE_VERSION_PATCH "0") set(CPACK_PACKAGE_VERSION_PRE_RELEASE "0") set(CPACK_PACKAGE_VENDOR "Bananocoin") From 7b5e4d75f87a362b0e8449629170d278427ef5e8 Mon Sep 17 00:00:00 2001 From: theohax <81556890+theohax@users.noreply.github.com> Date: Sat, 16 Oct 2021 07:44:03 +0300 Subject: [PATCH 230/346] Add [[nodiscard]] attribute to node::process method (#3505) * Add [[nodiscard]] attribute to node::process method --- nano/core_test/bootstrap.cpp | 4 ++-- nano/core_test/election.cpp | 10 +++++----- nano/core_test/gap_cache.cpp | 2 +- nano/node/node.hpp | 2 +- nano/rpc_test/rpc.cpp | 32 ++++++++++++++++---------------- 5 files changed, 25 insertions(+), 25 deletions(-) diff --git a/nano/core_test/bootstrap.cpp b/nano/core_test/bootstrap.cpp index b04b41b8f7..ea5ad1a4e6 100644 --- a/nano/core_test/bootstrap.cpp +++ b/nano/core_test/bootstrap.cpp @@ -268,8 +268,8 @@ TEST (bootstrap_processor, process_state) node0->work_generate_blocking (*block1); node0->work_generate_blocking (*block2); - node0->process (*block1); - node0->process (*block2); + ASSERT_EQ (nano::process_result::progress, node0->process (*block1).code); + ASSERT_EQ (nano::process_result::progress, node0->process (*block2).code); auto node1 (std::make_shared (system.io_ctx, nano::get_available_port (), nano::unique_path (), system.logging, system.work, node_flags)); ASSERT_EQ (node0->latest (nano::dev::genesis_key.pub), block2->hash ()); diff --git a/nano/core_test/election.cpp b/nano/core_test/election.cpp index 386eb469bf..397c61cda4 100644 --- a/nano/core_test/election.cpp +++ b/nano/core_test/election.cpp @@ -219,16 +219,16 @@ TEST (election, quorum_minimum_update_weight_before_quorum_checks) node1.work_generate_blocking (*send2); node1.process_active (send1); node1.block_processor.flush (); - node1.process (*open1); - node1.process (*send2); + ASSERT_EQ (nano::process_result::progress, node1.process (*open1).code); + ASSERT_EQ (nano::process_result::progress, node1.process (*send2).code); node1.block_processor.flush (); ASSERT_EQ (node1.ledger.cache.block_count, 4); node_config.peering_port = nano::get_available_port (); auto & node2 = *system.add_node (node_config); - node2.process (*send1); - node2.process (*open1); - node2.process (*send2); + ASSERT_EQ (nano::process_result::progress, node2.process (*send1).code); + ASSERT_EQ (nano::process_result::progress, node2.process (*open1).code); + ASSERT_EQ (nano::process_result::progress, node2.process (*send2).code); system.wallet (1)->insert_adhoc (key1.prv); node2.block_processor.flush (); ASSERT_EQ (node2.ledger.cache.block_count, 4); diff --git a/nano/core_test/gap_cache.cpp b/nano/core_test/gap_cache.cpp index 88b77da5ea..3bd70273e8 100644 --- a/nano/core_test/gap_cache.cpp +++ b/nano/core_test/gap_cache.cpp @@ -68,7 +68,7 @@ TEST (gap_cache, gap_bootstrap) nano::block_hash latest (node1.latest (nano::dev::genesis_key.pub)); nano::keypair key; auto send (std::make_shared (latest, key.pub, nano::dev::constants.genesis_amount - 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (latest))); - node1.process (*send); + ASSERT_EQ (nano::process_result::progress, node1.process (*send).code); ASSERT_EQ (nano::dev::constants.genesis_amount - 100, node1.balance (nano::dev::genesis->account ())); ASSERT_EQ (nano::dev::constants.genesis_amount, node2.balance (nano::dev::genesis->account ())); // Confirm send block, allowing voting on the upcoming block diff --git a/nano/node/node.hpp b/nano/node/node.hpp index a6e4c50852..6a0ae59e14 100644 --- a/nano/node/node.hpp +++ b/nano/node/node.hpp @@ -103,7 +103,7 @@ class node final : public std::enable_shared_from_this void process_confirmed_data (nano::transaction const &, std::shared_ptr const &, nano::block_hash const &, nano::account &, nano::uint128_t &, bool &, bool &, nano::account &); void process_confirmed (nano::election_status const &, uint64_t = 0); void process_active (std::shared_ptr const &); - nano::process_return process (nano::block &); + [[nodiscard]] nano::process_return process (nano::block &); nano::process_return process_local (std::shared_ptr const &); void process_local_async (std::shared_ptr const &); void keepalive_preconfigured (std::vector const &); diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index 2489782449..36d911ef47 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -2877,7 +2877,7 @@ TEST (rpc, republish) system.add_node (); auto latest (node1->latest (nano::dev::genesis_key.pub)); nano::send_block send (latest, key.pub, 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest)); - node1->process (send); + ASSERT_EQ (nano::process_result::progress, node1->process (send).code); nano::open_block open (send.hash (), key.pub, key.pub, key.prv, key.pub, *node1->work_generate_blocking (key.pub)); ASSERT_EQ (nano::process_result::progress, node1->process (open).code); auto [rpc, rpc_ctx] = add_rpc (system, node1); @@ -3456,7 +3456,7 @@ TEST (rpc, wallet_republish) system.wallet (0)->insert_adhoc (key.prv); auto latest (node1->latest (nano::dev::genesis_key.pub)); nano::send_block send (latest, key.pub, 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest)); - node1->process (send); + ASSERT_EQ (nano::process_result::progress, node1->process (send).code); nano::open_block open (send.hash (), key.pub, key.pub, key.prv, key.pub, *node1->work_generate_blocking (key.pub)); ASSERT_EQ (nano::process_result::progress, node1->process (open).code); auto [rpc, rpc_ctx] = add_rpc (system, node1); @@ -3485,7 +3485,7 @@ TEST (rpc, delegators) system.wallet (0)->insert_adhoc (key.prv); auto latest (node1->latest (nano::dev::genesis_key.pub)); nano::send_block send (latest, key.pub, 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest)); - node1->process (send); + ASSERT_EQ (nano::process_result::progress, node1->process (send).code); nano::open_block open (send.hash (), nano::dev::genesis_key.pub, key.pub, key.prv, key.pub, *node1->work_generate_blocking (key.pub)); ASSERT_EQ (nano::process_result::progress, node1->process (open).code); auto [rpc, rpc_ctx] = add_rpc (system, node1); @@ -3511,7 +3511,7 @@ TEST (rpc, delegators_parameters) nano::keypair key; auto latest (node1->latest (nano::dev::genesis_key.pub)); nano::send_block send (latest, key.pub, 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest)); - node1->process (send); + ASSERT_EQ (nano::process_result::progress, node1->process (send).code); nano::open_block open (send.hash (), nano::dev::genesis_key.pub, key.pub, key.prv, key.pub, *node1->work_generate_blocking (key.pub)); ASSERT_EQ (nano::process_result::progress, node1->process (open).code); @@ -3606,7 +3606,7 @@ TEST (rpc, delegators_count) system.wallet (0)->insert_adhoc (key.prv); auto latest (node1->latest (nano::dev::genesis_key.pub)); nano::send_block send (latest, key.pub, 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest)); - node1->process (send); + ASSERT_EQ (nano::process_result::progress, node1->process (send).code); nano::open_block open (send.hash (), nano::dev::genesis_key.pub, key.pub, key.prv, key.pub, *node1->work_generate_blocking (key.pub)); ASSERT_EQ (nano::process_result::progress, node1->process (open).code); auto [rpc, rpc_ctx] = add_rpc (system, node1); @@ -3644,7 +3644,7 @@ TEST (rpc, account_info) system.wallet (0)->insert_adhoc (key.prv); auto latest (node1->latest (nano::dev::genesis_key.pub)); nano::send_block send (latest, key.pub, 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest)); - node1->process (send); + ASSERT_EQ (nano::process_result::progress, node1->process (send).code); auto time (nano::seconds_since_epoch ()); { auto transaction = node1->store.tx_begin_write (); @@ -3700,15 +3700,15 @@ TEST (rpc, account_info) { latest = node1->latest (nano::dev::genesis_key.pub); nano::send_block send1 (latest, key1.pub, 50, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest)); - node1->process (send1); + ASSERT_EQ (nano::process_result::progress, node1->process (send1).code); nano::send_block send2 (send1.hash (), key1.pub, 25, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (send1.hash ())); - node1->process (send2); + ASSERT_EQ (nano::process_result::progress, node1->process (send2).code); nano::state_block state_change (nano::dev::genesis_key.pub, send2.hash (), key1.pub, 25, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (send2.hash ())); - node1->process (state_change); + ASSERT_EQ (nano::process_result::progress, node1->process (state_change).code); nano::open_block open (send1.hash (), nano::dev::genesis_key.pub, key1.pub, key1.prv, key1.pub, *node1->work_generate_blocking (key1.pub)); - node1->process (open); + ASSERT_EQ (nano::process_result::progress, node1->process (open).code); } rpc_ctx->io_scope->renew (); @@ -3811,7 +3811,7 @@ TEST (rpc, json_block_output) nano::keypair key; auto latest (node1->latest (nano::dev::genesis_key.pub)); nano::send_block send (latest, key.pub, 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest)); - node1->process (send); + ASSERT_EQ (nano::process_result::progress, node1->process (send).code); auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request; request.put ("action", "block_info"); @@ -3944,7 +3944,7 @@ TEST (rpc, block_info_successor) nano::keypair key; auto latest (node1->latest (nano::dev::genesis_key.pub)); nano::send_block send (latest, key.pub, 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest)); - node1->process (send); + ASSERT_EQ (nano::process_result::progress, node1->process (send).code); auto [rpc, rpc_ctx] = add_rpc (system, node1); boost::property_tree::ptree request; request.put ("action", "block_info"); @@ -4096,7 +4096,7 @@ TEST (rpc, ledger) auto send_amount (genesis_balance - 100); genesis_balance -= send_amount; nano::send_block send (latest, key.pub, genesis_balance, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node->work_generate_blocking (latest)); - node->process (send); + ASSERT_EQ (nano::process_result::progress, node->process (send).code); nano::open_block open (send.hash (), nano::dev::genesis_key.pub, key.pub, key.prv, key.pub, *node->work_generate_blocking (key.pub)); ASSERT_EQ (nano::process_result::progress, node->process (open).code); auto time (nano::seconds_since_epoch ()); @@ -4166,7 +4166,7 @@ TEST (rpc, ledger) genesis_balance -= send2_amount; nano::send_block send2 (send.hash (), key.pub, genesis_balance, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node->work_generate_blocking (send.hash ())); rpc_ctx->io_scope->reset (); - node->process (send2); + ASSERT_EQ (nano::process_result::progress, node->process (send2).code); rpc_ctx->io_scope->renew (); // When asking for pending, pending amount is taken into account for threshold so the account must show up request.put ("count", 2); @@ -4240,7 +4240,7 @@ TEST (rpc, block_create) auto send_block (nano::deserialize_block_json (block_l)); ASSERT_EQ (send.hash (), send_block->hash ()); rpc_ctx->io_scope->reset (); - node1->process (send); + ASSERT_EQ (nano::process_result::progress, node1->process (send).code); rpc_ctx->io_scope->renew (); boost::property_tree::ptree request1; request1.put ("action", "block_create"); @@ -4618,7 +4618,7 @@ TEST (rpc, wallet_ledger) system.wallet (0)->insert_adhoc (key.prv); auto latest (node1->latest (nano::dev::genesis_key.pub)); nano::send_block send (latest, key.pub, 100, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *node1->work_generate_blocking (latest)); - node1->process (send); + ASSERT_EQ (nano::process_result::progress, node1->process (send).code); nano::open_block open (send.hash (), nano::dev::genesis_key.pub, key.pub, key.prv, key.pub, *node1->work_generate_blocking (key.pub)); ASSERT_EQ (nano::process_result::progress, node1->process (open).code); auto time (nano::seconds_since_epoch ()); From 008d7259e44afbadf04bcb7f5ae5d16ccf34b2c7 Mon Sep 17 00:00:00 2001 From: theohax <81556890+theohax@users.noreply.github.com> Date: Tue, 19 Oct 2021 14:23:07 +0300 Subject: [PATCH 231/346] Formatting rules update -- indentation rules improvements (#3506) * Update clang-format rules * Remove superfluous clang-format rule * Adjust formatting rules: make continuation indentation 0 --- .clang-format | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.clang-format b/.clang-format index 23958ffc7f..75531323c6 100644 --- a/.clang-format +++ b/.clang-format @@ -1,10 +1,10 @@ --- BasedOnStyle: Webkit -Language: Cpp +Language: Cpp SpaceBeforeParens: Always SpaceAfterTemplateKeyword: true -Standard: Cpp11 -TabWidth: 4 +Standard: Cpp11 +TabWidth: 4 IndentWidth: 4 PointerAlignment: Middle UseTab: ForContinuationAndIndentation @@ -15,9 +15,9 @@ AllowShortCaseLabelsOnASingleLine: false AllowShortFunctionsOnASingleLine: false AllowShortLambdasOnASingleLine: All AllowShortLoopsOnASingleLine: false -BreakConstructorInitializersBeforeComma: true BreakConstructorInitializers: AfterColon ConstructorInitializerAllOnOneLineOrOnePerLine: false +ConstructorInitializerIndentWidth: 4 ContinuationIndentWidth: 0 KeepEmptyLinesAtTheStartOfBlocks: false IndentCaseLabels: true From 8602d3554b4881ed7dfc39793adfdeb7d0a6adb7 Mon Sep 17 00:00:00 2001 From: Thiago Silva <82097354+thsfs@users.noreply.github.com> Date: Tue, 19 Oct 2021 14:09:25 -0300 Subject: [PATCH 232/346] Brings back broadcasting blocks on process_live (#3507) * Brings back broadcasting blocks on process_live * Changed drop policy to allow drops * Adds an unit test for checking block broadcasts on arrival --- nano/core_test/CMakeLists.txt | 1 + nano/core_test/blockprocessor.cpp | 41 +++++++++++++++++++++++++++++++ nano/node/blockprocessor.cpp | 4 +++ 3 files changed, 46 insertions(+) create mode 100644 nano/core_test/blockprocessor.cpp diff --git a/nano/core_test/CMakeLists.txt b/nano/core_test/CMakeLists.txt index 65b3cb6962..27838e67f6 100644 --- a/nano/core_test/CMakeLists.txt +++ b/nano/core_test/CMakeLists.txt @@ -6,6 +6,7 @@ add_executable( active_transactions.cpp block.cpp block_store.cpp + blockprocessor.cpp bootstrap.cpp cli.cpp confirmation_height.cpp diff --git a/nano/core_test/blockprocessor.cpp b/nano/core_test/blockprocessor.cpp new file mode 100644 index 0000000000..46d06f1317 --- /dev/null +++ b/nano/core_test/blockprocessor.cpp @@ -0,0 +1,41 @@ +#include +#include +#include +#include +#include +#include +#include + +#include + +using namespace std::chrono_literals; + +TEST (block_processor, broadcast_block_on_arrival) +{ + nano::system system; + nano::node_config config1{ nano::get_available_port (), system.logging }; + // Deactivates elections on both nodes. + config1.active_elections_size = 0; + nano::node_config config2{ nano::get_available_port (), system.logging }; + config2.active_elections_size = 0; + nano::node_flags flags; + // Disables bootstrap listener to make sure the block won't be shared by this channel. + flags.disable_bootstrap_listener = true; + auto node1 = system.add_node (config1, flags); + auto node2 = system.add_node (config2, flags); + nano::state_block_builder builder; + auto send1 = builder.make_block () + .account (nano::dev::genesis_key.pub) + .previous (nano::dev::genesis->hash ()) + .representative (nano::dev::genesis_key.pub) + .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) + .link (nano::dev::genesis_key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) + .work (*system.work.generate (nano::dev::genesis->hash ())) + .build_shared (); + // Adds a block to the first node. process_active() -> (calls) block_processor.add() -> add() -> + // awakes process_block() -> process_batch() -> process_one() -> process_live() + node1->process_active (send1); + // Checks whether the block was broadcast. + ASSERT_TIMELY (5s, node2->ledger.block_or_pruned_exists (send1->hash ())); +} \ No newline at end of file diff --git a/nano/node/blockprocessor.cpp b/nano/node/blockprocessor.cpp index b9d59dbb80..b98fd4935c 100644 --- a/nano/node/blockprocessor.cpp +++ b/nano/node/blockprocessor.cpp @@ -326,6 +326,10 @@ void nano::block_processor::process_live (nano::transaction const & transaction_ { node.network.flood_block_initial (block_a); } + else if (!node.flags.disable_block_processor_republishing) + { + node.network.flood_block (block_a, nano::buffer_drop_policy::limiter); + } if (node.websocket_server && node.websocket_server->any_subscriber (nano::websocket::topic::new_unconfirmed_block)) { From 59e5c760921b8b683ecd4b4f247ab568c6e27385 Mon Sep 17 00:00:00 2001 From: dsiganos Date: Wed, 20 Oct 2021 13:17:09 +0100 Subject: [PATCH 233/346] Fix for RPC stop command (#3191) (#3275) The RPC stop command was not working (the node did exit completely) because the stop callback was never called because the callback was called after the node was stopped and the stop callback needed the node to execute. This commit removes the node stop before the callback and let's the stop call back execute, which should stop io_ctx after 3 seconds, which in turn should exit the daemon and the node should be stopped by its destructor. --- nano/node/json_handler.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index 4d6ac1c3ab..35593d5768 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -3826,7 +3826,6 @@ void nano::json_handler::stop () response_errors (); if (!ec) { - node.stop (); stop_callback (); } } From 2f098d4ec7437599e1445bb1d3f2b02cd0a74833 Mon Sep 17 00:00:00 2001 From: Shryder Date: Wed, 20 Oct 2021 14:59:29 +0100 Subject: [PATCH 234/346] Add `receivable` along with `pending` to RPC responses (#3439) --- nano/node/json_handler.cpp | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index 35593d5768..a84d39d1d5 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -527,6 +527,7 @@ void nano::json_handler::account_balance () auto balance (node.balance_pending (account, include_only_confirmed)); response_l.put ("balance", balance.first.convert_to ()); response_l.put ("pending", balance.second.convert_to ()); + response_l.put ("receivable", balance.second.convert_to ()); } response_errors (); } @@ -693,6 +694,7 @@ void nano::json_handler::account_info () { auto account_pending (node.ledger.account_pending (transaction, account)); response_l.put ("pending", account_pending.convert_to ()); + response_l.put ("receivable", account_pending.convert_to ()); if (include_confirmed) { @@ -896,6 +898,7 @@ void nano::json_handler::accounts_balances () auto balance (node.balance_pending (account, false)); entry.put ("balance", balance.first.convert_to ()); entry.put ("pending", balance.second.convert_to ()); + entry.put ("receivable", balance.second.convert_to ()); balances.push_back (std::make_pair (account.to_account (), entry)); } } @@ -2660,6 +2663,7 @@ void nano::json_handler::ledger () continue; } response_a.put ("pending", account_pending.convert_to ()); + response_a.put ("receivable", account_pending.convert_to ()); } response_a.put ("frontier", info.head.to_string ()); response_a.put ("open_block", info.open_block.to_string ()); @@ -2712,6 +2716,7 @@ void nano::json_handler::ledger () continue; } response_a.put ("pending", account_pending.convert_to ()); + response_a.put ("receivable", account_pending.convert_to ()); } response_a.put ("frontier", info.head.to_string ()); response_a.put ("open_block", info.open_block.to_string ()); @@ -4315,6 +4320,7 @@ void nano::json_handler::wallet_info () uint32_t deterministic_index (wallet->store.deterministic_index_get (transaction)); response_l.put ("balance", balance.convert_to ()); response_l.put ("pending", pending.convert_to ()); + response_l.put ("receivable", pending.convert_to ()); response_l.put ("accounts_count", std::to_string (count)); response_l.put ("accounts_block_count", std::to_string (block_count)); response_l.put ("accounts_cemented_block_count", std::to_string (cemented_block_count)); @@ -4345,6 +4351,7 @@ void nano::json_handler::wallet_balances () nano::uint128_t pending = node.ledger.account_pending (block_transaction, account); entry.put ("balance", balance.convert_to ()); entry.put ("pending", pending.convert_to ()); + entry.put ("receivable", pending.convert_to ()); balances.push_back (std::make_pair (account.to_account (), entry)); } } @@ -4619,6 +4626,7 @@ void nano::json_handler::wallet_ledger () { auto account_pending (node.ledger.account_pending (block_transaction, account)); entry.put ("pending", account_pending.convert_to ()); + entry.put ("receivable", account_pending.convert_to ()); } accounts.push_back (std::make_pair (account.to_account (), entry)); } @@ -5201,6 +5209,8 @@ ipc_json_handler_no_arg_func_map create_ipc_json_handler_no_arg_func_map () no_arg_funcs.emplace ("peers", &nano::json_handler::peers); no_arg_funcs.emplace ("pending", &nano::json_handler::pending); no_arg_funcs.emplace ("pending_exists", &nano::json_handler::pending_exists); + no_arg_funcs.emplace ("receivable", &nano::json_handler::pending); + no_arg_funcs.emplace ("receivable_exists", &nano::json_handler::pending_exists); no_arg_funcs.emplace ("process", &nano::json_handler::process); no_arg_funcs.emplace ("pruned_exists", &nano::json_handler::pruned_exists); no_arg_funcs.emplace ("receive", &nano::json_handler::receive); From 7bdc79c3d9f166464c9500eeeefa4925d7e3db4d Mon Sep 17 00:00:00 2001 From: theohax <81556890+theohax@users.noreply.github.com> Date: Wed, 20 Oct 2021 17:10:26 +0300 Subject: [PATCH 235/346] Fix Windows build (signal handling) (#3509) --- nano/nano_node/daemon.cpp | 23 +++++++++++++++-------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/nano/nano_node/daemon.cpp b/nano/nano_node/daemon.cpp index 11eb7a2a54..9399df3473 100644 --- a/nano/nano_node/daemon.cpp +++ b/nano/nano_node/daemon.cpp @@ -27,6 +27,20 @@ void nano_abort_signal_handler (int signum) raise (signum); } +void install_abort_signal_handler () +{ +#ifndef _WIN32 + // We catch signal SIGSEGV and SIGABRT not via the signal manager because we want these signal handlers + // to be executed in the stack of the code that caused the signal, so we can dump the stacktrace. + struct sigaction sa = {}; + sa.sa_handler = nano_abort_signal_handler; + sigemptyset (&sa.sa_mask); + sa.sa_flags = SA_RESETHAND; + sigaction (SIGSEGV, &sa, NULL); + sigaction (SIGABRT, &sa, NULL); +#endif +} + volatile sig_atomic_t sig_int_or_term = 0; constexpr std::size_t OPEN_FILE_DESCRIPTORS_LIMIT = 16384; @@ -49,14 +63,7 @@ static void load_and_set_bandwidth_params (std::shared_ptr const & n void nano_daemon::daemon::run (boost::filesystem::path const & data_path, nano::node_flags const & flags) { - // We catch signal SIGSEGV and SIGABRT not via the signal manager because we want these signal handlers - // to be executed in the stack of the code that caused the signal, so we can dump the stacktrace. - struct sigaction sa = {}; - sa.sa_handler = nano_abort_signal_handler; - sigemptyset (&sa.sa_mask); - sa.sa_flags = SA_RESETHAND; - sigaction (SIGSEGV, &sa, NULL); - sigaction (SIGABRT, &sa, NULL); + install_abort_signal_handler (); boost::filesystem::create_directories (data_path); boost::system::error_code error_chmod; From f1f67265f42ab5bb5ca7c09667ea1ed1cc43afef Mon Sep 17 00:00:00 2001 From: theohax <81556890+theohax@users.noreply.github.com> Date: Thu, 21 Oct 2021 15:43:56 +0300 Subject: [PATCH 236/346] Handle SIGABRT and SIGSEGV on Windows (#3511) * Handle SIGABRT and SIGSEGV on Windows * Address code review --- nano/nano_node/daemon.cpp | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/nano/nano_node/daemon.cpp b/nano/nano_node/daemon.cpp index 9399df3473..e615b58427 100644 --- a/nano/nano_node/daemon.cpp +++ b/nano/nano_node/daemon.cpp @@ -19,6 +19,11 @@ namespace { void nano_abort_signal_handler (int signum) { + // remove `signum` from signal handling when under Windows +#ifdef _WIN32 + std::signal (signum, SIG_DFL); +#endif + // create some debugging log files nano::dump_crash_stacktrace (); nano::create_load_memory_address_files (); @@ -29,9 +34,12 @@ void nano_abort_signal_handler (int signum) void install_abort_signal_handler () { -#ifndef _WIN32 // We catch signal SIGSEGV and SIGABRT not via the signal manager because we want these signal handlers // to be executed in the stack of the code that caused the signal, so we can dump the stacktrace. +#ifdef _WIN32 + std::signal (SIGSEGV, nano_abort_signal_handler); + std::signal (SIGABRT, nano_abort_signal_handler); +#else struct sigaction sa = {}; sa.sa_handler = nano_abort_signal_handler; sigemptyset (&sa.sa_mask); From 9bb89ab3232eb603911ae1125a78921ec2d4f591 Mon Sep 17 00:00:00 2001 From: theohax <81556890+theohax@users.noreply.github.com> Date: Thu, 21 Oct 2021 16:20:09 +0300 Subject: [PATCH 237/346] Improvements in const correctness and 'const' positioning (#3510) * Improve const correctness and adhere to 'const' specifier positioning style Co-authored-by: Mario Ortiz Manero --- nano/core_test/fakes/work_peer.hpp | 4 +- nano/core_test/ledger_walker.cpp | 56 ++++---- nano/core_test/node.cpp | 4 +- nano/core_test/peer_container.cpp | 2 +- nano/fuzzer_test/fuzz_bignum.cpp | 4 +- nano/fuzzer_test/fuzz_buffer.cpp | 4 +- nano/fuzzer_test/fuzz_endpoint_parsing.cpp | 4 +- nano/lib/asio.cpp | 8 +- nano/lib/asio.hpp | 8 +- nano/lib/blocks.hpp | 22 +-- nano/lib/config.cpp | 2 +- nano/lib/config.hpp | 30 ++--- nano/lib/errors.cpp | 24 ++-- nano/lib/errors.hpp | 24 ++-- nano/lib/ipc.cpp | 2 +- nano/lib/ipc_client.cpp | 8 +- nano/lib/locks.cpp | 6 +- nano/lib/locks.hpp | 10 +- nano/lib/logger_mt.hpp | 2 +- nano/lib/numbers.cpp | 6 +- nano/lib/numbers.hpp | 4 +- nano/lib/plat/linux/debugging.cpp | 4 +- nano/lib/rep_weights.hpp | 4 +- nano/lib/signal_manager.cpp | 6 +- nano/lib/signal_manager.hpp | 2 +- nano/lib/threading.cpp | 2 +- nano/lib/tomlconfig.cpp | 2 +- nano/lib/tomlconfig.hpp | 4 +- nano/lib/utility.cpp | 8 +- nano/lib/utility.hpp | 8 +- nano/nano_node/daemon.cpp | 4 +- nano/nano_node/entry.cpp | 12 +- nano/nano_rpc/entry.cpp | 2 +- nano/node/active_transactions.cpp | 48 +++---- nano/node/active_transactions.hpp | 32 ++--- nano/node/blockprocessor.cpp | 8 +- nano/node/blockprocessor.hpp | 4 +- nano/node/bootstrap/bootstrap.cpp | 8 +- nano/node/bootstrap/bootstrap.hpp | 6 +- nano/node/bootstrap/bootstrap_attempt.cpp | 2 +- nano/node/bootstrap/bootstrap_attempt.hpp | 2 +- nano/node/bootstrap/bootstrap_bulk_pull.cpp | 40 +++--- nano/node/bootstrap/bootstrap_bulk_pull.hpp | 10 +- nano/node/bootstrap/bootstrap_bulk_push.cpp | 20 +-- nano/node/bootstrap/bootstrap_bulk_push.hpp | 2 +- nano/node/bootstrap/bootstrap_connections.cpp | 8 +- nano/node/bootstrap/bootstrap_connections.hpp | 2 +- nano/node/bootstrap/bootstrap_frontier.cpp | 20 +-- nano/node/bootstrap/bootstrap_frontier.hpp | 10 +- nano/node/bootstrap/bootstrap_lazy.cpp | 12 +- nano/node/bootstrap/bootstrap_lazy.hpp | 8 +- nano/node/bootstrap/bootstrap_server.cpp | 44 +++--- nano/node/bootstrap/bootstrap_server.hpp | 26 ++-- nano/node/cli.cpp | 16 +-- nano/node/common.cpp | 22 +-- nano/node/common.hpp | 62 ++++----- nano/node/confirmation_height_bounded.cpp | 4 +- nano/node/confirmation_height_bounded.hpp | 2 +- nano/node/confirmation_height_processor.cpp | 8 +- nano/node/confirmation_height_processor.hpp | 6 +- nano/node/confirmation_height_unbounded.hpp | 2 +- nano/node/confirmation_solicitor.cpp | 2 +- nano/node/confirmation_solicitor.hpp | 6 +- nano/node/distributed_work.cpp | 6 +- nano/node/distributed_work_factory.cpp | 2 +- nano/node/distributed_work_factory.hpp | 4 +- nano/node/election.cpp | 2 +- nano/node/election.hpp | 4 +- nano/node/election_scheduler.cpp | 4 +- nano/node/election_scheduler.hpp | 4 +- nano/node/gap_cache.cpp | 2 +- nano/node/gap_cache.hpp | 4 +- nano/node/ipc/flatbuffers_handler.cpp | 8 +- nano/node/ipc/flatbuffers_handler.hpp | 4 +- nano/node/ipc/ipc_broker.cpp | 8 +- nano/node/ipc/ipc_broker.hpp | 4 +- nano/node/ipc/ipc_config.cpp | 8 +- nano/node/ipc/ipc_config.hpp | 2 +- nano/node/ipc/ipc_server.cpp | 30 ++--- nano/node/json_handler.cpp | 126 +++++++++--------- nano/node/ledger_walker.cpp | 22 +-- nano/node/lmdb/lmdb.cpp | 12 +- nano/node/lmdb/lmdb.hpp | 8 +- nano/node/lmdb/lmdb_env.hpp | 2 +- nano/node/lmdb/lmdb_txn.cpp | 16 +-- nano/node/lmdb/lmdb_txn.hpp | 12 +- nano/node/network.cpp | 36 ++--- nano/node/network.hpp | 28 ++-- nano/node/node.cpp | 80 +++++------ nano/node/node.hpp | 6 +- nano/node/nodeconfig.cpp | 30 ++--- nano/node/nodeconfig.hpp | 18 +-- nano/node/online_reps.cpp | 2 +- nano/node/openclwork.cpp | 20 +-- nano/node/peer_exclusion.cpp | 12 +- nano/node/peer_exclusion.hpp | 8 +- nano/node/plat/posix/openclapi.cpp | 40 +++--- nano/node/plat/windows/openclapi.cpp | 40 +++--- nano/node/prioritization.cpp | 12 +- nano/node/prioritization.hpp | 6 +- nano/node/repcrawler.cpp | 12 +- nano/node/repcrawler.hpp | 8 +- nano/node/request_aggregator.cpp | 2 +- nano/node/request_aggregator.hpp | 12 +- nano/node/rocksdb/rocksdb.cpp | 16 +-- nano/node/rocksdb/rocksdb.hpp | 6 +- nano/node/rocksdb/rocksdb_iterator.hpp | 2 +- nano/node/signatures.cpp | 10 +- nano/node/signatures.hpp | 16 +-- nano/node/socket.cpp | 8 +- nano/node/socket.hpp | 14 +- .../state_block_signature_verification.cpp | 8 +- .../state_block_signature_verification.hpp | 4 +- nano/node/telemetry.cpp | 16 +-- nano/node/telemetry.hpp | 4 +- nano/node/transport/tcp.cpp | 30 ++--- nano/node/transport/tcp.hpp | 8 +- nano/node/transport/transport.cpp | 16 +-- nano/node/transport/transport.hpp | 22 +-- nano/node/transport/udp.cpp | 24 ++-- nano/node/transport/udp.hpp | 10 +- nano/node/vote_processor.cpp | 12 +- nano/node/vote_processor.hpp | 4 +- nano/node/voting.cpp | 14 +- nano/node/voting.hpp | 8 +- nano/node/wallet.cpp | 18 +-- nano/node/wallet.hpp | 8 +- nano/node/websocket.hpp | 14 +- nano/qt/qt.cpp | 6 +- nano/rpc/rpc_connection_secure.cpp | 4 +- nano/rpc/rpc_connection_secure.hpp | 4 +- nano/rpc/rpc_request_processor.hpp | 10 +- nano/rpc_test/rpc.cpp | 8 +- nano/secure/common.cpp | 24 ++-- nano/secure/common.hpp | 48 +++---- nano/secure/store/account_store_partial.hpp | 4 +- nano/secure/store/block_store_partial.hpp | 2 +- .../confirmation_height_store_partial.hpp | 4 +- .../secure/store/final_vote_store_partial.hpp | 4 +- nano/secure/store/frontier_store_partial.hpp | 4 +- nano/secure/store/online_weight_partial.hpp | 4 +- nano/secure/store/peer_store_partial.hpp | 4 +- nano/secure/store/pending_store_partial.hpp | 4 +- nano/secure/store/pruned_store_partial.hpp | 4 +- nano/secure/store/unchecked_store_partial.hpp | 4 +- nano/secure/store/version_store_partial.hpp | 2 +- nano/secure/store_partial.hpp | 4 +- nano/secure/versioning.cpp | 14 +- nano/slow_test/node.cpp | 6 +- nano/test_common/system.hpp | 4 +- nano/test_common/testutil.hpp | 2 +- 151 files changed, 934 insertions(+), 932 deletions(-) diff --git a/nano/core_test/fakes/work_peer.hpp b/nano/core_test/fakes/work_peer.hpp index 7544f910dd..0643aff8d4 100644 --- a/nano/core_test/fakes/work_peer.hpp +++ b/nano/core_test/fakes/work_peer.hpp @@ -32,7 +32,7 @@ enum class work_peer_type class work_peer_connection : public std::enable_shared_from_this { - const std::string generic_error = "Unable to parse JSON"; + std::string const generic_error = "Unable to parse JSON"; public: work_peer_connection (asio::io_context & ioc_a, work_peer_type const type_a, nano::work_version const version_a, nano::work_pool & pool_a, std::function on_generation_a, std::function on_cancel_a) : @@ -155,7 +155,7 @@ class work_peer_connection : public std::enable_shared_from_thisresponse.body ()) << ostream.str (); // Delay response by 500ms as a slow peer, immediate async call for a good peer this_l->timer.expires_from_now (boost::posix_time::milliseconds (this_l->type == work_peer_type::slow ? 500 : 0)); - this_l->timer.async_wait ([this_l, result] (const boost::system::error_code & ec) { + this_l->timer.async_wait ([this_l, result] (boost::system::error_code const & ec) { if (this_l->on_generation) { this_l->on_generation (result != 0); diff --git a/nano/core_test/ledger_walker.cpp b/nano/core_test/ledger_walker.cpp index a985f8c31a..0ca3b39af1 100644 --- a/nano/core_test/ledger_walker.cpp +++ b/nano/core_test/ledger_walker.cpp @@ -14,13 +14,13 @@ using namespace std::chrono_literals; TEST (ledger_walker, genesis_block) { nano::system system{}; - const auto node = system.add_node (); + auto const node = system.add_node (); nano::ledger_walker ledger_walker{ node->ledger }; std::size_t walked_blocks_count = 0; ledger_walker.walk_backward (nano::dev::genesis->hash (), - [&] (const auto & block) { + [&] (auto const & block) { ++walked_blocks_count; EXPECT_EQ (block->hash (), nano::dev::genesis->hash ()); }); @@ -29,7 +29,7 @@ TEST (ledger_walker, genesis_block) walked_blocks_count = 0; ledger_walker.walk (nano::dev::genesis->hash (), - [&] (const auto & block) { + [&] (auto const & block) { ++walked_blocks_count; EXPECT_EQ (block->hash (), nano::dev::genesis->hash ()); }); @@ -46,24 +46,24 @@ TEST (ledger_walker, genesis_account_longer) node_config.enable_voting = true; node_config.receive_minimum = 1; - const auto node = system.add_node (node_config); + auto const node = system.add_node (node_config); nano::ledger_walker ledger_walker{ node->ledger }; EXPECT_TRUE (ledger_walker.walked_blocks.empty ()); EXPECT_LE (ledger_walker.walked_blocks.bucket_count (), 1); EXPECT_TRUE (ledger_walker.blocks_to_walk.empty ()); - const auto get_number_of_walked_blocks = [&ledger_walker] (const auto & start_block_hash) { + auto const get_number_of_walked_blocks = [&ledger_walker] (auto const & start_block_hash) { std::size_t walked_blocks_count = 0; ledger_walker.walk_backward (start_block_hash, - [&] (const auto & block) { + [&] (auto const & block) { ++walked_blocks_count; }); return walked_blocks_count; }; - const auto transaction = node->ledger.store.tx_begin_read (); + auto const transaction = node->ledger.store.tx_begin_read (); nano::account_info genesis_account_info{}; ASSERT_FALSE (node->ledger.store.account.get (transaction, nano::dev::genesis_key.pub, genesis_account_info)); EXPECT_EQ (get_number_of_walked_blocks (genesis_account_info.open_block), 1); @@ -72,7 +72,7 @@ TEST (ledger_walker, genesis_account_longer) system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); for (auto itr = 1; itr <= 5; ++itr) { - const auto send = system.wallet (0)->send_action (nano::dev::genesis_key.pub, nano::dev::genesis_key.pub, 1); + auto const send = system.wallet (0)->send_action (nano::dev::genesis_key.pub, nano::dev::genesis_key.pub, 1); ASSERT_TRUE (send); EXPECT_EQ (get_number_of_walked_blocks (send->hash ()), 1 + itr * 2 - 1); ASSERT_TIMELY (3s, 1 + itr * 2 == node->ledger.cache.cemented_count); @@ -95,7 +95,7 @@ TEST (ledger_walker, cross_account) node_config.enable_voting = true; node_config.receive_minimum = 1; - const auto node = system.add_node (node_config); + auto const node = system.add_node (node_config); system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); ASSERT_TRUE (system.wallet (0)->send_action (nano::dev::genesis_key.pub, nano::dev::genesis_key.pub, 1)); @@ -106,22 +106,22 @@ TEST (ledger_walker, cross_account) ASSERT_TRUE (system.wallet (0)->send_action (nano::dev::genesis_key.pub, key.pub, 1)); ASSERT_TIMELY (3s, 5 == node->ledger.cache.cemented_count); - const auto transaction = node->ledger.store.tx_begin_read (); + auto const transaction = node->ledger.store.tx_begin_read (); nano::account_info account_info{}; ASSERT_FALSE (node->ledger.store.account.get (transaction, key.pub, account_info)); // TODO: check issue with account head - // const auto first = node->ledger.store.block.get_no_sideband(transaction, account_info.head); - // const auto second = node->ledger.store.block.get_no_sideband(transaction, first->previous()); - // const auto third = node->ledger.store.block.get_no_sideband(transaction, second->previous()); - // const auto fourth = node->ledger.store.block.get_no_sideband(transaction, third->previous()); - // const auto fifth = node->ledger.store.block.get_no_sideband(transaction, fourth->previous()); + // auto const first = node->ledger.store.block.get_no_sideband(transaction, account_info.head); + // auto const second = node->ledger.store.block.get_no_sideband(transaction, first->previous()); + // auto const third = node->ledger.store.block.get_no_sideband(transaction, second->previous()); + // auto const fourth = node->ledger.store.block.get_no_sideband(transaction, third->previous()); + // auto const fifth = node->ledger.store.block.get_no_sideband(transaction, fourth->previous()); // - // const auto expected_blocks_to_walk = { first, second, third, fourth, fifth }; + // auto const expected_blocks_to_walk = { first, second, third, fourth, fifth }; // auto expected_blocks_to_walk_itr = expected_blocks_to_walk.begin(); // // nano::ledger_walker ledger_walker{ node->ledger }; - // ledger_walker.walk_backward (account_info.block_count, [&] (const auto & block) { + // ledger_walker.walk_backward (account_info.block_count, [&] (auto const & block) { // if (expected_blocks_to_walk_itr == expected_blocks_to_walk.end()) // { // EXPECT_TRUE(false); @@ -143,14 +143,14 @@ TEST (ledger_walker, ladder_geometry) node_config.enable_voting = true; node_config.receive_minimum = 1; - const auto node = system.add_node (node_config); + auto const node = system.add_node (node_config); std::array keys{}; system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); for (auto itr = 0; itr != keys.size (); ++itr) { system.wallet (0)->insert_adhoc (keys[itr].prv); - const auto block = system.wallet (0)->send_action (nano::dev::genesis_key.pub, keys[itr].pub, 1000); + auto const block = system.wallet (0)->send_action (nano::dev::genesis_key.pub, keys[itr].pub, 1000); ASSERT_TRUE (block); ASSERT_TIMELY (3s, 1 + (itr + 1) * 2 == node->ledger.cache.cemented_count); } @@ -158,21 +158,21 @@ TEST (ledger_walker, ladder_geometry) std::vector amounts_to_send (10); std::iota (amounts_to_send.begin (), amounts_to_send.end (), 1); - const nano::account * last_destination{}; + nano::account const * last_destination{}; for (auto itr = 0; itr != amounts_to_send.size (); ++itr) { - const auto source_index = itr % keys.size (); - const auto destination_index = (source_index + 1) % keys.size (); + auto const source_index = itr % keys.size (); + auto const destination_index = (source_index + 1) % keys.size (); last_destination = &keys[destination_index].pub; - const auto send = system.wallet (0)->send_action (keys[source_index].pub, keys[destination_index].pub, amounts_to_send[itr]); + auto const send = system.wallet (0)->send_action (keys[source_index].pub, keys[destination_index].pub, amounts_to_send[itr]); ASSERT_TRUE (send); ASSERT_TIMELY (3s, 1 + keys.size () * 2 + (itr + 1) * 2 == node->ledger.cache.cemented_count); } ASSERT_TRUE (last_destination); nano::account_info last_destination_info{}; - const auto last_destination_read_error = node->ledger.store.account.get (node->ledger.store.tx_begin_read (), *last_destination, last_destination_info); + auto const last_destination_read_error = node->ledger.store.account.get (node->ledger.store.tx_begin_read (), *last_destination, last_destination_info); ASSERT_FALSE (last_destination_read_error); // This is how we expect chains to look like (for 3 accounts and 10 amounts to be sent) @@ -185,13 +185,13 @@ TEST (ledger_walker, ladder_geometry) nano::ledger_walker ledger_walker{ node->ledger }; ledger_walker.walk_backward (last_destination_info.head, - [&] (const auto & block) { + [&] (auto const & block) { if (block->sideband ().details.is_receive) { nano::amount previous_balance{}; if (!block->previous ().is_zero ()) { - const auto previous_block = node->ledger.store.block.get_no_sideband (node->ledger.store.tx_begin_read (), block->previous ()); + auto const previous_block = node->ledger.store.block.get_no_sideband (node->ledger.store.tx_begin_read (), block->previous ()); previous_balance = previous_block->balance (); } @@ -204,13 +204,13 @@ TEST (ledger_walker, ladder_geometry) auto amounts_expected_itr = amounts_expected_backwards.crbegin (); ledger_walker.walk (last_destination_info.head, - [&] (const auto & block) { + [&] (auto const & block) { if (block->sideband ().details.is_receive) { nano::amount previous_balance{}; if (!block->previous ().is_zero ()) { - const auto previous_block = node->ledger.store.block.get_no_sideband (node->ledger.store.tx_begin_read (), block->previous ()); + auto const previous_block = node->ledger.store.block.get_no_sideband (node->ledger.store.tx_begin_read (), block->previous ()); previous_balance = previous_block->balance (); } diff --git a/nano/core_test/node.cpp b/nano/core_test/node.cpp index edd90a3c4a..6a8597e8cc 100644 --- a/nano/core_test/node.cpp +++ b/nano/core_test/node.cpp @@ -22,7 +22,7 @@ void add_required_children_node_config_tree (nano::jsonconfig & tree); TEST (node, null_account) { - const auto & null_account = nano::account::null (); + auto const & null_account = nano::account::null (); ASSERT_TRUE (null_account == nullptr); ASSERT_FALSE (null_account != nullptr); @@ -949,7 +949,7 @@ TEST (json, backup) }; auto get_file_count = [&dir] () { - return std::count_if (boost::filesystem::directory_iterator (dir), boost::filesystem::directory_iterator (), static_cast (boost::filesystem::is_regular_file)); + return std::count_if (boost::filesystem::directory_iterator (dir), boost::filesystem::directory_iterator (), static_cast (boost::filesystem::is_regular_file)); }; // There should only be the original file in this directory diff --git a/nano/core_test/peer_container.cpp b/nano/core_test/peer_container.cpp index 94384a5361..2ae9a3c58a 100644 --- a/nano/core_test/peer_container.cpp +++ b/nano/core_test/peer_container.cpp @@ -125,7 +125,7 @@ TEST (peer_container, list_fanout) ASSERT_EQ (0, node.network.fanout ()); auto list1 (node.network.list (node.network.fanout ())); ASSERT_TRUE (list1.empty ()); - auto add_peer = [&node] (const uint16_t port_a) { + auto add_peer = [&node] (uint16_t const port_a) { ASSERT_NE (nullptr, node.network.udp_channels.insert (nano::endpoint (boost::asio::ip::address_v6::loopback (), port_a), node.network_params.network.protocol_version)); }; add_peer (9998); diff --git a/nano/fuzzer_test/fuzz_bignum.cpp b/nano/fuzzer_test/fuzz_bignum.cpp index 5ead68e282..96ee636a64 100644 --- a/nano/fuzzer_test/fuzz_bignum.cpp +++ b/nano/fuzzer_test/fuzz_bignum.cpp @@ -1,7 +1,7 @@ #include /** Fuzz decimal, hex and account parsing */ -void fuzz_bignum_parsers (const uint8_t * Data, size_t Size) +void fuzz_bignum_parsers (uint8_t const * Data, size_t Size) { try { @@ -29,7 +29,7 @@ void fuzz_bignum_parsers (const uint8_t * Data, size_t Size) } /** Fuzzer entry point */ -extern "C" int LLVMFuzzerTestOneInput (const uint8_t * Data, size_t Size) +extern "C" int LLVMFuzzerTestOneInput (uint8_t const * Data, size_t Size) { fuzz_bignum_parsers (Data, Size); return 0; diff --git a/nano/fuzzer_test/fuzz_buffer.cpp b/nano/fuzzer_test/fuzz_buffer.cpp index be4d41b466..161ccdcfc4 100644 --- a/nano/fuzzer_test/fuzz_buffer.cpp +++ b/nano/fuzzer_test/fuzz_buffer.cpp @@ -56,7 +56,7 @@ class fuzz_visitor : public nano::message_visitor } /** Fuzz live message parsing. This covers parsing and block/vote uniquing. */ -void fuzz_message_parser (const uint8_t * Data, size_t Size) +void fuzz_message_parser (uint8_t const * Data, size_t Size) { static bool initialized = false; if (!initialized) @@ -73,7 +73,7 @@ void fuzz_message_parser (const uint8_t * Data, size_t Size) } /** Fuzzer entry point */ -extern "C" int LLVMFuzzerTestOneInput (const uint8_t * Data, size_t Size) +extern "C" int LLVMFuzzerTestOneInput (uint8_t const * Data, size_t Size) { fuzz_message_parser (Data, Size); return 0; diff --git a/nano/fuzzer_test/fuzz_endpoint_parsing.cpp b/nano/fuzzer_test/fuzz_endpoint_parsing.cpp index 0308787d1f..b132a9321e 100644 --- a/nano/fuzzer_test/fuzz_endpoint_parsing.cpp +++ b/nano/fuzzer_test/fuzz_endpoint_parsing.cpp @@ -1,7 +1,7 @@ #include /** Fuzz endpoint parsing */ -void fuzz_endpoint_parsing (const uint8_t * Data, size_t Size) +void fuzz_endpoint_parsing (uint8_t const * Data, size_t Size) { auto data (std::string (reinterpret_cast (const_cast (Data)), Size)); nano::endpoint endpoint; @@ -11,7 +11,7 @@ void fuzz_endpoint_parsing (const uint8_t * Data, size_t Size) } /** Fuzzer entry point */ -extern "C" int LLVMFuzzerTestOneInput (const uint8_t * Data, size_t Size) +extern "C" int LLVMFuzzerTestOneInput (uint8_t const * Data, size_t Size) { fuzz_endpoint_parsing (Data, Size); return 0; diff --git a/nano/lib/asio.cpp b/nano/lib/asio.cpp index 6d0a5b7fed..b73e1b8630 100644 --- a/nano/lib/asio.cpp +++ b/nano/lib/asio.cpp @@ -1,6 +1,6 @@ #include -nano::shared_const_buffer::shared_const_buffer (const std::vector & data) : +nano::shared_const_buffer::shared_const_buffer (std::vector const & data) : m_data (std::make_shared> (data)), m_buffer (boost::asio::buffer (*m_data)) { @@ -29,17 +29,17 @@ nano::shared_const_buffer::shared_const_buffer (std::shared_ptr const & data); explicit shared_const_buffer (uint8_t data); @@ -16,10 +16,10 @@ class shared_const_buffer explicit shared_const_buffer (std::vector && data); explicit shared_const_buffer (std::shared_ptr> const & data); - const boost::asio::const_buffer * begin () const; - const boost::asio::const_buffer * end () const; + boost::asio::const_buffer const * begin () const; + boost::asio::const_buffer const * end () const; - size_t size () const; + std::size_t size () const; private: std::shared_ptr> m_data; diff --git a/nano/lib/blocks.hpp b/nano/lib/blocks.hpp index 5a5b875e84..3d5796276d 100644 --- a/nano/lib/blocks.hpp +++ b/nano/lib/blocks.hpp @@ -139,7 +139,7 @@ class send_hashables nano::block_hash previous; nano::account destination; nano::amount balance; - static size_t constexpr size = sizeof (previous) + sizeof (destination) + sizeof (balance); + static std::size_t constexpr size = sizeof (previous) + sizeof (destination) + sizeof (balance); }; class send_block : public nano::block { @@ -173,7 +173,7 @@ class send_block : public nano::block send_hashables hashables; nano::signature signature; uint64_t work; - static size_t constexpr size = nano::send_hashables::size + sizeof (signature) + sizeof (work); + static std::size_t constexpr size = nano::send_hashables::size + sizeof (signature) + sizeof (work); }; class receive_hashables { @@ -185,7 +185,7 @@ class receive_hashables void hash (blake2b_state &) const; nano::block_hash previous; nano::block_hash source; - static size_t constexpr size = sizeof (previous) + sizeof (source); + static std::size_t constexpr size = sizeof (previous) + sizeof (source); }; class receive_block : public nano::block { @@ -218,7 +218,7 @@ class receive_block : public nano::block receive_hashables hashables; nano::signature signature; uint64_t work; - static size_t constexpr size = nano::receive_hashables::size + sizeof (signature) + sizeof (work); + static std::size_t constexpr size = nano::receive_hashables::size + sizeof (signature) + sizeof (work); }; class open_hashables { @@ -231,7 +231,7 @@ class open_hashables nano::block_hash source; nano::account representative; nano::account account; - static size_t constexpr size = sizeof (source) + sizeof (representative) + sizeof (account); + static std::size_t constexpr size = sizeof (source) + sizeof (representative) + sizeof (account); }; class open_block : public nano::block { @@ -267,7 +267,7 @@ class open_block : public nano::block nano::open_hashables hashables; nano::signature signature; uint64_t work; - static size_t constexpr size = nano::open_hashables::size + sizeof (signature) + sizeof (work); + static std::size_t constexpr size = nano::open_hashables::size + sizeof (signature) + sizeof (work); }; class change_hashables { @@ -279,7 +279,7 @@ class change_hashables void hash (blake2b_state &) const; nano::block_hash previous; nano::account representative; - static size_t constexpr size = sizeof (previous) + sizeof (representative); + static std::size_t constexpr size = sizeof (previous) + sizeof (representative); }; class change_block : public nano::block { @@ -312,7 +312,7 @@ class change_block : public nano::block nano::change_hashables hashables; nano::signature signature; uint64_t work; - static size_t constexpr size = nano::change_hashables::size + sizeof (signature) + sizeof (work); + static std::size_t constexpr size = nano::change_hashables::size + sizeof (signature) + sizeof (work); }; class state_hashables { @@ -337,7 +337,7 @@ class state_hashables // Link field contains source block_hash if receiving, destination account if sending nano::link link; // Serialized size - static size_t constexpr size = sizeof (account) + sizeof (previous) + sizeof (representative) + sizeof (balance) + sizeof (link); + static std::size_t constexpr size = sizeof (account) + sizeof (previous) + sizeof (representative) + sizeof (balance) + sizeof (link); }; class state_block : public nano::block { @@ -373,7 +373,7 @@ class state_block : public nano::block nano::state_hashables hashables; nano::signature signature; uint64_t work; - static size_t constexpr size = nano::state_hashables::size + sizeof (signature) + sizeof (work); + static std::size_t constexpr size = nano::state_hashables::size + sizeof (signature) + sizeof (work); }; class block_visitor { @@ -401,7 +401,7 @@ class mutable_block_visitor class block_uniquer { public: - using value_type = std::pair>; + using value_type = std::pair>; std::shared_ptr unique (std::shared_ptr const &); size_t size (); diff --git a/nano/lib/config.cpp b/nano/lib/config.cpp index 6d2dc48e0e..4095764723 100644 --- a/nano/lib/config.cpp +++ b/nano/lib/config.cpp @@ -210,7 +210,7 @@ bool nano::work_thresholds::validate_entry (nano::block const & block_a) const namespace nano { -const char * network_constants::active_network_err_msg = "Invalid network. Valid values are live, test, beta and dev."; +char const * network_constants::active_network_err_msg = "Invalid network. Valid values are live, test, beta and dev."; uint8_t get_major_node_version () { diff --git a/nano/lib/config.hpp b/nano/lib/config.hpp index 53412f3aac..a09aed7c64 100644 --- a/nano/lib/config.hpp +++ b/nano/lib/config.hpp @@ -22,26 +22,26 @@ namespace filesystem /** * Returns build version information */ -const char * const NANO_VERSION_STRING = xstr (TAG_VERSION_STRING); -const char * const NANO_MAJOR_VERSION_STRING = xstr (MAJOR_VERSION_STRING); -const char * const NANO_MINOR_VERSION_STRING = xstr (MINOR_VERSION_STRING); -const char * const NANO_PATCH_VERSION_STRING = xstr (PATCH_VERSION_STRING); -const char * const NANO_PRE_RELEASE_VERSION_STRING = xstr (PRE_RELEASE_VERSION_STRING); +char const * const NANO_VERSION_STRING = xstr (TAG_VERSION_STRING); +char const * const NANO_MAJOR_VERSION_STRING = xstr (MAJOR_VERSION_STRING); +char const * const NANO_MINOR_VERSION_STRING = xstr (MINOR_VERSION_STRING); +char const * const NANO_PATCH_VERSION_STRING = xstr (PATCH_VERSION_STRING); +char const * const NANO_PRE_RELEASE_VERSION_STRING = xstr (PRE_RELEASE_VERSION_STRING); -const char * const BUILD_INFO = xstr (GIT_COMMIT_HASH BOOST_COMPILER) " \"BOOST " xstr (BOOST_VERSION) "\" BUILT " xstr (__DATE__); +char const * const BUILD_INFO = xstr (GIT_COMMIT_HASH BOOST_COMPILER) " \"BOOST " xstr (BOOST_VERSION) "\" BUILT " xstr (__DATE__); /** Is TSAN/ASAN dev build */ #if defined(__has_feature) #if __has_feature(thread_sanitizer) || __has_feature(address_sanitizer) -const bool is_sanitizer_build = true; +bool const is_sanitizer_build = true; #else -const bool is_sanitizer_build = false; +bool const is_sanitizer_build = false; #endif // GCC builds #elif defined(__SANITIZE_THREAD__) || defined(__SANITIZE_ADDRESS__) const bool is_sanitizer_build = true; #else -const bool is_sanitizer_build = false; +bool const is_sanitizer_build = false; #endif namespace nano @@ -125,10 +125,10 @@ class work_thresholds bool validate_entry (nano::block const &) const; /** Network work thresholds. Define these inline as constexpr when moving to cpp17. */ - static const nano::work_thresholds publish_full; - static const nano::work_thresholds publish_beta; - static const nano::work_thresholds publish_dev; - static const nano::work_thresholds publish_test; + static nano::work_thresholds const publish_full; + static nano::work_thresholds const publish_beta; + static nano::work_thresholds const publish_dev; + static nano::work_thresholds const publish_test; }; class network_constants @@ -164,7 +164,7 @@ class network_constants } /** Error message when an invalid network is specified */ - static const char * active_network_err_msg; + static char const * active_network_err_msg; /** The network this param object represents. This may differ from the global active network; this is needed for certain --debug... commands */ nano::networks current_network{ nano::network_constants::active_network }; @@ -243,7 +243,7 @@ class network_constants return error; } - const char * get_current_network_as_string () + char const * get_current_network_as_string () { return is_live_network () ? "live" : is_beta_network () ? "beta" : is_test_network () ? "test" diff --git a/nano/lib/errors.cpp b/nano/lib/errors.cpp index 41e2b2003a..742a7d2ae0 100644 --- a/nano/lib/errors.cpp +++ b/nano/lib/errors.cpp @@ -280,30 +280,31 @@ std::string nano::error_config_messages::message (int ev) const return "Invalid error code"; } -const char * nano::error_conversion::detail::generic_category::name () const noexcept +char const * nano::error_conversion::detail::generic_category::name () const noexcept { return boost::system::generic_category ().name (); } + std::string nano::error_conversion::detail::generic_category::message (int value) const { return boost::system::generic_category ().message (value); } -const std::error_category & nano::error_conversion::generic_category () +std::error_category const & nano::error_conversion::generic_category () { static detail::generic_category instance; return instance; } -std::error_code nano::error_conversion::convert (const boost::system::error_code & error) +std::error_code nano::error_conversion::convert (boost::system::error_code const & error) { if (error.category () == boost::system::generic_category ()) { return std::error_code (error.value (), nano::error_conversion::generic_category ()); } - debug_assert (false); + debug_assert (false); return nano::error_common::invalid_type_conversion; } @@ -344,7 +345,7 @@ nano::error & nano::error::operator= (nano::error && err_a) } /** Assign error code */ -nano::error & nano::error::operator= (const std::error_code code_a) +nano::error & nano::error::operator= (std::error_code const code_a) { code = code_a; message.clear (); @@ -352,7 +353,7 @@ nano::error & nano::error::operator= (const std::error_code code_a) } /** Assign boost error code (as converted to std::error_code) */ -nano::error & nano::error::operator= (const boost::system::error_code & code_a) +nano::error & nano::error::operator= (boost::system::error_code const & code_a) { code = nano::error_conversion::convert (code_a); message.clear (); @@ -360,7 +361,7 @@ nano::error & nano::error::operator= (const boost::system::error_code & code_a) } /** Assign boost error code (as converted to std::error_code) */ -nano::error & nano::error::operator= (const boost::system::errc::errc_t & code_a) +nano::error & nano::error::operator= (boost::system::errc::errc_t const & code_a) { code = nano::error_conversion::convert (boost::system::errc::make_error_code (code_a)); message.clear (); @@ -368,7 +369,7 @@ nano::error & nano::error::operator= (const boost::system::errc::errc_t & code_a } /** Set the error to nano::error_common::generic and the error message to \p message_a */ -nano::error & nano::error::operator= (const std::string message_a) +nano::error & nano::error::operator= (std::string message_a) { code = nano::error_common::generic; message = std::move (message_a); @@ -384,13 +385,13 @@ nano::error & nano::error::operator= (std::exception const & exception_a) } /** Return true if this#error_code equals the parameter */ -bool nano::error::operator== (const std::error_code code_a) const +bool nano::error::operator== (std::error_code const code_a) const { return code == code_a; } /** Return true if this#error_code equals the parameter */ -bool nano::error::operator== (const boost::system::error_code code_a) const +bool nano::error::operator== (boost::system::error_code const code_a) const { return code.value () == code_a.value (); } @@ -461,7 +462,7 @@ nano::error & nano::error::on_error (std::error_code code_a, std::string message /** Set an error message and an error code */ nano::error & nano::error::set (std::string message_a, std::error_code code_a) { - message = message_a; + message = std::move (message_a); code = code_a; return *this; } @@ -485,6 +486,7 @@ nano::error & nano::error::clear () return *this; } +// TODO: theoretically, nothing besides template (partial) specializations should ever be added inside std... namespace std { std::error_code make_error_code (boost::system::errc::errc_t const & e) diff --git a/nano/lib/errors.hpp b/nano/lib/errors.hpp index 4694818fe4..3ec399ccbc 100644 --- a/nano/lib/errors.hpp +++ b/nano/lib/errors.hpp @@ -163,7 +163,7 @@ enum class error_config class enum_type##_messages : public std::error_category \ { \ public: \ - const char * name () const noexcept override \ + char const * name () const noexcept override \ { \ return #enum_type; \ } \ @@ -171,7 +171,7 @@ enum class error_config std::string message (int ev) const override; \ }; \ \ - inline const std::error_category & enum_type##_category () \ + inline std::error_category const & enum_type##_category () \ { \ static enum_type##_messages instance; \ return instance; \ @@ -201,7 +201,7 @@ namespace nano { namespace error_conversion { - const std::error_category & generic_category (); + std::error_category const & generic_category (); } } @@ -224,12 +224,12 @@ namespace error_conversion class generic_category : public std::error_category { public: - const char * name () const noexcept override; + char const * name () const noexcept override; std::string message (int value) const override; }; } - const std::error_category & generic_category (); - std::error_code convert (const boost::system::error_code & error); + std::error_category const & generic_category (); + std::error_code convert (boost::system::error_code const & error); } } @@ -249,13 +249,13 @@ class error error (std::exception const & exception_a); error & operator= (nano::error const & err_a); error & operator= (nano::error && err_a); - error & operator= (const std::error_code code_a); - error & operator= (const boost::system::error_code & code_a); - error & operator= (const boost::system::errc::errc_t & code_a); - error & operator= (const std::string message_a); + error & operator= (std::error_code code_a); + error & operator= (boost::system::error_code const & code_a); + error & operator= (boost::system::errc::errc_t const & code_a); + error & operator= (std::string message_a); error & operator= (std::exception const & exception_a); - bool operator== (const std::error_code code_a) const; - bool operator== (const boost::system::error_code code_a) const; + bool operator== (std::error_code code_a) const; + bool operator== (boost::system::error_code code_a) const; error & then (std::function next); template error & accept (ErrorCode... err) diff --git a/nano/lib/ipc.cpp b/nano/lib/ipc.cpp index 82a7ce2e33..3d870f866c 100644 --- a/nano/lib/ipc.cpp +++ b/nano/lib/ipc.cpp @@ -11,7 +11,7 @@ void nano::ipc::socket_base::timer_start (std::chrono::seconds timeout_a) if (timeout_a < std::chrono::seconds::max ()) { io_timer.expires_from_now (boost::posix_time::seconds (static_cast (timeout_a.count ()))); - io_timer.async_wait ([this] (const boost::system::error_code & ec) { + io_timer.async_wait ([this] (boost::system::error_code const & ec) { if (!ec) { this->timer_expired (); diff --git a/nano/lib/ipc_client.cpp b/nano/lib/ipc_client.cpp index 8be1091a87..073735faa5 100644 --- a/nano/lib/ipc_client.cpp +++ b/nano/lib/ipc_client.cpp @@ -208,7 +208,7 @@ class client_impl : public nano::ipc::ipc_client_impl tcp_client->async_resolve (host_a, port_a, [this, callback_a] (boost::system::error_code const & ec_resolve_a, boost::asio::ip::tcp::endpoint endpoint_a) { if (!ec_resolve_a) { - this->tcp_client->async_connect ([callback_a] (const boost::system::error_code & ec_connect_a) { + this->tcp_client->async_connect ([callback_a] (boost::system::error_code const & ec_connect_a) { callback_a (nano::error (ec_connect_a)); }); } @@ -278,7 +278,7 @@ nano::error nano::ipc::ipc_client::connect (std::string const & host, uint16_t p void nano::ipc::ipc_client::async_write (nano::shared_const_buffer const & buffer_a, std::function callback_a) { auto client (boost::polymorphic_downcast (impl.get ())); - client->get_channel ().async_write (buffer_a, [callback_a] (const boost::system::error_code & ec_a, size_t bytes_written_a) { + client->get_channel ().async_write (buffer_a, [callback_a] (boost::system::error_code const & ec_a, size_t bytes_written_a) { callback_a (nano::error (ec_a), bytes_written_a); }); } @@ -286,7 +286,7 @@ void nano::ipc::ipc_client::async_write (nano::shared_const_buffer const & buffe void nano::ipc::ipc_client::async_read (std::shared_ptr> const & buffer_a, size_t size_a, std::function callback_a) { auto client (boost::polymorphic_downcast (impl.get ())); - client->get_channel ().async_read (buffer_a, size_a, [callback_a, buffer_a] (const boost::system::error_code & ec_a, size_t bytes_read_a) { + client->get_channel ().async_read (buffer_a, size_a, [callback_a, buffer_a] (boost::system::error_code const & ec_a, size_t bytes_read_a) { callback_a (nano::error (ec_a), bytes_read_a); }); } @@ -295,7 +295,7 @@ void nano::ipc::ipc_client::async_read (std::shared_ptr> co void nano::ipc::ipc_client::async_read_message (std::shared_ptr> const & buffer_a, std::chrono::seconds timeout_a, std::function callback_a) { auto client (boost::polymorphic_downcast (impl.get ())); - client->get_channel ().async_read_message (buffer_a, timeout_a, [callback_a, buffer_a] (const boost::system::error_code & ec_a, size_t bytes_read_a) { + client->get_channel ().async_read_message (buffer_a, timeout_a, [callback_a, buffer_a] (boost::system::error_code const & ec_a, size_t bytes_read_a) { callback_a (nano::error (ec_a), bytes_read_a); }); } diff --git a/nano/lib/locks.cpp b/nano/lib/locks.cpp index 4473ef379e..56a018b13d 100644 --- a/nano/lib/locks.cpp +++ b/nano/lib/locks.cpp @@ -10,9 +10,9 @@ #if USING_NANO_TIMED_LOCKS namespace nano { -// These mutexes must have std::mutex interface in addition to "const char* get_name ()" method +// These mutexes must have std::mutex interface in addition to "char const * get_name ()" method template -void output (const char * str, std::chrono::milliseconds time, Mutex & mutex) +void output (char const * str, std::chrono::milliseconds time, Mutex & mutex) { static nano::mutex cout_mutex; auto stacktrace = nano::generate_stacktrace (); @@ -232,7 +232,7 @@ void condition_variable::wait (nano::unique_lock & lk) nano::mutex * mutex_to_filter{ nullptr }; nano::mutex mutex_to_filter_mutex; -bool should_be_filtered (const char * name) +bool should_be_filtered (char const * name) { return std::strcmp (name, xstr (NANO_TIMED_LOCKS_FILTER)) == 0; } diff --git a/nano/lib/locks.hpp b/nano/lib/locks.hpp index ef1217b36f..cb490e455c 100644 --- a/nano/lib/locks.hpp +++ b/nano/lib/locks.hpp @@ -14,7 +14,7 @@ namespace nano class mutex; extern nano::mutex * mutex_to_filter; extern nano::mutex mutex_to_filter_mutex; -bool should_be_filtered (const char * name); +bool should_be_filtered (char const * name); bool any_filters_registered (); enum class mutexes @@ -45,7 +45,7 @@ class mutex { public: mutex () = default; - mutex (const char * name_a) + mutex (char const * name_a) #if USING_NANO_TIMED_LOCKS : name (name_a) @@ -90,7 +90,7 @@ class mutex } #if USING_NANO_TIMED_LOCKS - const char * get_name () const + char const * get_name () const { return name ? name : ""; } @@ -98,14 +98,14 @@ class mutex private: #if USING_NANO_TIMED_LOCKS - const char * name{ nullptr }; + char const * name{ nullptr }; #endif std::mutex mutex_m; }; #if USING_NANO_TIMED_LOCKS template -void output (const char * str, std::chrono::milliseconds time, Mutex & mutex); +void output (char const * str, std::chrono::milliseconds time, Mutex & mutex); template void output_if_held_long_enough (nano::timer & timer, Mutex & mutex); diff --git a/nano/lib/logger_mt.hpp b/nano/lib/logger_mt.hpp index eff7d4d297..9afd47842a 100644 --- a/nano/lib/logger_mt.hpp +++ b/nano/lib/logger_mt.hpp @@ -26,7 +26,7 @@ struct severity_tag; inline boost::log::formatting_ostream & operator<< (boost::log::formatting_ostream & strm, boost::log::to_log_manip const & manip) { // Needs to match order in the severity_level enum - static std::array strings = { + static std::array strings = { "", "Error: " }; diff --git a/nano/lib/numbers.cpp b/nano/lib/numbers.cpp index e6206aa512..63cc96b199 100644 --- a/nano/lib/numbers.cpp +++ b/nano/lib/numbers.cpp @@ -67,7 +67,7 @@ nano::public_key::public_key () : { } -const nano::public_key & nano::public_key::null () +nano::public_key const & nano::public_key::null () { return nano::hardened_constants::get ().not_an_account; } @@ -656,7 +656,7 @@ void format_frac (std::ostringstream & stream, nano::uint128_t value, nano::uint } } -void format_dec (std::ostringstream & stream, nano::uint128_t value, char group_sep, const std::string & groupings) +void format_dec (std::ostringstream & stream, nano::uint128_t value, char group_sep, std::string const & groupings) { auto largestPow10 = nano::uint256_t (1); int dec_count = 1; @@ -760,7 +760,7 @@ std::string nano::uint128_union::format_balance (nano::uint128_t scale, int prec return ::format_balance (number (), scale, precision, group_digits, thousands_sep, decimal_point, grouping); } -std::string nano::uint128_union::format_balance (nano::uint128_t scale, int precision, bool group_digits, const std::locale & locale) const +std::string nano::uint128_union::format_balance (nano::uint128_t scale, int precision, bool group_digits, std::locale const & locale) const { auto thousands_sep = std::use_facet> (locale).thousands_sep (); auto decimal_point = std::use_facet> (locale).decimal_point (); diff --git a/nano/lib/numbers.hpp b/nano/lib/numbers.hpp index fc9542110a..77775d5998 100644 --- a/nano/lib/numbers.hpp +++ b/nano/lib/numbers.hpp @@ -35,7 +35,7 @@ class uint128_union bool decode_dec (std::string const &, bool = false); bool decode_dec (std::string const &, nano::uint128_t); std::string format_balance (nano::uint128_t scale, int precision, bool group_digits) const; - std::string format_balance (nano::uint128_t scale, int precision, bool group_digits, const std::locale & locale) const; + std::string format_balance (nano::uint128_t scale, int precision, bool group_digits, std::locale const & locale) const; nano::uint128_t number () const; void clear (); bool is_zero () const; @@ -247,7 +247,7 @@ nano::signature sign_message (nano::raw_key const &, nano::public_key const &, n nano::signature sign_message (nano::raw_key const &, nano::public_key const &, uint8_t const *, size_t); bool validate_message (nano::public_key const &, nano::uint256_union const &, nano::signature const &); bool validate_message (nano::public_key const &, uint8_t const *, size_t, nano::signature const &); -bool validate_message_batch (unsigned const char **, size_t *, unsigned const char **, unsigned const char **, size_t, int *); +bool validate_message_batch (unsigned char const **, size_t *, unsigned char const **, unsigned char const **, size_t, int *); nano::raw_key deterministic_key (nano::raw_key const &, uint32_t); nano::public_key pub_key (nano::raw_key const &); diff --git a/nano/lib/plat/linux/debugging.cpp b/nano/lib/plat/linux/debugging.cpp index f0a596cf68..caee1b910e 100644 --- a/nano/lib/plat/linux/debugging.cpp +++ b/nano/lib/plat/linux/debugging.cpp @@ -16,13 +16,13 @@ int create_load_memory_address_file (dl_phdr_info * info, size_t, void *) static int counter = 0; debug_assert (counter <= 99); // Create filename - const char file_prefix[] = "nano_node_crash_load_address_dump_"; + char const file_prefix[] = "nano_node_crash_load_address_dump_"; // Holds the filename prefix, a unique (max 2 digits) number and extension (null terminator is included in file_prefix size) char filename[sizeof (file_prefix) + 2 + 4]; snprintf (filename, sizeof (filename), "%s%d.txt", file_prefix, counter); // Open file - const auto file_descriptor = ::open (filename, O_CREAT | O_WRONLY | O_TRUNC, + auto const file_descriptor = ::open (filename, O_CREAT | O_WRONLY | O_TRUNC, #if defined(S_IWRITE) && defined(S_IREAD) S_IWRITE | S_IREAD #else diff --git a/nano/lib/rep_weights.hpp b/nano/lib/rep_weights.hpp index 5360afa018..4647dd2a97 100644 --- a/nano/lib/rep_weights.hpp +++ b/nano/lib/rep_weights.hpp @@ -28,8 +28,8 @@ class rep_weights void put (nano::account const & account_a, nano::uint128_union const & representation_a); nano::uint128_t get (nano::account const & account_a) const; - friend std::unique_ptr collect_container_info (rep_weights const &, const std::string &); + friend std::unique_ptr collect_container_info (rep_weights const &, std::string const &); }; -std::unique_ptr collect_container_info (rep_weights const &, const std::string &); +std::unique_ptr collect_container_info (rep_weights const &, std::string const &); } diff --git a/nano/lib/signal_manager.cpp b/nano/lib/signal_manager.cpp index 5b1fab2468..365b37142c 100644 --- a/nano/lib/signal_manager.cpp +++ b/nano/lib/signal_manager.cpp @@ -42,14 +42,14 @@ void nano::signal_manager::register_signal_handler (int signum, std::functionasync_wait ([descriptor] (const boost::system::error_code & error, int signum) { + sigset->async_wait ([descriptor] (boost::system::error_code const & error, int signum) { nano::signal_manager::base_handler (descriptor, error, signum); }); log (boost::str (boost::format ("Registered signal handler for signal %d") % signum)); } -void nano::signal_manager::base_handler (nano::signal_manager::signal_descriptor descriptor, const boost::system::error_code & error, int signum) +void nano::signal_manager::base_handler (nano::signal_manager::signal_descriptor descriptor, boost::system::error_code const & error, int signum) { if (!error) { @@ -64,7 +64,7 @@ void nano::signal_manager::base_handler (nano::signal_manager::signal_descriptor // continue asynchronously listening for signals from this signal set if (descriptor.repeat) { - descriptor.sigset->async_wait ([descriptor] (const boost::system::error_code & error, int signum) { + descriptor.sigset->async_wait ([descriptor] (boost::system::error_code const & error, int signum) { nano::signal_manager::base_handler (descriptor, error, signum); }); } diff --git a/nano/lib/signal_manager.hpp b/nano/lib/signal_manager.hpp index d3e8de9d63..5012de52fb 100644 --- a/nano/lib/signal_manager.hpp +++ b/nano/lib/signal_manager.hpp @@ -61,7 +61,7 @@ class signal_manager final * This is the actual handler that is registered with boost asio. * It calls the caller supplied function (if one is given) and sets the handler to repeat (or not). */ - static void base_handler (nano::signal_manager::signal_descriptor descriptor, const boost::system::error_code & error, int signum); + static void base_handler (nano::signal_manager::signal_descriptor descriptor, boost::system::error_code const & error, int signum); /** boost asio context to use */ boost::asio::io_context ioc; diff --git a/nano/lib/threading.cpp b/nano/lib/threading.cpp index e3352c318c..809f0009c2 100644 --- a/nano/lib/threading.cpp +++ b/nano/lib/threading.cpp @@ -243,7 +243,7 @@ void nano::thread_pool::add_timed_task (std::chrono::steady_clock::time_point co if (!stopped && thread_pool_m) { auto timer = std::make_shared (thread_pool_m->get_executor (), expiry_time); - timer->async_wait ([this, task, timer] (const boost::system::error_code & ec) { + timer->async_wait ([this, task, timer] (boost::system::error_code const & ec) { if (!ec) { push_task (task); diff --git a/nano/lib/tomlconfig.cpp b/nano/lib/tomlconfig.cpp index 12cea9b3de..8d906f568d 100644 --- a/nano/lib/tomlconfig.cpp +++ b/nano/lib/tomlconfig.cpp @@ -152,7 +152,7 @@ nano::tomlconfig & nano::tomlconfig::erase (std::string const & key_a) return *this; } -std::shared_ptr nano::tomlconfig::create_array (std::string const & key, boost::optional documentation_a) +std::shared_ptr nano::tomlconfig::create_array (std::string const & key, boost::optional documentation_a) { if (!has_key (key)) { diff --git a/nano/lib/tomlconfig.hpp b/nano/lib/tomlconfig.hpp index 20c03e6062..e4d6dcfbc2 100644 --- a/nano/lib/tomlconfig.hpp +++ b/nano/lib/tomlconfig.hpp @@ -46,14 +46,14 @@ class tomlconfig : public nano::configbase tomlconfig & replace_child (std::string const & key_a, nano::tomlconfig & conf_a); bool has_key (std::string const & key_a); tomlconfig & erase (std::string const & key_a); - std::shared_ptr create_array (std::string const & key, boost::optional documentation_a); + std::shared_ptr create_array (std::string const & key, boost::optional documentation_a); void erase_default_values (tomlconfig & defaults_a); std::string to_string (); std::string to_string_commented_entries (); /** Set value for the given key. Any existing value will be overwritten. */ template - tomlconfig & put (std::string const & key, T const & value, boost::optional documentation_a = boost::none) + tomlconfig & put (std::string const & key, T const & value, boost::optional documentation_a = boost::none) { tree->insert (key, value); if (documentation_a) diff --git a/nano/lib/utility.cpp b/nano/lib/utility.cpp index 9bca0f7f6d..64111b4c41 100644 --- a/nano/lib/utility.cpp +++ b/nano/lib/utility.cpp @@ -94,12 +94,12 @@ void nano::container_info_composite::add_component (std::unique_ptr> & nano::container_info_composite::get_children () const +std::vector> const & nano::container_info_composite::get_children () const { return children; } -const std::string & nano::container_info_composite::get_name () const +std::string const & nano::container_info_composite::get_name () const { return name; } @@ -114,7 +114,7 @@ bool nano::container_info_leaf::is_composite () const return false; } -const nano::container_info & nano::container_info_leaf::get_info () const +nano::container_info const & nano::container_info_leaf::get_info () const { return info; } @@ -159,7 +159,7 @@ void nano::move_all_files_to_dir (boost::filesystem::path const & from, boost::f /* * Backing code for "release_assert" & "debug_assert", which are macros */ -void assert_internal (const char * check_expr, const char * func, const char * file, unsigned int line, bool is_release_assert, std::string_view error_msg) +void assert_internal (char const * check_expr, char const * func, char const * file, unsigned int line, bool is_release_assert, std::string_view error_msg) { std::cerr << "Assertion (" << check_expr << ") failed\n" << func << "\n" diff --git a/nano/lib/utility.hpp b/nano/lib/utility.hpp index c4157b2c48..eb0d1e7111 100644 --- a/nano/lib/utility.hpp +++ b/nano/lib/utility.hpp @@ -24,7 +24,7 @@ namespace system } } -void assert_internal (const char * check_expr, const char * func, const char * file, unsigned int line, bool is_release_assert, std::string_view error = ""); +void assert_internal (char const * check_expr, char const * func, char const * file, unsigned int line, bool is_release_assert, std::string_view error = ""); #define release_assert_1(check) check ? (void)0 : assert_internal (#check, BOOST_CURRENT_FUNCTION, __FILE__, __LINE__, true) #define release_assert_2(check, error_msg) check ? (void)0 : assert_internal (#check, BOOST_CURRENT_FUNCTION, __FILE__, __LINE__, true, error_msg) @@ -76,8 +76,8 @@ class container_info_composite : public container_info_component container_info_composite (std::string const & name); bool is_composite () const override; void add_component (std::unique_ptr child); - const std::vector> & get_children () const; - const std::string & get_name () const; + std::vector> const & get_children () const; + std::string const & get_name () const; private: std::string name; @@ -89,7 +89,7 @@ class container_info_leaf : public container_info_component public: container_info_leaf (container_info const & info); bool is_composite () const override; - const container_info & get_info () const; + container_info const & get_info () const; private: container_info info; diff --git a/nano/nano_node/daemon.cpp b/nano/nano_node/daemon.cpp index e615b58427..3a21161497 100644 --- a/nano/nano_node/daemon.cpp +++ b/nano/nano_node/daemon.cpp @@ -103,7 +103,7 @@ void nano_daemon::daemon::run (boost::filesystem::path const & data_path, nano:: logger.always_log (initialization_text); nano::set_file_descriptor_limit (OPEN_FILE_DESCRIPTORS_LIMIT); - const auto file_descriptor_limit = nano::get_file_descriptor_limit (); + auto const file_descriptor_limit = nano::get_file_descriptor_limit (); if (file_descriptor_limit < OPEN_FILE_DESCRIPTORS_LIMIT) { logger.always_log (boost::format ("WARNING: open file descriptors limit is %1%, lower than the %2% recommended. Node was unable to change it.") % file_descriptor_limit % OPEN_FILE_DESCRIPTORS_LIMIT); @@ -223,7 +223,7 @@ void nano_daemon::daemon::run (boost::filesystem::path const & data_path, nano:: std::cerr << "Error initializing node\n"; } } - catch (const std::runtime_error & e) + catch (std::runtime_error const & e) { std::cerr << "Error while running node (" << e.what () << ")\n"; } diff --git a/nano/nano_node/entry.cpp b/nano/nano_node/entry.cpp index 593a68695c..e7027375a8 100644 --- a/nano/nano_node/entry.cpp +++ b/nano/nano_node/entry.cpp @@ -357,7 +357,7 @@ int main (int argc, char * const * argv) << "Account: " << rep.pub.to_account () << "\n"; } nano::uint128_t balance (std::numeric_limits::max ()); - nano::open_block genesis_block (reinterpret_cast (genesis.pub), genesis.pub, genesis.pub, genesis.prv, genesis.pub, *work.generate (nano::work_version::work_1, genesis.pub, network_params.work.epoch_1)); + nano::open_block genesis_block (reinterpret_cast (genesis.pub), genesis.pub, genesis.pub, genesis.prv, genesis.pub, *work.generate (nano::work_version::work_1, genesis.pub, network_params.work.epoch_1)); std::cout << genesis_block.to_json (); std::cout.flush (); nano::block_hash previous (genesis_block.hash ()); @@ -773,7 +773,7 @@ int main (int argc, char * const * argv) } else { - for (const auto & text : results) + for (auto const & text : results) { uint64_from_hex address_hex; if (boost::conversion::try_lexical_convert (text, address_hex)) @@ -1317,7 +1317,7 @@ int main (int argc, char * const * argv) for (;;) { nano::random_pool::generate_block (seed.bytes.data (), seed.bytes.size ()); - std::cout.write (reinterpret_cast (seed.bytes.data ()), seed.bytes.size ()); + std::cout.write (reinterpret_cast (seed.bytes.data ()), seed.bytes.size ()); } } else if (vm.count ("debug_rpc")) @@ -1385,7 +1385,7 @@ int main (int argc, char * const * argv) ++errors; }; - auto start_threads = [node, &threads_count, &threads, &mutex, &condition, &finished] (const auto & function_a, auto & deque_a) { + auto start_threads = [node, &threads_count, &threads, &mutex, &condition, &finished] (auto const & function_a, auto & deque_a) { for (auto i (0U); i < threads_count; ++i) { threads.emplace_back ([&function_a, node, &mutex, &condition, &finished, &deque_a] () { @@ -1646,7 +1646,7 @@ int main (int argc, char * const * argv) if (accounts.size () > accounts_deque_overflow) { auto wait_ms (250 * accounts.size () / accounts_deque_overflow); - const auto wakeup (std::chrono::steady_clock::now () + std::chrono::milliseconds (wait_ms)); + auto const wakeup (std::chrono::steady_clock::now () + std::chrono::milliseconds (wait_ms)); condition.wait_until (lock, wakeup); } accounts.emplace_back (i->first, i->second); @@ -1757,7 +1757,7 @@ int main (int argc, char * const * argv) if (pending.size () > pending_deque_overflow) { auto wait_ms (50 * pending.size () / pending_deque_overflow); - const auto wakeup (std::chrono::steady_clock::now () + std::chrono::milliseconds (wait_ms)); + auto const wakeup (std::chrono::steady_clock::now () + std::chrono::milliseconds (wait_ms)); condition.wait_until (lock, wakeup); } pending.emplace_back (i->first, i->second); diff --git a/nano/nano_rpc/entry.cpp b/nano/nano_rpc/entry.cpp index c69eb01724..dc4ce2b00d 100644 --- a/nano/nano_rpc/entry.cpp +++ b/nano/nano_rpc/entry.cpp @@ -71,7 +71,7 @@ void run (boost::filesystem::path const & data_path, std::vector co rpc->stop (); } } - catch (const std::runtime_error & e) + catch (std::runtime_error const & e) { std::cerr << "Error while running rpc (" << e.what () << ")\n"; } diff --git a/nano/node/active_transactions.cpp b/nano/node/active_transactions.cpp index b296c024b0..c4481a4799 100644 --- a/nano/node/active_transactions.cpp +++ b/nano/node/active_transactions.cpp @@ -14,7 +14,7 @@ using namespace std::chrono; -size_t constexpr nano::active_transactions::max_active_elections_frontier_insertion; +std::size_t constexpr nano::active_transactions::max_active_elections_frontier_insertion; constexpr std::chrono::minutes nano::active_transactions::expired_optimistic_election_info_cutoff; @@ -294,18 +294,18 @@ void nano::active_transactions::request_confirm (nano::unique_lock { debug_assert (lock_a.owns_lock ()); - size_t const this_loop_target_l (roots.size ()); + std::size_t const this_loop_target_l (roots.size ()); auto const elections_l{ list_active_impl (this_loop_target_l) }; lock_a.unlock (); nano::confirmation_solicitor solicitor (node.network, node.config); - solicitor.prepare (node.rep_crawler.principal_representatives (std::numeric_limits::max ())); + solicitor.prepare (node.rep_crawler.principal_representatives (std::numeric_limits::max ())); nano::vote_generator_session generator_session (generator); nano::vote_generator_session final_generator_session (generator); auto const election_ttl_cutoff_l (std::chrono::steady_clock::now () - election_time_to_live); - size_t unconfirmed_count_l (0); + std::size_t unconfirmed_count_l (0); nano::timer elapsed (nano::timer_state::started); /* @@ -388,19 +388,19 @@ void nano::active_transactions::cleanup_election (nano::unique_lock node.logger.try_log (boost::str (boost::format ("Election erased for root %1%") % election.qualified_root.to_string ())); } -std::vector> nano::active_transactions::list_active (size_t max_a) +std::vector> nano::active_transactions::list_active (std::size_t max_a) { nano::lock_guard guard (mutex); return list_active_impl (max_a); } -std::vector> nano::active_transactions::list_active_impl (size_t max_a) const +std::vector> nano::active_transactions::list_active_impl (std::size_t max_a) const { std::vector> result_l; result_l.reserve (std::min (max_a, roots.size ())); { auto & sorted_roots_l (roots.get ()); - size_t count_l{ 0 }; + std::size_t count_l{ 0 }; for (auto i = sorted_roots_l.begin (), n = sorted_roots_l.end (); i != n && count_l < max_a; ++i, ++count_l) { result_l.push_back (i->election); @@ -582,20 +582,20 @@ void nano::active_transactions::request_loop () } lock.lock (); - const auto stamp_l = std::chrono::steady_clock::now (); + auto const stamp_l = std::chrono::steady_clock::now (); request_confirm (lock); if (!stopped) { - const auto min_sleep_l = std::chrono::milliseconds (node.network_params.network.request_interval_ms / 2); - const auto wakeup_l = std::max (stamp_l + std::chrono::milliseconds (node.network_params.network.request_interval_ms), std::chrono::steady_clock::now () + min_sleep_l); + auto const min_sleep_l = std::chrono::milliseconds (node.network_params.network.request_interval_ms / 2); + auto const wakeup_l = std::max (stamp_l + std::chrono::milliseconds (node.network_params.network.request_interval_ms), std::chrono::steady_clock::now () + min_sleep_l); condition.wait_until (lock, wakeup_l, [&wakeup_l, &stopped = stopped] { return stopped || std::chrono::steady_clock::now () >= wakeup_l; }); } } } -bool nano::active_transactions::prioritize_account_for_confirmation (nano::active_transactions::prioritize_num_uncemented & cementable_frontiers_a, size_t & cementable_frontiers_size_a, nano::account const & account_a, nano::account_info const & info_a, uint64_t confirmation_height_a) +bool nano::active_transactions::prioritize_account_for_confirmation (nano::active_transactions::prioritize_num_uncemented & cementable_frontiers_a, std::size_t & cementable_frontiers_size_a, nano::account const & account_a, nano::account_info const & info_a, uint64_t confirmation_height_a) { auto inserted_new{ false }; if (info_a.block_count > confirmation_height_a && !confirmation_height_processor.is_processing_block (info_a.head)) @@ -644,8 +644,8 @@ void nano::active_transactions::prioritize_frontiers_for_confirmation (nano::tra // Don't try to prioritize when there are a large number of pending confirmation heights as blocks can be cemented in the meantime, making the prioritization less reliable if (confirmation_height_processor.awaiting_processing_size () < confirmed_frontiers_max_pending_size) { - size_t priority_cementable_frontiers_size; - size_t priority_wallet_cementable_frontiers_size; + std::size_t priority_cementable_frontiers_size; + std::size_t priority_wallet_cementable_frontiers_size; { nano::lock_guard guard (mutex); priority_cementable_frontiers_size = priority_cementable_frontiers.size (); @@ -1040,7 +1040,7 @@ bool nano::active_transactions::empty () return roots.empty (); } -size_t nano::active_transactions::size () +std::size_t nano::active_transactions::size () { nano::lock_guard lock (mutex); return roots.size (); @@ -1109,19 +1109,19 @@ boost::optional nano::active_transactions::confirm_b return status_type; } -size_t nano::active_transactions::priority_cementable_frontiers_size () +std::size_t nano::active_transactions::priority_cementable_frontiers_size () { nano::lock_guard guard (mutex); return priority_cementable_frontiers.size (); } -size_t nano::active_transactions::priority_wallet_cementable_frontiers_size () +std::size_t nano::active_transactions::priority_wallet_cementable_frontiers_size () { nano::lock_guard guard (mutex); return priority_wallet_cementable_frontiers.size (); } -size_t nano::active_transactions::inactive_votes_cache_size () +std::size_t nano::active_transactions::inactive_votes_cache_size () { nano::lock_guard guard (mutex); return inactive_votes_cache.size (); @@ -1255,7 +1255,7 @@ nano::inactive_cache_status nano::active_transactions::inactive_votes_bootstrap_ return inactive_votes_bootstrap_check_impl (lock_a, tally, voters_a.size (), hash_a, previously_a); } -nano::inactive_cache_status nano::active_transactions::inactive_votes_bootstrap_check_impl (nano::unique_lock & lock_a, nano::uint128_t const & tally_a, size_t voters_size_a, nano::block_hash const & hash_a, nano::inactive_cache_status const & previously_a) +nano::inactive_cache_status nano::active_transactions::inactive_votes_bootstrap_check_impl (nano::unique_lock & lock_a, nano::uint128_t const & tally_a, std::size_t voters_size_a, nano::block_hash const & hash_a, nano::inactive_cache_status const & previously_a) { debug_assert (!lock_a.owns_lock ()); nano::inactive_cache_status status (previously_a); @@ -1304,13 +1304,13 @@ bool nano::purge_singleton_inactive_votes_cache_pool_memory () return boost::singleton_pool::purge_memory (); } -size_t nano::active_transactions::election_winner_details_size () +std::size_t nano::active_transactions::election_winner_details_size () { nano::lock_guard guard (election_winner_details_mutex); return election_winner_details.size (); } -nano::cementable_account::cementable_account (nano::account const & account_a, size_t blocks_uncemented_a) : +nano::cementable_account::cementable_account (nano::account const & account_a, std::size_t blocks_uncemented_a) : account (account_a), blocks_uncemented (blocks_uncemented_a) { } @@ -1328,10 +1328,10 @@ bool nano::frontiers_confirmation_info::can_start_elections () const std::unique_ptr nano::collect_container_info (active_transactions & active_transactions, std::string const & name) { - size_t roots_count; - size_t blocks_count; - size_t recently_confirmed_count; - size_t recently_cemented_count; + std::size_t roots_count; + std::size_t blocks_count; + std::size_t recently_confirmed_count; + std::size_t recently_cemented_count; { nano::lock_guard guard (active_transactions.mutex); diff --git a/nano/node/active_transactions.hpp b/nano/node/active_transactions.hpp index 4fe84eb34d..1411505bd0 100644 --- a/nano/node/active_transactions.hpp +++ b/nano/node/active_transactions.hpp @@ -39,7 +39,7 @@ class stat; class cementable_account final { public: - cementable_account (nano::account const & account_a, size_t blocks_uncemented_a); + cementable_account (nano::account const & account_a, std::size_t blocks_uncemented_a); nano::account account; uint64_t blocks_uncemented{ 0 }; }; @@ -103,7 +103,7 @@ class frontiers_confirmation_info public: bool can_start_elections () const; - size_t max_elections{ 0 }; + std::size_t max_elections{ 0 }; bool aggressive_mode{ false }; }; @@ -162,12 +162,12 @@ class active_transactions final std::shared_ptr election (nano::qualified_root const &) const; std::shared_ptr winner (nano::block_hash const &) const; // Returns a list of elections sorted by difficulty - std::vector> list_active (size_t = std::numeric_limits::max ()); + std::vector> list_active (std::size_t = std::numeric_limits::max ()); void erase (nano::block const &); void erase_hash (nano::block_hash const &); void erase_oldest (); bool empty (); - size_t size (); + std::size_t size (); void stop (); bool publish (std::shared_ptr const &); boost::optional confirm_block (nano::transaction const &, std::shared_ptr const &); @@ -193,10 +193,10 @@ class active_transactions final nano::confirmation_height_processor & confirmation_height_processor; nano::node & node; mutable nano::mutex mutex{ mutex_identifier (mutexes::active) }; - size_t priority_cementable_frontiers_size (); - size_t priority_wallet_cementable_frontiers_size (); - size_t inactive_votes_cache_size (); - size_t election_winner_details_size (); + std::size_t priority_cementable_frontiers_size (); + std::size_t priority_wallet_cementable_frontiers_size (); + std::size_t inactive_votes_cache_size (); + std::size_t election_winner_details_size (); void add_election_winner_details (nano::block_hash const &, std::shared_ptr const &); void remove_election_winner_details (nano::block_hash const &); @@ -233,7 +233,7 @@ class active_transactions final // Erase all blocks from active and, if not confirmed, clear digests from network filters void cleanup_election (nano::unique_lock & lock_a, nano::election const &); // Returns a list of elections sorted by difficulty, mutex must be locked - std::vector> list_active_impl (size_t) const; + std::vector> list_active_impl (std::size_t) const; nano::condition_variable condition; bool started{ false }; @@ -242,7 +242,7 @@ class active_transactions final // Maximum time an election can be kept active if it is extending the container std::chrono::seconds const election_time_to_live; - static size_t constexpr recently_confirmed_size{ 65536 }; + static std::size_t constexpr recently_confirmed_size{ 65536 }; using recent_confirmation = std::pair; // clang-format off boost::multi_index_container const &, nano::account const &, nano::uint128_t, nano::election_behavior); nano::account next_frontier_account{}; std::chrono::steady_clock::time_point next_frontier_check{ std::chrono::steady_clock::now () }; - constexpr static size_t max_active_elections_frontier_insertion{ 1000 }; + constexpr static std::size_t max_active_elections_frontier_insertion{ 1000 }; prioritize_num_uncemented priority_wallet_cementable_frontiers; prioritize_num_uncemented priority_cementable_frontiers; std::unordered_set wallet_ids_already_iterated; @@ -289,24 +289,24 @@ class active_transactions final bool skip_wallets{ false }; std::atomic optimistic_elections_count{ 0 }; void prioritize_frontiers_for_confirmation (nano::transaction const &, std::chrono::milliseconds, std::chrono::milliseconds); - bool prioritize_account_for_confirmation (prioritize_num_uncemented &, size_t &, nano::account const &, nano::account_info const &, uint64_t); + bool prioritize_account_for_confirmation (prioritize_num_uncemented &, std::size_t &, nano::account const &, nano::account_info const &, uint64_t); unsigned max_optimistic (); void set_next_frontier_check (bool); void add_expired_optimistic_election (nano::election const &); bool should_do_frontiers_confirmation () const; - static size_t constexpr max_priority_cementable_frontiers{ 100000 }; - static size_t constexpr confirmed_frontiers_max_pending_size{ 10000 }; + static std::size_t constexpr max_priority_cementable_frontiers{ 100000 }; + static std::size_t constexpr confirmed_frontiers_max_pending_size{ 10000 }; static std::chrono::minutes constexpr expired_optimistic_election_info_cutoff{ 30 }; ordered_cache inactive_votes_cache; nano::inactive_cache_status inactive_votes_bootstrap_check (nano::unique_lock &, std::vector> const &, nano::block_hash const &, nano::inactive_cache_status const &); nano::inactive_cache_status inactive_votes_bootstrap_check (nano::unique_lock &, nano::account const &, nano::block_hash const &, nano::inactive_cache_status const &); - nano::inactive_cache_status inactive_votes_bootstrap_check_impl (nano::unique_lock &, nano::uint128_t const &, size_t, nano::block_hash const &, nano::inactive_cache_status const &); + nano::inactive_cache_status inactive_votes_bootstrap_check_impl (nano::unique_lock &, nano::uint128_t const &, std::size_t, nano::block_hash const &, nano::inactive_cache_status const &); nano::inactive_cache_information find_inactive_votes_cache_impl (nano::block_hash const &); boost::thread thread; friend class election; friend class election_scheduler; - friend std::unique_ptr collect_container_info (active_transactions &, const std::string &); + friend std::unique_ptr collect_container_info (active_transactions &, std::string const &); friend class active_transactions_vote_replays_Test; friend class frontiers_confirmation_prioritize_frontiers_Test; diff --git a/nano/node/blockprocessor.cpp b/nano/node/blockprocessor.cpp index b98fd4935c..93756feb3b 100644 --- a/nano/node/blockprocessor.cpp +++ b/nano/node/blockprocessor.cpp @@ -81,7 +81,7 @@ void nano::block_processor::flush () flushing = false; } -size_t nano::block_processor::size () +std::size_t nano::block_processor::size () { nano::unique_lock lock (mutex); return (blocks.size () + state_block_signature_verification.size () + forced.size ()); @@ -337,7 +337,7 @@ void nano::block_processor::process_live (nano::transaction const & transaction_ } } -nano::process_return nano::block_processor::process_one (nano::write_transaction const & transaction_a, block_post_events & events_a, nano::unchecked_info info_a, const bool forced_a, nano::block_origin const origin_a) +nano::process_return nano::block_processor::process_one (nano::write_transaction const & transaction_a, block_post_events & events_a, nano::unchecked_info info_a, bool const forced_a, nano::block_origin const origin_a) { nano::process_return result; auto block (info_a.block); @@ -542,8 +542,8 @@ void nano::block_processor::requeue_invalid (nano::block_hash const & hash_a, na std::unique_ptr nano::collect_container_info (block_processor & block_processor, std::string const & name) { - size_t blocks_count; - size_t forced_count; + std::size_t blocks_count; + std::size_t forced_count; { nano::lock_guard guard (block_processor.mutex); diff --git a/nano/node/blockprocessor.hpp b/nano/node/blockprocessor.hpp index 132f85bdab..b3f2ace522 100644 --- a/nano/node/blockprocessor.hpp +++ b/nano/node/blockprocessor.hpp @@ -51,7 +51,7 @@ class block_processor final ~block_processor (); void stop (); void flush (); - size_t size (); + std::size_t size (); bool full (); bool half_full (); void add_local (nano::unchecked_info const & info_a); @@ -63,7 +63,7 @@ class block_processor final bool have_blocks_ready (); bool have_blocks (); void process_blocks (); - nano::process_return process_one (nano::write_transaction const &, block_post_events &, nano::unchecked_info, const bool = false, nano::block_origin const = nano::block_origin::remote); + nano::process_return process_one (nano::write_transaction const &, block_post_events &, nano::unchecked_info, bool const = false, nano::block_origin const = nano::block_origin::remote); nano::process_return process_one (nano::write_transaction const &, block_post_events &, std::shared_ptr const &); std::atomic flushing{ false }; // Delay required for average network propagartion before requesting confirmation diff --git a/nano/node/bootstrap/bootstrap.cpp b/nano/node/bootstrap/bootstrap.cpp index 17caf5328a..49a7c0de0e 100644 --- a/nano/node/bootstrap/bootstrap.cpp +++ b/nano/node/bootstrap/bootstrap.cpp @@ -17,7 +17,7 @@ nano::bootstrap_initiator::bootstrap_initiator (nano::node & node_a) : nano::thread_role::set (nano::thread_role::name::bootstrap_connections); connections->run (); })); - for (size_t i = 0; i < node.config.bootstrap_initiator_threads; ++i) + for (std::size_t i = 0; i < node.config.bootstrap_initiator_threads; ++i) { bootstrap_initiator_threads.push_back (boost::thread ([this] () { nano::thread_role::set (nano::thread_role::name::bootstrap_initiator); @@ -287,8 +287,8 @@ void nano::bootstrap_initiator::notify_listeners (bool in_progress_a) std::unique_ptr nano::collect_container_info (bootstrap_initiator & bootstrap_initiator, std::string const & name) { - size_t count; - size_t cache_count; + std::size_t count; + std::size_t cache_count; { nano::lock_guard guard (bootstrap_initiator.observers_mutex); count = bootstrap_initiator.observers.size (); @@ -387,7 +387,7 @@ std::shared_ptr nano::bootstrap_attempts::find (uint64_ } } -size_t nano::bootstrap_attempts::size () +std::size_t nano::bootstrap_attempts::size () { nano::lock_guard lock (bootstrap_attempts_mutex); return attempts.size (); diff --git a/nano/node/bootstrap/bootstrap.hpp b/nano/node/bootstrap/bootstrap.hpp index b26d55f98e..b88709f88d 100644 --- a/nano/node/bootstrap/bootstrap.hpp +++ b/nano/node/bootstrap/bootstrap.hpp @@ -61,7 +61,7 @@ class pulls_cache final mi::member>>> cache; // clang-format on - constexpr static size_t cache_size_max = 10000; + constexpr static std::size_t cache_size_max = 10000; }; class bootstrap_attempts final { @@ -70,7 +70,7 @@ class bootstrap_attempts final void remove (uint64_t); void clear (); std::shared_ptr find (uint64_t); - size_t size (); + std::size_t size (); std::atomic incremental{ 0 }; nano::mutex bootstrap_attempts_mutex; std::map> attempts; @@ -135,6 +135,6 @@ class bootstrap_limits final static constexpr std::chrono::seconds lazy_flush_delay_sec = std::chrono::seconds (5); static constexpr uint64_t lazy_batch_pull_count_resize_blocks_limit = 4 * 1024 * 1024; static constexpr double lazy_batch_pull_count_resize_ratio = 2.0; - static constexpr size_t lazy_blocks_restart_limit = 1024 * 1024; + static constexpr std::size_t lazy_blocks_restart_limit = 1024 * 1024; }; } diff --git a/nano/node/bootstrap/bootstrap_attempt.cpp b/nano/node/bootstrap/bootstrap_attempt.cpp index 801c7f0a8e..4380939b06 100644 --- a/nano/node/bootstrap/bootstrap_attempt.cpp +++ b/nano/node/bootstrap/bootstrap_attempt.cpp @@ -194,7 +194,7 @@ void nano::bootstrap_attempt::wallet_start (std::deque &) debug_assert (mode == nano::bootstrap_mode::wallet_lazy); } -size_t nano::bootstrap_attempt::wallet_size () +std::size_t nano::bootstrap_attempt::wallet_size () { debug_assert (mode == nano::bootstrap_mode::wallet_lazy); return 0; diff --git a/nano/node/bootstrap/bootstrap_attempt.hpp b/nano/node/bootstrap/bootstrap_attempt.hpp index 6dc6de8d5b..7c33b68599 100644 --- a/nano/node/bootstrap/bootstrap_attempt.hpp +++ b/nano/node/bootstrap/bootstrap_attempt.hpp @@ -36,7 +36,7 @@ class bootstrap_attempt : public std::enable_shared_from_this virtual bool process_block (std::shared_ptr const &, nano::account const &, uint64_t, nano::bulk_pull::count_t, bool, unsigned); virtual void requeue_pending (nano::account const &); virtual void wallet_start (std::deque &); - virtual size_t wallet_size (); + virtual std::size_t wallet_size (); virtual void get_information (boost::property_tree::ptree &) = 0; nano::mutex next_log_mutex; std::chrono::steady_clock::time_point next_log{ std::chrono::steady_clock::now () }; diff --git a/nano/node/bootstrap/bootstrap_bulk_pull.cpp b/nano/node/bootstrap/bootstrap_bulk_pull.cpp index 0f87250f97..dee6a7675f 100644 --- a/nano/node/bootstrap/bootstrap_bulk_pull.cpp +++ b/nano/node/bootstrap/bootstrap_bulk_pull.cpp @@ -83,7 +83,7 @@ void nano::bulk_pull_client::request () } auto this_l (shared_from_this ()); connection->channel->send ( - req, [this_l] (boost::system::error_code const & ec, size_t size_a) { + req, [this_l] (boost::system::error_code const & ec, std::size_t size_a) { if (!ec) { this_l->throttled_receive_block (); @@ -122,7 +122,7 @@ void nano::bulk_pull_client::throttled_receive_block () void nano::bulk_pull_client::receive_block () { auto this_l (shared_from_this ()); - connection->socket->async_read (connection->receive_buffer, 1, [this_l] (boost::system::error_code const & ec, size_t size_a) { + connection->socket->async_read (connection->receive_buffer, 1, [this_l] (boost::system::error_code const & ec, std::size_t size_a) { if (!ec) { this_l->received_type (); @@ -149,35 +149,35 @@ void nano::bulk_pull_client::received_type () { case nano::block_type::send: { - socket_l->async_read (connection->receive_buffer, nano::send_block::size, [this_l, type] (boost::system::error_code const & ec, size_t size_a) { + socket_l->async_read (connection->receive_buffer, nano::send_block::size, [this_l, type] (boost::system::error_code const & ec, std::size_t size_a) { this_l->received_block (ec, size_a, type); }); break; } case nano::block_type::receive: { - socket_l->async_read (connection->receive_buffer, nano::receive_block::size, [this_l, type] (boost::system::error_code const & ec, size_t size_a) { + socket_l->async_read (connection->receive_buffer, nano::receive_block::size, [this_l, type] (boost::system::error_code const & ec, std::size_t size_a) { this_l->received_block (ec, size_a, type); }); break; } case nano::block_type::open: { - socket_l->async_read (connection->receive_buffer, nano::open_block::size, [this_l, type] (boost::system::error_code const & ec, size_t size_a) { + socket_l->async_read (connection->receive_buffer, nano::open_block::size, [this_l, type] (boost::system::error_code const & ec, std::size_t size_a) { this_l->received_block (ec, size_a, type); }); break; } case nano::block_type::change: { - socket_l->async_read (connection->receive_buffer, nano::change_block::size, [this_l, type] (boost::system::error_code const & ec, size_t size_a) { + socket_l->async_read (connection->receive_buffer, nano::change_block::size, [this_l, type] (boost::system::error_code const & ec, std::size_t size_a) { this_l->received_block (ec, size_a, type); }); break; } case nano::block_type::state: { - socket_l->async_read (connection->receive_buffer, nano::state_block::size, [this_l, type] (boost::system::error_code const & ec, size_t size_a) { + socket_l->async_read (connection->receive_buffer, nano::state_block::size, [this_l, type] (boost::system::error_code const & ec, std::size_t size_a) { this_l->received_block (ec, size_a, type); }); break; @@ -202,7 +202,7 @@ void nano::bulk_pull_client::received_type () } } -void nano::bulk_pull_client::received_block (boost::system::error_code const & ec, size_t size_a, nano::block_type type_a) +void nano::bulk_pull_client::received_block (boost::system::error_code const & ec, std::size_t size_a, nano::block_type type_a) { if (!ec) { @@ -314,7 +314,7 @@ void nano::bulk_pull_account_client::request () } auto this_l (shared_from_this ()); connection->channel->send ( - req, [this_l] (boost::system::error_code const & ec, size_t size_a) { + req, [this_l] (boost::system::error_code const & ec, std::size_t size_a) { if (!ec) { this_l->receive_pending (); @@ -335,8 +335,8 @@ void nano::bulk_pull_account_client::request () void nano::bulk_pull_account_client::receive_pending () { auto this_l (shared_from_this ()); - size_t size_l (sizeof (nano::uint256_union) + sizeof (nano::uint128_union)); - connection->socket->async_read (connection->receive_buffer, size_l, [this_l, size_l] (boost::system::error_code const & ec, size_t size_a) { + std::size_t size_l (sizeof (nano::uint256_union) + sizeof (nano::uint128_union)); + connection->socket->async_read (connection->receive_buffer, size_l, [this_l, size_l] (boost::system::error_code const & ec, std::size_t size_a) { // An issue with asio is that sometimes, instead of reporting a bad file descriptor during disconnect, // we simply get a size of 0. if (size_a == size_l) @@ -494,7 +494,7 @@ void nano::bulk_pull_server::send_next () { connection->node->logger.try_log (boost::str (boost::format ("Sending block: %1%") % block->hash ().to_string ())); } - connection->socket->async_write (nano::shared_const_buffer (std::move (send_buffer)), [this_l] (boost::system::error_code const & ec, size_t size_a) { + connection->socket->async_write (nano::shared_const_buffer (std::move (send_buffer)), [this_l] (boost::system::error_code const & ec, std::size_t size_a) { this_l->sent_action (ec, size_a); }); } @@ -575,7 +575,7 @@ std::shared_ptr nano::bulk_pull_server::get_next () return result; } -void nano::bulk_pull_server::sent_action (boost::system::error_code const & ec, size_t size_a) +void nano::bulk_pull_server::sent_action (boost::system::error_code const & ec, std::size_t size_a) { if (!ec) { @@ -598,12 +598,12 @@ void nano::bulk_pull_server::send_finished () { connection->node->logger.try_log ("Bulk sending finished"); } - connection->socket->async_write (send_buffer, [this_l] (boost::system::error_code const & ec, size_t size_a) { + connection->socket->async_write (send_buffer, [this_l] (boost::system::error_code const & ec, std::size_t size_a) { this_l->no_block_sent (ec, size_a); }); } -void nano::bulk_pull_server::no_block_sent (boost::system::error_code const & ec, size_t size_a) +void nano::bulk_pull_server::no_block_sent (boost::system::error_code const & ec, std::size_t size_a) { if (!ec) { @@ -700,7 +700,7 @@ void nano::bulk_pull_account_server::send_frontier () // Send the buffer to the requestor auto this_l (shared_from_this ()); - connection->socket->async_write (nano::shared_const_buffer (std::move (send_buffer)), [this_l] (boost::system::error_code const & ec, size_t size_a) { + connection->socket->async_write (nano::shared_const_buffer (std::move (send_buffer)), [this_l] (boost::system::error_code const & ec, std::size_t size_a) { this_l->sent_action (ec, size_a); }); } @@ -756,7 +756,7 @@ void nano::bulk_pull_account_server::send_next_block () } auto this_l (shared_from_this ()); - connection->socket->async_write (nano::shared_const_buffer (std::move (send_buffer)), [this_l] (boost::system::error_code const & ec, size_t size_a) { + connection->socket->async_write (nano::shared_const_buffer (std::move (send_buffer)), [this_l] (boost::system::error_code const & ec, std::size_t size_a) { this_l->sent_action (ec, size_a); }); } @@ -853,7 +853,7 @@ std::pair, std::unique_ptrnode->logger.try_log ("Bulk sending for an account finished"); } - connection->socket->async_write (nano::shared_const_buffer (std::move (send_buffer)), [this_l] (boost::system::error_code const & ec, size_t size_a) { + connection->socket->async_write (nano::shared_const_buffer (std::move (send_buffer)), [this_l] (boost::system::error_code const & ec, std::size_t size_a) { this_l->complete (ec, size_a); }); } -void nano::bulk_pull_account_server::complete (boost::system::error_code const & ec, size_t size_a) +void nano::bulk_pull_account_server::complete (boost::system::error_code const & ec, std::size_t size_a) { if (!ec) { diff --git a/nano/node/bootstrap/bootstrap_bulk_pull.hpp b/nano/node/bootstrap/bootstrap_bulk_pull.hpp index f3a39d7978..1b488f4a9b 100644 --- a/nano/node/bootstrap/bootstrap_bulk_pull.hpp +++ b/nano/node/bootstrap/bootstrap_bulk_pull.hpp @@ -34,7 +34,7 @@ class bulk_pull_client final : public std::enable_shared_from_this connection; std::shared_ptr attempt; @@ -66,9 +66,9 @@ class bulk_pull_server final : public std::enable_shared_from_this get_next (); void send_next (); - void sent_action (boost::system::error_code const &, size_t); + void sent_action (boost::system::error_code const &, std::size_t); void send_finished (); - void no_block_sent (boost::system::error_code const &, size_t); + void no_block_sent (boost::system::error_code const &, std::size_t); std::shared_ptr connection; std::unique_ptr request; nano::block_hash current; @@ -85,9 +85,9 @@ class bulk_pull_account_server final : public std::enable_shared_from_this, std::unique_ptr> get_next (); void send_frontier (); void send_next_block (); - void sent_action (boost::system::error_code const &, size_t); + void sent_action (boost::system::error_code const &, std::size_t); void send_finished (); - void complete (boost::system::error_code const &, size_t); + void complete (boost::system::error_code const &, std::size_t); std::shared_ptr connection; std::unique_ptr request; std::unordered_set deduplication; diff --git a/nano/node/bootstrap/bootstrap_bulk_push.cpp b/nano/node/bootstrap/bootstrap_bulk_push.cpp index f784ee01be..2e15af324d 100644 --- a/nano/node/bootstrap/bootstrap_bulk_push.cpp +++ b/nano/node/bootstrap/bootstrap_bulk_push.cpp @@ -20,7 +20,7 @@ void nano::bulk_push_client::start () nano::bulk_push message{ connection->node->network_params.network }; auto this_l (shared_from_this ()); connection->channel->send ( - message, [this_l] (boost::system::error_code const & ec, size_t size_a) { + message, [this_l] (boost::system::error_code const & ec, std::size_t size_a) { if (!ec) { this_l->push (); @@ -77,7 +77,7 @@ void nano::bulk_push_client::send_finished () { nano::shared_const_buffer buffer (static_cast (nano::block_type::not_a_block)); auto this_l (shared_from_this ()); - connection->channel->send_buffer (buffer, [this_l] (boost::system::error_code const & ec, size_t size_a) { + connection->channel->send_buffer (buffer, [this_l] (boost::system::error_code const & ec, std::size_t size_a) { try { this_l->promise.set_value (false); @@ -96,7 +96,7 @@ void nano::bulk_push_client::push_block (nano::block const & block_a) nano::serialize_block (stream, block_a); } auto this_l (shared_from_this ()); - connection->channel->send_buffer (nano::shared_const_buffer (std::move (buffer)), [this_l] (boost::system::error_code const & ec, size_t size_a) { + connection->channel->send_buffer (nano::shared_const_buffer (std::move (buffer)), [this_l] (boost::system::error_code const & ec, std::size_t size_a) { if (!ec) { this_l->push (); @@ -148,7 +148,7 @@ void nano::bulk_push_server::receive () else { auto this_l (shared_from_this ()); - connection->socket->async_read (receive_buffer, 1, [this_l] (boost::system::error_code const & ec, size_t size_a) { + connection->socket->async_read (receive_buffer, 1, [this_l] (boost::system::error_code const & ec, std::size_t size_a) { if (!ec) { this_l->received_type (); @@ -173,7 +173,7 @@ void nano::bulk_push_server::received_type () case nano::block_type::send: { connection->node->stats.inc (nano::stat::type::bootstrap, nano::stat::detail::send, nano::stat::dir::in); - connection->socket->async_read (receive_buffer, nano::send_block::size, [this_l, type] (boost::system::error_code const & ec, size_t size_a) { + connection->socket->async_read (receive_buffer, nano::send_block::size, [this_l, type] (boost::system::error_code const & ec, std::size_t size_a) { this_l->received_block (ec, size_a, type); }); break; @@ -181,7 +181,7 @@ void nano::bulk_push_server::received_type () case nano::block_type::receive: { connection->node->stats.inc (nano::stat::type::bootstrap, nano::stat::detail::receive, nano::stat::dir::in); - connection->socket->async_read (receive_buffer, nano::receive_block::size, [this_l, type] (boost::system::error_code const & ec, size_t size_a) { + connection->socket->async_read (receive_buffer, nano::receive_block::size, [this_l, type] (boost::system::error_code const & ec, std::size_t size_a) { this_l->received_block (ec, size_a, type); }); break; @@ -189,7 +189,7 @@ void nano::bulk_push_server::received_type () case nano::block_type::open: { connection->node->stats.inc (nano::stat::type::bootstrap, nano::stat::detail::open, nano::stat::dir::in); - connection->socket->async_read (receive_buffer, nano::open_block::size, [this_l, type] (boost::system::error_code const & ec, size_t size_a) { + connection->socket->async_read (receive_buffer, nano::open_block::size, [this_l, type] (boost::system::error_code const & ec, std::size_t size_a) { this_l->received_block (ec, size_a, type); }); break; @@ -197,7 +197,7 @@ void nano::bulk_push_server::received_type () case nano::block_type::change: { connection->node->stats.inc (nano::stat::type::bootstrap, nano::stat::detail::change, nano::stat::dir::in); - connection->socket->async_read (receive_buffer, nano::change_block::size, [this_l, type] (boost::system::error_code const & ec, size_t size_a) { + connection->socket->async_read (receive_buffer, nano::change_block::size, [this_l, type] (boost::system::error_code const & ec, std::size_t size_a) { this_l->received_block (ec, size_a, type); }); break; @@ -205,7 +205,7 @@ void nano::bulk_push_server::received_type () case nano::block_type::state: { connection->node->stats.inc (nano::stat::type::bootstrap, nano::stat::detail::state_block, nano::stat::dir::in); - connection->socket->async_read (receive_buffer, nano::state_block::size, [this_l, type] (boost::system::error_code const & ec, size_t size_a) { + connection->socket->async_read (receive_buffer, nano::state_block::size, [this_l, type] (boost::system::error_code const & ec, std::size_t size_a) { this_l->received_block (ec, size_a, type); }); break; @@ -226,7 +226,7 @@ void nano::bulk_push_server::received_type () } } -void nano::bulk_push_server::received_block (boost::system::error_code const & ec, size_t size_a, nano::block_type type_a) +void nano::bulk_push_server::received_block (boost::system::error_code const & ec, std::size_t size_a, nano::block_type type_a) { if (!ec) { diff --git a/nano/node/bootstrap/bootstrap_bulk_push.hpp b/nano/node/bootstrap/bootstrap_bulk_push.hpp index 9ffececaee..f26ac684de 100644 --- a/nano/node/bootstrap/bootstrap_bulk_push.hpp +++ b/nano/node/bootstrap/bootstrap_bulk_push.hpp @@ -30,7 +30,7 @@ class bulk_push_server final : public std::enable_shared_from_this> receive_buffer; std::shared_ptr connection; }; diff --git a/nano/node/bootstrap/bootstrap_connections.cpp b/nano/node/bootstrap/bootstrap_connections.cpp index cfba8e7ca3..1d445b13a3 100644 --- a/nano/node/bootstrap/bootstrap_connections.cpp +++ b/nano/node/bootstrap/bootstrap_connections.cpp @@ -179,7 +179,7 @@ void nano::bootstrap_connections::connect_client (nano::tcp_endpoint const & end }); } -unsigned nano::bootstrap_connections::target_connections (size_t pulls_remaining, size_t attempts_count) +unsigned nano::bootstrap_connections::target_connections (std::size_t pulls_remaining, std::size_t attempts_count) { auto const attempts_factor = nano::narrow_cast (node.config.bootstrap_connections * attempts_count); if (attempts_factor >= node.config.bootstrap_connections_max) @@ -195,7 +195,7 @@ unsigned nano::bootstrap_connections::target_connections (size_t pulls_remaining struct block_rate_cmp { - bool operator() (const std::shared_ptr & lhs, const std::shared_ptr & rhs) const + bool operator() (std::shared_ptr const & lhs, std::shared_ptr const & rhs) const { return lhs->block_rate > rhs->block_rate; } @@ -204,8 +204,8 @@ struct block_rate_cmp void nano::bootstrap_connections::populate_connections (bool repeat) { double rate_sum = 0.0; - size_t num_pulls = 0; - size_t attempts_count = node.bootstrap_initiator.attempts.size (); + std::size_t num_pulls = 0; + std::size_t attempts_count = node.bootstrap_initiator.attempts.size (); std::priority_queue, std::vector>, block_rate_cmp> sorted_connections; std::unordered_set endpoints; { diff --git a/nano/node/bootstrap/bootstrap_connections.hpp b/nano/node/bootstrap/bootstrap_connections.hpp index 4b47bb68f4..4dcd193b83 100644 --- a/nano/node/bootstrap/bootstrap_connections.hpp +++ b/nano/node/bootstrap/bootstrap_connections.hpp @@ -53,7 +53,7 @@ class bootstrap_connections final : public std::enable_shared_from_this find_connection (nano::tcp_endpoint const & endpoint_a); void connect_client (nano::tcp_endpoint const & endpoint_a, bool push_front = false); - unsigned target_connections (size_t pulls_remaining, size_t attempts_count); + unsigned target_connections (std::size_t pulls_remaining, std::size_t attempts_count); void populate_connections (bool repeat = true); void start_populate_connections (); void add_pull (nano::pull_info const & pull_a); diff --git a/nano/node/bootstrap/bootstrap_frontier.cpp b/nano/node/bootstrap/bootstrap_frontier.cpp index 277ef0da5a..935c70eb95 100644 --- a/nano/node/bootstrap/bootstrap_frontier.cpp +++ b/nano/node/bootstrap/bootstrap_frontier.cpp @@ -10,7 +10,7 @@ constexpr double nano::bootstrap_limits::bootstrap_minimum_elapsed_seconds_block constexpr double nano::bootstrap_limits::bootstrap_minimum_frontier_blocks_per_sec; constexpr unsigned nano::bootstrap_limits::bulk_push_cost_limit; -constexpr size_t nano::frontier_req_client::size_frontier; +constexpr std::size_t nano::frontier_req_client::size_frontier; void nano::frontier_req_client::run (nano::account const & start_account_a, uint32_t const frontiers_age_a, uint32_t const count_a) { @@ -24,7 +24,7 @@ void nano::frontier_req_client::run (nano::account const & start_account_a, uint next (); // Load accounts from disk auto this_l (shared_from_this ()); connection->channel->send ( - request, [this_l] (boost::system::error_code const & ec, size_t size_a) { + request, [this_l] (boost::system::error_code const & ec, std::size_t size_a) { if (!ec) { this_l->receive_frontier (); @@ -51,7 +51,7 @@ nano::frontier_req_client::frontier_req_client (std::shared_ptrsocket->async_read (connection->receive_buffer, nano::frontier_req_client::size_frontier, [this_l] (boost::system::error_code const & ec, size_t size_a) { + connection->socket->async_read (connection->receive_buffer, nano::frontier_req_client::size_frontier, [this_l] (boost::system::error_code const & ec, std::size_t size_a) { // An issue with asio is that sometimes, instead of reporting a bad file descriptor during disconnect, // we simply get a size of 0. if (size_a == nano::frontier_req_client::size_frontier) @@ -89,7 +89,7 @@ void nano::frontier_req_client::unsynced (nano::block_hash const & head, nano::b } } -void nano::frontier_req_client::received_frontier (boost::system::error_code const & ec, size_t size_a) +void nano::frontier_req_client::received_frontier (boost::system::error_code const & ec, std::size_t size_a) { if (!ec) { @@ -216,7 +216,7 @@ void nano::frontier_req_client::next () // Filling accounts deque to prevent often read transactions if (accounts.empty ()) { - size_t max_size (128); + std::size_t max_size (128); auto transaction (connection->node->store.tx_begin_read ()); for (auto i (connection->node->store.account.begin (transaction, current.number () + 1)), n (connection->node->store.account.end ()); i != n && accounts.size () != max_size; ++i) { @@ -266,7 +266,7 @@ void nano::frontier_req_server::send_next () connection->node->logger.try_log (boost::str (boost::format ("Sending frontier for %1% %2%") % current.to_account () % frontier.to_string ())); } next (); - connection->socket->async_write (nano::shared_const_buffer (std::move (send_buffer)), [this_l] (boost::system::error_code const & ec, size_t size_a) { + connection->socket->async_write (nano::shared_const_buffer (std::move (send_buffer)), [this_l] (boost::system::error_code const & ec, std::size_t size_a) { this_l->sent_action (ec, size_a); }); } @@ -290,12 +290,12 @@ void nano::frontier_req_server::send_finished () { connection->node->logger.try_log ("Frontier sending finished"); } - connection->socket->async_write (nano::shared_const_buffer (std::move (send_buffer)), [this_l] (boost::system::error_code const & ec, size_t size_a) { + connection->socket->async_write (nano::shared_const_buffer (std::move (send_buffer)), [this_l] (boost::system::error_code const & ec, std::size_t size_a) { this_l->no_block_sent (ec, size_a); }); } -void nano::frontier_req_server::no_block_sent (boost::system::error_code const & ec, size_t size_a) +void nano::frontier_req_server::no_block_sent (boost::system::error_code const & ec, std::size_t size_a) { if (!ec) { @@ -310,7 +310,7 @@ void nano::frontier_req_server::no_block_sent (boost::system::error_code const & } } -void nano::frontier_req_server::sent_action (boost::system::error_code const & ec, size_t size_a) +void nano::frontier_req_server::sent_action (boost::system::error_code const & ec, std::size_t size_a) { if (!ec) { @@ -333,7 +333,7 @@ void nano::frontier_req_server::next () { auto now (nano::seconds_since_epoch ()); bool disable_age_filter (request->age == std::numeric_limitsage)>::max ()); - size_t max_size (128); + std::size_t max_size (128); auto transaction (connection->node->store.tx_begin_read ()); if (!send_confirmed ()) { diff --git a/nano/node/bootstrap/bootstrap_frontier.hpp b/nano/node/bootstrap/bootstrap_frontier.hpp index 5ad433e25c..2357abb7e1 100644 --- a/nano/node/bootstrap/bootstrap_frontier.hpp +++ b/nano/node/bootstrap/bootstrap_frontier.hpp @@ -15,7 +15,7 @@ class frontier_req_client final : public std::enable_shared_from_this const &, std::shared_ptr const &); void run (nano::account const & start_account_a, uint32_t const frontiers_age_a, uint32_t const count_a); void receive_frontier (); - void received_frontier (boost::system::error_code const &, size_t); + void received_frontier (boost::system::error_code const &, std::size_t); bool bulk_push_available (); void unsynced (nano::block_hash const &, nano::block_hash const &); void next (); @@ -32,7 +32,7 @@ class frontier_req_client final : public std::enable_shared_from_this> accounts; uint32_t frontiers_age{ std::numeric_limits::max () }; uint32_t count_limit{ std::numeric_limits::max () }; - static size_t constexpr size_frontier = sizeof (nano::account) + sizeof (nano::block_hash); + static std::size_t constexpr size_frontier = sizeof (nano::account) + sizeof (nano::block_hash); }; class bootstrap_server; class frontier_req; @@ -41,16 +41,16 @@ class frontier_req_server final : public std::enable_shared_from_this const &, std::unique_ptr); void send_next (); - void sent_action (boost::system::error_code const &, size_t); + void sent_action (boost::system::error_code const &, std::size_t); void send_finished (); - void no_block_sent (boost::system::error_code const &, size_t); + void no_block_sent (boost::system::error_code const &, std::size_t); void next (); bool send_confirmed (); std::shared_ptr connection; nano::account current; nano::block_hash frontier; std::unique_ptr request; - size_t count; + std::size_t count; std::deque> accounts; }; } diff --git a/nano/node/bootstrap/bootstrap_lazy.cpp b/nano/node/bootstrap/bootstrap_lazy.cpp index e7fa1198d1..aab57e6623 100644 --- a/nano/node/bootstrap/bootstrap_lazy.cpp +++ b/nano/node/bootstrap/bootstrap_lazy.cpp @@ -11,7 +11,7 @@ constexpr std::chrono::seconds nano::bootstrap_limits::lazy_flush_delay_sec; constexpr uint64_t nano::bootstrap_limits::lazy_batch_pull_count_resize_blocks_limit; constexpr double nano::bootstrap_limits::lazy_batch_pull_count_resize_ratio; -constexpr size_t nano::bootstrap_limits::lazy_blocks_restart_limit; +constexpr std::size_t nano::bootstrap_limits::lazy_blocks_restart_limit; nano::bootstrap_attempt_lazy::bootstrap_attempt_lazy (std::shared_ptr const & node_a, uint64_t incremental_id_a, std::string const & id_a) : nano::bootstrap_attempt (node_a, nano::bootstrap_mode::lazy, incremental_id_a, id_a) @@ -30,7 +30,7 @@ bool nano::bootstrap_attempt_lazy::lazy_start (nano::hash_or_account const & has nano::unique_lock lock (mutex); bool inserted (false); // Add start blocks, limit 1024 (4k with disabled legacy bootstrap) - size_t max_keys (node->flags.disable_legacy_bootstrap ? 4 * 1024 : 1024); + std::size_t max_keys (node->flags.disable_legacy_bootstrap ? 4 * 1024 : 1024); if (lazy_keys.size () < max_keys && lazy_keys.find (hash_or_account_a.as_block_hash ()) == lazy_keys.end () && !lazy_blocks_processed (hash_or_account_a.as_block_hash ())) { lazy_keys.insert (hash_or_account_a.as_block_hash ()); @@ -92,13 +92,13 @@ uint32_t nano::bootstrap_attempt_lazy::lazy_batch_size () void nano::bootstrap_attempt_lazy::lazy_pull_flush (nano::unique_lock & lock_a) { - static size_t const max_pulls (static_cast (nano::bootstrap_limits::bootstrap_connection_scale_target_blocks) * 3); + static std::size_t const max_pulls (static_cast (nano::bootstrap_limits::bootstrap_connection_scale_target_blocks) * 3); if (pulling < max_pulls) { debug_assert (node->network_params.bootstrap.lazy_max_pull_blocks <= std::numeric_limits::max ()); nano::pull_info::count_t batch_count (lazy_batch_size ()); uint64_t read_count (0); - size_t count (0); + std::size_t count (0); auto transaction (node->store.tx_begin_read ()); while (!lazy_pulls.empty () && count < max_pulls) { @@ -413,7 +413,7 @@ void nano::bootstrap_attempt_lazy::lazy_blocks_erase (nano::block_hash const & h if (erased) { --lazy_blocks_count; - debug_assert (lazy_blocks_count != std::numeric_limits::max ()); + debug_assert (lazy_blocks_count != std::numeric_limits::max ()); } } @@ -555,7 +555,7 @@ void nano::bootstrap_attempt_wallet::run () condition.notify_all (); } -size_t nano::bootstrap_attempt_wallet::wallet_size () +std::size_t nano::bootstrap_attempt_wallet::wallet_size () { nano::lock_guard lock (mutex); return wallet_accounts.size (); diff --git a/nano/node/bootstrap/bootstrap_lazy.hpp b/nano/node/bootstrap/bootstrap_lazy.hpp index b300b912e4..f456884ec3 100644 --- a/nano/node/bootstrap/bootstrap_lazy.hpp +++ b/nano/node/bootstrap/bootstrap_lazy.hpp @@ -48,15 +48,15 @@ class bootstrap_attempt_lazy final : public bootstrap_attempt bool lazy_processed_or_exists (nano::block_hash const &) override; unsigned lazy_retry_limit_confirmed (); void get_information (boost::property_tree::ptree &) override; - std::unordered_set lazy_blocks; + std::unordered_set lazy_blocks; std::unordered_map lazy_state_backlog; std::unordered_set lazy_undefined_links; std::unordered_map lazy_balances; std::unordered_set lazy_keys; std::deque> lazy_pulls; std::chrono::steady_clock::time_point lazy_start_time; - std::atomic lazy_blocks_count{ 0 }; - size_t peer_count{ 0 }; + std::atomic lazy_blocks_count{ 0 }; + std::size_t peer_count{ 0 }; /** The maximum number of records to be read in while iterating over long lazy containers */ static uint64_t constexpr batch_read_size = 256; }; @@ -70,7 +70,7 @@ class bootstrap_attempt_wallet final : public bootstrap_attempt void run () override; void wallet_start (std::deque &) override; bool wallet_finished (); - size_t wallet_size () override; + std::size_t wallet_size () override; void get_information (boost::property_tree::ptree &) override; std::deque wallet_accounts; }; diff --git a/nano/node/bootstrap/bootstrap_server.cpp b/nano/node/bootstrap/bootstrap_server.cpp index 15f107b235..29825159b2 100644 --- a/nano/node/bootstrap/bootstrap_server.cpp +++ b/nano/node/bootstrap/bootstrap_server.cpp @@ -51,7 +51,7 @@ void nano::bootstrap_listener::stop () } } -size_t nano::bootstrap_listener::connection_count () +std::size_t nano::bootstrap_listener::connection_count () { nano::lock_guard lock (mutex); return connections.size (); @@ -145,7 +145,7 @@ void nano::bootstrap_server::receive () // Increase timeout to receive TCP header (idle server socket) socket->set_timeout (node->network_params.network.idle_timeout); auto this_l (shared_from_this ()); - socket->async_read (receive_buffer, 8, [this_l] (boost::system::error_code const & ec, size_t size_a) { + socket->async_read (receive_buffer, 8, [this_l] (boost::system::error_code const & ec, std::size_t size_a) { // Set remote_endpoint if (this_l->remote_endpoint.port () == 0) { @@ -158,7 +158,7 @@ void nano::bootstrap_server::receive () }); } -void nano::bootstrap_server::receive_header_action (boost::system::error_code const & ec, size_t size_a) +void nano::bootstrap_server::receive_header_action (boost::system::error_code const & ec, std::size_t size_a) { if (!ec) { @@ -174,7 +174,7 @@ void nano::bootstrap_server::receive_header_action (boost::system::error_code co case nano::message_type::bulk_pull: { node->stats.inc (nano::stat::type::bootstrap, nano::stat::detail::bulk_pull, nano::stat::dir::in); - socket->async_read (receive_buffer, header.payload_length_bytes (), [this_l, header] (boost::system::error_code const & ec, size_t size_a) { + socket->async_read (receive_buffer, header.payload_length_bytes (), [this_l, header] (boost::system::error_code const & ec, std::size_t size_a) { this_l->receive_bulk_pull_action (ec, size_a, header); }); break; @@ -182,7 +182,7 @@ void nano::bootstrap_server::receive_header_action (boost::system::error_code co case nano::message_type::bulk_pull_account: { node->stats.inc (nano::stat::type::bootstrap, nano::stat::detail::bulk_pull_account, nano::stat::dir::in); - socket->async_read (receive_buffer, header.payload_length_bytes (), [this_l, header] (boost::system::error_code const & ec, size_t size_a) { + socket->async_read (receive_buffer, header.payload_length_bytes (), [this_l, header] (boost::system::error_code const & ec, std::size_t size_a) { this_l->receive_bulk_pull_account_action (ec, size_a, header); }); break; @@ -190,7 +190,7 @@ void nano::bootstrap_server::receive_header_action (boost::system::error_code co case nano::message_type::frontier_req: { node->stats.inc (nano::stat::type::bootstrap, nano::stat::detail::frontier_req, nano::stat::dir::in); - socket->async_read (receive_buffer, header.payload_length_bytes (), [this_l, header] (boost::system::error_code const & ec, size_t size_a) { + socket->async_read (receive_buffer, header.payload_length_bytes (), [this_l, header] (boost::system::error_code const & ec, std::size_t size_a) { this_l->receive_frontier_req_action (ec, size_a, header); }); break; @@ -206,35 +206,35 @@ void nano::bootstrap_server::receive_header_action (boost::system::error_code co } case nano::message_type::keepalive: { - socket->async_read (receive_buffer, header.payload_length_bytes (), [this_l, header] (boost::system::error_code const & ec, size_t size_a) { + socket->async_read (receive_buffer, header.payload_length_bytes (), [this_l, header] (boost::system::error_code const & ec, std::size_t size_a) { this_l->receive_keepalive_action (ec, size_a, header); }); break; } case nano::message_type::publish: { - socket->async_read (receive_buffer, header.payload_length_bytes (), [this_l, header] (boost::system::error_code const & ec, size_t size_a) { + socket->async_read (receive_buffer, header.payload_length_bytes (), [this_l, header] (boost::system::error_code const & ec, std::size_t size_a) { this_l->receive_publish_action (ec, size_a, header); }); break; } case nano::message_type::confirm_ack: { - socket->async_read (receive_buffer, header.payload_length_bytes (), [this_l, header] (boost::system::error_code const & ec, size_t size_a) { + socket->async_read (receive_buffer, header.payload_length_bytes (), [this_l, header] (boost::system::error_code const & ec, std::size_t size_a) { this_l->receive_confirm_ack_action (ec, size_a, header); }); break; } case nano::message_type::confirm_req: { - socket->async_read (receive_buffer, header.payload_length_bytes (), [this_l, header] (boost::system::error_code const & ec, size_t size_a) { + socket->async_read (receive_buffer, header.payload_length_bytes (), [this_l, header] (boost::system::error_code const & ec, std::size_t size_a) { this_l->receive_confirm_req_action (ec, size_a, header); }); break; } case nano::message_type::node_id_handshake: { - socket->async_read (receive_buffer, header.payload_length_bytes (), [this_l, header] (boost::system::error_code const & ec, size_t size_a) { + socket->async_read (receive_buffer, header.payload_length_bytes (), [this_l, header] (boost::system::error_code const & ec, std::size_t size_a) { this_l->receive_node_id_handshake_action (ec, size_a, header); }); break; @@ -260,7 +260,7 @@ void nano::bootstrap_server::receive_header_action (boost::system::error_code co } case nano::message_type::telemetry_ack: { - socket->async_read (receive_buffer, header.payload_length_bytes (), [this_l, header] (boost::system::error_code const & ec, size_t size_a) { + socket->async_read (receive_buffer, header.payload_length_bytes (), [this_l, header] (boost::system::error_code const & ec, std::size_t size_a) { this_l->receive_telemetry_ack_action (ec, size_a, header); }); break; @@ -285,7 +285,7 @@ void nano::bootstrap_server::receive_header_action (boost::system::error_code co } } -void nano::bootstrap_server::receive_bulk_pull_action (boost::system::error_code const & ec, size_t size_a, nano::message_header const & header_a) +void nano::bootstrap_server::receive_bulk_pull_action (boost::system::error_code const & ec, std::size_t size_a, nano::message_header const & header_a) { if (!ec) { @@ -307,7 +307,7 @@ void nano::bootstrap_server::receive_bulk_pull_action (boost::system::error_code } } -void nano::bootstrap_server::receive_bulk_pull_account_action (boost::system::error_code const & ec, size_t size_a, nano::message_header const & header_a) +void nano::bootstrap_server::receive_bulk_pull_account_action (boost::system::error_code const & ec, std::size_t size_a, nano::message_header const & header_a) { if (!ec) { @@ -330,7 +330,7 @@ void nano::bootstrap_server::receive_bulk_pull_account_action (boost::system::er } } -void nano::bootstrap_server::receive_frontier_req_action (boost::system::error_code const & ec, size_t size_a, nano::message_header const & header_a) +void nano::bootstrap_server::receive_frontier_req_action (boost::system::error_code const & ec, std::size_t size_a, nano::message_header const & header_a) { if (!ec) { @@ -359,7 +359,7 @@ void nano::bootstrap_server::receive_frontier_req_action (boost::system::error_c } } -void nano::bootstrap_server::receive_keepalive_action (boost::system::error_code const & ec, size_t size_a, nano::message_header const & header_a) +void nano::bootstrap_server::receive_keepalive_action (boost::system::error_code const & ec, std::size_t size_a, nano::message_header const & header_a) { if (!ec) { @@ -384,7 +384,7 @@ void nano::bootstrap_server::receive_keepalive_action (boost::system::error_code } } -void nano::bootstrap_server::receive_telemetry_ack_action (boost::system::error_code const & ec, size_t size_a, nano::message_header const & header_a) +void nano::bootstrap_server::receive_telemetry_ack_action (boost::system::error_code const & ec, std::size_t size_a, nano::message_header const & header_a) { if (!ec) { @@ -409,7 +409,7 @@ void nano::bootstrap_server::receive_telemetry_ack_action (boost::system::error_ } } -void nano::bootstrap_server::receive_publish_action (boost::system::error_code const & ec, size_t size_a, nano::message_header const & header_a) +void nano::bootstrap_server::receive_publish_action (boost::system::error_code const & ec, std::size_t size_a, nano::message_header const & header_a) { if (!ec) { @@ -450,7 +450,7 @@ void nano::bootstrap_server::receive_publish_action (boost::system::error_code c } } -void nano::bootstrap_server::receive_confirm_req_action (boost::system::error_code const & ec, size_t size_a, nano::message_header const & header_a) +void nano::bootstrap_server::receive_confirm_req_action (boost::system::error_code const & ec, std::size_t size_a, nano::message_header const & header_a) { if (!ec) { @@ -472,7 +472,7 @@ void nano::bootstrap_server::receive_confirm_req_action (boost::system::error_co } } -void nano::bootstrap_server::receive_confirm_ack_action (boost::system::error_code const & ec, size_t size_a, nano::message_header const & header_a) +void nano::bootstrap_server::receive_confirm_ack_action (boost::system::error_code const & ec, std::size_t size_a, nano::message_header const & header_a) { if (!ec) { @@ -513,7 +513,7 @@ void nano::bootstrap_server::receive_confirm_ack_action (boost::system::error_co } } -void nano::bootstrap_server::receive_node_id_handshake_action (boost::system::error_code const & ec, size_t size_a, nano::message_header const & header_a) +void nano::bootstrap_server::receive_node_id_handshake_action (boost::system::error_code const & ec, std::size_t size_a, nano::message_header const & header_a) { if (!ec) { @@ -666,7 +666,7 @@ class request_response_visitor : public nano::message_visitor auto cookie (connection->node->network.syn_cookies.assign (nano::transport::map_tcp_to_endpoint (connection->remote_endpoint))); nano::node_id_handshake response_message (connection->node->network_params.network, cookie, response); auto shared_const_buffer = response_message.to_shared_const_buffer (); - connection->socket->async_write (shared_const_buffer, [connection = std::weak_ptr (connection)] (boost::system::error_code const & ec, size_t size_a) { + connection->socket->async_write (shared_const_buffer, [connection = std::weak_ptr (connection)] (boost::system::error_code const & ec, std::size_t size_a) { if (auto connection_l = connection.lock ()) { if (ec) diff --git a/nano/node/bootstrap/bootstrap_server.hpp b/nano/node/bootstrap/bootstrap_server.hpp index 58ee8958a4..30fd073f0e 100644 --- a/nano/node/bootstrap/bootstrap_server.hpp +++ b/nano/node/bootstrap/bootstrap_server.hpp @@ -16,7 +16,7 @@ class bootstrap_listener final void start (); void stop (); void accept_action (boost::system::error_code const &, std::shared_ptr const &); - size_t connection_count (); + std::size_t connection_count (); nano::mutex mutex; std::unordered_map> connections; @@ -24,8 +24,8 @@ class bootstrap_listener final nano::node & node; std::shared_ptr listening_socket; bool on{ false }; - std::atomic bootstrap_count{ 0 }; - std::atomic realtime_count{ 0 }; + std::atomic bootstrap_count{ 0 }; + std::atomic realtime_count{ 0 }; private: uint16_t port; @@ -41,16 +41,16 @@ class bootstrap_server final : public std::enable_shared_from_this); void finish_request (); void finish_request_async (); diff --git a/nano/node/cli.cpp b/nano/node/cli.cpp index 3c457937a0..0c5090d28c 100644 --- a/nano/node/cli.cpp +++ b/nano/node/cli.cpp @@ -156,32 +156,32 @@ std::error_code nano::update_flags (nano::node_flags & flags_a, boost::program_o flags_a.disable_block_processor_unchecked_deletion = true; flags_a.block_processor_batch_size = 256 * 1024; flags_a.block_processor_full_size = 1024 * 1024; - flags_a.block_processor_verification_size = std::numeric_limits::max (); + flags_a.block_processor_verification_size = std::numeric_limits::max (); } auto block_processor_batch_size_it = vm.find ("block_processor_batch_size"); if (block_processor_batch_size_it != vm.end ()) { - flags_a.block_processor_batch_size = block_processor_batch_size_it->second.as (); + flags_a.block_processor_batch_size = block_processor_batch_size_it->second.as (); } auto block_processor_full_size_it = vm.find ("block_processor_full_size"); if (block_processor_full_size_it != vm.end ()) { - flags_a.block_processor_full_size = block_processor_full_size_it->second.as (); + flags_a.block_processor_full_size = block_processor_full_size_it->second.as (); } auto block_processor_verification_size_it = vm.find ("block_processor_verification_size"); if (block_processor_verification_size_it != vm.end ()) { - flags_a.block_processor_verification_size = block_processor_verification_size_it->second.as (); + flags_a.block_processor_verification_size = block_processor_verification_size_it->second.as (); } auto inactive_votes_cache_size_it = vm.find ("inactive_votes_cache_size"); if (inactive_votes_cache_size_it != vm.end ()) { - flags_a.inactive_votes_cache_size = inactive_votes_cache_size_it->second.as (); + flags_a.inactive_votes_cache_size = inactive_votes_cache_size_it->second.as (); } auto vote_processor_capacity_it = vm.find ("vote_processor_capacity"); if (vote_processor_capacity_it != vm.end ()) { - flags_a.vote_processor_capacity = vote_processor_capacity_it->second.as (); + flags_a.vote_processor_capacity = vote_processor_capacity_it->second.as (); } // Config overriding auto config (vm.find ("config")); @@ -414,7 +414,7 @@ std::error_code nano::handle_node_options (boost::program_options::variables_map std::cerr << "Vacuum failed. RocksDB is enabled but the node has not been built with RocksDB support" << std::endl; } } - catch (const boost::filesystem::filesystem_error & ex) + catch (boost::filesystem::filesystem_error const & ex) { std::cerr << "Vacuum failed during a file operation: " << ex.what () << std::endl; } @@ -461,7 +461,7 @@ std::error_code nano::handle_node_options (boost::program_options::variables_map std::cerr << "Snapshot failed. RocksDB is enabled but the node has not been built with RocksDB support" << std::endl; } } - catch (const boost::filesystem::filesystem_error & ex) + catch (boost::filesystem::filesystem_error const & ex) { std::cerr << "Snapshot failed during a file operation: " << ex.what () << std::endl; } diff --git a/nano/node/common.cpp b/nano/node/common.cpp index 4dda2bed4d..f4cbc7a144 100644 --- a/nano/node/common.cpp +++ b/nano/node/common.cpp @@ -195,7 +195,7 @@ bool nano::message_header::node_id_handshake_is_response () const return result; } -size_t nano::message_header::payload_length_bytes () const +std::size_t nano::message_header::payload_length_bytes () const { switch (type) { @@ -250,7 +250,7 @@ size_t nano::message_header::payload_length_bytes () const } // MTU - IP header - UDP header -const size_t nano::message_parser::max_safe_udp_message_size = 508; +std::size_t const nano::message_parser::max_safe_udp_message_size = 508; std::string nano::message_parser::status_string () { @@ -326,7 +326,7 @@ nano::message_parser::message_parser (nano::network_filter & publish_filter_a, n { } -void nano::message_parser::deserialize_buffer (uint8_t const * buffer_a, size_t size_a) +void nano::message_parser::deserialize_buffer (uint8_t const * buffer_a, std::size_t size_a) { status = parse_status::success; auto error (false); @@ -731,7 +731,7 @@ bool nano::confirm_req::deserialize (nano::stream & stream_a, nano::block_unique result = block == nullptr; } } - catch (const std::runtime_error &) + catch (std::runtime_error const &) { result = true; } @@ -766,9 +766,9 @@ std::string nano::confirm_req::roots_string () const return result; } -size_t nano::confirm_req::size (nano::block_type type_a, size_t count) +std::size_t nano::confirm_req::size (nano::block_type type_a, std::size_t count) { - size_t result (0); + std::size_t result (0); if (type_a != nano::block_type::invalid && type_a != nano::block_type::not_a_block) { result = nano::block::size (type_a); @@ -826,9 +826,9 @@ void nano::confirm_ack::visit (nano::message_visitor & visitor_a) const visitor_a.confirm_ack (*this); } -size_t nano::confirm_ack::size (nano::block_type type_a, size_t count) +std::size_t nano::confirm_ack::size (nano::block_type type_a, std::size_t count) { - size_t result (sizeof (nano::account) + sizeof (nano::signature) + sizeof (uint64_t)); + std::size_t result (sizeof (nano::account) + sizeof (nano::signature) + sizeof (uint64_t)); if (type_a != nano::block_type::invalid && type_a != nano::block_type::not_a_block) { result += nano::block::size (type_a); @@ -1414,14 +1414,14 @@ void nano::node_id_handshake::visit (nano::message_visitor & visitor_a) const visitor_a.node_id_handshake (*this); } -size_t nano::node_id_handshake::size () const +std::size_t nano::node_id_handshake::size () const { return size (header); } -size_t nano::node_id_handshake::size (nano::message_header const & header_a) +std::size_t nano::node_id_handshake::size (nano::message_header const & header_a) { - size_t result (0); + std::size_t result (0); if (header_a.node_id_handshake_is_query ()) { result = sizeof (nano::uint256_union); diff --git a/nano/node/common.hpp b/nano/node/common.hpp index 1b2739cd59..6f242249fd 100644 --- a/nano/node/common.hpp +++ b/nano/node/common.hpp @@ -36,18 +36,18 @@ uint64_t endpoint_hash_raw (nano::tcp_endpoint const & endpoint_a) return result; } -template +template struct endpoint_hash { }; template <> struct endpoint_hash<8> { - size_t operator() (nano::endpoint const & endpoint_a) const + std::size_t operator() (nano::endpoint const & endpoint_a) const { return endpoint_hash_raw (endpoint_a); } - size_t operator() (nano::tcp_endpoint const & endpoint_a) const + std::size_t operator() (nano::tcp_endpoint const & endpoint_a) const { return endpoint_hash_raw (endpoint_a); } @@ -55,27 +55,27 @@ struct endpoint_hash<8> template <> struct endpoint_hash<4> { - size_t operator() (nano::endpoint const & endpoint_a) const + std::size_t operator() (nano::endpoint const & endpoint_a) const { uint64_t big (endpoint_hash_raw (endpoint_a)); uint32_t result (static_cast (big) ^ static_cast (big >> 32)); return result; } - size_t operator() (nano::tcp_endpoint const & endpoint_a) const + std::size_t operator() (nano::tcp_endpoint const & endpoint_a) const { uint64_t big (endpoint_hash_raw (endpoint_a)); uint32_t result (static_cast (big) ^ static_cast (big >> 32)); return result; } }; -template +template struct ip_address_hash { }; template <> struct ip_address_hash<8> { - size_t operator() (boost::asio::ip::address const & ip_address_a) const + std::size_t operator() (boost::asio::ip::address const & ip_address_a) const { return nano::ip_address_hash_raw (ip_address_a); } @@ -83,7 +83,7 @@ struct ip_address_hash<8> template <> struct ip_address_hash<4> { - size_t operator() (boost::asio::ip::address const & ip_address_a) const + std::size_t operator() (boost::asio::ip::address const & ip_address_a) const { uint64_t big (nano::ip_address_hash_raw (ip_address_a)); uint32_t result (static_cast (big) ^ static_cast (big >> 32)); @@ -97,18 +97,18 @@ namespace std template <> struct hash<::nano::endpoint> { - size_t operator() (::nano::endpoint const & endpoint_a) const + std::size_t operator() (::nano::endpoint const & endpoint_a) const { - endpoint_hash ehash; + endpoint_hash ehash; return ehash (endpoint_a); } }; template <> struct hash<::nano::tcp_endpoint> { - size_t operator() (::nano::tcp_endpoint const & endpoint_a) const + std::size_t operator() (::nano::tcp_endpoint const & endpoint_a) const { - endpoint_hash ehash; + endpoint_hash ehash; return ehash (endpoint_a); } }; @@ -116,9 +116,9 @@ struct hash<::nano::tcp_endpoint> template <> struct hash { - size_t operator() (boost::asio::ip::address const & ip_a) const + std::size_t operator() (boost::asio::ip::address const & ip_a) const { - ip_address_hash ihash; + ip_address_hash ihash; return ihash (ip_a); } }; @@ -129,7 +129,7 @@ namespace boost template <> struct hash<::nano::endpoint> { - size_t operator() (::nano::endpoint const & endpoint_a) const + std::size_t operator() (::nano::endpoint const & endpoint_a) const { std::hash<::nano::endpoint> hash; return hash (endpoint_a); @@ -138,7 +138,7 @@ struct hash<::nano::endpoint> template <> struct hash<::nano::tcp_endpoint> { - size_t operator() (::nano::tcp_endpoint const & endpoint_a) const + std::size_t operator() (::nano::tcp_endpoint const & endpoint_a) const { std::hash<::nano::tcp_endpoint> hash; return hash (endpoint_a); @@ -147,7 +147,7 @@ struct hash<::nano::tcp_endpoint> template <> struct hash { - size_t operator() (boost::asio::ip::address const & ip_a) const + std::size_t operator() (boost::asio::ip::address const & ip_a) const { std::hash hash; return hash (ip_a); @@ -205,7 +205,7 @@ class message_header final public: nano::message_type type; std::bitset<16> extensions; - static size_t constexpr size = sizeof (nano::networks) + sizeof (version_max) + sizeof (version_using) + sizeof (version_min) + sizeof (type) + sizeof (/* extensions */ uint16_t); + static std::size_t constexpr size = sizeof (nano::networks) + sizeof (version_max) + sizeof (version_using) + sizeof (version_min) + sizeof (type) + sizeof (/* extensions */ uint16_t); void flag_set (uint8_t); static uint8_t constexpr bulk_pull_count_present_flag = 0; @@ -218,7 +218,7 @@ class message_header final bool node_id_handshake_is_response () const; /** Size of the payload in bytes. For some messages, the payload size is based on header flags. */ - size_t payload_length_bytes () const; + std::size_t payload_length_bytes () const; static std::bitset<16> constexpr block_type_mask{ 0x0f00 }; static std::bitset<16> constexpr count_mask{ 0xf000 }; @@ -259,7 +259,7 @@ class message_parser final duplicate_publish_message }; message_parser (nano::network_filter &, nano::block_uniquer &, nano::vote_uniquer &, nano::message_visitor &, nano::work_pool &, nano::network_constants const & protocol); - void deserialize_buffer (uint8_t const *, size_t); + void deserialize_buffer (uint8_t const *, std::size_t); void deserialize_keepalive (nano::stream &, nano::message_header const &); void deserialize_publish (nano::stream &, nano::message_header const &, nano::uint128_t const & = 0); void deserialize_confirm_req (nano::stream &, nano::message_header const &); @@ -276,7 +276,7 @@ class message_parser final parse_status status; nano::network_constants const & network; std::string status_string (); - static const size_t max_safe_udp_message_size; + static std::size_t const max_safe_udp_message_size; }; class keepalive final : public message { @@ -288,7 +288,7 @@ class keepalive final : public message bool deserialize (nano::stream &); bool operator== (nano::keepalive const &) const; std::array peers; - static size_t constexpr size = 8 * (16 + 2); + static std::size_t constexpr size = 8 * (16 + 2); }; class publish final : public message { @@ -316,7 +316,7 @@ class confirm_req final : public message std::shared_ptr block; std::vector> roots_hashes; std::string roots_string () const; - static size_t size (nano::block_type, size_t = 0); + static std::size_t size (nano::block_type, std::size_t = 0); }; class confirm_ack final : public message { @@ -327,7 +327,7 @@ class confirm_ack final : public message void visit (nano::message_visitor &) const override; bool operator== (nano::confirm_ack const &) const; std::shared_ptr vote; - static size_t size (nano::block_type, size_t = 0); + static std::size_t size (nano::block_type, std::size_t = 0); }; class frontier_req final : public message { @@ -341,7 +341,7 @@ class frontier_req final : public message nano::account start; uint32_t age; uint32_t count; - static size_t constexpr size = sizeof (start) + sizeof (age) + sizeof (count); + static std::size_t constexpr size = sizeof (start) + sizeof (age) + sizeof (count); }; enum class telemetry_maker : uint8_t @@ -426,9 +426,9 @@ class bulk_pull final : public message count_t count{ 0 }; bool is_count_present () const; void set_count_present (bool); - static size_t constexpr count_present_flag = nano::message_header::bulk_pull_count_present_flag; - static size_t constexpr extended_parameters_size = 8; - static size_t constexpr size = sizeof (start) + sizeof (end); + static std::size_t constexpr count_present_flag = nano::message_header::bulk_pull_count_present_flag; + static std::size_t constexpr extended_parameters_size = 8; + static std::size_t constexpr size = sizeof (start) + sizeof (end); }; class bulk_pull_account final : public message { @@ -441,7 +441,7 @@ class bulk_pull_account final : public message nano::account account; nano::amount minimum_amount; bulk_pull_account_flags flags; - static size_t constexpr size = sizeof (account) + sizeof (minimum_amount) + sizeof (bulk_pull_account_flags); + static std::size_t constexpr size = sizeof (account) + sizeof (minimum_amount) + sizeof (bulk_pull_account_flags); }; class bulk_push final : public message { @@ -463,8 +463,8 @@ class node_id_handshake final : public message bool operator== (nano::node_id_handshake const &) const; boost::optional query; boost::optional> response; - size_t size () const; - static size_t size (nano::message_header const &); + std::size_t size () const; + static std::size_t size (nano::message_header const &); }; class message_visitor { diff --git a/nano/node/confirmation_height_bounded.cpp b/nano/node/confirmation_height_bounded.cpp index 8a84f1ef99..c314a8db78 100644 --- a/nano/node/confirmation_height_bounded.cpp +++ b/nano/node/confirmation_height_bounded.cpp @@ -378,8 +378,8 @@ void nano::confirmation_height_bounded::cement_blocks (nano::write_guard & scope // of blocks to retain consistent cementing across all account chains to genesis. while (!error && !pending_writes.empty ()) { - const auto & pending = pending_writes.front (); - const auto & account = pending.account; + auto const & pending = pending_writes.front (); + auto const & account = pending.account; auto write_confirmation_height = [&account, &ledger = ledger, &transaction] (uint64_t num_blocks_cemented, uint64_t confirmation_height, nano::block_hash const & confirmed_frontier) { #ifndef NDEBUG diff --git a/nano/node/confirmation_height_bounded.hpp b/nano/node/confirmation_height_bounded.hpp index 0938d861f4..ac850600bb 100644 --- a/nano/node/confirmation_height_bounded.hpp +++ b/nano/node/confirmation_height_bounded.hpp @@ -105,7 +105,7 @@ class confirmation_height_bounded final class receive_source_pair final { public: - receive_source_pair (receive_chain_details const &, const nano::block_hash &); + receive_source_pair (receive_chain_details const &, nano::block_hash const &); receive_chain_details receive_details; nano::block_hash source_hash; diff --git a/nano/node/confirmation_height_processor.cpp b/nano/node/confirmation_height_processor.cpp index ca5999c84a..28e10c53ef 100644 --- a/nano/node/confirmation_height_processor.cpp +++ b/nano/node/confirmation_height_processor.cpp @@ -62,7 +62,7 @@ void nano::confirmation_height_processor::run (confirmation_height_mode mode_a) set_next_hash (); - const auto num_blocks_to_use_unbounded = confirmation_height::unbounded_cutoff; + auto const num_blocks_to_use_unbounded = confirmation_height::unbounded_cutoff; auto blocks_within_automatic_unbounded_selection = (ledger.cache.block_count < num_blocks_to_use_unbounded || ledger.cache.block_count - num_blocks_to_use_unbounded < ledger.cache.cemented_count); // Don't want to mix up pending writes across different processors @@ -204,8 +204,8 @@ std::unique_ptr nano::collect_container_info (co { auto composite = std::make_unique (name_a); - size_t cemented_observers_count = confirmation_height_processor_a.cemented_observers.size (); - size_t block_already_cemented_observers_count = confirmation_height_processor_a.block_already_cemented_observers.size (); + std::size_t cemented_observers_count = confirmation_height_processor_a.cemented_observers.size (); + std::size_t block_already_cemented_observers_count = confirmation_height_processor_a.block_already_cemented_observers.size (); composite->add_component (std::make_unique (container_info{ "cemented_observers", cemented_observers_count, sizeof (decltype (confirmation_height_processor_a.cemented_observers)::value_type) })); composite->add_component (std::make_unique (container_info{ "block_already_cemented_observers", block_already_cemented_observers_count, sizeof (decltype (confirmation_height_processor_a.block_already_cemented_observers)::value_type) })); composite->add_component (std::make_unique (container_info{ "awaiting_processing", confirmation_height_processor_a.awaiting_processing_size (), sizeof (decltype (confirmation_height_processor_a.awaiting_processing)::value_type) })); @@ -214,7 +214,7 @@ std::unique_ptr nano::collect_container_info (co return composite; } -size_t nano::confirmation_height_processor::awaiting_processing_size () const +std::size_t nano::confirmation_height_processor::awaiting_processing_size () const { nano::lock_guard guard (mutex); return awaiting_processing.size (); diff --git a/nano/node/confirmation_height_processor.hpp b/nano/node/confirmation_height_processor.hpp index bf0672e05b..b5ecedb30a 100644 --- a/nano/node/confirmation_height_processor.hpp +++ b/nano/node/confirmation_height_processor.hpp @@ -39,7 +39,7 @@ class confirmation_height_processor final void stop (); void add (std::shared_ptr const &); void run (confirmation_height_mode); - size_t awaiting_processing_size () const; + std::size_t awaiting_processing_size () const; bool is_processing_added_block (nano::block_hash const & hash_a) const; bool is_processing_block (nano::block_hash const &) const; nano::block_hash current () const; @@ -100,7 +100,7 @@ class confirmation_height_processor final void notify_observers (std::vector> const &); void notify_observers (nano::block_hash const &); - friend std::unique_ptr collect_container_info (confirmation_height_processor &, const std::string &); + friend std::unique_ptr collect_container_info (confirmation_height_processor &, std::string const &); friend class confirmation_height_pending_observer_callbacks_Test; friend class confirmation_height_dependent_election_Test; friend class confirmation_height_dependent_election_after_already_cemented_Test; @@ -112,5 +112,5 @@ class confirmation_height_processor final friend class active_transactions_pessimistic_elections_Test; }; -std::unique_ptr collect_container_info (confirmation_height_processor &, const std::string &); +std::unique_ptr collect_container_info (confirmation_height_processor &, std::string const &); } diff --git a/nano/node/confirmation_height_unbounded.hpp b/nano/node/confirmation_height_unbounded.hpp index 99de177461..93199c35d2 100644 --- a/nano/node/confirmation_height_unbounded.hpp +++ b/nano/node/confirmation_height_unbounded.hpp @@ -52,7 +52,7 @@ class confirmation_height_unbounded final class receive_source_pair final { public: - receive_source_pair (std::shared_ptr const &, const nano::block_hash &); + receive_source_pair (std::shared_ptr const &, nano::block_hash const &); std::shared_ptr receive_details; nano::block_hash source_hash; diff --git a/nano/node/confirmation_solicitor.cpp b/nano/node/confirmation_solicitor.cpp index 235aa6bd24..ee2ba8a7f1 100644 --- a/nano/node/confirmation_solicitor.cpp +++ b/nano/node/confirmation_solicitor.cpp @@ -7,7 +7,7 @@ using namespace std::chrono_literals; nano::confirmation_solicitor::confirmation_solicitor (nano::network & network_a, nano::node_config const & config_a) : max_block_broadcasts (config_a.network_params.network.is_dev_network () ? 4 : 30), max_election_requests (50), - max_election_broadcasts (std::max (network_a.fanout () / 2, 1)), + max_election_broadcasts (std::max (network_a.fanout () / 2, 1)), network (network_a), config (config_a) { diff --git a/nano/node/confirmation_solicitor.hpp b/nano/node/confirmation_solicitor.hpp index ed699302f2..066548c231 100644 --- a/nano/node/confirmation_solicitor.hpp +++ b/nano/node/confirmation_solicitor.hpp @@ -24,11 +24,11 @@ class confirmation_solicitor final /** Dispatch bundled requests to each channel*/ void flush (); /** Global maximum amount of block broadcasts */ - size_t const max_block_broadcasts; + std::size_t const max_block_broadcasts; /** Maximum amount of requests to be sent per election, bypassed if an existing vote is for a different hash*/ - size_t const max_election_requests; + std::size_t const max_election_requests; /** Maximum amount of directed broadcasts to be sent per election */ - size_t const max_election_broadcasts; + std::size_t const max_election_broadcasts; private: nano::network & network; diff --git a/nano/node/distributed_work.cpp b/nano/node/distributed_work.cpp index 2583b64169..a249b71f50 100644 --- a/nano/node/distributed_work.cpp +++ b/nano/node/distributed_work.cpp @@ -154,11 +154,11 @@ void nano::distributed_work::do_request (nano::tcp_endpoint const & endpoint_a) auto peer_request (connection->get_prepared_json_request (request_string)); boost::beast::http::async_write (connection->socket, *peer_request, boost::asio::bind_executor (this_l->strand, - [this_l, connection, peer_request] (boost::system::error_code const & ec, size_t size_a) { + [this_l, connection, peer_request] (boost::system::error_code const & ec, std::size_t size_a) { if (!ec && !this_l->stopped) { boost::beast::http::async_read (connection->socket, connection->buffer, connection->response, - boost::asio::bind_executor (this_l->strand, [this_l, connection] (boost::system::error_code const & ec, size_t size_a) { + boost::asio::bind_executor (this_l->strand, [this_l, connection] (boost::system::error_code const & ec, std::size_t size_a) { if (!ec && !this_l->stopped) { if (connection->response.result () == boost::beast::http::status::ok) @@ -217,7 +217,7 @@ void nano::distributed_work::do_cancel (nano::tcp_endpoint const & endpoint_a) auto peer_cancel (cancelling_l->get_prepared_json_request (request_string)); boost::beast::http::async_write (cancelling_l->socket, *peer_cancel, boost::asio::bind_executor (this_l->strand, - [this_l, peer_cancel, cancelling_l] (boost::system::error_code const & ec, size_t bytes_transferred) { + [this_l, peer_cancel, cancelling_l] (boost::system::error_code const & ec, std::size_t bytes_transferred) { if (ec && ec != boost::system::errc::operation_canceled) { this_l->node.logger.try_log (boost::str (boost::format ("Unable to send work_cancel to work_peer %1% %2%: %3% (%4%)") % cancelling_l->endpoint.address () % cancelling_l->endpoint.port () % ec.message () % ec.value ())); diff --git a/nano/node/distributed_work_factory.cpp b/nano/node/distributed_work_factory.cpp index d7167bc601..6f8666926d 100644 --- a/nano/node/distributed_work_factory.cpp +++ b/nano/node/distributed_work_factory.cpp @@ -88,7 +88,7 @@ void nano::distributed_work_factory::stop () } } -size_t nano::distributed_work_factory::size () const +std::size_t nano::distributed_work_factory::size () const { nano::lock_guard guard_l (mutex); return items.size (); diff --git a/nano/node/distributed_work_factory.hpp b/nano/node/distributed_work_factory.hpp index bd5bcf022a..8de9aa0cce 100644 --- a/nano/node/distributed_work_factory.hpp +++ b/nano/node/distributed_work_factory.hpp @@ -26,7 +26,7 @@ class distributed_work_factory final void cancel (nano::root const &); void cleanup_finished (); void stop (); - size_t size () const; + std::size_t size () const; private: std::unordered_multimap> items; @@ -35,7 +35,7 @@ class distributed_work_factory final mutable nano::mutex mutex; std::atomic stopped{ false }; - friend std::unique_ptr collect_container_info (distributed_work_factory &, const std::string &); + friend std::unique_ptr collect_container_info (distributed_work_factory &, std::string const &); }; std::unique_ptr collect_container_info (distributed_work_factory & distributed_work, std::string const & name); diff --git a/nano/node/election.cpp b/nano/node/election.cpp index 22d3421baf..61e8731e8b 100644 --- a/nano/node/election.cpp +++ b/nano/node/election.cpp @@ -437,7 +437,7 @@ bool nano::election::publish (std::shared_ptr const & block_a) return result; } -size_t nano::election::insert_inactive_votes_cache (nano::inactive_cache_information const & cache_a) +std::size_t nano::election::insert_inactive_votes_cache (nano::inactive_cache_information const & cache_a) { nano::unique_lock lock (mutex); for (auto const & [rep, timestamp] : cache_a.voters) diff --git a/nano/node/election.hpp b/nano/node/election.hpp index a1cb8bcea2..a1358300b7 100644 --- a/nano/node/election.hpp +++ b/nano/node/election.hpp @@ -106,7 +106,7 @@ class election final : public std::enable_shared_from_this std::shared_ptr find (nano::block_hash const &) const; nano::election_vote_result vote (nano::account const &, uint64_t, nano::block_hash const &); bool publish (std::shared_ptr const & block_a); - size_t insert_inactive_votes_cache (nano::inactive_cache_information const &); + std::size_t insert_inactive_votes_cache (nano::inactive_cache_information const &); // Confirm this block if quorum is met void confirm_if_quorum (nano::unique_lock &); @@ -142,7 +142,7 @@ class election final : public std::enable_shared_from_this mutable nano::mutex mutex; static std::chrono::seconds constexpr late_blocks_delay{ 5 }; - static size_t constexpr max_blocks{ 10 }; + static std::size_t constexpr max_blocks{ 10 }; friend class active_transactions; friend class confirmation_solicitor; diff --git a/nano/node/election_scheduler.cpp b/nano/node/election_scheduler.cpp index 0ccf511932..d9d07f7708 100644 --- a/nano/node/election_scheduler.cpp +++ b/nano/node/election_scheduler.cpp @@ -65,7 +65,7 @@ void nano::election_scheduler::notify () condition.notify_all (); } -size_t nano::election_scheduler::size () const +std::size_t nano::election_scheduler::size () const { nano::lock_guard lock{ mutex }; return priority.size () + manual_queue.size (); @@ -82,7 +82,7 @@ bool nano::election_scheduler::empty () const return empty_locked (); } -size_t nano::election_scheduler::priority_queue_size () const +std::size_t nano::election_scheduler::priority_queue_size () const { return priority.size (); } diff --git a/nano/node/election_scheduler.hpp b/nano/node/election_scheduler.hpp index 1a2889f2d1..b10fee5415 100644 --- a/nano/node/election_scheduler.hpp +++ b/nano/node/election_scheduler.hpp @@ -29,9 +29,9 @@ class election_scheduler final // Blocks until no more elections can be activated or there are no more elections to activate void flush (); void notify (); - size_t size () const; + std::size_t size () const; bool empty () const; - size_t priority_queue_size () const; + std::size_t priority_queue_size () const; private: void run (); diff --git a/nano/node/gap_cache.cpp b/nano/node/gap_cache.cpp index f10f0855ef..2b04836b57 100644 --- a/nano/node/gap_cache.cpp +++ b/nano/node/gap_cache.cpp @@ -121,7 +121,7 @@ nano::uint128_t nano::gap_cache::bootstrap_threshold () return result; } -size_t nano::gap_cache::size () +std::size_t nano::gap_cache::size () { nano::lock_guard lock (mutex); return blocks.size (); diff --git a/nano/node/gap_cache.hpp b/nano/node/gap_cache.hpp index ab26008815..95402f5df3 100644 --- a/nano/node/gap_cache.hpp +++ b/nano/node/gap_cache.hpp @@ -41,7 +41,7 @@ class gap_cache final bool bootstrap_check (std::vector const &, nano::block_hash const &); void bootstrap_start (nano::block_hash const & hash_a); nano::uint128_t bootstrap_threshold (); - size_t size (); + std::size_t size (); // clang-format off class tag_arrival {}; class tag_hash {}; @@ -53,7 +53,7 @@ class gap_cache final boost::multi_index::member>>>; ordered_gaps blocks; // clang-format on - size_t const max = 256; + std::size_t const max = 256; nano::mutex mutex{ mutex_identifier (mutexes::gap_cache) }; nano::node & node; }; diff --git a/nano/node/ipc/flatbuffers_handler.cpp b/nano/node/ipc/flatbuffers_handler.cpp index 01ca293796..a5bd7d902e 100644 --- a/nano/node/ipc/flatbuffers_handler.cpp +++ b/nano/node/ipc/flatbuffers_handler.cpp @@ -67,7 +67,7 @@ std::shared_ptr nano::ipc::flatbuffers_handler::make_flatbu throw nano::error ("Internal IPC error: unable to find api path"); } - const char * include_directories[] = { api_path->string ().c_str (), nullptr }; + char const * include_directories[] = { api_path->string ().c_str (), nullptr }; std::string schemafile; if (!flatbuffers::LoadFile ((*api_path / "nanoapi.fbs").string ().c_str (), false, &schemafile)) { @@ -84,7 +84,7 @@ std::shared_ptr nano::ipc::flatbuffers_handler::make_flatbu return parser; } -void nano::ipc::flatbuffers_handler::process_json (const uint8_t * message_buffer_a, size_t buffer_size_a, +void nano::ipc::flatbuffers_handler::process_json (uint8_t const * message_buffer_a, std::size_t buffer_size_a, std::function const &)> const & response_handler) { try @@ -97,7 +97,7 @@ std::function const &)> const & response_hand // Convert request from JSON auto body (std::string (reinterpret_cast (const_cast (message_buffer_a)), buffer_size_a)); body += '\0'; - if (parser->Parse (reinterpret_cast (body.data ()))) + if (parser->Parse (reinterpret_cast (body.data ()))) { process (parser->builder_.GetBufferPointer (), parser->builder_.GetSize (), [parser = parser, response_handler] (std::shared_ptr const & fbb) { // Convert response to JSON @@ -134,7 +134,7 @@ std::function const &)> const & response_hand } } -void nano::ipc::flatbuffers_handler::process (const uint8_t * message_buffer_a, size_t buffer_size_a, +void nano::ipc::flatbuffers_handler::process (uint8_t const * message_buffer_a, std::size_t buffer_size_a, std::function const &)> const & response_handler) { auto buffer_l (std::make_shared ()); diff --git a/nano/node/ipc/flatbuffers_handler.hpp b/nano/node/ipc/flatbuffers_handler.hpp index ac588e3191..8437d6e952 100644 --- a/nano/node/ipc/flatbuffers_handler.hpp +++ b/nano/node/ipc/flatbuffers_handler.hpp @@ -42,12 +42,12 @@ namespace ipc * @param response_handler Receives a shared pointer to the flatbuffer builder, from which the buffer and size can be queried * @throw Throws std:runtime_error on deserialization or processing errors */ - void process (const uint8_t * message_buffer_a, size_t buffer_size_a, std::function const &)> const & response_handler); + void process (uint8_t const * message_buffer_a, std::size_t buffer_size_a, std::function const &)> const & response_handler); /** * Parses a JSON encoded requests into Flatbuffer format, calls process(), yields the result as a JSON string */ - void process_json (const uint8_t * message_buffer_a, size_t buffer_size_a, std::function const &)> const & response_handler); + void process_json (uint8_t const * message_buffer_a, std::size_t buffer_size_a, std::function const &)> const & response_handler); /** * Creates a Flatbuffers parser with the schema preparsed. This can then be used to parse and produce JSON. diff --git a/nano/node/ipc/ipc_broker.cpp b/nano/node/ipc/ipc_broker.cpp index 9b3477c25d..5176b3b131 100644 --- a/nano/node/ipc/ipc_broker.cpp +++ b/nano/node/ipc/ipc_broker.cpp @@ -195,11 +195,11 @@ void nano::ipc::broker::broadcast (std::shared_ptr throw nano::error ("Couldn't serialize response to JSON"); } - subscriber_l->async_send_message (reinterpret_cast (json->data ()), json->size (), [json] (const nano::error & err) {}); + subscriber_l->async_send_message (reinterpret_cast (json->data ()), json->size (), [json] (nano::error const & err) {}); } else { - subscriber_l->async_send_message (fb->GetBufferPointer (), fb->GetSize (), [fb] (const nano::error & err) {}); + subscriber_l->async_send_message (fb->GetBufferPointer (), fb->GetSize (), [fb] (nano::error const & err) {}); } } @@ -222,7 +222,7 @@ void nano::ipc::broker::broadcast (std::shared_ptr } } -size_t nano::ipc::broker::confirmation_subscriber_count () const +std::size_t nano::ipc::broker::confirmation_subscriber_count () const { return confirmation_subscribers->size (); } @@ -246,7 +246,7 @@ void nano::ipc::broker::service_stop (std::string const & service_name_a) { nanoapi::EventServiceStopT event_stop; auto fb (nano::ipc::flatbuffer_producer::make_buffer (event_stop)); - subscriber_l->async_send_message (fb->GetBufferPointer (), fb->GetSize (), [fb] (const nano::error & err) {}); + subscriber_l->async_send_message (fb->GetBufferPointer (), fb->GetSize (), [fb] (nano::error const & err) {}); break; } diff --git a/nano/node/ipc/ipc_broker.hpp b/nano/node/ipc/ipc_broker.hpp index df3d1eb04c..5f56023bee 100644 --- a/nano/node/ipc/ipc_broker.hpp +++ b/nano/node/ipc/ipc_broker.hpp @@ -35,7 +35,7 @@ namespace ipc * @param length_a Length of payload message in bytes * @param broadcast_completion_handler_a Called once sending is completed */ - virtual void async_send_message (uint8_t const * data_a, size_t length_a, std::function broadcast_completion_handler_a) = 0; + virtual void async_send_message (uint8_t const * data_a, std::size_t length_a, std::function broadcast_completion_handler_a) = 0; /** Returns the unique id of the associated session */ virtual uint64_t get_id () const = 0; /** Returns the service name associated with the session */ @@ -86,7 +86,7 @@ namespace ipc void subscribe (std::weak_ptr const & subscriber_a, std::shared_ptr const & service_stop_a); /** Returns the number of confirmation subscribers */ - size_t confirmation_subscriber_count () const; + std::size_t confirmation_subscriber_count () const; /** Associate the service name with the subscriber */ void service_register (std::string const & service_name_a, std::weak_ptr const & subscriber_a); /** Sends a notification to the session associated with the given service (if the session has subscribed to TopicServiceStop) */ diff --git a/nano/node/ipc/ipc_config.cpp b/nano/node/ipc/ipc_config.cpp index eeffcd6961..f3d229294a 100644 --- a/nano/node/ipc/ipc_config.cpp +++ b/nano/node/ipc/ipc_config.cpp @@ -43,7 +43,7 @@ nano::error nano::ipc::ipc_config::deserialize_toml (nano::tomlconfig & toml) tcp_l->get ("allow_unsafe", transport_tcp.allow_unsafe); tcp_l->get ("enable", transport_tcp.enabled); tcp_l->get ("port", transport_tcp.port); - tcp_l->get ("io_timeout", transport_tcp.io_timeout); + tcp_l->get ("io_timeout", transport_tcp.io_timeout); } auto domain_l (toml.get_optional_child ("local")); @@ -53,7 +53,7 @@ nano::error nano::ipc::ipc_config::deserialize_toml (nano::tomlconfig & toml) domain_l->get ("allow_unsafe", transport_domain.allow_unsafe); domain_l->get ("enable", transport_domain.enabled); domain_l->get ("path", transport_domain.path); - domain_l->get ("io_timeout", transport_domain.io_timeout); + domain_l->get ("io_timeout", transport_domain.io_timeout); } auto flatbuffers_l (toml.get_optional_child ("flatbuffers")); @@ -102,7 +102,7 @@ nano::error nano::ipc::ipc_config::deserialize_json (bool & upgraded_a, nano::js tcp_l->get_optional ("allow_unsafe", transport_tcp.allow_unsafe); tcp_l->get ("enable", transport_tcp.enabled); tcp_l->get ("port", transport_tcp.port); - tcp_l->get ("io_timeout", transport_tcp.io_timeout); + tcp_l->get ("io_timeout", transport_tcp.io_timeout); } auto domain_l (json.get_optional_child ("local")); @@ -112,7 +112,7 @@ nano::error nano::ipc::ipc_config::deserialize_json (bool & upgraded_a, nano::js domain_l->get_optional ("allow_unsafe", transport_domain.allow_unsafe); domain_l->get ("enable", transport_domain.enabled); domain_l->get ("path", transport_domain.path); - domain_l->get ("io_timeout", transport_domain.io_timeout); + domain_l->get ("io_timeout", transport_domain.io_timeout); } return json.get_error (); diff --git a/nano/node/ipc/ipc_config.hpp b/nano/node/ipc/ipc_config.hpp index e8a8d6da9c..d675d757ce 100644 --- a/nano/node/ipc/ipc_config.hpp +++ b/nano/node/ipc/ipc_config.hpp @@ -18,7 +18,7 @@ namespace ipc virtual ~ipc_config_transport () = default; bool enabled{ false }; bool allow_unsafe{ false }; - size_t io_timeout{ 15 }; + std::size_t io_timeout{ 15 }; long io_threads{ -1 }; }; diff --git a/nano/node/ipc/ipc_server.cpp b/nano/node/ipc/ipc_server.cpp index b6544aae73..3cb98ce74d 100644 --- a/nano/node/ipc/ipc_server.cpp +++ b/nano/node/ipc/ipc_server.cpp @@ -66,7 +66,7 @@ class session final : public nano::ipc::socket_base, public std::enable_shared_f session_m (session_a) { } - virtual void async_send_message (uint8_t const * data_a, size_t length_a, std::function broadcast_completion_handler_a) override + virtual void async_send_message (uint8_t const * data_a, std::size_t length_a, std::function broadcast_completion_handler_a) override { if (auto session_l = session_m.lock ()) { @@ -76,7 +76,7 @@ class session final : public nano::ipc::socket_base, public std::enable_shared_f boost::asio::buffer (data_a, length_a) }; - session_l->queued_write (buffers, [broadcast_completion_handler_a, big_endian_length] (boost::system::error_code const & ec_a, size_t size_a) { + session_l->queued_write (buffers, [broadcast_completion_handler_a, big_endian_length] (boost::system::error_code const & ec_a, std::size_t size_a) { if (broadcast_completion_handler_a) { nano::error error_l (ec_a); @@ -140,7 +140,7 @@ class session final : public nano::ipc::socket_base, public std::enable_shared_f /** Write a fixed array of buffers through the queue. Once the last item is completed, the callback is invoked */ template - void queued_write (boost::array & buffers, std::function callback_a) + void queued_write (boost::array & buffers, std::function callback_a) { auto this_l (this->shared_from_this ()); boost::asio::post (strand, boost::asio::bind_executor (strand, [buffers, callback_a, this_l] () { @@ -148,7 +148,7 @@ class session final : public nano::ipc::socket_base, public std::enable_shared_f auto queue_size = this_l->send_queue.size (); if (queue_size < this_l->queue_size_max) { - for (size_t i = 0; i < N - 1; i++) + for (std::size_t i = 0; i < N - 1; i++) { this_l->send_queue.emplace_back (queue_item{ buffers[i], nullptr }); } @@ -167,7 +167,7 @@ class session final : public nano::ipc::socket_base, public std::enable_shared_f * @note This function explicitely doesn't use nano::shared_const_buffer, as buffers usually originate from Flatbuffers * and copying into the shared_const_buffer vector would impose a significant overhead for large requests and responses. */ - void queued_write (boost::asio::const_buffer const & buffer_a, std::function callback_a) + void queued_write (boost::asio::const_buffer const & buffer_a, std::function callback_a) { auto this_l (this->shared_from_this ()); boost::asio::post (strand, boost::asio::bind_executor (strand, [buffer_a, callback_a, this_l] () { @@ -215,16 +215,16 @@ class session final : public nano::ipc::socket_base, public std::enable_shared_f * no error has occurred. On error, the error is logged, the read cycle stops and the session ends. Clients * are expected to implement reconnect logic. */ - void async_read_exactly (void * buff_a, size_t size_a, std::function const & callback_a) + void async_read_exactly (void * buff_a, std::size_t size_a, std::function const & callback_a) { async_read_exactly (buff_a, size_a, std::chrono::seconds (config_transport.io_timeout), callback_a); } /** * Async read of exactly \p size_a bytes and a specific \p timeout_a. - * @see async_read_exactly (void *, size_t, std::function) + * @see async_read_exactly (void *, std::size_t, std::function) */ - void async_read_exactly (void * buff_a, size_t size_a, std::chrono::seconds timeout_a, std::function const & callback_a) + void async_read_exactly (void * buff_a, std::size_t size_a, std::chrono::seconds timeout_a, std::function const & callback_a) { timer_start (timeout_a); auto this_l (this->shared_from_this ()); @@ -232,7 +232,7 @@ class session final : public nano::ipc::socket_base, public std::enable_shared_f boost::asio::buffer (buff_a, size_a), boost::asio::transfer_exactly (size_a), boost::asio::bind_executor (strand, - [this_l, callback_a] (boost::system::error_code const & ec, size_t bytes_transferred_a) { + [this_l, callback_a] (boost::system::error_code const & ec, std::size_t bytes_transferred_a) { this_l->timer_cancel (); if (ec == boost::asio::error::broken_pipe || ec == boost::asio::error::connection_aborted || ec == boost::asio::error::connection_reset || ec == boost::asio::error::connection_refused) { @@ -268,7 +268,7 @@ class session final : public nano::ipc::socket_base, public std::enable_shared_f } this_l->timer_start (std::chrono::seconds (this_l->config_transport.io_timeout)); - this_l->queued_write (boost::asio::buffer (buffer->data (), buffer->size ()), [this_l, buffer] (boost::system::error_code const & error_a, size_t size_a) { + this_l->queued_write (boost::asio::buffer (buffer->data (), buffer->size ()), [this_l, buffer] (boost::system::error_code const & error_a, std::size_t size_a) { this_l->timer_cancel (); if (!error_a) { @@ -357,7 +357,7 @@ class session final : public nano::ipc::socket_base, public std::enable_shared_f boost::asio::buffer (body->data (), body->size ()) }; - this_l->queued_write (buffers, [this_l, body, big_endian_length] (boost::system::error_code const & error_a, size_t size_a) { + this_l->queued_write (buffers, [this_l, body, big_endian_length] (boost::system::error_code const & error_a, std::size_t size_a) { if (!error_a) { this_l->read_next_request (); @@ -383,7 +383,7 @@ class session final : public nano::ipc::socket_base, public std::enable_shared_f boost::asio::buffer (fbb->GetBufferPointer (), fbb->GetSize ()) }; - this_l->queued_write (buffers, [this_l, fbb, big_endian_length] (boost::system::error_code const & error_a, size_t size_a) { + this_l->queued_write (buffers, [this_l, fbb, big_endian_length] (boost::system::error_code const & error_a, std::size_t size_a) { if (!error_a) { this_l->read_next_request (); @@ -419,9 +419,9 @@ class session final : public nano::ipc::socket_base, public std::enable_shared_f { public: boost::asio::const_buffer buffer; - std::function callback; + std::function callback; }; - size_t const queue_size_max = 64 * 1024; + std::size_t const queue_size_max = 64 * 1024; nano::ipc::ipc_server & server; nano::node & node; @@ -561,7 +561,7 @@ class socket_transport : public nano::ipc::transport */ void await_hup_signal (std::shared_ptr const & signals, nano::ipc::ipc_server & server_a) { - signals->async_wait ([signals, &server_a] (const boost::system::error_code & ec, int signal_number) { + signals->async_wait ([signals, &server_a] (boost::system::error_code const & ec, int signal_number) { if (ec != boost::asio::error::operation_aborted) { std::cout << "Reloading access configuration..." << std::endl; diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index a84d39d1d5..128632dcba 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -22,7 +22,7 @@ using ipc_json_handler_no_arg_func_map = std::unordered_map const & response_a, std::function stop_callback_a) : @@ -285,7 +285,7 @@ nano::amount nano::json_handler::amount_impl () std::shared_ptr nano::json_handler::block_impl (bool signature_work_required) { - const bool json_block_l = request.get ("json_block", false); + bool const json_block_l = request.get ("json_block", false); std::shared_ptr result{ nullptr }; if (!ec) { @@ -459,7 +459,7 @@ namespace bool decode_unsigned (std::string const & text, uint64_t & number) { bool result; - size_t end; + std::size_t end; try { number = std::stoull (text, &end); @@ -523,7 +523,7 @@ void nano::json_handler::account_balance () auto account (account_impl ()); if (!ec) { - const bool include_only_confirmed = request.get ("include_only_confirmed", true); + bool const include_only_confirmed = request.get ("include_only_confirmed", true); auto balance (node.balance_pending (account, include_only_confirmed)); response_l.put ("balance", balance.first.convert_to ()); response_l.put ("pending", balance.second.convert_to ()); @@ -553,7 +553,7 @@ void nano::json_handler::account_create () auto wallet (rpc_l->wallet_impl ()); if (!rpc_l->ec) { - const bool generate_work = rpc_l->request.get ("work", true); + bool const generate_work = rpc_l->request.get ("work", true); nano::account new_key; auto index_text (rpc_l->request.get_optional ("index")); if (index_text.is_initialized ()) @@ -609,10 +609,10 @@ void nano::json_handler::account_info () auto account (account_impl ()); if (!ec) { - const bool representative = request.get ("representative", false); - const bool weight = request.get ("weight", false); - const bool pending = request.get ("pending", false); - const bool include_confirmed = request.get ("include_confirmed", false); + bool const representative = request.get ("representative", false); + bool const weight = request.get ("weight", false); + bool const pending = request.get ("pending", false); + bool const include_confirmed = request.get ("include_confirmed", false); auto transaction (node.store.tx_begin_read ()); auto info (account_info_impl (transaction, account)); nano::confirmation_height_info confirmation_height_info; @@ -913,7 +913,7 @@ void nano::json_handler::accounts_create () auto count (rpc_l->count_impl ()); if (!rpc_l->ec) { - const bool generate_work = rpc_l->request.get ("work", false); + bool const generate_work = rpc_l->request.get ("work", false); boost::property_tree::ptree accounts; for (auto i (0); accounts.size () < count; ++i) { @@ -955,10 +955,10 @@ void nano::json_handler::accounts_pending () { auto count (count_optional_impl ()); auto threshold (threshold_optional_impl ()); - const bool source = request.get ("source", false); - const bool include_active = request.get ("include_active", false); - const bool include_only_confirmed = request.get ("include_only_confirmed", true); - const bool sorting = request.get ("sorting", false); + bool const source = request.get ("source", false); + bool const include_active = request.get ("include_active", false); + bool const include_only_confirmed = request.get ("include_only_confirmed", true); + bool const sorting = request.get ("sorting", false); auto simple (threshold.is_zero () && !source && !sorting); // if simple, response is a list of hashes for each account boost::property_tree::ptree pending; auto transaction (node.store.tx_begin_read ()); @@ -1003,13 +1003,13 @@ void nano::json_handler::accounts_pending () { if (source) { - peers_l.sort ([] (const auto & child1, const auto & child2) -> bool { + peers_l.sort ([] (auto const & child1, auto const & child2) -> bool { return child1.second.template get ("amount") > child2.second.template get ("amount"); }); } else { - peers_l.sort ([] (const auto & child1, const auto & child2) -> bool { + peers_l.sort ([] (auto const & child1, auto const & child2) -> bool { return child1.second.template get ("") > child2.second.template get (""); }); } @@ -1165,7 +1165,7 @@ void nano::json_handler::block_confirm () void nano::json_handler::blocks () { - const bool json_block_l = request.get ("json_block", false); + bool const json_block_l = request.get ("json_block", false); boost::property_tree::ptree blocks; auto transaction (node.store.tx_begin_read ()); for (boost::property_tree::ptree::value_type & hashes : request.get_child ("hashes")) @@ -1209,10 +1209,10 @@ void nano::json_handler::blocks () void nano::json_handler::blocks_info () { - const bool pending = request.get ("pending", false); - const bool source = request.get ("source", false); - const bool json_block_l = request.get ("json_block", false); - const bool include_not_found = request.get ("include_not_found", false); + bool const pending = request.get ("pending", false); + bool const source = request.get ("source", false); + bool const json_block_l = request.get ("json_block", false); + bool const include_not_found = request.get ("include_not_found", false); boost::property_tree::ptree blocks; boost::property_tree::ptree blocks_not_found; @@ -1739,7 +1739,7 @@ void nano::json_handler::bootstrap () void nano::json_handler::bootstrap_any () { - const bool force = request.get ("force", false); + bool const force = request.get ("force", false); if (!node.flags.disable_legacy_bootstrap) { nano::account start_account{}; @@ -1762,7 +1762,7 @@ void nano::json_handler::bootstrap_any () void nano::json_handler::bootstrap_lazy () { auto hash (hash_impl ()); - const bool force = request.get ("force", false); + bool const force = request.get ("force", false); if (!ec) { if (!node.flags.disable_lazy_bootstrap) @@ -1950,9 +1950,9 @@ void nano::json_handler::confirmation_history () void nano::json_handler::confirmation_info () { - const bool representatives = request.get ("representatives", false); - const bool contents = request.get ("contents", true); - const bool json_block_l = request.get ("json_block", false); + bool const representatives = request.get ("representatives", false); + bool const contents = request.get ("contents", true); + bool const json_block_l = request.get ("json_block", false); std::string root_text (request.get ("root")); nano::qualified_root root; if (!root.decode_hex (root_text)) @@ -2468,7 +2468,7 @@ class history_visitor : public nano::block_visitor void nano::json_handler::account_history () { std::vector accounts_to_filter; - const auto accounts_filter_node = request.get_child_optional ("account_filter"); + auto const accounts_filter_node = request.get_child_optional ("account_filter"); if (accounts_filter_node.is_initialized ()) { for (auto & a : (*accounts_filter_node)) @@ -2640,10 +2640,10 @@ void nano::json_handler::ledger () ec = nano::error_rpc::invalid_timestamp; } } - const bool sorting = request.get ("sorting", false); - const bool representative = request.get ("representative", false); - const bool weight = request.get ("weight", false); - const bool pending = request.get ("pending", false); + bool const sorting = request.get ("sorting", false); + bool const representative = request.get ("representative", false); + bool const weight = request.get ("weight", false); + bool const pending = request.get ("pending", false); boost::property_tree::ptree accounts; auto transaction (node.store.tx_begin_read ()); if (!ec && !sorting) // Simple @@ -2888,9 +2888,9 @@ void nano::json_handler::password_valid (bool wallet_locked) void nano::json_handler::peers () { boost::property_tree::ptree peers_l; - const bool peer_details = request.get ("peer_details", false); - auto peers_list (node.network.list (std::numeric_limits::max ())); - std::sort (peers_list.begin (), peers_list.end (), [] (const auto & lhs, const auto & rhs) { + bool const peer_details = request.get ("peer_details", false); + auto peers_list (node.network.list (std::numeric_limits::max ())); + std::sort (peers_list.begin (), peers_list.end (), [] (auto const & lhs, auto const & rhs) { return lhs->get_endpoint () < rhs->get_endpoint (); }); for (auto i (peers_list.begin ()), n (peers_list.end ()); i != n; ++i) @@ -2928,13 +2928,13 @@ void nano::json_handler::pending () auto account (account_impl ()); auto count (count_optional_impl ()); auto threshold (threshold_optional_impl ()); - const bool source = request.get ("source", false); - const bool min_version = request.get ("min_version", false); - const bool include_active = request.get ("include_active", false); - const bool include_only_confirmed = request.get ("include_only_confirmed", true); - const bool sorting = request.get ("sorting", false); + bool const source = request.get ("source", false); + bool const min_version = request.get ("min_version", false); + bool const include_active = request.get ("include_active", false); + bool const include_only_confirmed = request.get ("include_only_confirmed", true); + bool const sorting = request.get ("sorting", false); auto simple (threshold.is_zero () && !source && !min_version && !sorting); // if simple, response is a list of hashes - const bool should_sort = sorting && !simple; + bool const should_sort = sorting && !simple; if (!ec) { boost::property_tree::ptree peers_l; @@ -3000,7 +3000,7 @@ void nano::json_handler::pending () if (source || min_version) { auto mid = hash_ptree_pairs.size () <= count ? hash_ptree_pairs.end () : hash_ptree_pairs.begin () + count; - std::partial_sort (hash_ptree_pairs.begin (), mid, hash_ptree_pairs.end (), [] (const auto & lhs, const auto & rhs) { + std::partial_sort (hash_ptree_pairs.begin (), mid, hash_ptree_pairs.end (), [] (auto const & lhs, auto const & rhs) { return lhs.second.template get ("amount") > rhs.second.template get ("amount"); }); for (auto i = 0; i < hash_ptree_pairs.size () && i < count; ++i) @@ -3011,7 +3011,7 @@ void nano::json_handler::pending () else { auto mid = hash_amount_pairs.size () <= count ? hash_amount_pairs.end () : hash_amount_pairs.begin () + count; - std::partial_sort (hash_amount_pairs.begin (), mid, hash_amount_pairs.end (), [] (const auto & lhs, const auto & rhs) { + std::partial_sort (hash_amount_pairs.begin (), mid, hash_amount_pairs.end (), [] (auto const & lhs, auto const & rhs) { return lhs.second > rhs.second; }); @@ -3029,8 +3029,8 @@ void nano::json_handler::pending () void nano::json_handler::pending_exists () { auto hash (hash_impl ()); - const bool include_active = request.get ("include_active", false); - const bool include_only_confirmed = request.get ("include_only_confirmed", true); + bool const include_active = request.get ("include_active", false); + bool const include_only_confirmed = request.get ("include_only_confirmed", true); if (!ec) { auto transaction (node.store.tx_begin_read ()); @@ -3057,7 +3057,7 @@ void nano::json_handler::pending_exists () void nano::json_handler::process () { node.workers.push_task (create_worker_task ([] (std::shared_ptr const & rpc_l) { - const bool is_async = rpc_l->request.get ("async", false); + bool const is_async = rpc_l->request.get ("async", false); auto block (rpc_l->block_impl (true)); // State blocks subtype check @@ -3189,7 +3189,7 @@ void nano::json_handler::process () } case nano::process_result::fork: { - const bool force = rpc_l->request.get ("force", false); + bool const force = rpc_l->request.get ("force", false); if (force) { rpc_l->node.active.erase (*block); @@ -3370,7 +3370,7 @@ void nano::json_handler::representatives () auto count (count_optional_impl ()); if (!ec) { - const bool sorting = request.get ("sorting", false); + bool const sorting = request.get ("sorting", false); boost::property_tree::ptree representatives; auto rep_amounts = node.ledger.cache.rep_weights.get_rep_amounts (); if (!sorting) // Simple @@ -3412,8 +3412,8 @@ void nano::json_handler::representatives () void nano::json_handler::representatives_online () { - const auto accounts_node = request.get_child_optional ("accounts"); - const bool weight = request.get ("weight", false); + auto const accounts_node = request.get_child_optional ("accounts"); + bool const weight = request.get ("weight", false); std::vector accounts_to_filter; if (accounts_node.is_initialized ()) { @@ -3680,7 +3680,7 @@ void nano::json_handler::send () void nano::json_handler::sign () { - const bool json_block_l = request.get ("json_block", false); + bool const json_block_l = request.get ("json_block", false); // Retrieving hash nano::block_hash hash (0); boost::optional hash_text (request.get_optional ("hash")); @@ -4000,7 +4000,7 @@ void nano::json_handler::telemetry () void nano::json_handler::unchecked () { - const bool json_block_l = request.get ("json_block", false); + bool const json_block_l = request.get ("json_block", false); auto count (count_optional_impl ()); if (!ec) { @@ -4039,7 +4039,7 @@ void nano::json_handler::unchecked_clear () void nano::json_handler::unchecked_get () { - const bool json_block_l = request.get ("json_block", false); + bool const json_block_l = request.get ("json_block", false); auto hash (hash_impl ()); if (!ec) { @@ -4077,7 +4077,7 @@ void nano::json_handler::unchecked_get () void nano::json_handler::unchecked_keys () { - const bool json_block_l = request.get ("json_block", false); + bool const json_block_l = request.get ("json_block", false); auto count (count_optional_impl ()); nano::block_hash key (0); boost::optional hash_text (request.get_optional ("key")); @@ -4216,7 +4216,7 @@ void nano::json_handler::wallet_add () nano::raw_key key; if (!key.decode_hex (key_text)) { - const bool generate_work = rpc_l->request.get ("work", true); + bool const generate_work = rpc_l->request.get ("work", true); auto pub (wallet->insert_adhoc (key, generate_work)); if (!pub.is_zero ()) { @@ -4581,9 +4581,9 @@ void nano::json_handler::wallet_key_valid () void nano::json_handler::wallet_ledger () { - const bool representative = request.get ("representative", false); - const bool weight = request.get ("weight", false); - const bool pending = request.get ("pending", false); + bool const representative = request.get ("representative", false); + bool const weight = request.get ("weight", false); + bool const pending = request.get ("pending", false); uint64_t modified_since (0); boost::optional modified_since_text (request.get_optional ("modified_since")); if (modified_since_text.is_initialized ()) @@ -4656,10 +4656,10 @@ void nano::json_handler::wallet_pending () auto wallet (wallet_impl ()); auto count (count_optional_impl ()); auto threshold (threshold_optional_impl ()); - const bool source = request.get ("source", false); - const bool min_version = request.get ("min_version", false); - const bool include_active = request.get ("include_active", false); - const bool include_only_confirmed = request.get ("include_only_confirmed", true); + bool const source = request.get ("source", false); + bool const min_version = request.get ("min_version", false); + bool const include_active = request.get ("include_active", false); + bool const include_only_confirmed = request.get ("include_only_confirmed", true); if (!ec) { boost::property_tree::ptree pending; @@ -5118,7 +5118,7 @@ void nano::inprocess_rpc_handler::process_request_v2 (rpc_handler_request_params { std::string body_l = params_a.json_envelope (body_a); auto handler (std::make_shared (node, ipc_server, nullptr, node.config.ipc_config)); - handler->process_json (reinterpret_cast (body_l.data ()), body_l.size (), response_a); + handler->process_json (reinterpret_cast (body_l.data ()), body_l.size (), response_a); } namespace @@ -5289,7 +5289,7 @@ bool block_confirmed (nano::node & node, nano::transaction & transaction, nano:: return is_confirmed; } -const char * epoch_as_string (nano::epoch epoch) +char const * epoch_as_string (nano::epoch epoch) { switch (epoch) { diff --git a/nano/node/ledger_walker.cpp b/nano/node/ledger_walker.cpp index d24e30e0e5..17d24c1f57 100644 --- a/nano/node/ledger_walker.cpp +++ b/nano/node/ledger_walker.cpp @@ -24,23 +24,23 @@ nano::ledger_walker::ledger_walker (nano::ledger const & ledger_a) : void nano::ledger_walker::walk_backward (nano::block_hash const & start_block_hash_a, should_visit_callback const & should_visit_callback_a, visitor_callback const & visitor_callback_a) { - const auto transaction = ledger.store.tx_begin_read (); + auto const transaction = ledger.store.tx_begin_read (); enqueue_block (start_block_hash_a); while (!blocks_to_walk.empty ()) { - const auto block = dequeue_block (transaction); + auto const block = dequeue_block (transaction); if (!should_visit_callback_a (block)) { continue; } visitor_callback_a (block); - for (const auto & hash : ledger.dependent_blocks (transaction, *block)) + for (auto const & hash : ledger.dependent_blocks (transaction, *block)) { if (!hash.is_zero ()) { - const auto dependent_block = ledger.store.block.get (transaction, hash); + auto const dependent_block = ledger.store.block.get (transaction, hash); if (dependent_block) { enqueue_block (dependent_block); @@ -59,21 +59,21 @@ void nano::ledger_walker::walk (nano::block_hash const & end_block_hash_a, shoul walk_backward (end_block_hash_a, should_visit_callback_a, - [&] (const auto & block) { + [&] (auto const & block) { walked_blocks_order.insert (std::to_string (++last_walked_block_order_index).c_str (), block->hash ()); }); - const auto transaction = ledger.store.tx_begin_read (); + auto const transaction = ledger.store.tx_begin_read (); for (auto walked_block_order_index = last_walked_block_order_index; walked_block_order_index != 0; --walked_block_order_index) { - const auto * block_hash = walked_blocks_order.lookup (std::to_string (walked_block_order_index).c_str ()); + auto const * block_hash = walked_blocks_order.lookup (std::to_string (walked_block_order_index).c_str ()); if (!block_hash) { debug_assert (false); continue; } - const auto block = ledger.store.block.get (transaction, *block_hash); + auto const block = ledger.store.block.get (transaction, *block_hash); if (!block) { debug_assert (false); @@ -88,7 +88,7 @@ void nano::ledger_walker::walk_backward (nano::block_hash const & start_block_ha { walk_backward ( start_block_hash_a, - [&] (const auto & /* block */) { + [&] (auto const & /* block */) { return true; }, visitor_callback_a); @@ -98,7 +98,7 @@ void nano::ledger_walker::walk (nano::block_hash const & end_block_hash_a, visit { walk ( end_block_hash_a, - [&] (const auto & /* block */) { + [&] (auto const & /* block */) { return true; }, visitor_callback_a); @@ -132,7 +132,7 @@ bool nano::ledger_walker::add_to_walked_blocks (nano::block_hash const & block_h debug_assert (!walked_blocks_disk.has_value ()); walked_blocks_disk.emplace (nano::unique_path ().c_str (), sizeof (nano::block_hash::bytes) + 1, dht::DHOpenRW); - for (const auto & walked_block_hash : walked_blocks) + for (auto const & walked_block_hash : walked_blocks) { if (!add_to_walked_blocks_disk (walked_block_hash)) { diff --git a/nano/node/lmdb/lmdb.cpp b/nano/node/lmdb/lmdb.cpp index 2dc32e2274..13b4cfd7cb 100644 --- a/nano/node/lmdb/lmdb.cpp +++ b/nano/node/lmdb/lmdb.cpp @@ -22,13 +22,13 @@ void * mdb_val::data () const } template <> -size_t mdb_val::size () const +std::size_t mdb_val::size () const { return value.mv_size; } template <> -mdb_val::db_val (size_t size_a, void * data_a) : +mdb_val::db_val (std::size_t size_a, void * data_a) : value ({ size_a, data_a }) { } @@ -199,10 +199,10 @@ nano::mdb_txn_callbacks nano::mdb_store::create_txn_callbacks () const nano::mdb_txn_callbacks mdb_txn_callbacks; if (txn_tracking_enabled) { - mdb_txn_callbacks.txn_start = ([&mdb_txn_tracker = mdb_txn_tracker] (const nano::transaction_impl * transaction_impl) { + mdb_txn_callbacks.txn_start = ([&mdb_txn_tracker = mdb_txn_tracker] (nano::transaction_impl const * transaction_impl) { mdb_txn_tracker.add (transaction_impl); }); - mdb_txn_callbacks.txn_end = ([&mdb_txn_tracker = mdb_txn_tracker] (const nano::transaction_impl * transaction_impl) { + mdb_txn_callbacks.txn_end = ([&mdb_txn_tracker = mdb_txn_tracker] (nano::transaction_impl const * transaction_impl) { mdb_txn_tracker.erase (transaction_impl); }); } @@ -838,7 +838,7 @@ int nano::mdb_store::get (nano::transaction const & transaction_a, tables table_ return mdb_get (env.tx (transaction_a), table_to_dbi (table_a), key_a, value_a); } -int nano::mdb_store::put (nano::write_transaction const & transaction_a, tables table_a, nano::mdb_val const & key_a, const nano::mdb_val & value_a) const +int nano::mdb_store::put (nano::write_transaction const & transaction_a, tables table_a, nano::mdb_val const & key_a, nano::mdb_val const & value_a) const { return (mdb_put (env.tx (transaction_a), table_to_dbi (table_a), key_a, value_a, 0)); } @@ -1077,7 +1077,7 @@ nano::uint128_t nano::mdb_store::block_balance_v18 (nano::transaction const & tr } // All the v14 functions below are only needed during upgrades -size_t nano::mdb_store::block_successor_offset_v14 (nano::transaction const & transaction_a, size_t entry_size_a, nano::block_type type_a) const +std::size_t nano::mdb_store::block_successor_offset_v14 (nano::transaction const & transaction_a, std::size_t entry_size_a, nano::block_type type_a) const { return entry_size_a - nano::block_sideband_v14::size (type_a); } diff --git a/nano/node/lmdb/lmdb.hpp b/nano/node/lmdb/lmdb.hpp index d0d32483be..5b1cf90dc7 100644 --- a/nano/node/lmdb/lmdb.hpp +++ b/nano/node/lmdb/lmdb.hpp @@ -231,7 +231,7 @@ class mdb_store : public store_partial bool exists (nano::transaction const & transaction_a, tables table_a, nano::mdb_val const & key_a) const; int get (nano::transaction const & transaction_a, tables table_a, nano::mdb_val const & key_a, nano::mdb_val & value_a) const; - int put (nano::write_transaction const & transaction_a, tables table_a, nano::mdb_val const & key_a, const nano::mdb_val & value_a) const; + int put (nano::write_transaction const & transaction_a, tables table_a, nano::mdb_val const & key_a, nano::mdb_val const & value_a) const; int del (nano::write_transaction const & transaction_a, tables table_a, nano::mdb_val const & key_a) const; bool copy_db (boost::filesystem::path const & destination_file) override; @@ -256,7 +256,7 @@ class mdb_store : public store_partial // These are only use in the upgrade process. std::shared_ptr block_get_v14 (nano::transaction const & transaction_a, nano::block_hash const & hash_a, nano::block_sideband_v14 * sideband_a = nullptr, bool * is_state_v1 = nullptr) const; - size_t block_successor_offset_v14 (nano::transaction const & transaction_a, size_t entry_size_a, nano::block_type type_a) const; + std::size_t block_successor_offset_v14 (nano::transaction const & transaction_a, std::size_t entry_size_a, nano::block_type type_a) const; nano::block_hash block_successor_v14 (nano::transaction const & transaction_a, nano::block_hash const & hash_a) const; nano::mdb_val block_raw_get_v14 (nano::transaction const & transaction_a, nano::block_hash const & hash_a, nano::block_type & type_a, bool * is_state_v1 = nullptr) const; boost::optional block_raw_get_by_type_v14 (nano::transaction const & transaction_a, nano::block_hash const & hash_a, nano::block_type & type_a, bool * is_state_v1) const; @@ -311,9 +311,9 @@ class mdb_store : public store_partial template <> void * mdb_val::data () const; template <> -size_t mdb_val::size () const; +std::size_t mdb_val::size () const; template <> -mdb_val::db_val (size_t size_a, void * data_a); +mdb_val::db_val (std::size_t size_a, void * data_a); template <> void mdb_val::convert_buffer_to_value (); diff --git a/nano/node/lmdb/lmdb_env.hpp b/nano/node/lmdb/lmdb_env.hpp index cf8be76c64..6fa3a082d0 100644 --- a/nano/node/lmdb/lmdb_env.hpp +++ b/nano/node/lmdb/lmdb_env.hpp @@ -36,7 +36,7 @@ class mdb_env final } /** Used by the wallet to override the config map size */ - options & override_config_map_size (size_t map_size_a) + options & override_config_map_size (std::size_t map_size_a) { config.map_size = map_size_a; return *this; diff --git a/nano/node/lmdb/lmdb_txn.cpp b/nano/node/lmdb/lmdb_txn.cpp index 1f6927c5ea..97768b898d 100644 --- a/nano/node/lmdb/lmdb_txn.cpp +++ b/nano/node/lmdb/lmdb_txn.cpp @@ -34,7 +34,7 @@ namespace class matches_txn final { public: - explicit matches_txn (const nano::transaction_impl * transaction_impl_a) : + explicit matches_txn (nano::transaction_impl const * transaction_impl_a) : transaction_impl (transaction_impl_a) { } @@ -45,7 +45,7 @@ class matches_txn final } private: - const nano::transaction_impl * transaction_impl; + nano::transaction_impl const * transaction_impl; }; } @@ -149,12 +149,12 @@ void nano::mdb_txn_tracker::serialize_json (boost::property_tree::ptree & json, // Get the time difference now as creating stacktraces (Debug/Windows for instance) can take a while so results won't be as accurate std::vector times_since_start; times_since_start.reserve (copy_stats.size ()); - std::transform (copy_stats.cbegin (), copy_stats.cend (), std::back_inserter (times_since_start), [] (const auto & stat) { + std::transform (copy_stats.cbegin (), copy_stats.cend (), std::back_inserter (times_since_start), [] (auto const & stat) { return stat.timer.since_start (); }); debug_assert (times_since_start.size () == copy_stats.size ()); - for (size_t i = 0; i < times_since_start.size (); ++i) + for (std::size_t i = 0; i < times_since_start.size (); ++i) { auto const & stat = copy_stats[i]; auto time_held_open = times_since_start[i]; @@ -207,7 +207,7 @@ void nano::mdb_txn_tracker::log_if_held_long_enough (nano::mdb_txn_stats const & } } -void nano::mdb_txn_tracker::add (const nano::transaction_impl * transaction_impl) +void nano::mdb_txn_tracker::add (nano::transaction_impl const * transaction_impl) { nano::lock_guard guard (mutex); debug_assert (std::find_if (stats.cbegin (), stats.cend (), matches_txn (transaction_impl)) == stats.cend ()); @@ -215,7 +215,7 @@ void nano::mdb_txn_tracker::add (const nano::transaction_impl * transaction_impl } /** Can be called without error if transaction does not exist */ -void nano::mdb_txn_tracker::erase (const nano::transaction_impl * transaction_impl) +void nano::mdb_txn_tracker::erase (nano::transaction_impl const * transaction_impl) { nano::unique_lock lk (mutex); auto it = std::find_if (stats.begin (), stats.end (), matches_txn (transaction_impl)); @@ -228,7 +228,7 @@ void nano::mdb_txn_tracker::erase (const nano::transaction_impl * transaction_im } } -nano::mdb_txn_stats::mdb_txn_stats (const nano::transaction_impl * transaction_impl) : +nano::mdb_txn_stats::mdb_txn_stats (nano::transaction_impl const * transaction_impl) : transaction_impl (transaction_impl), thread_name (nano::thread_role::get_string ()), stacktrace (std::make_shared ()) @@ -238,5 +238,5 @@ nano::mdb_txn_stats::mdb_txn_stats (const nano::transaction_impl * transaction_i bool nano::mdb_txn_stats::is_write () const { - return (dynamic_cast (transaction_impl) != nullptr); + return (dynamic_cast (transaction_impl) != nullptr); } diff --git a/nano/node/lmdb/lmdb_txn.hpp b/nano/node/lmdb/lmdb_txn.hpp index 3ab04b4747..6e0a4893ef 100644 --- a/nano/node/lmdb/lmdb_txn.hpp +++ b/nano/node/lmdb/lmdb_txn.hpp @@ -20,8 +20,8 @@ class mdb_env; class mdb_txn_callbacks { public: - std::function txn_start{ [] (const nano::transaction_impl *) {} }; - std::function txn_end{ [] (const nano::transaction_impl *) {} }; + std::function txn_start{ [] (nano::transaction_impl const *) {} }; + std::function txn_end{ [] (nano::transaction_impl const *) {} }; }; class read_mdb_txn final : public read_transaction_impl @@ -54,10 +54,10 @@ class write_mdb_txn final : public write_transaction_impl class mdb_txn_stats { public: - mdb_txn_stats (const nano::transaction_impl * transaction_impl_a); + mdb_txn_stats (nano::transaction_impl const * transaction_impl_a); bool is_write () const; nano::timer timer; - const nano::transaction_impl * transaction_impl; + nano::transaction_impl const * transaction_impl; std::string thread_name; // Smart pointer so that we don't need the full definition which causes min/max issues on Windows @@ -69,8 +69,8 @@ class mdb_txn_tracker public: mdb_txn_tracker (nano::logger_mt & logger_a, nano::txn_tracking_config const & txn_tracking_config_a, std::chrono::milliseconds block_processor_batch_max_time_a); void serialize_json (boost::property_tree::ptree & json, std::chrono::milliseconds min_read_time, std::chrono::milliseconds min_write_time); - void add (const nano::transaction_impl * transaction_impl); - void erase (const nano::transaction_impl * transaction_impl); + void add (nano::transaction_impl const * transaction_impl); + void erase (nano::transaction_impl const * transaction_impl); private: nano::mutex mutex; diff --git a/nano/node/network.cpp b/nano/node/network.cpp index a564c42b58..aabca2a288 100644 --- a/nano/node/network.cpp +++ b/nano/node/network.cpp @@ -38,7 +38,7 @@ nano::network::network (nano::node & node_a, uint16_t port_a) : boost::thread::attributes attrs; nano::thread_attributes::set (attrs); // UDP - for (size_t i = 0; i < node.config.network_threads && !node.flags.disable_udp; ++i) + for (std::size_t i = 0; i < node.config.network_threads && !node.flags.disable_udp; ++i) { packet_processing_threads.emplace_back (attrs, [this] () { nano::thread_role::set (nano::thread_role::name::packet_processing); @@ -73,7 +73,7 @@ nano::network::network (nano::node & node_a, uint16_t port_a) : }); } // TCP - for (size_t i = 0; i < node.config.network_threads && !node.flags.disable_tcp_realtime; ++i) + for (std::size_t i = 0; i < node.config.network_threads && !node.flags.disable_tcp_realtime; ++i) { packet_processing_threads.emplace_back (attrs, [this] () { nano::thread_role::set (nano::thread_role::name::packet_processing); @@ -272,11 +272,11 @@ void nano::network::send_confirm_req (std::shared_ptr void nano::network::broadcast_confirm_req (std::shared_ptr const & block_a) { - auto list (std::make_shared>> (node.rep_crawler.representative_endpoints (std::numeric_limits::max ()))); + auto list (std::make_shared>> (node.rep_crawler.representative_endpoints (std::numeric_limits::max ()))); if (list->empty () || node.rep_crawler.total_weight () < node.online_reps.delta ()) { // broadcast request to all peers (with max limit 2 * sqrt (peers count)) - auto peers (node.network.list (std::min (100, node.network.fanout (2.0)))); + auto peers (node.network.list (std::min (100, node.network.fanout (2.0)))); list->clear (); list->insert (list->end (), peers.begin (), peers.end ()); } @@ -288,7 +288,7 @@ void nano::network::broadcast_confirm_req (std::shared_ptr const & * of "broadcast_confirm_req" will be responsible for calling it again * if the votes for a block have not arrived in time. */ - const size_t max_endpoints = 32; + std::size_t const max_endpoints = 32; nano::random_pool_shuffle (list->begin (), list->end ()); if (list->size () > max_endpoints) { @@ -300,7 +300,7 @@ void nano::network::broadcast_confirm_req (std::shared_ptr const & void nano::network::broadcast_confirm_req_base (std::shared_ptr const & block_a, std::shared_ptr>> const & endpoints_a, unsigned delay_a, bool resumption) { - const size_t max_reps = 10; + std::size_t const max_reps = 10; if (!resumption && node.config.logging.network_logging ()) { node.logger.try_log (boost::str (boost::format ("Broadcasting confirm req for block %1% to %2% representatives") % block_a->hash ().to_string () % endpoints_a->size ())); @@ -609,7 +609,7 @@ bool nano::network::reachout (nano::endpoint const & endpoint_a, bool allow_loca return error; } -std::deque> nano::network::list (size_t count_a, uint8_t minimum_version_a, bool include_tcp_temporary_channels_a) +std::deque> nano::network::list (std::size_t count_a, uint8_t minimum_version_a, bool include_tcp_temporary_channels_a) { std::deque> result; tcp_channels.list (result, minimum_version_a, include_tcp_temporary_channels_a); @@ -622,7 +622,7 @@ std::deque> nano::network::list (size_ return result; } -std::deque> nano::network::list_non_pr (size_t count_a) +std::deque> nano::network::list_non_pr (std::size_t count_a) { std::deque> result; tcp_channels.list (result); @@ -640,12 +640,12 @@ std::deque> nano::network::list_non_pr } // Simulating with sqrt_broadcast_simulate shows we only need to broadcast to sqrt(total_peers) random peers in order to successfully publish to everyone with high probability -size_t nano::network::fanout (float scale) const +std::size_t nano::network::fanout (float scale) const { - return static_cast (std::ceil (scale * size_sqrt ())); + return static_cast (std::ceil (scale * size_sqrt ())); } -std::unordered_set> nano::network::random_set (size_t count_a, uint8_t min_version_a, bool include_temporary_channels_a) const +std::unordered_set> nano::network::random_set (std::size_t count_a, uint8_t min_version_a, bool include_temporary_channels_a) const { std::unordered_set> result (tcp_channels.random_set (count_a, min_version_a, include_temporary_channels_a)); std::unordered_set> udp_random (udp_channels.random_set (count_a, min_version_a)); @@ -793,7 +793,7 @@ void nano::network::ongoing_keepalive () }); } -size_t nano::network::size () const +std::size_t nano::network::size () const { return tcp_channels.size () + udp_channels.size (); } @@ -822,12 +822,12 @@ void nano::network::erase (nano::transport::channel const & channel_a) } } -void nano::network::set_bandwidth_params (double limit_burst_ratio_a, size_t limit_a) +void nano::network::set_bandwidth_params (double limit_burst_ratio_a, std::size_t limit_a) { limiter.reset (limit_burst_ratio_a, limit_a); } -nano::message_buffer_manager::message_buffer_manager (nano::stat & stats_a, size_t size, size_t count) : +nano::message_buffer_manager::message_buffer_manager (nano::stat & stats_a, std::size_t size, std::size_t count) : stats (stats_a), free (count), full (count), @@ -966,7 +966,7 @@ void nano::tcp_message_manager::stop () producer_condition.notify_all (); } -nano::syn_cookies::syn_cookies (size_t max_cookies_per_ip_a) : +nano::syn_cookies::syn_cookies (std::size_t max_cookies_per_ip_a) : max_cookies_per_ip (max_cookies_per_ip_a) { } @@ -1044,7 +1044,7 @@ void nano::syn_cookies::purge (std::chrono::steady_clock::time_point const & cut } } -size_t nano::syn_cookies::cookies_size () +std::size_t nano::syn_cookies::cookies_size () { nano::lock_guard lock (syn_cookie_mutex); return cookies.size (); @@ -1062,8 +1062,8 @@ std::unique_ptr nano::collect_container_info (ne std::unique_ptr nano::syn_cookies::collect_container_info (std::string const & name) { - size_t syn_cookies_count; - size_t syn_cookies_per_ip_count; + std::size_t syn_cookies_count; + std::size_t syn_cookies_per_ip_count; { nano::lock_guard syn_cookie_guard (syn_cookie_mutex); syn_cookies_count = cookies.size (); diff --git a/nano/node/network.hpp b/nano/node/network.hpp index eb0c771da1..43f510ad06 100644 --- a/nano/node/network.hpp +++ b/nano/node/network.hpp @@ -21,7 +21,7 @@ class message_buffer final { public: uint8_t * buffer{ nullptr }; - size_t size{ 0 }; + std::size_t size{ 0 }; nano::endpoint endpoint; }; /** @@ -38,7 +38,7 @@ class message_buffer_manager final // Stats - Statistics // Size - Size of each individual buffer // Count - Number of buffers to allocate - message_buffer_manager (nano::stat & stats, size_t, size_t); + message_buffer_manager (nano::stat & stats, std::size_t, std::size_t); // Return a buffer where message data can be put // Method will attempt to return the first free buffer // If there are no free buffers, an unserviced buffer will be dequeued and returned @@ -92,7 +92,7 @@ class tcp_message_manager final class syn_cookies final { public: - syn_cookies (size_t); + syn_cookies (std::size_t); void purge (std::chrono::steady_clock::time_point const &); // Returns boost::none if the IP is rate capped on syn cookie requests, // or if the endpoint already has a syn cookie query @@ -101,7 +101,7 @@ class syn_cookies final // Also removes the syn cookie from the store if valid bool validate (nano::endpoint const &, nano::account const &, nano::signature const &); std::unique_ptr collect_container_info (std::string const &); - size_t cookies_size (); + std::size_t cookies_size (); private: class syn_cookie_info final @@ -113,7 +113,7 @@ class syn_cookies final mutable nano::mutex syn_cookie_mutex; std::unordered_map cookies; std::unordered_map cookies_per_ip; - size_t max_cookies_per_ip; + std::size_t max_cookies_per_ip; }; class network final { @@ -148,14 +148,14 @@ class network final bool not_a_peer (nano::endpoint const &, bool); // Should we reach out to this endpoint with a keepalive message bool reachout (nano::endpoint const &, bool = false); - std::deque> list (size_t, uint8_t = 0, bool = true); - std::deque> list_non_pr (size_t); + std::deque> list (std::size_t, uint8_t = 0, bool = true); + std::deque> list_non_pr (std::size_t); // Desired fanout for a given scale - size_t fanout (float scale = 1.0f) const; + std::size_t fanout (float scale = 1.0f) const; void random_fill (std::array &) const; void fill_keepalive_self (std::array &) const; // Note: The minimum protocol version is used after the random selection, so number of peers can be less than expected. - std::unordered_set> random_set (size_t, uint8_t = 0, bool = false) const; + std::unordered_set> random_set (std::size_t, uint8_t = 0, bool = false) const; // Get the next peer for attempting a tcp bootstrap connection nano::tcp_endpoint bootstrap_peer (bool = false); nano::endpoint endpoint (); @@ -165,11 +165,11 @@ class network final nano::syn_cookies syn_cookies; void ongoing_syn_cookie_cleanup (); void ongoing_keepalive (); - size_t size () const; + std::size_t size () const; float size_sqrt () const; bool empty () const; void erase (nano::transport::channel const &); - void set_bandwidth_params (double, size_t); + void set_bandwidth_params (double, std::size_t); private: void process_message (nano::message const &, std::shared_ptr const &); @@ -192,9 +192,9 @@ class network final std::function)> channel_observer; std::atomic stopped{ false }; static unsigned const broadcast_interval_ms = 10; - static size_t const buffer_size = 512; - static size_t const confirm_req_hashes_max = 7; - static size_t const confirm_ack_hashes_max = 12; + static std::size_t const buffer_size = 512; + static std::size_t const confirm_req_hashes_max = 7; + static std::size_t const confirm_ack_hashes_max = 12; }; std::unique_ptr collect_container_info (network & network, std::string const & name); } diff --git a/nano/node/node.cpp b/nano/node/node.cpp index 743e9d27ac..0f644853dc 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -21,15 +21,15 @@ double constexpr nano::node::price_max; double constexpr nano::node::free_cutoff; -size_t constexpr nano::block_arrival::arrival_size_min; +std::size_t constexpr nano::block_arrival::arrival_size_min; std::chrono::seconds constexpr nano::block_arrival::arrival_time_min; namespace nano { extern unsigned char nano_bootstrap_weights_live[]; -extern size_t nano_bootstrap_weights_live_size; +extern std::size_t nano_bootstrap_weights_live_size; extern unsigned char nano_bootstrap_weights_beta[]; -extern size_t nano_bootstrap_weights_beta_size; +extern std::size_t nano_bootstrap_weights_beta_size; } void nano::node::keepalive (std::string const & address_a, uint16_t port_a) @@ -62,13 +62,13 @@ void nano::node::keepalive (std::string const & address_a, uint16_t port_a) std::unique_ptr nano::collect_container_info (rep_crawler & rep_crawler, std::string const & name) { - size_t count; + std::size_t count; { nano::lock_guard guard (rep_crawler.active_mutex); count = rep_crawler.active.size (); } - auto sizeof_element = sizeof (decltype (rep_crawler.active)::value_type); + auto const sizeof_element = sizeof (decltype (rep_crawler.active)::value_type); auto composite = std::make_unique (name); composite->add_component (std::make_unique (container_info{ "active", count, sizeof_element })); return composite; @@ -318,7 +318,7 @@ nano::node::node (boost::asio::io_context & io_ctx_a, boost::filesystem::path co logger.always_log ("Build information: ", BUILD_INFO); logger.always_log ("Database backend: ", store.vendor_get ()); - auto network_label = network_params.network.get_current_network_as_string (); + auto const network_label = network_params.network.get_current_network_as_string (); logger.always_log ("Active network: ", network_label); logger.always_log (boost::str (boost::format ("Work pool running %1% threads %2%") % work.threads.size () % (work.opencl ? "(1 for OpenCL)" : ""))); @@ -338,13 +338,13 @@ nano::node::node (boost::asio::io_context & io_ctx_a, boost::filesystem::path co // First do a pass with a read to see if any writing needs doing, this saves needing to open a write lock (and potentially blocking) auto is_initialized (false); { - auto transaction (store.tx_begin_read ()); + auto const transaction (store.tx_begin_read ()); is_initialized = (store.account.begin (transaction) != store.account.end ()); } if (!is_initialized && !flags.read_only) { - auto transaction (store.tx_begin_write ({ tables::accounts, tables::blocks, tables::confirmation_height, tables::frontiers })); + auto const transaction (store.tx_begin_write ({ tables::accounts, tables::blocks, tables::confirmation_height, tables::frontiers })); // Store was empty meaning we just created it, add the genesis block store.initialize (transaction, ledger.cache); } @@ -358,7 +358,7 @@ nano::node::node (boost::asio::io_context & io_ctx_a, boost::filesystem::path co { ss << " Beta network may have reset, try clearing database files"; } - auto str = ss.str (); + auto const str = ss.str (); logger.always_log (str); std::cerr << str << std::endl; @@ -386,9 +386,9 @@ nano::node::node (boost::asio::io_context & io_ctx_a, boost::filesystem::path co if ((network_params.network.is_live_network () || network_params.network.is_beta_network ()) && !flags.inactive_node) { - auto bootstrap_weights = get_bootstrap_weights (); + auto const bootstrap_weights = get_bootstrap_weights (); // Use bootstrap weights if initial bootstrap is not completed - bool use_bootstrap_weight = ledger.cache.block_count < bootstrap_weights.first; + const bool use_bootstrap_weight = ledger.cache.block_count < bootstrap_weights.first; if (use_bootstrap_weight) { ledger.bootstrap_weights = bootstrap_weights.second; @@ -402,7 +402,7 @@ nano::node::node (boost::asio::io_context & io_ctx_a, boost::filesystem::path co // Drop unchecked blocks if initial bootstrap is completed if (!flags.disable_unchecked_drop && !use_bootstrap_weight && !flags.read_only) { - auto transaction (store.tx_begin_write ({ tables::unchecked })); + auto const transaction (store.tx_begin_write ({ tables::unchecked })); store.unchecked.clear (transaction); logger.always_log ("Dropping unchecked blocks"); } @@ -457,12 +457,12 @@ void nano::node::do_rpc_callback (boost::asio::ip::tcp::resolver::iterator i_a, req->insert (boost::beast::http::field::content_type, "application/json"); req->body () = *body; req->prepare_payload (); - boost::beast::http::async_write (*sock, *req, [node_l, sock, address, port, req, i_a, target, body, resolver] (boost::system::error_code const & ec, size_t bytes_transferred) mutable { + boost::beast::http::async_write (*sock, *req, [node_l, sock, address, port, req, i_a, target, body, resolver] (boost::system::error_code const & ec, std::size_t bytes_transferred) mutable { if (!ec) { auto sb (std::make_shared ()); auto resp (std::make_shared> ()); - boost::beast::http::async_read (*sock, *sb, *resp, [node_l, sb, resp, sock, address, port, i_a, target, body, resolver] (boost::system::error_code const & ec, size_t bytes_transferred) mutable { + boost::beast::http::async_read (*sock, *sb, *resp, [node_l, sb, resp, sock, address, port, i_a, target, body, resolver] (boost::system::error_code const & ec, std::size_t bytes_transferred) mutable { if (!ec) { if (boost::beast::http::to_status_class (resp->result ()) == boost::beast::http::status_class::successful) @@ -556,7 +556,7 @@ void nano::node::process_active (std::shared_ptr const & incoming) nano::process_return nano::node::process (nano::block & block_a) { - auto transaction (store.tx_begin_write ({ tables::accounts, tables::blocks, tables::frontiers, tables::pending })); + auto const transaction (store.tx_begin_write ({ tables::accounts, tables::blocks, tables::frontiers, tables::pending })); auto result (ledger.process (transaction, block_a)); return result; } @@ -571,7 +571,7 @@ nano::process_return nano::node::process_local (std::shared_ptr con block_processor.wait_write (); // Process block block_post_events post_events ([&store = store] { return store.tx_begin_read (); }); - auto transaction (store.tx_begin_write ({ tables::accounts, tables::blocks, tables::frontiers, tables::pending })); + auto const transaction (store.tx_begin_write ({ tables::accounts, tables::blocks, tables::frontiers, tables::pending })); return block_processor.process_one (transaction, post_events, info, false, nano::block_origin::local); } @@ -695,26 +695,26 @@ void nano::node::keepalive_preconfigured (std::vector const & peers nano::block_hash nano::node::latest (nano::account const & account_a) { - auto transaction (store.tx_begin_read ()); + auto const transaction (store.tx_begin_read ()); return ledger.latest (transaction, account_a); } nano::uint128_t nano::node::balance (nano::account const & account_a) { - auto transaction (store.tx_begin_read ()); + auto const transaction (store.tx_begin_read ()); return ledger.account_balance (transaction, account_a); } std::shared_ptr nano::node::block (nano::block_hash const & hash_a) { - auto transaction (store.tx_begin_read ()); + auto const transaction (store.tx_begin_read ()); return store.block.get (transaction, hash_a); } std::pair nano::node::balance_pending (nano::account const & account_a, bool only_confirmed_a) { std::pair result; - auto transaction (store.tx_begin_read ()); + auto const transaction (store.tx_begin_read ()); result.first = ledger.account_balance (transaction, account_a, only_confirmed_a); result.second = ledger.account_pending (transaction, account_a, only_confirmed_a); return result; @@ -727,7 +727,7 @@ nano::uint128_t nano::node::weight (nano::account const & account_a) nano::block_hash nano::node::rep_block (nano::account const & account_a) { - auto transaction (store.tx_begin_read ()); + auto const transaction (store.tx_begin_read ()); nano::account_info info; nano::block_hash result (0); if (!store.account.get (transaction, account_a, info)) @@ -750,13 +750,13 @@ nano::uint128_t nano::node::minimum_principal_weight (nano::uint128_t const & on void nano::node::long_inactivity_cleanup () { bool perform_cleanup = false; - auto transaction (store.tx_begin_write ({ tables::online_weight, tables::peers })); + auto const transaction (store.tx_begin_write ({ tables::online_weight, tables::peers })); if (store.online_weight.count (transaction) > 0) { auto sample (store.online_weight.rbegin (transaction)); auto n (store.online_weight.end ()); debug_assert (sample != n); - auto const one_week_ago = static_cast ((std::chrono::system_clock::now () - std::chrono::hours (7 * 24)).time_since_epoch ().count ()); + auto const one_week_ago = static_cast ((std::chrono::system_clock::now () - std::chrono::hours (7 * 24)).time_since_epoch ().count ()); perform_cleanup = sample->first < one_week_ago; } if (perform_cleanup) @@ -842,7 +842,7 @@ void nano::node::ongoing_bootstrap () void nano::node::ongoing_peer_store () { - bool stored (network.tcp_channels.store_all (true)); + const bool stored (network.tcp_channels.store_all (true)); network.udp_channels.store_all (!stored); std::weak_ptr node_w (shared_from_this ()); workers.add_timed_task (std::chrono::steady_clock::now () + network_params.network.peer_dump_interval, [node_w] () { @@ -888,7 +888,7 @@ void nano::node::bootstrap_wallet () std::deque accounts; { nano::lock_guard lock (wallets.mutex); - auto transaction (wallets.tx_begin_read ()); + auto const transaction (wallets.tx_begin_read ()); for (auto i (wallets.items.begin ()), n (wallets.items.end ()); i != n && accounts.size () < 128; ++i) { auto & wallet (*i->second); @@ -910,13 +910,13 @@ void nano::node::unchecked_cleanup () { std::vector digests; std::deque cleaning_list; - auto attempt (bootstrap_initiator.current_attempt ()); - bool long_attempt (attempt != nullptr && std::chrono::duration_cast (std::chrono::steady_clock::now () - attempt->attempt_start).count () > config.unchecked_cutoff_time.count ()); + auto const attempt (bootstrap_initiator.current_attempt ()); + const bool long_attempt (attempt != nullptr && std::chrono::duration_cast (std::chrono::steady_clock::now () - attempt->attempt_start).count () > config.unchecked_cutoff_time.count ()); // Collect old unchecked keys if (ledger.cache.block_count >= ledger.bootstrap_weight_max_blocks && !long_attempt) { - auto now (nano::seconds_since_epoch ()); - auto transaction (store.tx_begin_read ()); + auto const now (nano::seconds_since_epoch ()); + auto const transaction (store.tx_begin_read ()); // Max 1M records to clean, max 2 minutes reading to prevent slow i/o systems issues for (auto i (store.unchecked.begin (transaction)), n (store.unchecked.end ()); i != n && cleaning_list.size () < 1024 * 1024 && nano::seconds_since_epoch () - now < 120; ++i) { @@ -936,8 +936,8 @@ void nano::node::unchecked_cleanup () // Delete old unchecked keys in batches while (!cleaning_list.empty ()) { - size_t deleted_count (0); - auto transaction (store.tx_begin_write ({ tables::unchecked })); + std::size_t deleted_count (0); + auto const transaction (store.tx_begin_write ({ tables::unchecked })); while (deleted_count++ < 2 * 1024 && !cleaning_list.empty ()) { auto key (cleaning_list.front ()); @@ -973,7 +973,7 @@ bool nano::node::collect_ledger_pruning_targets (std::deque & { uint64_t read_operations (0); bool finish_transaction (false); - auto transaction (store.tx_begin_read ()); + auto const transaction (store.tx_begin_read ()); for (auto i (store.confirmation_height.begin (transaction, last_account_a)), n (store.confirmation_height.end ()); i != n && !finish_transaction;) { ++read_operations; @@ -1063,7 +1063,7 @@ void nano::node::ledger_pruning (uint64_t const batch_size_a, bool bootstrap_wei } } } - auto log_message (boost::str (boost::format ("Total recently pruned block count: %1%") % pruned_count)); + auto const log_message (boost::str (boost::format ("Total recently pruned block count: %1%") % pruned_count)); if (!log_to_cout_a) { logger.always_log (log_message); @@ -1078,7 +1078,7 @@ void nano::node::ongoing_ledger_pruning () { auto bootstrap_weight_reached (ledger.cache.block_count >= ledger.bootstrap_weight_max_blocks); ledger_pruning (flags.block_processor_batch_size != 0 ? flags.block_processor_batch_size : 2 * 1024, bootstrap_weight_reached, false); - auto ledger_pruning_interval (bootstrap_weight_reached ? config.max_pruning_age : std::min (config.max_pruning_age, std::chrono::seconds (15 * 60))); + auto const ledger_pruning_interval (bootstrap_weight_reached ? config.max_pruning_age : std::min (config.max_pruning_age, std::chrono::seconds (15 * 60))); auto this_l (shared ()); workers.add_timed_task (std::chrono::steady_clock::now () + ledger_pruning_interval, [this_l] () { this_l->workers.push_task ([this_l] () { @@ -1347,7 +1347,7 @@ void nano::node::process_confirmed_data (nano::transaction const & transaction_a void nano::node::process_confirmed (nano::election_status const & status_a, uint64_t iteration_a) { auto hash (status_a.winner->hash ()); - const auto num_iters = (config.block_processor_batch_max_time / network_params.node.process_confirmed_interval) * 4; + auto const num_iters = (config.block_processor_batch_max_time / network_params.node.process_confirmed_interval) * 4; if (auto block_l = ledger.store.block.get (ledger.store.tx_begin_read (), hash)) { active.add_recently_confirmed (block_l->qualified_root (), hash); @@ -1393,7 +1393,7 @@ bool nano::block_arrival::recent (nano::block_hash const & hash_a) std::unique_ptr nano::collect_container_info (block_arrival & block_arrival, std::string const & name) { - size_t count = 0; + std::size_t count = 0; { nano::lock_guard guard (block_arrival.mutex); count = block_arrival.arrival.size (); @@ -1436,7 +1436,7 @@ bool nano::node::epoch_upgrader (nano::raw_key const & prv_a, nano::epoch epoch_ return error; } -void nano::node::set_bandwidth_params (size_t limit, double ratio) +void nano::node::set_bandwidth_params (std::size_t limit, double ratio) { config.bandwidth_limit_burst_ratio = ratio; config.bandwidth_limit = limit; @@ -1706,9 +1706,9 @@ void nano::node::epoch_upgrader_impl (nano::raw_key const & prv_a, nano::epoch e std::pair nano::node::get_bootstrap_weights () const { std::unordered_map weights; - const uint8_t * weight_buffer = network_params.network.is_live_network () ? nano_bootstrap_weights_live : nano_bootstrap_weights_beta; - size_t weight_size = network_params.network.is_live_network () ? nano_bootstrap_weights_live_size : nano_bootstrap_weights_beta_size; - nano::bufferstream weight_stream ((const uint8_t *)weight_buffer, weight_size); + uint8_t const * weight_buffer = network_params.network.is_live_network () ? nano_bootstrap_weights_live : nano_bootstrap_weights_beta; + std::size_t weight_size = network_params.network.is_live_network () ? nano_bootstrap_weights_live_size : nano_bootstrap_weights_beta_size; + nano::bufferstream weight_stream ((uint8_t const *)weight_buffer, weight_size); nano::uint128_union block_height; uint64_t max_blocks = 0; if (!nano::try_read (weight_stream, block_height)) diff --git a/nano/node/node.hpp b/nano/node/node.hpp index 6a0ae59e14..a188940d43 100644 --- a/nano/node/node.hpp +++ b/nano/node/node.hpp @@ -74,7 +74,7 @@ class block_arrival final arrival; // clang-format on nano::mutex mutex{ mutex_identifier (mutexes::block_arrival) }; - static size_t constexpr arrival_size_min = 8 * 1024; + static std::size_t constexpr arrival_size_min = 8 * 1024; static std::chrono::seconds constexpr arrival_time_min = std::chrono::seconds (300); }; @@ -148,7 +148,7 @@ class node final : public std::enable_shared_from_this bool online () const; bool init_error () const; bool epoch_upgrader (nano::raw_key const &, nano::epoch, uint64_t, uint64_t); - void set_bandwidth_params (size_t limit, double ratio); + void set_bandwidth_params (std::size_t limit, double ratio); std::pair get_bootstrap_weights () const; void populate_backlog (); nano::write_database_queue write_database_queue; @@ -192,7 +192,7 @@ class node final : public std::enable_shared_from_this nano::election_scheduler scheduler; nano::request_aggregator aggregator; nano::wallets wallets; - const std::chrono::steady_clock::time_point startup_time; + std::chrono::steady_clock::time_point const startup_time; std::chrono::seconds unchecked_cutoff = std::chrono::seconds (7 * 24 * 60 * 60); // Week std::atomic unresponsive_work_peers{ false }; std::atomic stopped{ false }; diff --git a/nano/node/nodeconfig.cpp b/nano/node/nodeconfig.cpp index aa68fa4aa2..5bfc9db5e5 100644 --- a/nano/node/nodeconfig.cpp +++ b/nano/node/nodeconfig.cpp @@ -12,12 +12,12 @@ namespace { -const char * preconfigured_peers_key = "preconfigured_peers"; -const char * signature_checker_threads_key = "signature_checker_threads"; -const char * pow_sleep_interval_key = "pow_sleep_interval"; -const char * default_beta_peer_network = "peering-beta.nano.org"; -const char * default_live_peer_network = "peering.nano.org"; -const std::string default_test_peer_network = nano::get_env_or_default ("NANO_TEST_PEER_NETWORK", "peering-test.nano.org"); +char const * preconfigured_peers_key = "preconfigured_peers"; +char const * signature_checker_threads_key = "signature_checker_threads"; +char const * pow_sleep_interval_key = "pow_sleep_interval"; +char const * default_beta_peer_network = "peering-beta.nano.org"; +char const * default_live_peer_network = "peering.nano.org"; +std::string const default_test_peer_network = nano::get_env_or_default ("NANO_TEST_PEER_NETWORK", "peering-test.nano.org"); } nano::node_config::node_config (nano::network_params & network_params) : @@ -341,9 +341,9 @@ nano::error nano::node_config::deserialize_toml (nano::tomlconfig & toml) toml.get (pow_sleep_interval_key, pow_sleep_interval_l); pow_sleep_interval = std::chrono::nanoseconds (pow_sleep_interval_l); toml.get ("use_memory_pools", use_memory_pools); - toml.get ("confirmation_history_size", confirmation_history_size); - toml.get ("active_elections_size", active_elections_size); - toml.get ("bandwidth_limit", bandwidth_limit); + toml.get ("confirmation_history_size", confirmation_history_size); + toml.get ("active_elections_size", active_elections_size); + toml.get ("bandwidth_limit", bandwidth_limit); toml.get ("bandwidth_limit_burst_ratio", bandwidth_limit_burst_ratio); toml.get ("backup_before_upgrade", backup_before_upgrade); @@ -395,7 +395,7 @@ nano::error nano::node_config::deserialize_toml (nano::tomlconfig & toml) { toml.get_error ().set ("active_elections_size must be greater than 250"); } - if (bandwidth_limit > std::numeric_limits::max ()) + if (bandwidth_limit > std::numeric_limits::max ()) { toml.get_error ().set ("bandwidth_limit unbounded = 0, default = 10485760, max = 18446744073709551615"); } @@ -674,9 +674,9 @@ nano::error nano::node_config::deserialize_json (bool & upgraded_a, nano::jsonco json.get (pow_sleep_interval_key, pow_sleep_interval_l); pow_sleep_interval = std::chrono::nanoseconds (pow_sleep_interval_l); json.get ("use_memory_pools", use_memory_pools); - json.get ("confirmation_history_size", confirmation_history_size); - json.get ("active_elections_size", active_elections_size); - json.get ("bandwidth_limit", bandwidth_limit); + json.get ("confirmation_history_size", confirmation_history_size); + json.get ("active_elections_size", active_elections_size); + json.get ("bandwidth_limit", bandwidth_limit); json.get ("backup_before_upgrade", backup_before_upgrade); auto conf_height_processor_batch_min_time_l (conf_height_processor_batch_min_time.count ()); @@ -696,7 +696,7 @@ nano::error nano::node_config::deserialize_json (bool & upgraded_a, nano::jsonco { json.get_error ().set ("active_elections_size must be greater than 250"); } - if (bandwidth_limit > std::numeric_limits::max ()) + if (bandwidth_limit > std::numeric_limits::max ()) { json.get_error ().set ("bandwidth_limit unbounded = 0, default = 10485760, max = 18446744073709551615"); } @@ -767,7 +767,7 @@ void nano::node_config::deserialize_address (std::string const & entry_a, std::v nano::account nano::node_config::random_representative () const { debug_assert (!preconfigured_representatives.empty ()); - size_t index (nano::random_pool::generate_word32 (0, static_cast (preconfigured_representatives.size () - 1))); + std::size_t index (nano::random_pool::generate_word32 (0, static_cast (preconfigured_representatives.size () - 1))); auto result (preconfigured_representatives[index]); return result; } diff --git a/nano/node/nodeconfig.hpp b/nano/node/nodeconfig.hpp index 12ce39a8c4..13d5b74029 100644 --- a/nano/node/nodeconfig.hpp +++ b/nano/node/nodeconfig.hpp @@ -69,7 +69,7 @@ class node_config uint32_t bootstrap_frontier_request_count{ 1024 * 1024 }; nano::websocket::config websocket_config; nano::diagnostics_config diagnostics_config; - size_t confirmation_history_size{ 2048 }; + std::size_t confirmation_history_size{ 2048 }; std::string callback_address; uint16_t callback_port{ 0 }; std::string callback_target; @@ -83,7 +83,7 @@ class node_config /** Timeout for initiated async operations */ std::chrono::seconds tcp_io_timeout{ (network_params.network.is_dev_network () && !is_sanitizer_build) ? std::chrono::seconds (5) : std::chrono::seconds (15) }; std::chrono::nanoseconds pow_sleep_interval{ 0 }; - size_t active_elections_size{ 5000 }; + std::size_t active_elections_size{ 5000 }; /** Default maximum incoming TCP connections, including realtime network & bootstrap */ unsigned tcp_incoming_connections_max{ 2048 }; bool use_memory_pools{ true }; @@ -91,7 +91,7 @@ class node_config static std::chrono::seconds constexpr keepalive_cutoff = keepalive_period * 5; static std::chrono::minutes constexpr wallet_backup_interval = std::chrono::minutes (5); /** Default outbound traffic shaping is 10MB/s */ - size_t bandwidth_limit{ 10 * 1024 * 1024 }; + std::size_t bandwidth_limit{ 10 * 1024 * 1024 }; /** By default, allow bursts of 15MB/s (not sustainable) */ double bandwidth_limit_burst_ratio{ 3. }; std::chrono::milliseconds conf_height_processor_batch_min_time{ 50 }; @@ -152,11 +152,11 @@ class node_flags final nano::confirmation_height_mode confirmation_height_processor_mode{ nano::confirmation_height_mode::automatic }; nano::generate_cache generate_cache; bool inactive_node{ false }; - size_t block_processor_batch_size{ 0 }; - size_t block_processor_full_size{ 65536 }; - size_t block_processor_verification_size{ 0 }; - size_t inactive_votes_cache_size{ 16 * 1024 }; - size_t vote_processor_capacity{ 144 * 1024 }; - size_t bootstrap_interval{ 0 }; // For testing only + std::size_t block_processor_batch_size{ 0 }; + std::size_t block_processor_full_size{ 65536 }; + std::size_t block_processor_verification_size{ 0 }; + std::size_t inactive_votes_cache_size{ 16 * 1024 }; + std::size_t vote_processor_capacity{ 144 * 1024 }; + std::size_t bootstrap_interval{ 0 }; // For testing only }; } diff --git a/nano/node/online_reps.cpp b/nano/node/online_reps.cpp index f86956fb1c..4dbbcd8a2e 100644 --- a/nano/node/online_reps.cpp +++ b/nano/node/online_reps.cpp @@ -118,7 +118,7 @@ void nano::online_reps::clear () std::unique_ptr nano::collect_container_info (online_reps & online_reps, std::string const & name) { - size_t count; + std::size_t count; { nano::lock_guard guard (online_reps.mutex); count = online_reps.reps.size (); diff --git a/nano/node/openclwork.cpp b/nano/node/openclwork.cpp index 34e653761a..ce5a3342ec 100644 --- a/nano/node/openclwork.cpp +++ b/nano/node/openclwork.cpp @@ -161,7 +161,7 @@ void nano::opencl_environment::dump (std::ostream & stream) if (nano::opencl_loaded) { auto index (0); - size_t device_count (0); + std::size_t device_count (0); for (auto & i : platforms) { device_count += i.devices.size (); @@ -173,7 +173,7 @@ void nano::opencl_environment::dump (std::ostream & stream) stream << "Platform: " << index << std::endl; for (auto j (queries.begin ()), m (queries.end ()); j != m; ++j) { - size_t platformInfoCount = 0; + std::size_t platformInfoCount = 0; clGetPlatformInfo (i->platform, *j, 0, nullptr, &platformInfoCount); std::vector info (platformInfoCount); clGetPlatformInfo (i->platform, *j, info.size (), info.data (), nullptr); @@ -185,13 +185,13 @@ void nano::opencl_environment::dump (std::ostream & stream) stream << "Device: " << j - i->devices.begin () << std::endl; for (auto k (queries.begin ()), o (queries.end ()); k != o; ++k) { - size_t platformInfoCount = 0; + std::size_t platformInfoCount = 0; clGetDeviceInfo (*j, *k, 0, nullptr, &platformInfoCount); std::vector info (platformInfoCount); clGetDeviceInfo (*j, *k, info.size (), info.data (), nullptr); stream << '\t' << info.data () << std::endl; } - size_t deviceTypeCount = 0; + std::size_t deviceTypeCount = 0; clGetDeviceInfo (*j, CL_DEVICE_TYPE, 0, nullptr, &deviceTypeCount); std::vector deviceTypeInfo (deviceTypeCount); clGetDeviceInfo (*j, CL_DEVICE_TYPE, deviceTypeCount, deviceTypeInfo.data (), 0); @@ -218,12 +218,12 @@ void nano::opencl_environment::dump (std::ostream & stream) break; } stream << '\t' << device_type_string << std::endl; - size_t compilerAvailableCount = 0; + std::size_t compilerAvailableCount = 0; clGetDeviceInfo (*j, CL_DEVICE_COMPILER_AVAILABLE, 0, nullptr, &compilerAvailableCount); std::vector compilerAvailableInfo (compilerAvailableCount); clGetDeviceInfo (*j, CL_DEVICE_COMPILER_AVAILABLE, compilerAvailableCount, compilerAvailableInfo.data (), 0); stream << "\tCompiler available: " << (compilerAvailableInfo[0] ? "true" : "false") << std::endl; - size_t computeUnitsAvailableCount = 0; + std::size_t computeUnitsAvailableCount = 0; clGetDeviceInfo (*j, CL_DEVICE_MAX_COMPUTE_UNITS, 0, nullptr, &computeUnitsAvailableCount); std::vector computeUnitsAvailableInfo (computeUnitsAvailableCount); clGetDeviceInfo (*j, CL_DEVICE_MAX_COMPUTE_UNITS, computeUnitsAvailableCount, computeUnitsAvailableInfo.data (), 0); @@ -299,7 +299,7 @@ nano::opencl_work::opencl_work (bool & error_a, nano::opencl_config const & conf if (!error_a) { cl_int item_error (0); - size_t item_size (sizeof (nano::uint256_union)); + std::size_t item_size (sizeof (nano::uint256_union)); item_buffer = clCreateBuffer (context, CL_MEM_READ_ONLY | CL_MEM_HOST_WRITE_ONLY, item_size, nullptr, &item_error); error_a |= item_error != CL_SUCCESS; if (!error_a) @@ -311,7 +311,7 @@ nano::opencl_work::opencl_work (bool & error_a, nano::opencl_config const & conf { cl_int program_error (0); char const * program_data (opencl_program.data ()); - size_t program_length (opencl_program.size ()); + std::size_t program_length (opencl_program.size ()); program = clCreateProgramWithSource (context, 1, &program_data, &program_length, &program_error); error_a |= program_error != CL_SUCCESS; if (!error_a) @@ -372,7 +372,7 @@ nano::opencl_work::opencl_work (bool & error_a, nano::opencl_config const & conf logger.always_log (boost::str (boost::format ("Build program error %1%") % clBuildProgramError)); for (auto i (selected_devices.begin ()), n (selected_devices.end ()); i != n; ++i) { - size_t log_size (0); + std::size_t log_size (0); clGetProgramBuildInfo (program, *i, CL_PROGRAM_BUILD_LOG, 0, nullptr, &log_size); std::vector log (log_size); clGetProgramBuildInfo (program, *i, CL_PROGRAM_BUILD_LOG, log.size (), log.data (), nullptr); @@ -455,7 +455,7 @@ boost::optional nano::opencl_work::generate_work (nano::work_version c int ticket_l (ticket_a); uint64_t result (0); unsigned thread_count (config.threads); - size_t work_size[] = { thread_count, 0, 0 }; + std::size_t work_size[] = { thread_count, 0, 0 }; while (work.difficulty (version_a, root_a, result) < difficulty_a && !error && ticket_a == ticket_l) { result = rand.next (); diff --git a/nano/node/peer_exclusion.cpp b/nano/node/peer_exclusion.cpp index 1ac29e26a8..aebb5c7336 100644 --- a/nano/node/peer_exclusion.cpp +++ b/nano/node/peer_exclusion.cpp @@ -2,10 +2,10 @@ constexpr std::chrono::hours nano::peer_exclusion::exclude_time_hours; constexpr std::chrono::hours nano::peer_exclusion::exclude_remove_hours; -constexpr size_t nano::peer_exclusion::size_max; +constexpr std::size_t nano::peer_exclusion::size_max; constexpr double nano::peer_exclusion::peers_percentage_limit; -uint64_t nano::peer_exclusion::add (nano::tcp_endpoint const & endpoint_a, size_t const network_peers_count_a) +uint64_t nano::peer_exclusion::add (nano::tcp_endpoint const & endpoint_a, std::size_t const network_peers_count_a) { uint64_t result (0); nano::lock_guard guard (mutex); @@ -72,12 +72,12 @@ void nano::peer_exclusion::remove (nano::tcp_endpoint const & endpoint_a) peers.get ().erase (endpoint_a.address ()); } -size_t nano::peer_exclusion::limited_size (size_t const network_peers_count_a) const +std::size_t nano::peer_exclusion::limited_size (std::size_t const network_peers_count_a) const { - return std::min (size_max, static_cast (network_peers_count_a * peers_percentage_limit)); + return std::min (size_max, static_cast (network_peers_count_a * peers_percentage_limit)); } -size_t nano::peer_exclusion::size () const +std::size_t nano::peer_exclusion::size () const { nano::lock_guard guard (mutex); return peers.size (); @@ -87,7 +87,7 @@ std::unique_ptr nano::collect_container_info (na { auto composite = std::make_unique (name); - size_t excluded_peers_count = excluded_peers.size (); + std::size_t excluded_peers_count = excluded_peers.size (); auto sizeof_excluded_peers_element = sizeof (nano::peer_exclusion::ordered_endpoints::value_type); composite->add_component (std::make_unique (container_info{ "peers", excluded_peers_count, sizeof_excluded_peers_element })); diff --git a/nano/node/peer_exclusion.hpp b/nano/node/peer_exclusion.hpp index cadaab5cb7..d4d6f7c536 100644 --- a/nano/node/peer_exclusion.hpp +++ b/nano/node/peer_exclusion.hpp @@ -40,17 +40,17 @@ class peer_exclusion final mutable nano::mutex mutex; public: - constexpr static size_t size_max = 5000; + constexpr static std::size_t size_max = 5000; constexpr static double peers_percentage_limit = 0.5; constexpr static uint64_t score_limit = 2; constexpr static std::chrono::hours exclude_time_hours = std::chrono::hours (1); constexpr static std::chrono::hours exclude_remove_hours = std::chrono::hours (24); - uint64_t add (nano::tcp_endpoint const &, size_t const); + uint64_t add (nano::tcp_endpoint const &, std::size_t const); bool check (nano::tcp_endpoint const &); void remove (nano::tcp_endpoint const &); - size_t limited_size (size_t const) const; - size_t size () const; + std::size_t limited_size (std::size_t const) const; + std::size_t size () const; friend class telemetry_remove_peer_different_genesis_Test; friend class telemetry_remove_peer_different_genesis_udp_Test; diff --git a/nano/node/plat/posix/openclapi.cpp b/nano/node/plat/posix/openclapi.cpp index 6429cd7385..08dae9f1ba 100644 --- a/nano/node/plat/posix/openclapi.cpp +++ b/nano/node/plat/posix/openclapi.cpp @@ -44,23 +44,23 @@ class opencl_initializer } void * opencl_library; cl_int (*clGetPlatformIDs) (cl_uint, cl_platform_id *, cl_uint *); - cl_int (*clGetPlatformInfo) (cl_platform_id, cl_platform_info, size_t, void *, size_t *); + cl_int (*clGetPlatformInfo) (cl_platform_id, cl_platform_info, std::size_t, void *, std::size_t *); cl_int (*clGetDeviceIDs) (cl_platform_id, cl_device_type, cl_uint, cl_device_id *, cl_uint *); - cl_int (*clGetDeviceInfo) (cl_device_id, cl_device_info, size_t, void *, size_t *); - cl_context (*clCreateContext) (cl_context_properties const *, cl_uint, cl_device_id const *, void (*) (const char *, const void *, size_t, void *), void *, cl_int *); + cl_int (*clGetDeviceInfo) (cl_device_id, cl_device_info, std::size_t, void *, std::size_t *); + cl_context (*clCreateContext) (cl_context_properties const *, cl_uint, cl_device_id const *, void (*) (char const *, const void *, std::size_t, void *), void *, cl_int *); cl_command_queue (*clCreateCommandQueue) (cl_context, cl_device_id, cl_command_queue_properties, cl_int *); - cl_mem (*clCreateBuffer) (cl_context, cl_mem_flags, size_t, void *, cl_int *); - cl_program (*clCreateProgramWithSource) (cl_context, cl_uint, char const **, size_t const *, cl_int *); + cl_mem (*clCreateBuffer) (cl_context, cl_mem_flags, std::size_t, void *, cl_int *); + cl_program (*clCreateProgramWithSource) (cl_context, cl_uint, char const **, std::size_t const *, cl_int *); cl_int (*clBuildProgram) (cl_program, cl_uint, cl_device_id const *, char const *, void (*) (cl_program, void *), void *); - cl_int (*clGetProgramBuildInfo) (cl_program, cl_device_id, cl_program_build_info, size_t, void *, size_t *); + cl_int (*clGetProgramBuildInfo) (cl_program, cl_device_id, cl_program_build_info, std::size_t, void *, std::size_t *); cl_kernel (*clCreateKernel) (cl_program, char const *, cl_int *); - cl_int (*clSetKernelArg) (cl_kernel, cl_uint, size_t, void const *); + cl_int (*clSetKernelArg) (cl_kernel, cl_uint, std::size_t, void const *); cl_int (*clReleaseKernel) (cl_kernel); cl_int (*clReleaseProgram) (cl_program); cl_int (*clReleaseContext) (cl_context); - cl_int (*clEnqueueWriteBuffer) (cl_command_queue, cl_mem, cl_bool, size_t, size_t, void const *, cl_uint, cl_event const *, cl_event *); - cl_int (*clEnqueueNDRangeKernel) (cl_command_queue, cl_kernel, cl_uint, size_t const *, size_t const *, size_t const *, cl_uint, cl_event const *, cl_event *); - cl_int (*clEnqueueReadBuffer) (cl_command_queue, cl_mem, cl_bool, size_t, size_t, void *, cl_uint, cl_event const *, cl_event *); + cl_int (*clEnqueueWriteBuffer) (cl_command_queue, cl_mem, cl_bool, std::size_t, std::size_t, void const *, cl_uint, cl_event const *, cl_event *); + cl_int (*clEnqueueNDRangeKernel) (cl_command_queue, cl_kernel, cl_uint, std::size_t const *, std::size_t const *, std::size_t const *, cl_uint, cl_event const *, cl_event *); + cl_int (*clEnqueueReadBuffer) (cl_command_queue, cl_mem, cl_bool, std::size_t, std::size_t, void *, cl_uint, cl_event const *, cl_event *); cl_int (*clFinish) (cl_command_queue); static opencl_initializer initializer; }; @@ -86,7 +86,7 @@ cl_int clGetPlatformIDs (cl_uint num_entries, cl_platform_id * platforms, cl_uin return result; } -cl_int clGetPlatformInfo (cl_platform_id platform, cl_platform_info param_name, size_t param_value_size, void * param_value, size_t * param_value_size_ret) +cl_int clGetPlatformInfo (cl_platform_id platform, cl_platform_info param_name, std::size_t param_value_size, void * param_value, std::size_t * param_value_size_ret) { return opencl_initializer::initializer.clGetPlatformInfo (platform, param_name, param_value_size, param_value, param_value_size_ret); } @@ -96,12 +96,12 @@ cl_int clGetDeviceIDs (cl_platform_id platform, cl_device_type device_type, cl_u return opencl_initializer::initializer.clGetDeviceIDs (platform, device_type, num_entries, devices, num_devices); } -cl_int clGetDeviceInfo (cl_device_id device, cl_device_info param_name, size_t param_value_size, void * param_value, size_t * param_value_size_ret) +cl_int clGetDeviceInfo (cl_device_id device, cl_device_info param_name, std::size_t param_value_size, void * param_value, std::size_t * param_value_size_ret) { return opencl_initializer::initializer.clGetDeviceInfo (device, param_name, param_value_size, param_value, param_value_size_ret); } -cl_context clCreateContext (cl_context_properties const * properties, cl_uint num_devices, cl_device_id const * devices, void (*pfn_notify) (const char *, const void *, size_t, void *), void * user_data, cl_int * errcode_ret) +cl_context clCreateContext (cl_context_properties const * properties, cl_uint num_devices, cl_device_id const * devices, void (*pfn_notify) (char const *, const void *, std::size_t, void *), void * user_data, cl_int * errcode_ret) { return opencl_initializer::initializer.clCreateContext (properties, num_devices, devices, pfn_notify, user_data, errcode_ret); } @@ -111,12 +111,12 @@ cl_command_queue clCreateCommandQueue (cl_context context, cl_device_id device, return opencl_initializer::initializer.clCreateCommandQueue (context, device, properties, errcode_ret); } -cl_mem clCreateBuffer (cl_context context, cl_mem_flags flags, size_t size, void * host_ptr, cl_int * errcode_ret) +cl_mem clCreateBuffer (cl_context context, cl_mem_flags flags, std::size_t size, void * host_ptr, cl_int * errcode_ret) { return opencl_initializer::initializer.clCreateBuffer (context, flags, size, host_ptr, errcode_ret); } -cl_program clCreateProgramWithSource (cl_context context, cl_uint count, char const ** strings, size_t const * lengths, cl_int * errcode_ret) +cl_program clCreateProgramWithSource (cl_context context, cl_uint count, char const ** strings, std::size_t const * lengths, cl_int * errcode_ret) { return opencl_initializer::initializer.clCreateProgramWithSource (context, count, strings, lengths, errcode_ret); } @@ -126,7 +126,7 @@ cl_int clBuildProgram (cl_program program, cl_uint num_devices, cl_device_id con return opencl_initializer::initializer.clBuildProgram (program, num_devices, device_list, options, pfn_notify, user_data); } -cl_int clGetProgramBuildInfo (cl_program program, cl_device_id device, cl_program_build_info param_name, size_t param_value_size, void * param_value, size_t * param_value_size_ret) +cl_int clGetProgramBuildInfo (cl_program program, cl_device_id device, cl_program_build_info param_name, std::size_t param_value_size, void * param_value, std::size_t * param_value_size_ret) { return opencl_initializer::initializer.clGetProgramBuildInfo (program, device, param_name, param_value_size, param_value, param_value_size_ret); } @@ -136,7 +136,7 @@ cl_kernel clCreateKernel (cl_program program, char const * kernel_name, cl_int * return opencl_initializer::initializer.clCreateKernel (program, kernel_name, errcode_ret); } -cl_int clSetKernelArg (cl_kernel kernel, cl_uint arg_index, size_t arg_size, void const * arg_value) +cl_int clSetKernelArg (cl_kernel kernel, cl_uint arg_index, std::size_t arg_size, void const * arg_value) { return opencl_initializer::initializer.clSetKernelArg (kernel, arg_index, arg_size, arg_value); } @@ -156,17 +156,17 @@ cl_int clReleaseContext (cl_context context) return opencl_initializer::initializer.clReleaseContext (context); } -cl_int clEnqueueWriteBuffer (cl_command_queue command_queue, cl_mem buffer, cl_bool blocking_write, size_t offset, size_t size, void const * ptr, cl_uint num_events_in_wait_list, cl_event const * event_wait_list, cl_event * event) +cl_int clEnqueueWriteBuffer (cl_command_queue command_queue, cl_mem buffer, cl_bool blocking_write, std::size_t offset, std::size_t size, void const * ptr, cl_uint num_events_in_wait_list, cl_event const * event_wait_list, cl_event * event) { return opencl_initializer::initializer.clEnqueueWriteBuffer (command_queue, buffer, blocking_write, offset, size, ptr, num_events_in_wait_list, event_wait_list, event); } -cl_int clEnqueueNDRangeKernel (cl_command_queue command_queue, cl_kernel kernel, cl_uint work_dim, size_t const * global_work_offset, size_t const * global_work_size, size_t const * local_work_size, cl_uint num_events_in_wait_list, cl_event const * event_wait_list, cl_event * event) +cl_int clEnqueueNDRangeKernel (cl_command_queue command_queue, cl_kernel kernel, cl_uint work_dim, std::size_t const * global_work_offset, std::size_t const * global_work_size, std::size_t const * local_work_size, cl_uint num_events_in_wait_list, cl_event const * event_wait_list, cl_event * event) { return opencl_initializer::initializer.clEnqueueNDRangeKernel (command_queue, kernel, work_dim, global_work_offset, global_work_size, local_work_size, num_events_in_wait_list, event_wait_list, event); } -cl_int clEnqueueReadBuffer (cl_command_queue command_queue, cl_mem buffer, cl_bool blocking_read, size_t offset, size_t size, void * ptr, cl_uint num_events_in_wait_list, cl_event const * event_wait_list, cl_event * event) +cl_int clEnqueueReadBuffer (cl_command_queue command_queue, cl_mem buffer, cl_bool blocking_read, std::size_t offset, std::size_t size, void * ptr, cl_uint num_events_in_wait_list, cl_event const * event_wait_list, cl_event * event) { return opencl_initializer::initializer.clEnqueueReadBuffer (command_queue, buffer, blocking_read, offset, size, ptr, num_events_in_wait_list, event_wait_list, event); } diff --git a/nano/node/plat/windows/openclapi.cpp b/nano/node/plat/windows/openclapi.cpp index 290663a059..d164afd812 100644 --- a/nano/node/plat/windows/openclapi.cpp +++ b/nano/node/plat/windows/openclapi.cpp @@ -44,23 +44,23 @@ class opencl_initializer } HMODULE opencl_library; cl_int (CL_API_CALL * clGetPlatformIDs) (cl_uint, cl_platform_id *, cl_uint *); - cl_int (CL_API_CALL * clGetPlatformInfo) (cl_platform_id, cl_platform_info, size_t, void *, size_t *); + cl_int (CL_API_CALL * clGetPlatformInfo) (cl_platform_id, cl_platform_info, std::size_t, void *, std::size_t *); cl_int (CL_API_CALL * clGetDeviceIDs) (cl_platform_id, cl_device_type, cl_uint, cl_device_id *, cl_uint *); - cl_int (CL_API_CALL * clGetDeviceInfo) (cl_device_id, cl_device_info, size_t, void *, size_t *); - cl_context (CL_API_CALL * clCreateContext) (cl_context_properties const *, cl_uint, cl_device_id const *, void (CL_CALLBACK *) (const char *, const void *, size_t, void *), void *, cl_int *); + cl_int (CL_API_CALL * clGetDeviceInfo) (cl_device_id, cl_device_info, std::size_t, void *, std::size_t *); + cl_context (CL_API_CALL * clCreateContext) (cl_context_properties const *, cl_uint, cl_device_id const *, void (CL_CALLBACK *) (char const *, const void *, std::size_t, void *), void *, cl_int *); cl_command_queue (CL_API_CALL * clCreateCommandQueue) (cl_context, cl_device_id, cl_command_queue_properties, cl_int *); - cl_mem (CL_API_CALL * clCreateBuffer) (cl_context, cl_mem_flags, size_t, void *, cl_int *); - cl_program (CL_API_CALL * clCreateProgramWithSource) (cl_context, cl_uint, char const **, size_t const *, cl_int *); + cl_mem (CL_API_CALL * clCreateBuffer) (cl_context, cl_mem_flags, std::size_t, void *, cl_int *); + cl_program (CL_API_CALL * clCreateProgramWithSource) (cl_context, cl_uint, char const **, std::size_t const *, cl_int *); cl_int (CL_API_CALL * clBuildProgram) (cl_program, cl_uint, cl_device_id const *, char const *, void (CL_CALLBACK *) (cl_program, void *), void *); - cl_int (CL_API_CALL * clGetProgramBuildInfo) (cl_program, cl_device_id, cl_program_build_info, size_t, void *, size_t *); + cl_int (CL_API_CALL * clGetProgramBuildInfo) (cl_program, cl_device_id, cl_program_build_info, std::size_t, void *, std::size_t *); cl_kernel (CL_API_CALL * clCreateKernel) (cl_program, char const *, cl_int *); - cl_int (CL_API_CALL * clSetKernelArg) (cl_kernel, cl_uint, size_t, void const *); + cl_int (CL_API_CALL * clSetKernelArg) (cl_kernel, cl_uint, std::size_t, void const *); cl_int (CL_API_CALL * clReleaseKernel) (cl_kernel); cl_int (CL_API_CALL * clReleaseProgram) (cl_program); cl_int (CL_API_CALL * clReleaseContext) (cl_context); - cl_int (CL_API_CALL * clEnqueueWriteBuffer) (cl_command_queue, cl_mem, cl_bool, size_t, size_t, void const *, cl_uint, cl_event const *, cl_event *); - cl_int (CL_API_CALL * clEnqueueNDRangeKernel) (cl_command_queue, cl_kernel, cl_uint, size_t const *, size_t const *, size_t const *, cl_uint, cl_event const *, cl_event *); - cl_int (CL_API_CALL * clEnqueueReadBuffer) (cl_command_queue, cl_mem, cl_bool, size_t, size_t, void *, cl_uint, cl_event const *, cl_event *); + cl_int (CL_API_CALL * clEnqueueWriteBuffer) (cl_command_queue, cl_mem, cl_bool, std::size_t, std::size_t, void const *, cl_uint, cl_event const *, cl_event *); + cl_int (CL_API_CALL * clEnqueueNDRangeKernel) (cl_command_queue, cl_kernel, cl_uint, std::size_t const *, std::size_t const *, std::size_t const *, cl_uint, cl_event const *, cl_event *); + cl_int (CL_API_CALL * clEnqueueReadBuffer) (cl_command_queue, cl_mem, cl_bool, std::size_t, std::size_t, void *, cl_uint, cl_event const *, cl_event *); cl_int (CL_API_CALL * clFinish) (cl_command_queue); static opencl_initializer initializer; }; @@ -86,7 +86,7 @@ cl_int CL_API_CALL clGetPlatformIDs (cl_uint num_entries, cl_platform_id * platf return result; } -cl_int CL_API_CALL clGetPlatformInfo (cl_platform_id platform, cl_platform_info param_name, size_t param_value_size, void * param_value, size_t * param_value_size_ret) +cl_int CL_API_CALL clGetPlatformInfo (cl_platform_id platform, cl_platform_info param_name, std::size_t param_value_size, void * param_value, std::size_t * param_value_size_ret) { return opencl_initializer::initializer.clGetPlatformInfo (platform, param_name, param_value_size, param_value, param_value_size_ret); } @@ -96,12 +96,12 @@ cl_int CL_API_CALL clGetDeviceIDs (cl_platform_id platform, cl_device_type devic return opencl_initializer::initializer.clGetDeviceIDs (platform, device_type, num_entries, devices, num_devices); } -cl_int CL_API_CALL clGetDeviceInfo (cl_device_id device, cl_device_info param_name, size_t param_value_size, void * param_value, size_t * param_value_size_ret) +cl_int CL_API_CALL clGetDeviceInfo (cl_device_id device, cl_device_info param_name, std::size_t param_value_size, void * param_value, std::size_t * param_value_size_ret) { return opencl_initializer::initializer.clGetDeviceInfo (device, param_name, param_value_size, param_value, param_value_size_ret); } -cl_context CL_API_CALL clCreateContext (cl_context_properties const * properties, cl_uint num_devices, cl_device_id const * devices, void (CL_CALLBACK * pfn_notify) (const char *, const void *, size_t, void *), void * user_data, cl_int * errcode_ret) +cl_context CL_API_CALL clCreateContext (cl_context_properties const * properties, cl_uint num_devices, cl_device_id const * devices, void (CL_CALLBACK * pfn_notify) (char const *, const void *, std::size_t, void *), void * user_data, cl_int * errcode_ret) { return opencl_initializer::initializer.clCreateContext (properties, num_devices, devices, pfn_notify, user_data, errcode_ret); } @@ -111,12 +111,12 @@ cl_command_queue CL_API_CALL clCreateCommandQueue (cl_context context, cl_device return opencl_initializer::initializer.clCreateCommandQueue (context, device, properties, errcode_ret); } -cl_mem CL_API_CALL clCreateBuffer (cl_context context, cl_mem_flags flags, size_t size, void * host_ptr, cl_int * errcode_ret) +cl_mem CL_API_CALL clCreateBuffer (cl_context context, cl_mem_flags flags, std::size_t size, void * host_ptr, cl_int * errcode_ret) { return opencl_initializer::initializer.clCreateBuffer (context, flags, size, host_ptr, errcode_ret); } -cl_program CL_API_CALL clCreateProgramWithSource (cl_context context, cl_uint count, char const ** strings, size_t const * lengths, cl_int * errcode_ret) +cl_program CL_API_CALL clCreateProgramWithSource (cl_context context, cl_uint count, char const ** strings, std::size_t const * lengths, cl_int * errcode_ret) { return opencl_initializer::initializer.clCreateProgramWithSource (context, count, strings, lengths, errcode_ret); } @@ -126,7 +126,7 @@ cl_int CL_API_CALL clBuildProgram (cl_program program, cl_uint num_devices, cl_d return opencl_initializer::initializer.clBuildProgram (program, num_devices, device_list, options, pfn_notify, user_data); } -cl_int CL_API_CALL clGetProgramBuildInfo (cl_program program, cl_device_id device, cl_program_build_info param_name, size_t param_value_size, void * param_value, size_t * param_value_size_ret) +cl_int CL_API_CALL clGetProgramBuildInfo (cl_program program, cl_device_id device, cl_program_build_info param_name, std::size_t param_value_size, void * param_value, std::size_t * param_value_size_ret) { return opencl_initializer::initializer.clGetProgramBuildInfo (program, device, param_name, param_value_size, param_value, param_value_size_ret); } @@ -136,7 +136,7 @@ cl_kernel CL_API_CALL clCreateKernel (cl_program program, char const * kernel_na return opencl_initializer::initializer.clCreateKernel (program, kernel_name, errcode_ret); } -cl_int CL_API_CALL clSetKernelArg (cl_kernel kernel, cl_uint arg_index, size_t arg_size, void const * arg_value) +cl_int CL_API_CALL clSetKernelArg (cl_kernel kernel, cl_uint arg_index, std::size_t arg_size, void const * arg_value) { return opencl_initializer::initializer.clSetKernelArg (kernel, arg_index, arg_size, arg_value); } @@ -156,17 +156,17 @@ cl_int CL_API_CALL clReleaseContext (cl_context context) return opencl_initializer::initializer.clReleaseContext (context); } -cl_int CL_API_CALL clEnqueueWriteBuffer (cl_command_queue command_queue, cl_mem buffer, cl_bool blocking_write, size_t offset, size_t size, void const * ptr, cl_uint num_events_in_wait_list, cl_event const * event_wait_list, cl_event * event) +cl_int CL_API_CALL clEnqueueWriteBuffer (cl_command_queue command_queue, cl_mem buffer, cl_bool blocking_write, std::size_t offset, std::size_t size, void const * ptr, cl_uint num_events_in_wait_list, cl_event const * event_wait_list, cl_event * event) { return opencl_initializer::initializer.clEnqueueWriteBuffer (command_queue, buffer, blocking_write, offset, size, ptr, num_events_in_wait_list, event_wait_list, event); } -cl_int CL_API_CALL clEnqueueNDRangeKernel (cl_command_queue command_queue, cl_kernel kernel, cl_uint work_dim, size_t const * global_work_offset, size_t const * global_work_size, size_t const * local_work_size, cl_uint num_events_in_wait_list, cl_event const * event_wait_list, cl_event * event) +cl_int CL_API_CALL clEnqueueNDRangeKernel (cl_command_queue command_queue, cl_kernel kernel, cl_uint work_dim, std::size_t const * global_work_offset, std::size_t const * global_work_size, std::size_t const * local_work_size, cl_uint num_events_in_wait_list, cl_event const * event_wait_list, cl_event * event) { return opencl_initializer::initializer.clEnqueueNDRangeKernel (command_queue, kernel, work_dim, global_work_offset, global_work_size, local_work_size, num_events_in_wait_list, event_wait_list, event); } -cl_int CL_API_CALL clEnqueueReadBuffer (cl_command_queue command_queue, cl_mem buffer, cl_bool blocking_read, size_t offset, size_t size, void * ptr, cl_uint num_events_in_wait_list, cl_event const * event_wait_list, cl_event * event) +cl_int CL_API_CALL clEnqueueReadBuffer (cl_command_queue command_queue, cl_mem buffer, cl_bool blocking_read, std::size_t offset, std::size_t size, void * ptr, cl_uint num_events_in_wait_list, cl_event const * event_wait_list, cl_event * event) { return opencl_initializer::initializer.clEnqueueReadBuffer (command_queue, buffer, blocking_read, offset, size, ptr, num_events_in_wait_list, event_wait_list, event); } diff --git a/nano/node/prioritization.cpp b/nano/node/prioritization.cpp index d0677a73d2..941204ef5a 100644 --- a/nano/node/prioritization.cpp +++ b/nano/node/prioritization.cpp @@ -26,7 +26,7 @@ void nano::prioritization::next () void nano::prioritization::seek () { next (); - for (size_t i = 0, n = schedule.size (); buckets[*current].empty () && i < n; ++i) + for (std::size_t i = 0, n = schedule.size (); buckets[*current].empty () && i < n; ++i) { next (); } @@ -44,7 +44,7 @@ nano::prioritization::prioritization (uint64_t maximum, std::function block); std::shared_ptr top () const; void pop (); - size_t size () const; - size_t bucket_count () const; - size_t bucket_size (size_t index) const; + std::size_t size () const; + std::size_t bucket_count () const; + std::size_t bucket_size (std::size_t index) const; bool empty () const; void dump (); uint64_t const maximum; diff --git a/nano/node/repcrawler.cpp b/nano/node/repcrawler.cpp index 39d56d3768..f60251297b 100644 --- a/nano/node/repcrawler.cpp +++ b/nano/node/repcrawler.cpp @@ -104,8 +104,8 @@ void nano::rep_crawler::ongoing_crawl () std::vector> nano::rep_crawler::get_crawl_targets (nano::uint128_t total_weight_a) { - constexpr size_t conservative_count = 10; - constexpr size_t aggressive_count = 40; + constexpr std::size_t conservative_count = 10; + constexpr std::size_t aggressive_count = 40; // Crawl more aggressively if we lack sufficient total peer weight. bool sufficient_weight (total_weight_a > node.online_reps.delta ()); @@ -325,7 +325,7 @@ void nano::rep_crawler::update_weights () } } -std::vector nano::rep_crawler::representatives (size_t count_a, nano::uint128_t const weight_a, boost::optional const & opt_version_min_a) +std::vector nano::rep_crawler::representatives (std::size_t count_a, nano::uint128_t const weight_a, boost::optional const & opt_version_min_a) { auto version_min (opt_version_min_a.value_or (node.network_params.network.protocol_version_min)); std::vector result; @@ -340,12 +340,12 @@ std::vector nano::rep_crawler::representatives (size_t cou return result; } -std::vector nano::rep_crawler::principal_representatives (size_t count_a, boost::optional const & opt_version_min_a) +std::vector nano::rep_crawler::principal_representatives (std::size_t count_a, boost::optional const & opt_version_min_a) { return representatives (count_a, node.minimum_principal_weight (), opt_version_min_a); } -std::vector> nano::rep_crawler::representative_endpoints (size_t count_a) +std::vector> nano::rep_crawler::representative_endpoints (std::size_t count_a) { std::vector> result; auto reps (representatives (count_a)); @@ -357,7 +357,7 @@ std::vector> nano::rep_crawler::repres } /** Total number of representatives */ -size_t nano::rep_crawler::representative_count () +std::size_t nano::rep_crawler::representative_count () { nano::lock_guard lock (probable_reps_mutex); return probable_reps.size (); diff --git a/nano/node/repcrawler.hpp b/nano/node/repcrawler.hpp index 7586945a50..8bc435d231 100644 --- a/nano/node/repcrawler.hpp +++ b/nano/node/repcrawler.hpp @@ -106,16 +106,16 @@ class rep_crawler final nano::uint128_t total_weight () const; /** Request a list of the top \p count_a known representatives in descending order of weight, with at least \p weight_a voting weight, and optionally with a minimum version \p opt_version_min_a */ - std::vector representatives (size_t count_a = std::numeric_limits::max (), nano::uint128_t const weight_a = 0, boost::optional const & opt_version_min_a = boost::none); + std::vector representatives (std::size_t count_a = std::numeric_limits::max (), nano::uint128_t const weight_a = 0, boost::optional const & opt_version_min_a = boost::none); /** Request a list of the top \p count_a known principal representatives in descending order of weight, optionally with a minimum version \p opt_version_min_a */ - std::vector principal_representatives (size_t count_a = std::numeric_limits::max (), boost::optional const & opt_version_min_a = boost::none); + std::vector principal_representatives (std::size_t count_a = std::numeric_limits::max (), boost::optional const & opt_version_min_a = boost::none); /** Request a list of the top \p count_a known representative endpoints. */ - std::vector> representative_endpoints (size_t count_a); + std::vector> representative_endpoints (std::size_t count_a); /** Total number of representatives */ - size_t representative_count (); + std::size_t representative_count (); private: nano::node & node; diff --git a/nano/node/request_aggregator.cpp b/nano/node/request_aggregator.cpp index 6c3d6f7939..10c8250680 100644 --- a/nano/node/request_aggregator.cpp +++ b/nano/node/request_aggregator.cpp @@ -169,7 +169,7 @@ void nano::request_aggregator::erase_duplicates (std::vector>, std::vector>> nano::request_aggregator::aggregate (std::vector> const & requests_a, std::shared_ptr & channel_a) const { auto transaction (ledger.store.tx_begin_read ()); - size_t cached_hashes = 0; + std::size_t cached_hashes = 0; std::vector> to_generate; std::vector> to_generate_final; std::vector> cached_votes; diff --git a/nano/node/request_aggregator.hpp b/nano/node/request_aggregator.hpp index 8b8c8186b1..cc544bb9df 100644 --- a/nano/node/request_aggregator.hpp +++ b/nano/node/request_aggregator.hpp @@ -65,13 +65,13 @@ class request_aggregator final void add (std::shared_ptr const & channel_a, std::vector> const & hashes_roots_a); void stop (); /** Returns the number of currently queued request pools */ - size_t size (); + std::size_t size (); bool empty (); nano::node_config const & config; - const std::chrono::milliseconds max_delay; - const std::chrono::milliseconds small_delay; - const size_t max_channel_requests; + std::chrono::milliseconds const max_delay; + std::chrono::milliseconds const small_delay; + std::size_t const max_channel_requests; private: void run (); @@ -105,7 +105,7 @@ class request_aggregator final nano::mutex mutex{ mutex_identifier (mutexes::request_aggregator) }; std::thread thread; - friend std::unique_ptr collect_container_info (request_aggregator &, const std::string &); + friend std::unique_ptr collect_container_info (request_aggregator &, std::string const &); }; -std::unique_ptr collect_container_info (request_aggregator &, const std::string &); +std::unique_ptr collect_container_info (request_aggregator &, std::string const &); } diff --git a/nano/node/rocksdb/rocksdb.cpp b/nano/node/rocksdb/rocksdb.cpp index 00d3e84711..983a2b3acd 100644 --- a/nano/node/rocksdb/rocksdb.cpp +++ b/nano/node/rocksdb/rocksdb.cpp @@ -45,21 +45,21 @@ void * rocksdb_val::data () const } template <> -size_t rocksdb_val::size () const +std::size_t rocksdb_val::size () const { return value.size (); } template <> -rocksdb_val::db_val (size_t size_a, void * data_a) : - value (static_cast (data_a), size_a) +rocksdb_val::db_val (std::size_t size_a, void * data_a) : + value (static_cast (data_a), size_a) { } template <> void rocksdb_val::convert_buffer_to_value () { - value = rocksdb::Slice (reinterpret_cast (buffer->data ()), buffer->size ()); + value = rocksdb::Slice (reinterpret_cast (buffer->data ()), buffer->size ()); } } @@ -114,9 +114,9 @@ nano::rocksdb_store::rocksdb_store (nano::logger_mt & logger_a, boost::filesyste } } -std::unordered_map nano::rocksdb_store::create_cf_name_table_map () const +std::unordered_map nano::rocksdb_store::create_cf_name_table_map () const { - std::unordered_map map{ { rocksdb::kDefaultColumnFamilyName.c_str (), tables::default_unused }, + std::unordered_map map{ { rocksdb::kDefaultColumnFamilyName.c_str (), tables::default_unused }, { "frontiers", tables::frontiers }, { "accounts", tables::accounts }, { "blocks", tables::blocks }, @@ -357,7 +357,7 @@ std::string nano::rocksdb_store::vendor_get () const rocksdb::ColumnFamilyHandle * nano::rocksdb_store::table_to_column_family (tables table_a) const { auto & handles_l = handles; - auto get_handle = [&handles_l] (const char * name) { + auto get_handle = [&handles_l] (char const * name) { auto iter = std::find_if (handles_l.begin (), handles_l.end (), [name] (auto & handle) { return (handle->GetName () == name); }); @@ -709,7 +709,7 @@ rocksdb::Options nano::rocksdb_store::get_db_options () return db_options; } -rocksdb::BlockBasedTableOptions nano::rocksdb_store::get_active_table_options (size_t lru_size) const +rocksdb::BlockBasedTableOptions nano::rocksdb_store::get_active_table_options (std::size_t lru_size) const { rocksdb::BlockBasedTableOptions table_options; diff --git a/nano/node/rocksdb/rocksdb.hpp b/nano/node/rocksdb/rocksdb.hpp index 34cec98213..0c05aceed5 100644 --- a/nano/node/rocksdb/rocksdb.hpp +++ b/nano/node/rocksdb/rocksdb.hpp @@ -132,7 +132,7 @@ class rocksdb_store : public store_partial }; std::unordered_map tombstone_map; - std::unordered_map cf_name_table_map; + std::unordered_map cf_name_table_map; rocksdb::Transaction * tx (nano::transaction const & transaction_a) const; std::vector all_tables () const; @@ -152,7 +152,7 @@ class rocksdb_store : public store_partial rocksdb::ColumnFamilyOptions get_common_cf_options (std::shared_ptr const & table_factory_a, unsigned long long memtable_size_bytes_a) const; rocksdb::ColumnFamilyOptions get_active_cf_options (std::shared_ptr const & table_factory_a, unsigned long long memtable_size_bytes_a) const; rocksdb::ColumnFamilyOptions get_small_cf_options (std::shared_ptr const & table_factory_a) const; - rocksdb::BlockBasedTableOptions get_active_table_options (size_t lru_size) const; + rocksdb::BlockBasedTableOptions get_active_table_options (std::size_t lru_size) const; rocksdb::BlockBasedTableOptions get_small_table_options () const; rocksdb::ColumnFamilyOptions get_cf_options (std::string const & cf_name_a) const; @@ -160,7 +160,7 @@ class rocksdb_store : public store_partial void flush_table (nano::tables table_a); void flush_tombstones_check (nano::tables table_a); void generate_tombstone_map (); - std::unordered_map create_cf_name_table_map () const; + std::unordered_map create_cf_name_table_map () const; std::vector create_column_families (); unsigned long long base_memtable_size_bytes () const; diff --git a/nano/node/rocksdb/rocksdb_iterator.hpp b/nano/node/rocksdb/rocksdb_iterator.hpp index 2856949e24..2633dcf763 100644 --- a/nano/node/rocksdb/rocksdb_iterator.hpp +++ b/nano/node/rocksdb/rocksdb_iterator.hpp @@ -13,7 +13,7 @@ namespace { inline bool is_read (nano::transaction const & transaction_a) { - return (dynamic_cast (&transaction_a) != nullptr); + return (dynamic_cast (&transaction_a) != nullptr); } inline rocksdb::ReadOptions & snapshot_options (nano::transaction const & transaction_a) diff --git a/nano/node/signatures.cpp b/nano/node/signatures.cpp index a8b21fa771..4af3c2db06 100644 --- a/nano/node/signatures.cpp +++ b/nano/node/signatures.cpp @@ -32,8 +32,8 @@ void nano::signature_checker::verify (nano::signature_check_set & check_a) // Split up the tasks equally over the calling thread and the thread pool. // Any overflow on the modulus of the batch_size is given to the calling thread, so the thread pool // only ever operates on batch_size sizes. - size_t overflow_size = check_a.size % batch_size; - size_t num_full_batches = check_a.size / batch_size; + std::size_t overflow_size = check_a.size % batch_size; + std::size_t num_full_batches = check_a.size / batch_size; auto const num_threads = thread_pool.get_num_threads (); auto total_threads_to_split_over = num_threads + 1; @@ -86,7 +86,7 @@ void nano::signature_checker::flush () ; } -bool nano::signature_checker::verify_batch (const nano::signature_check_set & check_a, size_t start_index, size_t size) +bool nano::signature_checker::verify_batch (nano::signature_check_set const & check_a, std::size_t start_index, std::size_t size) { nano::validate_message_batch (check_a.messages + start_index, check_a.message_lengths + start_index, check_a.pub_keys + start_index, check_a.signatures + start_index, size, check_a.verifications + start_index); return std::all_of (check_a.verifications + start_index, check_a.verifications + start_index + size, [] (int verification) { return verification == 0 || verification == 1; }); @@ -95,12 +95,12 @@ bool nano::signature_checker::verify_batch (const nano::signature_check_set & ch /* This operates on a number of signatures of size (num_batches * batch_size) from the beginning of the check_a pointers. * Caller should check the value of the promise which indicates when the work has been completed. */ -void nano::signature_checker::verify_async (nano::signature_check_set & check_a, size_t num_batches, std::promise & promise) +void nano::signature_checker::verify_async (nano::signature_check_set & check_a, std::size_t num_batches, std::promise & promise) { auto task = std::make_shared (check_a, num_batches); ++tasks_remaining; - for (size_t batch = 0; batch < num_batches; ++batch) + for (std::size_t batch = 0; batch < num_batches; ++batch) { auto size = batch_size; auto start_index = batch * batch_size; diff --git a/nano/node/signatures.hpp b/nano/node/signatures.hpp index 5cda22c7e7..eb3e3294dc 100644 --- a/nano/node/signatures.hpp +++ b/nano/node/signatures.hpp @@ -12,14 +12,14 @@ namespace nano class signature_check_set final { public: - signature_check_set (size_t size, unsigned char const ** messages, size_t * message_lengths, unsigned char const ** pub_keys, unsigned char const ** signatures, int * verifications) : + signature_check_set (std::size_t size, unsigned char const ** messages, std::size_t * message_lengths, unsigned char const ** pub_keys, unsigned char const ** signatures, int * verifications) : size (size), messages (messages), message_lengths (message_lengths), pub_keys (pub_keys), signatures (signatures), verifications (verifications) { } - size_t size; + std::size_t size; unsigned char const ** messages; - size_t * message_lengths; + std::size_t * message_lengths; unsigned char const ** pub_keys; unsigned char const ** signatures; int * verifications; @@ -35,7 +35,7 @@ class signature_checker final void stop (); void flush (); - static size_t constexpr batch_size = 256; + static std::size_t constexpr batch_size = 256; private: std::atomic tasks_remaining{ 0 }; @@ -44,7 +44,7 @@ class signature_checker final struct Task final { - Task (nano::signature_check_set & check, size_t pending) : + Task (nano::signature_check_set & check, std::size_t pending) : check (check), pending (pending) { } @@ -53,11 +53,11 @@ class signature_checker final release_assert (pending == 0); } nano::signature_check_set & check; - std::atomic pending; + std::atomic pending; }; - bool verify_batch (const nano::signature_check_set & check_a, size_t index, size_t size); - void verify_async (nano::signature_check_set & check_a, size_t num_batches, std::promise & promise); + bool verify_batch (nano::signature_check_set const & check_a, std::size_t index, std::size_t size); + void verify_async (nano::signature_check_set & check_a, std::size_t num_batches, std::promise & promise); bool single_threaded () const; }; } diff --git a/nano/node/socket.cpp b/nano/node/socket.cpp index b4f39c3127..af2d0e3e45 100644 --- a/nano/node/socket.cpp +++ b/nano/node/socket.cpp @@ -41,7 +41,7 @@ void nano::socket::async_connect (nano::tcp_endpoint const & endpoint_a, std::fu })); } -void nano::socket::async_read (std::shared_ptr> const & buffer_a, size_t size_a, std::function callback_a) +void nano::socket::async_read (std::shared_ptr> const & buffer_a, std::size_t size_a, std::function callback_a) { if (size_a <= buffer_a->size ()) { @@ -52,7 +52,7 @@ void nano::socket::async_read (std::shared_ptr> const & buf boost::asio::post (strand, boost::asio::bind_executor (strand, [buffer_a, callback_a, size_a, this_l] () { boost::asio::async_read (this_l->tcp_socket, boost::asio::buffer (buffer_a->data (), size_a), boost::asio::bind_executor (this_l->strand, - [this_l, buffer_a, callback_a] (boost::system::error_code const & ec, size_t size_a) { + [this_l, buffer_a, callback_a] (boost::system::error_code const & ec, std::size_t size_a) { this_l->node.stats.add (nano::stat::type::traffic_tcp, nano::stat::dir::in, size_a); this_l->stop_timer (); callback_a (ec, size_a); @@ -68,7 +68,7 @@ void nano::socket::async_read (std::shared_ptr> const & buf } } -void nano::socket::async_write (nano::shared_const_buffer const & buffer_a, std::function const & callback_a) +void nano::socket::async_write (nano::shared_const_buffer const & buffer_a, std::function const & callback_a) { if (!closed) { @@ -201,7 +201,7 @@ nano::tcp_endpoint nano::socket::local_endpoint () const return tcp_socket.local_endpoint (); } -nano::server_socket::server_socket (nano::node & node_a, boost::asio::ip::tcp::endpoint local_a, size_t max_connections_a) : +nano::server_socket::server_socket (nano::node & node_a, boost::asio::ip::tcp::endpoint local_a, std::size_t max_connections_a) : socket{ node_a, std::chrono::seconds::max () }, acceptor{ node_a.io_ctx }, local{ local_a }, diff --git a/nano/node/socket.hpp b/nano/node/socket.hpp index 5db647141d..f4c8f8289d 100644 --- a/nano/node/socket.hpp +++ b/nano/node/socket.hpp @@ -49,8 +49,8 @@ class socket : public std::enable_shared_from_this explicit socket (nano::node & node, boost::optional io_timeout = boost::none); virtual ~socket (); void async_connect (boost::asio::ip::tcp::endpoint const &, std::function); - void async_read (std::shared_ptr> const &, size_t, std::function); - void async_write (nano::shared_const_buffer const &, std::function const & = nullptr); + void async_read (std::shared_ptr> const &, std::size_t, std::function); + void async_write (nano::shared_const_buffer const &, std::function const & = nullptr); void close (); boost::asio::ip::tcp::endpoint remote_endpoint () const; @@ -83,7 +83,7 @@ class socket : public std::enable_shared_from_this { public: nano::shared_const_buffer buffer; - std::function callback; + std::function callback; }; boost::asio::strand strand; @@ -97,7 +97,7 @@ class socket : public std::enable_shared_from_this std::atomic last_completion_time; std::atomic timed_out{ false }; boost::optional io_timeout; - std::atomic queue_size{ 0 }; + std::atomic queue_size{ 0 }; /** Set by close() - completion handlers must check this. This is more reliable than checking error codes as the OS may have already completed the async operation. */ @@ -111,7 +111,7 @@ class socket : public std::enable_shared_from_this type_t type_m{ type_t::undefined }; public: - static size_t constexpr queue_size_max = 128; + static std::size_t constexpr queue_size_max = 128; }; /** Socket class for TCP servers */ @@ -125,7 +125,7 @@ class server_socket final : public socket * @param max_connections_a Maximum number of concurrent connections * @param concurrency_a Write concurrency for new connections */ - explicit server_socket (nano::node & node_a, boost::asio::ip::tcp::endpoint local_a, size_t max_connections_a); + explicit server_socket (nano::node & node_a, boost::asio::ip::tcp::endpoint local_a, std::size_t max_connections_a); /**Start accepting new connections */ void start (boost::system::error_code &); /** Stop accepting new connections */ @@ -141,7 +141,7 @@ class server_socket final : public socket std::vector> connections; boost::asio::ip::tcp::acceptor acceptor; boost::asio::ip::tcp::endpoint local; - size_t max_inbound_connections; + std::size_t max_inbound_connections; void evict_dead_connections (); bool is_temporary_error (boost::system::error_code const ec_a); void on_connection_requeue_delayed (std::function const & new_connection, boost::system::error_code const &)>); diff --git a/nano/node/state_block_signature_verification.cpp b/nano/node/state_block_signature_verification.cpp index a8e61035fc..27fb471382 100644 --- a/nano/node/state_block_signature_verification.cpp +++ b/nano/node/state_block_signature_verification.cpp @@ -47,7 +47,7 @@ void nano::state_block_signature_verification::run (uint64_t state_block_signatu { if (!state_blocks.empty ()) { - size_t const max_verification_batch (state_block_signature_verification_size != 0 ? state_block_signature_verification_size : nano::signature_checker::batch_size * (node_config.signature_checker_threads + 1)); + std::size_t const max_verification_batch (state_block_signature_verification_size != 0 ? state_block_signature_verification_size : nano::signature_checker::batch_size * (node_config.signature_checker_threads + 1)); active = true; while (!state_blocks.empty () && !stopped) { @@ -83,13 +83,13 @@ void nano::state_block_signature_verification::add (nano::unchecked_info const & condition.notify_one (); } -size_t nano::state_block_signature_verification::size () +std::size_t nano::state_block_signature_verification::size () { nano::lock_guard guard (mutex); return state_blocks.size (); } -std::deque nano::state_block_signature_verification::setup_items (size_t max_count) +std::deque nano::state_block_signature_verification::setup_items (std::size_t max_count) { std::deque items; if (state_blocks.size () <= max_count) @@ -119,7 +119,7 @@ void nano::state_block_signature_verification::verify_state_blocks (std::deque messages; messages.reserve (size); - std::vector lengths; + std::vector lengths; lengths.reserve (size); std::vector accounts; accounts.reserve (size); diff --git a/nano/node/state_block_signature_verification.hpp b/nano/node/state_block_signature_verification.hpp index 05e66d801f..30a0d1e004 100644 --- a/nano/node/state_block_signature_verification.hpp +++ b/nano/node/state_block_signature_verification.hpp @@ -20,7 +20,7 @@ class state_block_signature_verification state_block_signature_verification (nano::signature_checker &, nano::epochs &, nano::node_config &, nano::logger_mt &, uint64_t); ~state_block_signature_verification (); void add (nano::unchecked_info const & info_a); - size_t size (); + std::size_t size (); void stop (); bool is_active (); @@ -41,7 +41,7 @@ class state_block_signature_verification std::thread thread; void run (uint64_t block_processor_verification_size); - std::deque setup_items (size_t); + std::deque setup_items (std::size_t); void verify_state_blocks (std::deque &); }; diff --git a/nano/node/telemetry.cpp b/nano/node/telemetry.cpp index 3ab166d382..4efb3b9e49 100644 --- a/nano/node/telemetry.cpp +++ b/nano/node/telemetry.cpp @@ -175,7 +175,7 @@ void nano::telemetry::ongoing_req_all_peers (std::chrono::milliseconds next_requ { // Copy peers to the multi index container so can get better asymptotic complexity in future operations - auto temp_peers = this_l->network.list (std::numeric_limits::max ()); + auto temp_peers = this_l->network.list (std::numeric_limits::max ()); peers.insert (temp_peers.begin (), temp_peers.end ()); } @@ -254,7 +254,7 @@ std::unordered_map nano::telemetry::get_me // clang-format off nano::transform_if (range.begin (), range.end (), std::inserter (telemetry_data, telemetry_data.end ()), [this](auto const & telemetry_info) { return this->within_cache_plus_buffer_cutoff (telemetry_info); }, - [](auto const & telemetry_info) { return std::pair{ telemetry_info.endpoint, telemetry_info.data }; }); + [](auto const & telemetry_info) { return std::pair{ telemetry_info.endpoint, telemetry_info.data }; }); // clang-format on return telemetry_data; @@ -354,7 +354,7 @@ void nano::telemetry::fire_request_message (std::shared_ptr this_w (shared_from_this ()); nano::telemetry_req message{ network_params.network }; // clang-format off - channel_a->send (message, [this_w, endpoint = channel_a->get_endpoint (), round_l](boost::system::error_code const & ec, size_t size_a) { + channel_a->send (message, [this_w, endpoint = channel_a->get_endpoint (), round_l](boost::system::error_code const & ec, std::size_t size_a) { if (auto this_l = this_w.lock ()) { if (ec) @@ -447,7 +447,7 @@ void nano::telemetry::invoke_callbacks (nano::endpoint const & endpoint_a, bool } } -size_t nano::telemetry::telemetry_data_size () +std::size_t nano::telemetry::telemetry_data_size () { nano::lock_guard guard (mutex); return recent_or_initial_request_telemetry_data.size (); @@ -469,11 +469,11 @@ bool nano::telemetry_info::awaiting_first_response () const std::unique_ptr nano::collect_container_info (telemetry & telemetry, std::string const & name) { auto composite = std::make_unique (name); - size_t callbacks_count; + std::size_t callbacks_count; { nano::lock_guard guard (telemetry.mutex); std::unordered_map>> callbacks; - callbacks_count = std::accumulate (callbacks.begin (), callbacks.end (), static_cast (0), [] (auto total, auto const & callback_a) { + callbacks_count = std::accumulate (callbacks.begin (), callbacks.end (), static_cast (0), [] (auto total, auto const & callback_a) { return total += callback_a.second.size (); }); } @@ -573,7 +573,7 @@ nano::telemetry_data nano::consolidate_telemetry_data (std::vector (timestamp_sum / timestamps.size ()))); } - auto set_mode_or_average = [] (auto const & collection, auto & var, auto const & sum, size_t size) { + auto set_mode_or_average = [] (auto const & collection, auto & var, auto const & sum, std::size_t size) { auto max = std::max_element (collection.begin (), collection.end (), [] (auto const & lhs, auto const & rhs) { return lhs.second < rhs.second; }); @@ -587,7 +587,7 @@ nano::telemetry_data nano::consolidate_telemetry_data (std::vector /* * Return the number of node metrics collected */ - size_t telemetry_data_size (); + std::size_t telemetry_data_size (); /* * Returns the time for the cache, response and a small buffer for alarm operations to be scheduled and completed @@ -142,7 +142,7 @@ class telemetry : public std::enable_shared_from_this bool within_cache_cutoff (nano::telemetry_info const &) const; bool within_cache_plus_buffer_cutoff (telemetry_info const &) const; bool verify_message (nano::telemetry_ack const &, nano::transport::channel const &); - friend std::unique_ptr collect_container_info (telemetry &, const std::string &); + friend std::unique_ptr collect_container_info (telemetry &, std::string const &); friend class telemetry_remove_peer_invalid_signature_Test; }; diff --git a/nano/node/transport/tcp.cpp b/nano/node/transport/tcp.cpp index d6c628ade7..59c4064736 100644 --- a/nano/node/transport/tcp.cpp +++ b/nano/node/transport/tcp.cpp @@ -23,7 +23,7 @@ nano::transport::channel_tcp::~channel_tcp () } } -size_t nano::transport::channel_tcp::hash_code () const +std::size_t nano::transport::channel_tcp::hash_code () const { std::hash<::nano::tcp_endpoint> hash; return hash (get_tcp_endpoint ()); @@ -40,14 +40,14 @@ bool nano::transport::channel_tcp::operator== (nano::transport::channel const & return result; } -void nano::transport::channel_tcp::send_buffer (nano::shared_const_buffer const & buffer_a, std::function const & callback_a, nano::buffer_drop_policy policy_a) +void nano::transport::channel_tcp::send_buffer (nano::shared_const_buffer const & buffer_a, std::function const & callback_a, nano::buffer_drop_policy policy_a) { if (auto socket_l = socket.lock ()) { if (!socket_l->max () || (policy_a == nano::buffer_drop_policy::no_socket_drop && !socket_l->full ())) { socket_l->async_write ( - buffer_a, [endpoint_a = socket_l->remote_endpoint (), node = std::weak_ptr (node.shared ()), callback_a] (boost::system::error_code const & ec, size_t size_a) { + buffer_a, [endpoint_a = socket_l->remote_endpoint (), node = std::weak_ptr (node.shared ()), callback_a] (boost::system::error_code const & ec, std::size_t size_a) { if (auto node_l = node.lock ()) { if (!ec) @@ -148,7 +148,7 @@ void nano::transport::tcp_channels::erase (nano::tcp_endpoint const & endpoint_a channels.get ().erase (endpoint_a); } -size_t nano::transport::tcp_channels::size () const +std::size_t nano::transport::tcp_channels::size () const { nano::lock_guard lock (mutex); return channels.size (); @@ -166,7 +166,7 @@ std::shared_ptr nano::transport::tcp_channels::fin return result; } -std::unordered_set> nano::transport::tcp_channels::random_set (size_t count_a, uint8_t min_version, bool include_temporary_channels_a) const +std::unordered_set> nano::transport::tcp_channels::random_set (std::size_t count_a, uint8_t min_version, bool include_temporary_channels_a) const { std::unordered_set> result; result.reserve (count_a); @@ -217,7 +217,7 @@ bool nano::transport::tcp_channels::store_all (bool clear_peers) nano::lock_guard lock (mutex); endpoints.reserve (channels.size ()); std::transform (channels.begin (), channels.end (), - std::back_inserter (endpoints), [] (const auto & channel) { return nano::transport::map_tcp_to_endpoint (channel.endpoint ()); }); + std::back_inserter (endpoints), [] (auto const & channel) { return nano::transport::map_tcp_to_endpoint (channel.endpoint ()); }); } bool result (false); if (!endpoints.empty ()) @@ -399,9 +399,9 @@ bool nano::transport::tcp_channels::reachout (nano::endpoint const & endpoint_a) std::unique_ptr nano::transport::tcp_channels::collect_container_info (std::string const & name) { - size_t channels_count; - size_t attemps_count; - size_t node_id_handshake_sockets_count; + std::size_t channels_count; + std::size_t attemps_count; + std::size_t node_id_handshake_sockets_count; { nano::lock_guard guard (mutex); channels_count = channels.size (); @@ -450,7 +450,7 @@ void nano::transport::tcp_channels::ongoing_keepalive () nano::tcp_endpoint invalid_endpoint (boost::asio::ip::address_v6::any (), 0); if (!node.network_params.network.is_dev_network () && !node.flags.disable_udp) { - size_t random_count (std::min (static_cast (6), static_cast (std::ceil (std::sqrt (node.network.udp_channels.size ()))))); + std::size_t random_count (std::min (static_cast (6), static_cast (std::ceil (std::sqrt (node.network.udp_channels.size ()))))); for (auto i (0); i <= random_count; ++i) { auto tcp_endpoint (node.network.udp_channels.bootstrap_peer (node.network_params.network.protocol_version_min)); @@ -478,7 +478,7 @@ void nano::transport::tcp_channels::list_below_version (std::vector ().begin (), channels.get ().end (), std::back_inserter (channels_a), [cutoff_version_a](auto & channel_a) { return channel_a.channel->get_network_version () < cutoff_version_a; }, - [](const auto & channel) { return channel.channel; }); + [](auto const & channel) { return channel.channel; }); // clang-format on } @@ -488,7 +488,7 @@ void nano::transport::tcp_channels::list (std::deque ().begin (), channels.get ().end (), std::back_inserter (deque_a), [include_temporary_channels_a, minimum_version_a](auto & channel_a) { return channel_a.channel->get_network_version () >= minimum_version_a && (include_temporary_channels_a || !channel_a.channel->temporary); }, - [](const auto & channel) { return channel.channel; }); + [](auto const & channel) { return channel.channel; }); // clang-format on } @@ -543,7 +543,7 @@ void nano::transport::tcp_channels::start_tcp (nano::endpoint const & endpoint_a channel->set_endpoint (); std::shared_ptr> receive_buffer (std::make_shared> ()); receive_buffer->resize (256); - channel->send (message, [node_w, channel, endpoint_a, receive_buffer] (boost::system::error_code const & ec, size_t size_a) { + channel->send (message, [node_w, channel, endpoint_a, receive_buffer] (boost::system::error_code const & ec, std::size_t size_a) { if (auto node_l = node_w.lock ()) { if (!ec) @@ -596,7 +596,7 @@ void nano::transport::tcp_channels::start_tcp_receive_node_id (std::shared_ptrasync_read (receive_buffer_a, 8 + sizeof (nano::account) + sizeof (nano::account) + sizeof (nano::signature), [node_w, channel_a, endpoint_a, receive_buffer_a, cleanup_and_udp_fallback, cleanup_node_id_handshake_socket] (boost::system::error_code const & ec, size_t size_a) { + socket_l->async_read (receive_buffer_a, 8 + sizeof (nano::account) + sizeof (nano::account) + sizeof (nano::signature), [node_w, channel_a, endpoint_a, receive_buffer_a, cleanup_and_udp_fallback, cleanup_node_id_handshake_socket] (boost::system::error_code const & ec, std::size_t size_a) { if (auto node_l = node_w.lock ()) { if (!ec && channel_a) @@ -635,7 +635,7 @@ void nano::transport::tcp_channels::start_tcp_receive_node_id (std::shared_ptrlogger.try_log (boost::str (boost::format ("Node ID handshake response sent with node ID %1% to %2%: query %3%") % node_l->node_id.pub.to_node_id () % endpoint_a % (*message.query).to_string ())); } - channel_a->send (response_message, [node_w, channel_a, endpoint_a, cleanup_and_udp_fallback] (boost::system::error_code const & ec, size_t size_a) { + channel_a->send (response_message, [node_w, channel_a, endpoint_a, cleanup_and_udp_fallback] (boost::system::error_code const & ec, std::size_t size_a) { if (auto node_l = node_w.lock ()) { if (!ec && channel_a) diff --git a/nano/node/transport/tcp.hpp b/nano/node/transport/tcp.hpp index 9e7fe0112e..611791b508 100644 --- a/nano/node/transport/tcp.hpp +++ b/nano/node/transport/tcp.hpp @@ -35,9 +35,9 @@ namespace transport public: channel_tcp (nano::node &, std::weak_ptr); ~channel_tcp (); - size_t hash_code () const override; + std::size_t hash_code () const override; bool operator== (nano::transport::channel const &) const override; - void send_buffer (nano::shared_const_buffer const &, std::function const & = nullptr, nano::buffer_drop_policy = nano::buffer_drop_policy::limiter) override; + void send_buffer (nano::shared_const_buffer const &, std::function const & = nullptr, nano::buffer_drop_policy = nano::buffer_drop_policy::limiter) override; std::string to_string () const override; bool operator== (nano::transport::channel_tcp const & other_a) const { @@ -78,10 +78,10 @@ namespace transport tcp_channels (nano::node &, std::function const &)> = nullptr); bool insert (std::shared_ptr const &, std::shared_ptr const &, std::shared_ptr const &); void erase (nano::tcp_endpoint const &); - size_t size () const; + std::size_t size () const; std::shared_ptr find_channel (nano::tcp_endpoint const &) const; void random_fill (std::array &) const; - std::unordered_set> random_set (size_t, uint8_t = 0, bool = false) const; + std::unordered_set> random_set (std::size_t, uint8_t = 0, bool = false) const; bool store_all (bool = true); std::shared_ptr find_node_id (nano::account const &); // Get the next peer for attempting a tcp connection diff --git a/nano/node/transport/transport.cpp b/nano/node/transport/transport.cpp index 75ba49474d..718df5d39b 100644 --- a/nano/node/transport/transport.cpp +++ b/nano/node/transport/transport.cpp @@ -100,7 +100,7 @@ nano::transport::channel::channel (nano::node & node_a) : set_network_version (node_a.network_params.network.protocol_version); } -void nano::transport::channel::send (nano::message & message_a, std::function const & callback_a, nano::buffer_drop_policy drop_policy_a) +void nano::transport::channel::send (nano::message & message_a, std::function const & callback_a, nano::buffer_drop_policy drop_policy_a) { callback_visitor visitor; message_a.visit (visitor); @@ -138,7 +138,7 @@ nano::transport::channel_loopback::channel_loopback (nano::node & node_a) : set_network_version (node_a.network_params.network.protocol_version); } -size_t nano::transport::channel_loopback::hash_code () const +std::size_t nano::transport::channel_loopback::hash_code () const { std::hash<::nano::endpoint> hash; return hash (endpoint); @@ -149,7 +149,7 @@ bool nano::transport::channel_loopback::operator== (nano::transport::channel con return endpoint == other_a.get_endpoint (); } -void nano::transport::channel_loopback::send_buffer (nano::shared_const_buffer const & buffer_a, std::function const & callback_a, nano::buffer_drop_policy drop_policy_a) +void nano::transport::channel_loopback::send_buffer (nano::shared_const_buffer const & buffer_a, std::function const & callback_a, nano::buffer_drop_policy drop_policy_a) { release_assert (false && "sending to a loopback channel is not supported"); } @@ -268,17 +268,17 @@ bool nano::transport::reserved_address (nano::endpoint const & endpoint_a, bool using namespace std::chrono_literals; -nano::bandwidth_limiter::bandwidth_limiter (const double limit_burst_ratio_a, const size_t limit_a) : - bucket (static_cast (limit_a * limit_burst_ratio_a), limit_a) +nano::bandwidth_limiter::bandwidth_limiter (double const limit_burst_ratio_a, std::size_t const limit_a) : + bucket (static_cast (limit_a * limit_burst_ratio_a), limit_a) { } -bool nano::bandwidth_limiter::should_drop (const size_t & message_size_a) +bool nano::bandwidth_limiter::should_drop (std::size_t const & message_size_a) { return !bucket.try_consume (nano::narrow_cast (message_size_a)); } -void nano::bandwidth_limiter::reset (const double limit_burst_ratio_a, const size_t limit_a) +void nano::bandwidth_limiter::reset (double const limit_burst_ratio_a, std::size_t const limit_a) { - bucket.reset (static_cast (limit_a * limit_burst_ratio_a), limit_a); + bucket.reset (static_cast (limit_a * limit_burst_ratio_a), limit_a); } diff --git a/nano/node/transport/transport.hpp b/nano/node/transport/transport.hpp index bcee287eef..56e5f6b134 100644 --- a/nano/node/transport/transport.hpp +++ b/nano/node/transport/transport.hpp @@ -14,9 +14,9 @@ class bandwidth_limiter final { public: // initialize with limit 0 = unbounded - bandwidth_limiter (const double, const size_t); - bool should_drop (const size_t &); - void reset (const double, const size_t); + bandwidth_limiter (double const, std::size_t const); + bool should_drop (std::size_t const &); + void reset (double const, std::size_t const); private: nano::rate::token_bucket bucket; @@ -45,10 +45,10 @@ namespace transport public: channel (nano::node &); virtual ~channel () = default; - virtual size_t hash_code () const = 0; + virtual std::size_t hash_code () const = 0; virtual bool operator== (nano::transport::channel const &) const = 0; - void send (nano::message & message_a, std::function const & callback_a = nullptr, nano::buffer_drop_policy policy_a = nano::buffer_drop_policy::limiter); - virtual void send_buffer (nano::shared_const_buffer const &, std::function const & = nullptr, nano::buffer_drop_policy = nano::buffer_drop_policy::limiter) = 0; + void send (nano::message & message_a, std::function const & callback_a = nullptr, nano::buffer_drop_policy policy_a = nano::buffer_drop_policy::limiter); + virtual void send_buffer (nano::shared_const_buffer const &, std::function const & = nullptr, nano::buffer_drop_policy = nano::buffer_drop_policy::limiter) = 0; virtual std::string to_string () const = 0; virtual nano::endpoint get_endpoint () const = 0; virtual nano::tcp_endpoint get_tcp_endpoint () const = 0; @@ -142,9 +142,9 @@ namespace transport { public: channel_loopback (nano::node &); - size_t hash_code () const override; + std::size_t hash_code () const override; bool operator== (nano::transport::channel const &) const override; - void send_buffer (nano::shared_const_buffer const &, std::function const & = nullptr, nano::buffer_drop_policy = nano::buffer_drop_policy::limiter) override; + void send_buffer (nano::shared_const_buffer const &, std::function const & = nullptr, nano::buffer_drop_policy = nano::buffer_drop_policy::limiter) override; std::string to_string () const override; bool operator== (nano::transport::channel_loopback const & other_a) const { @@ -177,7 +177,7 @@ namespace std template <> struct hash<::nano::transport::channel> { - size_t operator() (::nano::transport::channel const & channel_a) const + std::size_t operator() (::nano::transport::channel const & channel_a) const { return channel_a.hash_code (); } @@ -197,7 +197,7 @@ namespace boost template <> struct hash<::nano::transport::channel> { - size_t operator() (::nano::transport::channel const & channel_a) const + std::size_t operator() (::nano::transport::channel const & channel_a) const { std::hash<::nano::transport::channel> hash; return hash (channel_a); @@ -206,7 +206,7 @@ struct hash<::nano::transport::channel> template <> struct hash> { - size_t operator() (std::reference_wrapper<::nano::transport::channel const> const & channel_a) const + std::size_t operator() (std::reference_wrapper<::nano::transport::channel const> const & channel_a) const { std::hash<::nano::transport::channel> hash; return hash (channel_a.get ()); diff --git a/nano/node/transport/udp.cpp b/nano/node/transport/udp.cpp index bd975ad650..9b4885ba9b 100644 --- a/nano/node/transport/udp.cpp +++ b/nano/node/transport/udp.cpp @@ -16,7 +16,7 @@ nano::transport::channel_udp::channel_udp (nano::transport::udp_channels & chann debug_assert (endpoint_a.address ().is_v6 ()); } -size_t nano::transport::channel_udp::hash_code () const +std::size_t nano::transport::channel_udp::hash_code () const { std::hash<::nano::endpoint> hash; return hash (endpoint); @@ -33,10 +33,10 @@ bool nano::transport::channel_udp::operator== (nano::transport::channel const & return result; } -void nano::transport::channel_udp::send_buffer (nano::shared_const_buffer const & buffer_a, std::function const & callback_a, nano::buffer_drop_policy drop_policy_a) +void nano::transport::channel_udp::send_buffer (nano::shared_const_buffer const & buffer_a, std::function const & callback_a, nano::buffer_drop_policy drop_policy_a) { set_last_packet_sent (std::chrono::steady_clock::now ()); - channels.send (buffer_a, endpoint, [node = std::weak_ptr (channels.node.shared ()), callback_a] (boost::system::error_code const & ec, size_t size_a) { + channels.send (buffer_a, endpoint, [node = std::weak_ptr (channels.node.shared ()), callback_a] (boost::system::error_code const & ec, std::size_t size_a) { if (auto node_l = node.lock ()) { if (ec == boost::system::errc::host_unreachable) @@ -84,7 +84,7 @@ nano::transport::udp_channels::udp_channels (nano::node & node_a, uint16_t port_ } } -void nano::transport::udp_channels::send (nano::shared_const_buffer const & buffer_a, nano::endpoint endpoint_a, std::function const & callback_a) +void nano::transport::udp_channels::send (nano::shared_const_buffer const & buffer_a, nano::endpoint endpoint_a, std::function const & callback_a) { boost::asio::post (strand, [this, buffer_a, endpoint_a, callback_a] () { @@ -126,7 +126,7 @@ void nano::transport::udp_channels::erase (nano::endpoint const & endpoint_a) channels.get ().erase (endpoint_a); } -size_t nano::transport::udp_channels::size () const +std::size_t nano::transport::udp_channels::size () const { nano::lock_guard lock (mutex); return channels.size (); @@ -144,7 +144,7 @@ std::shared_ptr nano::transport::udp_channels::cha return result; } -std::unordered_set> nano::transport::udp_channels::random_set (size_t count_a, uint8_t min_version) const +std::unordered_set> nano::transport::udp_channels::random_set (std::size_t count_a, uint8_t min_version) const { std::unordered_set> result; result.reserve (count_a); @@ -194,7 +194,7 @@ bool nano::transport::udp_channels::store_all (bool clear_peers) nano::lock_guard lock (mutex); endpoints.reserve (channels.size ()); std::transform (channels.begin (), channels.end (), - std::back_inserter (endpoints), [] (const auto & channel) { return channel.endpoint (); }); + std::back_inserter (endpoints), [] (auto const & channel) { return channel.endpoint (); }); } bool result (false); if (!endpoints.empty ()) @@ -313,7 +313,7 @@ void nano::transport::udp_channels::receive () void nano::transport::udp_channels::start () { debug_assert (!node.flags.disable_udp); - for (size_t i = 0; i < node.config.io_threads && !stopped; ++i) + for (std::size_t i = 0; i < node.config.io_threads && !stopped; ++i) { boost::asio::post (strand, [this] () { receive (); @@ -659,8 +659,8 @@ bool nano::transport::udp_channels::reachout (nano::endpoint const & endpoint_a) std::unique_ptr nano::transport::udp_channels::collect_container_info (std::string const & name) { - size_t channels_count; - size_t attemps_count; + std::size_t channels_count; + std::size_t attemps_count; { nano::lock_guard guard (mutex); channels_count = channels.size (); @@ -715,7 +715,7 @@ void nano::transport::udp_channels::list_below_version (std::vector ().begin (), channels.get ().end (), std::back_inserter (channels_a), [cutoff_version_a](auto & channel_a) { return channel_a.channel->get_network_version () < cutoff_version_a; }, - [](const auto & channel) { return channel.channel; }); + [](auto const & channel) { return channel.channel; }); // clang-format on } @@ -725,7 +725,7 @@ void nano::transport::udp_channels::list (std::deque ().begin (), channels.get ().end (), std::back_inserter (deque_a), [minimum_version_a](auto & channel_a) { return channel_a.channel->get_network_version () >= minimum_version_a; }, - [](const auto & channel) { return channel.channel; }); + [](auto const & channel) { return channel.channel; }); // clang-format on } diff --git a/nano/node/transport/udp.hpp b/nano/node/transport/udp.hpp index 691f735689..6eb0e9bc3c 100644 --- a/nano/node/transport/udp.hpp +++ b/nano/node/transport/udp.hpp @@ -27,9 +27,9 @@ namespace transport public: channel_udp (nano::transport::udp_channels &, nano::endpoint const &, uint8_t protocol_version); - size_t hash_code () const override; + std::size_t hash_code () const override; bool operator== (nano::transport::channel const &) const override; - void send_buffer (nano::shared_const_buffer const &, std::function const & = nullptr, nano::buffer_drop_policy = nano::buffer_drop_policy::limiter) override; + void send_buffer (nano::shared_const_buffer const &, std::function const & = nullptr, nano::buffer_drop_policy = nano::buffer_drop_policy::limiter) override; std::string to_string () const override; bool operator== (nano::transport::channel_udp const & other_a) const { @@ -78,10 +78,10 @@ namespace transport udp_channels (nano::node &, uint16_t, std::function const &)> sink); std::shared_ptr insert (nano::endpoint const &, unsigned); void erase (nano::endpoint const &); - size_t size () const; + std::size_t size () const; std::shared_ptr channel (nano::endpoint const &) const; void random_fill (std::array &) const; - std::unordered_set> random_set (size_t, uint8_t = 0) const; + std::unordered_set> random_set (std::size_t, uint8_t = 0) const; bool store_all (bool = true); std::shared_ptr find_node_id (nano::account const &); void clean_node_id (nano::account const &); @@ -91,7 +91,7 @@ namespace transport void receive (); void start (); void stop (); - void send (nano::shared_const_buffer const & buffer_a, nano::endpoint endpoint_a, std::function const & callback_a); + void send (nano::shared_const_buffer const & buffer_a, nano::endpoint endpoint_a, std::function const & callback_a); nano::endpoint get_local_endpoint () const; void receive_action (nano::message_buffer *); void process_packets (); diff --git a/nano/node/vote_processor.cpp b/nano/node/vote_processor.cpp index eb4548d17a..ac540b654f 100644 --- a/nano/node/vote_processor.cpp +++ b/nano/node/vote_processor.cpp @@ -140,7 +140,7 @@ void nano::vote_processor::verify_votes (decltype (votes) const & votes_a) messages.reserve (size); std::vector hashes; hashes.reserve (size); - std::vector lengths (size, sizeof (nano::block_hash)); + std::vector lengths (size, sizeof (nano::block_hash)); std::vector pub_keys; pub_keys.reserve (size); std::vector signatures; @@ -234,7 +234,7 @@ void nano::vote_processor::flush_active () } } -size_t nano::vote_processor::size () +std::size_t nano::vote_processor::size () { nano::lock_guard guard (mutex); return votes.size (); @@ -283,10 +283,10 @@ void nano::vote_processor::calculate_weights () std::unique_ptr nano::collect_container_info (vote_processor & vote_processor, std::string const & name) { - size_t votes_count; - size_t representatives_1_count; - size_t representatives_2_count; - size_t representatives_3_count; + std::size_t votes_count; + std::size_t representatives_1_count; + std::size_t representatives_2_count; + std::size_t representatives_3_count; { nano::lock_guard guard (vote_processor.mutex); diff --git a/nano/node/vote_processor.hpp b/nano/node/vote_processor.hpp index e61c93f2dc..d1175363f9 100644 --- a/nano/node/vote_processor.hpp +++ b/nano/node/vote_processor.hpp @@ -44,7 +44,7 @@ class vote_processor final void flush (); /** Block until the currently active processing cycle finishes */ void flush_active (); - size_t size (); + std::size_t size (); bool empty (); bool half_full (); void calculate_weights (); @@ -64,7 +64,7 @@ class vote_processor final nano::rep_crawler & rep_crawler; nano::ledger & ledger; nano::network_params & network_params; - size_t max_votes; + std::size_t max_votes; std::deque, std::shared_ptr>> votes; /** Representatives levels for random early detection */ std::unordered_set representatives_1; diff --git a/nano/node/voting.cpp b/nano/node/voting.cpp index 33438d726f..eed58a186c 100644 --- a/nano/node/voting.cpp +++ b/nano/node/voting.cpp @@ -44,7 +44,7 @@ void nano::vote_spacing::flag (nano::root const & root_a, nano::block_hash const } } -size_t nano::vote_spacing::size () const +std::size_t nano::vote_spacing::size () const { return recent.size (); } @@ -145,7 +145,7 @@ void nano::local_vote_history::clean () } } -size_t nano::local_vote_history::size () const +std::size_t nano::local_vote_history::size () const { nano::lock_guard guard (mutex); return history.size (); @@ -153,7 +153,7 @@ size_t nano::local_vote_history::size () const std::unique_ptr nano::collect_container_info (nano::local_vote_history & history, std::string const & name) { - size_t history_count = history.size (); + std::size_t history_count = history.size (); auto sizeof_element = sizeof (decltype (history.history)::value_type); auto composite = std::make_unique (name); /* This does not currently loop over each element inside the cache to get the sizes of the votes inside history*/ @@ -230,7 +230,7 @@ void nano::vote_generator::stop () } } -size_t nano::vote_generator::generate (std::vector> const & blocks_a, std::shared_ptr const & channel_a) +std::size_t nano::vote_generator::generate (std::vector> const & blocks_a, std::shared_ptr const & channel_a) { request_t::first_type req_candidates; { @@ -366,7 +366,7 @@ void nano::vote_generator::vote (std::vector const & hashes_a, }); for (auto const & vote_l : votes_l) { - for (size_t i (0), n (hashes_a.size ()); i != n; ++i) + for (std::size_t i (0), n (hashes_a.size ()); i != n; ++i) { history.add (roots_a[i], hashes_a[i], vote_l); spacing.flag (roots_a[i], hashes_a[i]); @@ -439,8 +439,8 @@ void nano::vote_generator_session::flush () std::unique_ptr nano::collect_container_info (nano::vote_generator & vote_generator, std::string const & name) { - size_t candidates_count = 0; - size_t requests_count = 0; + std::size_t candidates_count = 0; + std::size_t requests_count = 0; { nano::lock_guard guard (vote_generator.mutex); candidates_count = vote_generator.candidates.size (); diff --git a/nano/node/voting.hpp b/nano/node/voting.hpp index 51267aad32..c404a02425 100644 --- a/nano/node/voting.hpp +++ b/nano/node/voting.hpp @@ -59,7 +59,7 @@ class vote_spacing final } bool votable (nano::root const & root_a, nano::block_hash const & hash_a) const; void flag (nano::root const & root_a, nano::block_hash const & hash_a); - size_t size () const; + std::size_t size () const; }; class local_vote_history final @@ -88,7 +88,7 @@ class local_vote_history final std::vector> votes (nano::root const & root_a, nano::block_hash const & hash_a, bool const is_final_a = false) const; bool exists (nano::root const &) const; - size_t size () const; + std::size_t size () const; private: // clang-format off @@ -124,7 +124,7 @@ class vote_generator final /** Queue items for vote generation, or broadcast votes already in cache */ void add (nano::root const &, nano::block_hash const &); /** Queue blocks for vote generation, returning the number of successful candidates.*/ - size_t generate (std::vector> const & blocks_a, std::shared_ptr const & channel_a); + std::size_t generate (std::vector> const & blocks_a, std::shared_ptr const & channel_a); void set_reply_action (std::function const &, std::shared_ptr const &)>); void stop (); @@ -145,7 +145,7 @@ class vote_generator final nano::stat & stats; mutable nano::mutex mutex; nano::condition_variable condition; - static size_t constexpr max_requests{ 2048 }; + static std::size_t constexpr max_requests{ 2048 }; std::deque requests; std::deque candidates; std::atomic stopped{ false }; diff --git a/nano/node/wallet.cpp b/nano/node/wallet.cpp index 7924aa2557..dd89b800fe 100644 --- a/nano/node/wallet.cpp +++ b/nano/node/wallet.cpp @@ -199,7 +199,7 @@ void nano::wallet_store::derive_key (nano::raw_key & prv_a, nano::transaction co kdf.phs (prv_a, password_a, salt_l); } -nano::fan::fan (nano::raw_key const & key, size_t count_a) +nano::fan::fan (nano::raw_key const & key, std::size_t count_a) { auto first (std::make_unique (key)); for (auto i (1); i < count_a; ++i) @@ -252,8 +252,8 @@ nano::account const nano::wallet_store::seed_special (5); // Current key index for deterministic keys nano::account const nano::wallet_store::deterministic_index_special (6); int const nano::wallet_store::special_count (7); -size_t const nano::wallet_store::check_iv_index (0); -size_t const nano::wallet_store::seed_iv_index (1); +std::size_t const nano::wallet_store::check_iv_index (0); +std::size_t const nano::wallet_store::seed_iv_index (1); nano::wallet_store::wallet_store (bool & init_a, nano::kdf & kdf_a, nano::transaction & transaction_a, nano::account representative_a, unsigned fanout_a, std::string const & wallet_a, std::string const & json_a) : password (0, fanout_a), @@ -941,7 +941,7 @@ std::shared_ptr nano::wallet::send_action (nano::account const & so id_mdb_val = nano::mdb_val (id_a->size (), const_cast (id_a->data ())); } - auto prepare_send = [&id_mdb_val, &wallets = this->wallets, &store = this->store, &source_a, &amount_a, &work_a, &account_a] (const auto & transaction) { + auto prepare_send = [&id_mdb_val, &wallets = this->wallets, &store = this->store, &source_a, &amount_a, &work_a, &account_a] (auto const & transaction) { auto block_transaction (wallets.node.store.tx_begin_read ()); auto error (false); auto cached_block (false); @@ -1391,9 +1391,9 @@ nano::wallets::wallets (bool error_a, nano::node & node_a) : } if (backup_required) { - const char * store_path; + char const * store_path; mdb_env_get_path (env, &store_path); - const boost::filesystem::path path (store_path); + boost::filesystem::path const path (store_path); nano::mdb_store::create_backup_file (env, path, node_a.logger); } for (auto & item : items) @@ -1629,7 +1629,7 @@ nano::wallet_representatives nano::wallets::reps () const return representatives; } -bool nano::wallets::check_rep (nano::account const & account_a, nano::uint128_t const & half_principal_weight_a, const bool acquire_lock_a) +bool nano::wallets::check_rep (nano::account const & account_a, nano::uint128_t const & half_principal_weight_a, bool const acquire_lock_a) { auto weight = node.ledger.weight (account_a); @@ -1832,8 +1832,8 @@ MDB_txn * nano::wallet_store::tx (nano::transaction const & transaction_a) const std::unique_ptr nano::collect_container_info (wallets & wallets, std::string const & name) { - size_t items_count; - size_t actions_count; + std::size_t items_count; + std::size_t actions_count; { nano::lock_guard guard (wallets.mutex); items_count = wallets.items.size (); diff --git a/nano/node/wallet.hpp b/nano/node/wallet.hpp index b7e69d09c0..16efc87dce 100644 --- a/nano/node/wallet.hpp +++ b/nano/node/wallet.hpp @@ -22,7 +22,7 @@ class wallets; class fan final { public: - fan (nano::raw_key const &, size_t); + fan (nano::raw_key const &, std::size_t); void value (nano::raw_key &); void value_set (nano::raw_key const &); std::vector> values; @@ -110,8 +110,8 @@ class wallet_store final static nano::account const representative_special; static nano::account const seed_special; static nano::account const deterministic_index_special; - static size_t const check_iv_index; - static size_t const seed_iv_index; + static std::size_t const check_iv_index; + static std::size_t const seed_iv_index; static int const special_count; nano::kdf & kdf; std::atomic handle{ 0 }; @@ -209,7 +209,7 @@ class wallets final void stop (); void clear_send_ids (nano::transaction const &); nano::wallet_representatives reps () const; - bool check_rep (nano::account const &, nano::uint128_t const &, const bool = true); + bool check_rep (nano::account const &, nano::uint128_t const &, bool const = true); void compute_reps (); void ongoing_compute_reps (); void split_if_needed (nano::transaction &, nano::store &); diff --git a/nano/node/websocket.hpp b/nano/node/websocket.hpp index 1da806ee7b..a923a07f9e 100644 --- a/nano/node/websocket.hpp +++ b/nano/node/websocket.hpp @@ -66,7 +66,7 @@ namespace websocket /** Auxiliary length, not a valid topic, must be the last enum */ _length }; - constexpr size_t number_topics{ static_cast (topic::_length) - static_cast (topic::invalid) }; + constexpr std::size_t number_topics{ static_cast (topic::_length) - static_cast (topic::invalid) }; /** A message queued for broadcasting */ class message final @@ -184,11 +184,11 @@ namespace websocket return include_election_info_with_votes; } - static constexpr const uint8_t type_active_quorum = 1; - static constexpr const uint8_t type_active_confirmation_height = 2; - static constexpr const uint8_t type_inactive = 4; - static constexpr const uint8_t type_all_active = type_active_quorum | type_active_confirmation_height; - static constexpr const uint8_t type_all = type_all_active | type_inactive; + static constexpr uint8_t const type_active_quorum = 1; + static constexpr uint8_t const type_active_confirmation_height = 2; + static constexpr uint8_t const type_inactive = 4; + static constexpr uint8_t const type_all_active = type_active_quorum | type_active_confirmation_height; + static constexpr uint8_t const type_all = type_all_active | type_inactive; private: void check_filter_empty () const; @@ -321,7 +321,7 @@ namespace websocket return subscriber_count (topic_a) > 0; } /** Getter for subscriber count of a specific topic*/ - size_t subscriber_count (nano::websocket::topic const & topic_a) const + std::size_t subscriber_count (nano::websocket::topic const & topic_a) const { return topic_subscriber_count[static_cast (topic_a)]; } diff --git a/nano/qt/qt.cpp b/nano/qt/qt.cpp index dfe5d5aa0e..db90407548 100644 --- a/nano/qt/qt.cpp +++ b/nano/qt/qt.cpp @@ -845,7 +845,7 @@ void nano_qt::stats_viewer::refresh_stats () if (json) { // Format the stat data to make totals and values easier to read - BOOST_FOREACH (const boost::property_tree::ptree::value_type & child, json->get_child ("entries")) + BOOST_FOREACH (boost::property_tree::ptree::value_type const & child, json->get_child ("entries")) { auto time = child.second.get ("time"); auto type = child.second.get ("type"); @@ -860,7 +860,7 @@ void nano_qt::stats_viewer::refresh_stats () if (type == "traffic_udp" || type == "traffic_tcp") { - const std::vector units = { " bytes", " KB", " MB", " GB", " TB", " PB" }; + std::vector const units = { " bytes", " KB", " MB", " GB", " TB", " PB" }; double bytes = std::stod (value); auto index = bytes == 0 ? 0 : std::min (units.size () - 1, static_cast (std::floor (std::log2 (bytes) / 10))); std::string unit = units[index]; @@ -1917,7 +1917,7 @@ void nano_qt::advanced_actions::refresh_peers () { peers_model->removeRows (0, peers_model->rowCount ()); auto list (wallet.node.network.list (std::numeric_limits::max ())); - std::sort (list.begin (), list.end (), [] (const auto & lhs, const auto & rhs) { + std::sort (list.begin (), list.end (), [] (auto const & lhs, auto const & rhs) { return lhs->get_endpoint () < rhs->get_endpoint (); }); for (auto i (list.begin ()), n (list.end ()); i != n; ++i) diff --git a/nano/rpc/rpc_connection_secure.cpp b/nano/rpc/rpc_connection_secure.cpp index 64626b69b4..6287ed9931 100644 --- a/nano/rpc/rpc_connection_secure.cpp +++ b/nano/rpc/rpc_connection_secure.cpp @@ -20,13 +20,13 @@ void nano::rpc_connection_secure::parse_connection () })); } -void nano::rpc_connection_secure::on_shutdown (const boost::system::error_code & error) +void nano::rpc_connection_secure::on_shutdown (boost::system::error_code const & error) { // No-op. We initiate the shutdown (since the RPC server kills the connection after each request) // and we'll thus get an expected EOF error. If the client disconnects, a short-read error will be expected. } -void nano::rpc_connection_secure::handle_handshake (const boost::system::error_code & error) +void nano::rpc_connection_secure::handle_handshake (boost::system::error_code const & error) { if (!error) { diff --git a/nano/rpc/rpc_connection_secure.hpp b/nano/rpc/rpc_connection_secure.hpp index 61ed08e7fd..13e9287d20 100644 --- a/nano/rpc/rpc_connection_secure.hpp +++ b/nano/rpc/rpc_connection_secure.hpp @@ -17,9 +17,9 @@ class rpc_connection_secure : public rpc_connection void parse_connection () override; void write_completion_handler (std::shared_ptr const & rpc) override; /** The TLS handshake callback */ - void handle_handshake (const boost::system::error_code & error); + void handle_handshake (boost::system::error_code const & error); /** The TLS async shutdown callback */ - void on_shutdown (const boost::system::error_code & error); + void on_shutdown (boost::system::error_code const & error); private: boost::asio::ssl::stream stream; diff --git a/nano/rpc/rpc_request_processor.hpp b/nano/rpc/rpc_request_processor.hpp index 0b0da628e7..b6788da515 100644 --- a/nano/rpc/rpc_request_processor.hpp +++ b/nano/rpc/rpc_request_processor.hpp @@ -22,17 +22,17 @@ struct ipc_connection struct rpc_request { - rpc_request (const std::string & action_a, const std::string & body_a, std::function response_a) : + rpc_request (std::string const & action_a, std::string const & body_a, std::function response_a) : action (action_a), body (body_a), response (response_a) { } - rpc_request (int rpc_api_version_a, const std::string & body_a, std::function response_a) : + rpc_request (int rpc_api_version_a, std::string const & body_a, std::function response_a) : rpc_api_version (rpc_api_version_a), body (body_a), response (response_a) { } - rpc_request (int rpc_api_version_a, const std::string & action_a, const std::string & body_a, std::function response_a) : + rpc_request (int rpc_api_version_a, std::string const & action_a, std::string const & body_a, std::function response_a) : rpc_api_version (rpc_api_version_a), action (action_a), body (body_a), response (response_a) { } @@ -64,8 +64,8 @@ class rpc_request_processor bool stopped{ false }; std::deque> requests; nano::condition_variable condition; - const std::string ipc_address; - const uint16_t ipc_port; + std::string const ipc_address; + uint16_t const ipc_port; std::thread thread; }; diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index 36d911ef47..823eeda355 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -124,7 +124,7 @@ void reset_confirmation_height (nano::store & store, nano::account const & accou } } -void wait_response_impl (nano::system & system, std::shared_ptr const & rpc, boost::property_tree::ptree & request, const std::chrono::duration & time, boost::property_tree::ptree & response_json) +void wait_response_impl (nano::system & system, std::shared_ptr const & rpc, boost::property_tree::ptree & request, std::chrono::duration const & time, boost::property_tree::ptree & response_json) { test_response response (request, rpc->config.port, system.io_ctx); ASSERT_TIMELY (time, response.status != 0); @@ -132,7 +132,7 @@ void wait_response_impl (nano::system & system, std::shared_ptr const response_json = response.json; } -boost::property_tree::ptree wait_response (nano::system & system, std::shared_ptr const & rpc, boost::property_tree::ptree & request, const std::chrono::duration & time = 5s) +boost::property_tree::ptree wait_response (nano::system & system, std::shared_ptr const & rpc, boost::property_tree::ptree & request, std::chrono::duration const & time = 5s) { boost::property_tree::ptree response_json; wait_response_impl (system, rpc, request, time, response_json); @@ -3219,7 +3219,7 @@ TEST (rpc, pending_exists) auto [rpc, rpc_ctx] = add_rpc (system, node); boost::property_tree::ptree request; - auto pending_exists = [&system, &request, rpc = rpc] (const char * exists_a) { + auto pending_exists = [&system, &request, rpc = rpc] (char const * exists_a) { auto response0 (wait_response (system, rpc, request)); std::string exists_text (response0.get ("exists")); ASSERT_EQ (exists_a, exists_text); @@ -5536,7 +5536,7 @@ TEST (rpc, simultaneous_calls) promise.get_future ().wait (); - ASSERT_TIMELY (60s, std::all_of (test_responses.begin (), test_responses.end (), [] (const auto & test_response) { return test_response->status != 0; })); + ASSERT_TIMELY (60s, std::all_of (test_responses.begin (), test_responses.end (), [] (auto const & test_response) { return test_response->status != 0; })); for (int i = 0; i < num; ++i) { diff --git a/nano/secure/common.cpp b/nano/secure/common.cpp index b809b66892..4c3764e8f3 100644 --- a/nano/secure/common.cpp +++ b/nano/secure/common.cpp @@ -137,7 +137,7 @@ nano::ledger_constants::ledger_constants (nano::work_thresholds & work, nano::ne nano_test_genesis->sideband_set (nano::block_sideband (nano_test_genesis->account (), 0, std::numeric_limits::max (), 1, nano::seconds_since_epoch (), nano::epoch::epoch_0, false, false, false, nano::epoch::epoch_0)); nano::link epoch_link_v1; - const char * epoch_message_v1 ("epoch v1 block"); + char const * epoch_message_v1 ("epoch v1 block"); strncpy ((char *)epoch_link_v1.bytes.data (), epoch_message_v1, epoch_link_v1.bytes.size ()); epochs.add (nano::epoch::epoch_1, genesis->account (), epoch_link_v1); @@ -148,7 +148,7 @@ nano::ledger_constants::ledger_constants (nano::work_thresholds & work, nano::ne auto epoch_v2_signer (network_a == nano::networks::nano_dev_network ? nano::dev::genesis_key.pub : network_a == nano::networks::nano_beta_network ? nano_beta_account : network_a == nano::networks::nano_test_network ? nano_test_account : nano_live_epoch_v2_signer); - const char * epoch_message_v2 ("epoch v2 block"); + char const * epoch_message_v2 ("epoch v2 block"); strncpy ((char *)epoch_link_v2.bytes.data (), epoch_message_v2, epoch_link_v2.bytes.size ()); epochs.add (nano::epoch::epoch_2, epoch_v2_signer, epoch_link_v2); } @@ -273,13 +273,13 @@ bool nano::account_info::operator!= (nano::account_info const & other_a) const size_t nano::account_info::db_size () const { - debug_assert (reinterpret_cast (this) == reinterpret_cast (&head)); - debug_assert (reinterpret_cast (&head) + sizeof (head) == reinterpret_cast (&representative)); - debug_assert (reinterpret_cast (&representative) + sizeof (representative) == reinterpret_cast (&open_block)); - debug_assert (reinterpret_cast (&open_block) + sizeof (open_block) == reinterpret_cast (&balance)); - debug_assert (reinterpret_cast (&balance) + sizeof (balance) == reinterpret_cast (&modified)); - debug_assert (reinterpret_cast (&modified) + sizeof (modified) == reinterpret_cast (&block_count)); - debug_assert (reinterpret_cast (&block_count) + sizeof (block_count) == reinterpret_cast (&epoch_m)); + debug_assert (reinterpret_cast (this) == reinterpret_cast (&head)); + debug_assert (reinterpret_cast (&head) + sizeof (head) == reinterpret_cast (&representative)); + debug_assert (reinterpret_cast (&representative) + sizeof (representative) == reinterpret_cast (&open_block)); + debug_assert (reinterpret_cast (&open_block) + sizeof (open_block) == reinterpret_cast (&balance)); + debug_assert (reinterpret_cast (&balance) + sizeof (balance) == reinterpret_cast (&modified)); + debug_assert (reinterpret_cast (&modified) + sizeof (modified) == reinterpret_cast (&block_count)); + debug_assert (reinterpret_cast (&block_count) + sizeof (block_count) == reinterpret_cast (&epoch_m)); return sizeof (head) + sizeof (representative) + sizeof (open_block) + sizeof (balance) + sizeof (modified) + sizeof (block_count) + sizeof (epoch_m); } @@ -392,12 +392,12 @@ bool nano::unchecked_info::deserialize (nano::stream & stream_a) return error; } -nano::endpoint_key::endpoint_key (const std::array & address_a, uint16_t port_a) : +nano::endpoint_key::endpoint_key (std::array const & address_a, uint16_t port_a) : address (address_a), network_port (boost::endian::native_to_big (port_a)) { } -const std::array & nano::endpoint_key::address_bytes () const +std::array const & nano::endpoint_key::address_bytes () const { return address; } @@ -594,7 +594,7 @@ std::string nano::vote::hashes_string () const return result; } -const std::string nano::vote::hash_prefix = "vote "; +std::string const nano::vote::hash_prefix = "vote "; nano::block_hash nano::vote::hash () const { diff --git a/nano/secure/common.hpp b/nano/secure/common.hpp index d42d5d0f49..8461e32c34 100644 --- a/nano/secure/common.hpp +++ b/nano/secure/common.hpp @@ -72,9 +72,9 @@ struct hash<::nano::root> namespace nano { /** - * A key pair. The private key is generated from the random pool, or passed in - * as a hex string. The public key is derived using ed25519. - */ + * A key pair. The private key is generated from the random pool, or passed in + * as a hex string. The public key is derived using ed25519. + */ class keypair { public: @@ -86,8 +86,8 @@ class keypair }; /** - * Latest information about an account - */ + * Latest information about an account + */ class account_info final { public: @@ -109,8 +109,8 @@ class account_info final }; /** - * Information on an uncollected send - */ + * Information on an uncollected send + */ class pending_info final { public: @@ -141,19 +141,19 @@ class endpoint_key final endpoint_key () = default; /* - * @param address_a This should be in network byte order - * @param port_a This should be in host byte order - */ - endpoint_key (const std::array & address_a, uint16_t port_a); + * @param address_a This should be in network byte order + * @param port_a This should be in host byte order + */ + endpoint_key (std::array const & address_a, uint16_t port_a); /* - * @return The ipv6 address in network byte order - */ - const std::array & address_bytes () const; + * @return The ipv6 address in network byte order + */ + std::array const & address_bytes () const; /* - * @return The port in host byte order - */ + * @return The port in host byte order + */ uint16_t port () const; private: @@ -181,8 +181,8 @@ class unchecked_key final }; /** - * Tag for block signature verification result - */ + * Tag for block signature verification result + */ enum class signature_verification : uint8_t { unknown = 0, @@ -192,8 +192,8 @@ enum class signature_verification : uint8_t }; /** - * Information on an unchecked block - */ + * Information on an unchecked block + */ class unchecked_info final { public: @@ -272,15 +272,15 @@ class vote final nano::account account; // Signature of timestamp + block hashes nano::signature signature; - static const std::string hash_prefix; + static std::string const hash_prefix; }; /** - * This class serves to find and return unique variants of a vote in order to minimize memory usage - */ + * This class serves to find and return unique variants of a vote in order to minimize memory usage + */ class vote_uniquer final { public: - using value_type = std::pair>; + using value_type = std::pair>; vote_uniquer (nano::block_uniquer &); std::shared_ptr unique (std::shared_ptr const &); diff --git a/nano/secure/store/account_store_partial.hpp b/nano/secure/store/account_store_partial.hpp index 696fbe8b9c..727ba5d7f0 100644 --- a/nano/secure/store/account_store_partial.hpp +++ b/nano/secure/store/account_store_partial.hpp @@ -14,7 +14,7 @@ template class store_partial; template -void release_assert_success (store_partial const &, const int); +void release_assert_success (store_partial const &, int const); template class account_store_partial : public account_store @@ -22,7 +22,7 @@ class account_store_partial : public account_store private: nano::store_partial & store; - friend void release_assert_success (store_partial const &, const int); + friend void release_assert_success (store_partial const &, int const); public: explicit account_store_partial (nano::store_partial & store_a) : diff --git a/nano/secure/store/block_store_partial.hpp b/nano/secure/store/block_store_partial.hpp index e35ccb379a..a8461af5a0 100644 --- a/nano/secure/store/block_store_partial.hpp +++ b/nano/secure/store/block_store_partial.hpp @@ -17,7 +17,7 @@ template class block_predecessor_set; template -void release_assert_success (store_partial const &, const int); +void release_assert_success (store_partial const &, int const); template class block_store_partial : public block_store diff --git a/nano/secure/store/confirmation_height_store_partial.hpp b/nano/secure/store/confirmation_height_store_partial.hpp index 488d96d8c6..3eb4fd609f 100644 --- a/nano/secure/store/confirmation_height_store_partial.hpp +++ b/nano/secure/store/confirmation_height_store_partial.hpp @@ -14,7 +14,7 @@ template class store_partial; template -void release_assert_success (store_partial const &, const int); +void release_assert_success (store_partial const &, int const); template class confirmation_height_store_partial : public confirmation_height_store @@ -22,7 +22,7 @@ class confirmation_height_store_partial : public confirmation_height_store private: nano::store_partial & store; - friend void release_assert_success (store_partial const &, const int); + friend void release_assert_success (store_partial const &, int const); public: explicit confirmation_height_store_partial (nano::store_partial & store_a) : diff --git a/nano/secure/store/final_vote_store_partial.hpp b/nano/secure/store/final_vote_store_partial.hpp index ecef1ca656..b0f450c9e1 100644 --- a/nano/secure/store/final_vote_store_partial.hpp +++ b/nano/secure/store/final_vote_store_partial.hpp @@ -14,7 +14,7 @@ template class store_partial; template -void release_assert_success (store_partial const & store, const int status); +void release_assert_success (store_partial const & store, int const status); template class final_vote_store_partial : public final_vote_store @@ -22,7 +22,7 @@ class final_vote_store_partial : public final_vote_store private: nano::store_partial & store; - friend void release_assert_success (store_partial const &, const int); + friend void release_assert_success (store_partial const &, int const); public: explicit final_vote_store_partial (nano::store_partial & store_a) : diff --git a/nano/secure/store/frontier_store_partial.hpp b/nano/secure/store/frontier_store_partial.hpp index 66d05cbeae..78d44a3184 100644 --- a/nano/secure/store/frontier_store_partial.hpp +++ b/nano/secure/store/frontier_store_partial.hpp @@ -14,7 +14,7 @@ template class store_partial; template -void release_assert_success (store_partial const & store, const int status); +void release_assert_success (store_partial const & store, int const status); template class frontier_store_partial : public frontier_store @@ -22,7 +22,7 @@ class frontier_store_partial : public frontier_store private: nano::store_partial & store; - friend void release_assert_success (store_partial const &, const int); + friend void release_assert_success (store_partial const &, int const); public: explicit frontier_store_partial (nano::store_partial & store_a) : diff --git a/nano/secure/store/online_weight_partial.hpp b/nano/secure/store/online_weight_partial.hpp index e8c84e76d5..0e1bbefd95 100644 --- a/nano/secure/store/online_weight_partial.hpp +++ b/nano/secure/store/online_weight_partial.hpp @@ -8,7 +8,7 @@ template class store_partial; template -void release_assert_success (store_partial const &, const int); +void release_assert_success (store_partial const &, int const); template class online_weight_store_partial : public online_weight_store @@ -16,7 +16,7 @@ class online_weight_store_partial : public online_weight_store private: nano::store_partial & store; - friend void release_assert_success (store_partial const &, const int); + friend void release_assert_success (store_partial const &, int const); public: explicit online_weight_store_partial (nano::store_partial & store_a) : diff --git a/nano/secure/store/peer_store_partial.hpp b/nano/secure/store/peer_store_partial.hpp index ec0407977e..913e17a632 100644 --- a/nano/secure/store/peer_store_partial.hpp +++ b/nano/secure/store/peer_store_partial.hpp @@ -14,7 +14,7 @@ template class store_partial; template -void release_assert_success (store_partial const &, const int); +void release_assert_success (store_partial const &, int const); template class peer_store_partial : public peer_store @@ -22,7 +22,7 @@ class peer_store_partial : public peer_store private: nano::store_partial & store; - friend void release_assert_success (store_partial const &, const int); + friend void release_assert_success (store_partial const &, int const); public: explicit peer_store_partial (nano::store_partial & store_a) : diff --git a/nano/secure/store/pending_store_partial.hpp b/nano/secure/store/pending_store_partial.hpp index 85489dce32..25d6ba54fa 100644 --- a/nano/secure/store/pending_store_partial.hpp +++ b/nano/secure/store/pending_store_partial.hpp @@ -14,7 +14,7 @@ template class store_partial; template -void release_assert_success (store_partial const &, const int); +void release_assert_success (store_partial const &, int const); template class pending_store_partial : public pending_store @@ -22,7 +22,7 @@ class pending_store_partial : public pending_store private: nano::store_partial & store; - friend void release_assert_success (store_partial const &, const int); + friend void release_assert_success (store_partial const &, int const); public: explicit pending_store_partial (nano::store_partial & store_a) : diff --git a/nano/secure/store/pruned_store_partial.hpp b/nano/secure/store/pruned_store_partial.hpp index eedd017b29..93b9e1a0df 100644 --- a/nano/secure/store/pruned_store_partial.hpp +++ b/nano/secure/store/pruned_store_partial.hpp @@ -14,7 +14,7 @@ template class store_partial; template -void release_assert_success (store_partial const &, const int); +void release_assert_success (store_partial const &, int const); template class pruned_store_partial : public pruned_store @@ -22,7 +22,7 @@ class pruned_store_partial : public pruned_store private: nano::store_partial & store; - friend void release_assert_success (store_partial const &, const int); + friend void release_assert_success (store_partial const &, int const); public: explicit pruned_store_partial (nano::store_partial & store_a) : diff --git a/nano/secure/store/unchecked_store_partial.hpp b/nano/secure/store/unchecked_store_partial.hpp index d1f20bdfbd..845135172d 100644 --- a/nano/secure/store/unchecked_store_partial.hpp +++ b/nano/secure/store/unchecked_store_partial.hpp @@ -14,7 +14,7 @@ template class store_partial; template -void release_assert_success (store_partial const &, const int); +void release_assert_success (store_partial const &, int const); template class unchecked_store_partial : public unchecked_store @@ -22,7 +22,7 @@ class unchecked_store_partial : public unchecked_store private: nano::store_partial & store; - friend void release_assert_success (store_partial const &, const int); + friend void release_assert_success (store_partial const &, int const); public: unchecked_store_partial (nano::store_partial & store_a) : diff --git a/nano/secure/store/version_store_partial.hpp b/nano/secure/store/version_store_partial.hpp index a6f8384d48..9966c20da0 100644 --- a/nano/secure/store/version_store_partial.hpp +++ b/nano/secure/store/version_store_partial.hpp @@ -8,7 +8,7 @@ template class store_partial; template -void release_assert_success (store_partial const &, const int); +void release_assert_success (store_partial const &, int const); template class version_store_partial : public version_store diff --git a/nano/secure/store_partial.hpp b/nano/secure/store_partial.hpp index a22deecf87..31103cee92 100644 --- a/nano/secure/store_partial.hpp +++ b/nano/secure/store_partial.hpp @@ -35,7 +35,7 @@ template class block_predecessor_set; template -void release_assert_success (store_partial const & store, const int status) +void release_assert_success (store_partial const & store, int const status) { if (!store.success (status)) { @@ -56,7 +56,7 @@ class block_store_partial; template class store_partial : public store { - friend void release_assert_success (store_partial const &, const int); + friend void release_assert_success (store_partial const &, int const); friend class nano::block_store_partial; friend class nano::frontier_store_partial; friend class nano::account_store_partial; diff --git a/nano/secure/versioning.cpp b/nano/secure/versioning.cpp index 11d3a6b631..1ab31d5819 100644 --- a/nano/secure/versioning.cpp +++ b/nano/secure/versioning.cpp @@ -51,13 +51,13 @@ nano::account_info_v14::account_info_v14 (nano::block_hash const & head_a, nano: size_t nano::account_info_v14::db_size () const { - debug_assert (reinterpret_cast (this) == reinterpret_cast (&head)); - debug_assert (reinterpret_cast (&head) + sizeof (head) == reinterpret_cast (&rep_block)); - debug_assert (reinterpret_cast (&rep_block) + sizeof (rep_block) == reinterpret_cast (&open_block)); - debug_assert (reinterpret_cast (&open_block) + sizeof (open_block) == reinterpret_cast (&balance)); - debug_assert (reinterpret_cast (&balance) + sizeof (balance) == reinterpret_cast (&modified)); - debug_assert (reinterpret_cast (&modified) + sizeof (modified) == reinterpret_cast (&block_count)); - debug_assert (reinterpret_cast (&block_count) + sizeof (block_count) == reinterpret_cast (&confirmation_height)); + debug_assert (reinterpret_cast (this) == reinterpret_cast (&head)); + debug_assert (reinterpret_cast (&head) + sizeof (head) == reinterpret_cast (&rep_block)); + debug_assert (reinterpret_cast (&rep_block) + sizeof (rep_block) == reinterpret_cast (&open_block)); + debug_assert (reinterpret_cast (&open_block) + sizeof (open_block) == reinterpret_cast (&balance)); + debug_assert (reinterpret_cast (&balance) + sizeof (balance) == reinterpret_cast (&modified)); + debug_assert (reinterpret_cast (&modified) + sizeof (modified) == reinterpret_cast (&block_count)); + debug_assert (reinterpret_cast (&block_count) + sizeof (block_count) == reinterpret_cast (&confirmation_height)); return sizeof (head) + sizeof (rep_block) + sizeof (open_block) + sizeof (balance) + sizeof (modified) + sizeof (block_count) + sizeof (confirmation_height); } diff --git a/nano/slow_test/node.cpp b/nano/slow_test/node.cpp index 061eae1cdc..69396e17af 100644 --- a/nano/slow_test/node.cpp +++ b/nano/slow_test/node.cpp @@ -1240,7 +1240,7 @@ namespace transport nano::system system; nano::node_flags node_flags; node_flags.disable_initial_telemetry_requests = true; - const auto num_nodes = 4; + auto const num_nodes = 4; for (int i = 0; i < num_nodes; ++i) { system.add_node (node_flags); @@ -1249,7 +1249,7 @@ namespace transport wait_peer_connections (system); std::vector threads; - const auto num_threads = 4; + auto const num_threads = 4; std::array node_data{}; for (auto i = 0; i < num_nodes; ++i) @@ -1422,7 +1422,7 @@ TEST (telemetry, many_nodes) node_flags.disable_initial_telemetry_requests = true; node_flags.disable_request_loop = true; // The telemetry responses can timeout if using a large number of nodes under sanitizers, so lower the number. - const auto num_nodes = (is_sanitizer_build || nano::running_within_valgrind ()) ? 4 : 10; + auto const num_nodes = (is_sanitizer_build || nano::running_within_valgrind ()) ? 4 : 10; for (auto i = 0; i < num_nodes; ++i) { nano::node_config node_config (nano::get_available_port (), system.logging); diff --git a/nano/test_common/system.hpp b/nano/test_common/system.hpp index 6b69488954..93ca39f442 100644 --- a/nano/test_common/system.hpp +++ b/nano/test_common/system.hpp @@ -41,10 +41,10 @@ class system final * Polls, sleep if there's no work to be done (default 50ms), then check the deadline * @returns 0 or nano::deadline_expired */ - std::error_code poll (const std::chrono::nanoseconds & sleep_time = std::chrono::milliseconds (50)); + std::error_code poll (std::chrono::nanoseconds const & sleep_time = std::chrono::milliseconds (50)); std::error_code poll_until_true (std::chrono::nanoseconds deadline, std::function); void stop (); - void deadline_set (const std::chrono::duration & delta); + void deadline_set (std::chrono::duration const & delta); std::shared_ptr add_node (nano::node_flags = nano::node_flags (), nano::transport::transport_type = nano::transport::transport_type::tcp); std::shared_ptr add_node (nano::node_config const &, nano::node_flags = nano::node_flags (), nano::transport::transport_type = nano::transport::transport_type::tcp); boost::asio::io_context io_ctx; diff --git a/nano/test_common/testutil.hpp b/nano/test_common/testutil.hpp index 7210f3b4ae..1c9147dcb0 100644 --- a/nano/test_common/testutil.hpp +++ b/nano/test_common/testutil.hpp @@ -65,7 +65,7 @@ class stringstream_mt_sink : public boost::iostreams::sink ss << sink.ss.str (); } - std::streamsize write (const char * string_to_write, std::streamsize size) + std::streamsize write (char const * string_to_write, std::streamsize size) { nano::lock_guard guard (mutex); ss << std::string (string_to_write, size); From 504296788fade866643a0ccddcd302619a779b27 Mon Sep 17 00:00:00 2001 From: theohax <81556890+theohax@users.noreply.github.com> Date: Mon, 25 Oct 2021 18:23:57 +0300 Subject: [PATCH 238/346] Disable (intermittently) failing unit tests (#3512) * Disable (intermitently) failing unit tests * Adjust test.sh bash script not to retry failed unit tests * Add comments to intermittently failing (disabled) tests with PR and issue URLs * Disable intermittently failing unit test active_transactions.confirm_active * Fix formatting * Fix build * Disable intermittently failing unit test telemetry.remove_peer_different_genesis --- ci/test.sh | 31 ++++++++------------------ nano/core_test/active_transactions.cpp | 5 ++++- nano/core_test/bootstrap.cpp | 6 ++++- nano/core_test/node.cpp | 10 +++++++-- nano/core_test/telemetry.cpp | 5 ++++- nano/node/peer_exclusion.hpp | 2 +- nano/node/repcrawler.hpp | 2 +- nano/rpc_test/rpc.cpp | 5 ++++- 8 files changed, 36 insertions(+), 30 deletions(-) diff --git a/ci/test.sh b/ci/test.sh index 5d748db0b6..f7226dcefb 100755 --- a/ci/test.sh +++ b/ci/test.sh @@ -23,7 +23,8 @@ set -o nounset set -o xtrace # Alpine doesn't offer an xvfb -xvfb_run_() { +xvfb_run_() +{ INIT_DELAY_SEC=3 Xvfb :2 -screen 0 1024x768x24 & @@ -36,33 +37,18 @@ xvfb_run_() { return ${res} } -run_tests() { - local tries try - - # when busybox pretends to be bash it needs different args - # for the timeout builtin +run_tests() +{ + # when busybox pretends to be bash it needs different args for the timeout builtin + # if [[ "${BUSYBOX_BASH}" -eq 1 ]]; then TIMEOUT_TIME_ARG="-t" else TIMEOUT_TIME_ARG="" fi - tries=(_initial_) - - for try in "${tries[@]}"; do - if [ "${try}" != '_initial_' ]; then - echo "core_test failed: ${core_test_res}, retrying (try=${try})" - - # Wait a while for sockets to be all cleaned up by the kernel - sleep $((30 + (RANDOM % 30))) - fi - - ${TIMEOUT_CMD} ${TIMEOUT_TIME_ARG} ${TIMEOUT_DEFAULT} ./core_test - core_test_res=${?} - if [ "${core_test_res}" = '0' ]; then - break - fi - done + ${TIMEOUT_CMD} ${TIMEOUT_TIME_ARG} ${TIMEOUT_DEFAULT} ./core_test + core_test_res=${?} ${TIMEOUT_CMD} ${TIMEOUT_TIME_ARG} ${TIMEOUT_DEFAULT} ./rpc_test rpc_test_res=${?} @@ -77,6 +63,7 @@ run_tests() { echo "RPC Test return code: ${rpc_test_res}" echo "QT Test return code: ${qt_test_res}" echo "Sys Test return code: ${sys_test_res}" + if [[ ${core_test_res} != 0 || ${rpc_test_res} != 0 || ${qt_test_res} != 0 || ${sys_test_res} != 0 ]]; then return 1 else diff --git a/nano/core_test/active_transactions.cpp b/nano/core_test/active_transactions.cpp index 555cc9ab6e..fd0888d15b 100644 --- a/nano/core_test/active_transactions.cpp +++ b/nano/core_test/active_transactions.cpp @@ -11,7 +11,10 @@ using namespace std::chrono_literals; namespace nano { -TEST (active_transactions, confirm_active) +// Test disabled because it's failing intermittently. +// PR in which it got disabled: https://github.com/nanocurrency/nano-node/pull/3512 +// Issue for investigating it: https://github.com/nanocurrency/nano-node/issues/3522 +TEST (active_transactions, DISABLED_confirm_active) { nano::system system; nano::node_flags node_flags; diff --git a/nano/core_test/bootstrap.cpp b/nano/core_test/bootstrap.cpp index ea5ad1a4e6..8cc8a96a08 100644 --- a/nano/core_test/bootstrap.cpp +++ b/nano/core_test/bootstrap.cpp @@ -404,7 +404,11 @@ TEST (bootstrap_processor, push_diamond) node1->stop (); } -TEST (bootstrap_processor, push_diamond_pruning) +// Check that an outgoing bootstrap request can push blocks +// Test disabled because it's failing intermittently. +// PR in which it got disabled: https://github.com/nanocurrency/nano-node/pull/3512 +// Issue for investigating it: https://github.com/nanocurrency/nano-node/issues/3517 +TEST (bootstrap_processor, DISABLED_push_diamond_pruning) { nano::system system; nano::node_config config (nano::get_available_port (), system.logging); diff --git a/nano/core_test/node.cpp b/nano/core_test/node.cpp index 6a8597e8cc..f283a29e98 100644 --- a/nano/core_test/node.cpp +++ b/nano/core_test/node.cpp @@ -1682,7 +1682,10 @@ TEST (node, DISABLED_fork_stale) } } -TEST (node, broadcast_elected) +// Test disabled because it's failing intermittently. +// PR in which it got disabled: https://github.com/nanocurrency/nano-node/pull/3512 +// Issue for investigating it: https://github.com/nanocurrency/nano-node/issues/3516 +TEST (node, DISABLED_broadcast_elected) { std::vector types{ nano::transport::transport_type::tcp, nano::transport::transport_type::udp }; for (auto & type : types) @@ -1904,7 +1907,10 @@ TEST (node, DISABLED_bootstrap_no_publish) } // Check that an outgoing bootstrap request can push blocks -TEST (node, bootstrap_bulk_push) +// Test disabled because it's failing intermittently. +// PR in which it got disabled: https://github.com/nanocurrency/nano-node/pull/3512 +// Issue for investigating it: https://github.com/nanocurrency/nano-node/issues/3515 +TEST (node, DISABLED_bootstrap_bulk_push) { nano::system system0; nano::system system1; diff --git a/nano/core_test/telemetry.cpp b/nano/core_test/telemetry.cpp index ae8ebce2fd..1b93748f74 100644 --- a/nano/core_test/telemetry.cpp +++ b/nano/core_test/telemetry.cpp @@ -545,7 +545,10 @@ TEST (telemetry, max_possible_size) namespace nano { -TEST (telemetry, remove_peer_different_genesis) +// Test disabled because it's failing intermittently. +// PR in which it got disabled: https://github.com/nanocurrency/nano-node/pull/3512 +// Issue for investigating it: https://github.com/nanocurrency/nano-node/issues/3524 +TEST (telemetry, DISABLED_remove_peer_different_genesis) { nano::system system (1); auto node0 (system.nodes[0]); diff --git a/nano/node/peer_exclusion.hpp b/nano/node/peer_exclusion.hpp index d4d6f7c536..c809bb9841 100644 --- a/nano/node/peer_exclusion.hpp +++ b/nano/node/peer_exclusion.hpp @@ -52,7 +52,7 @@ class peer_exclusion final std::size_t limited_size (std::size_t const) const; std::size_t size () const; - friend class telemetry_remove_peer_different_genesis_Test; + friend class telemetry_DISABLED_remove_peer_different_genesis_Test; friend class telemetry_remove_peer_different_genesis_udp_Test; friend class telemetry_remove_peer_invalid_signature_Test; friend class peer_exclusion_validate_Test; diff --git a/nano/node/repcrawler.hpp b/nano/node/repcrawler.hpp index 8bc435d231..7acd771b9f 100644 --- a/nano/node/repcrawler.hpp +++ b/nano/node/repcrawler.hpp @@ -150,7 +150,7 @@ class rep_crawler final /** Probable representatives */ probably_rep_t probable_reps; - friend class active_transactions_confirm_active_Test; + friend class active_transactions_DISABLED_confirm_active_Test; friend class active_transactions_confirm_frontier_Test; friend class rep_crawler_local_Test; friend class node_online_reps_rep_crawler_Test; diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index 823eeda355..3b02a74e74 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -5162,7 +5162,10 @@ TEST (rpc, uptime) ASSERT_LE (1, response.get ("seconds")); } -TEST (rpc, wallet_history) +// Test disabled because it's failing intermittently. +// PR in which it got disabled: https://github.com/nanocurrency/nano-node/pull/3512 +// Issue for investigating it: https://github.com/nanocurrency/nano-node/issues/3514 +TEST (rpc, DISABLED_wallet_history) { nano::system system; nano::node_config node_config (nano::get_available_port (), system.logging); From 6587a0a561127e333cd33756601b05246c11046b Mon Sep 17 00:00:00 2001 From: Dimitrios Siganos Date: Tue, 26 Oct 2021 13:43:32 +0100 Subject: [PATCH 239/346] Added config option for rep crawler logging --- nano/core_test/toml.cpp | 3 +++ nano/node/logging.cpp | 9 +++++++++ nano/node/logging.hpp | 2 ++ 3 files changed, 14 insertions(+) diff --git a/nano/core_test/toml.cpp b/nano/core_test/toml.cpp index e3901a0d4e..9499d30bde 100644 --- a/nano/core_test/toml.cpp +++ b/nano/core_test/toml.cpp @@ -213,6 +213,7 @@ TEST (toml, daemon_config_deserialize_defaults) ASSERT_EQ (conf.node.logging.active_update_value, defaults.node.logging.active_update_value); ASSERT_EQ (conf.node.logging.upnp_details_logging_value, defaults.node.logging.upnp_details_logging_value); ASSERT_EQ (conf.node.logging.vote_logging_value, defaults.node.logging.vote_logging_value); + ASSERT_EQ (conf.node.logging.rep_crawler_logging_value, defaults.node.logging.rep_crawler_logging_value); ASSERT_EQ (conf.node.logging.work_generation_time_value, defaults.node.logging.work_generation_time_value); ASSERT_EQ (conf.node.websocket_config.enabled, defaults.node.websocket_config.enabled); @@ -479,6 +480,7 @@ TEST (toml, daemon_config_deserialize_no_defaults) active_update = true upnp_details = true vote = true + rep_crawler = true work_generation_time = false [node.statistics.log] @@ -616,6 +618,7 @@ TEST (toml, daemon_config_deserialize_no_defaults) ASSERT_NE (conf.node.logging.active_update_value, defaults.node.logging.active_update_value); ASSERT_NE (conf.node.logging.upnp_details_logging_value, defaults.node.logging.upnp_details_logging_value); ASSERT_NE (conf.node.logging.vote_logging_value, defaults.node.logging.vote_logging_value); + ASSERT_NE (conf.node.logging.rep_crawler_logging_value, defaults.node.logging.rep_crawler_logging_value); ASSERT_NE (conf.node.logging.work_generation_time_value, defaults.node.logging.work_generation_time_value); ASSERT_NE (conf.node.websocket_config.enabled, defaults.node.websocket_config.enabled); diff --git a/nano/node/logging.cpp b/nano/node/logging.cpp index 2b7d007fa4..fddb14dd18 100644 --- a/nano/node/logging.cpp +++ b/nano/node/logging.cpp @@ -146,6 +146,7 @@ nano::error nano::logging::serialize_toml (nano::tomlconfig & toml) const toml.put ("ledger_duplicate", ledger_duplicate_logging_value, "Log when a duplicate block is attempted inserted into the ledger.\ntype:bool"); toml.put ("ledger_rollback", election_fork_tally_logging_value, "Log when a block is replaced in the ledger.\ntype:bool"); toml.put ("vote", vote_logging_value, "Vote logging. Enabling this option leads to a high volume.\nof log messages which may affect node performance.\ntype:bool"); + toml.put ("rep_crawler", rep_crawler_logging_value, "Rep crawler logging. Enabling this option leads to a high volume.\nof log messages which may affect node performance.\ntype:bool"); toml.put ("election_expiration", election_expiration_tally_logging_value, "Log election tally on expiration.\ntype:bool"); toml.put ("election_fork", election_fork_tally_logging_value, "Log election tally when more than one block is seen.\ntype:bool"); toml.put ("network", network_logging_value, "Log network related messages.\ntype:bool"); @@ -182,6 +183,7 @@ nano::error nano::logging::deserialize_toml (nano::tomlconfig & toml) toml.get ("ledger_duplicate", ledger_duplicate_logging_value); toml.get ("ledger_rollback", ledger_rollback_logging_value); toml.get ("vote", vote_logging_value); + toml.get ("rep_crawler", rep_crawler_logging_value); toml.get ("election_expiration", election_expiration_tally_logging_value); toml.get ("election_fork", election_fork_tally_logging_value); toml.get ("network", network_logging_value); @@ -220,6 +222,7 @@ nano::error nano::logging::serialize_json (nano::jsonconfig & json) const json.put ("ledger", ledger_logging_value); json.put ("ledger_duplicate", ledger_duplicate_logging_value); json.put ("vote", vote_logging_value); + json.put ("rep_crawler", rep_crawler_logging_value); json.put ("network", network_logging_value); json.put ("network_timeout", network_timeout_logging_value); json.put ("network_message", network_message_logging_value); @@ -276,6 +279,7 @@ nano::error nano::logging::deserialize_json (bool & upgraded_a, nano::jsonconfig json.get ("ledger", ledger_logging_value); json.get ("ledger_duplicate", ledger_duplicate_logging_value); json.get ("vote", vote_logging_value); + json.get ("rep_crawler", rep_crawler_logging_value); json.get ("network", network_logging_value); json.get ("network_timeout", network_timeout_logging_value); json.get ("network_message", network_message_logging_value); @@ -321,6 +325,11 @@ bool nano::logging::vote_logging () const return vote_logging_value; } +bool nano::logging::rep_crawler_logging () const +{ + return rep_crawler_logging_value; +} + bool nano::logging::election_expiration_tally_logging () const { return election_expiration_tally_logging_value; diff --git a/nano/node/logging.hpp b/nano/node/logging.hpp index a347fb52d4..1692195ad9 100644 --- a/nano/node/logging.hpp +++ b/nano/node/logging.hpp @@ -46,6 +46,7 @@ class logging final bool ledger_duplicate_logging () const; bool ledger_rollback_logging () const; bool vote_logging () const; + bool rep_crawler_logging () const; bool election_fork_tally_logging () const; bool election_expiration_tally_logging () const; bool network_logging () const; @@ -74,6 +75,7 @@ class logging final bool ledger_duplicate_logging_value{ false }; bool ledger_rollback_logging_value{ false }; bool vote_logging_value{ false }; + bool rep_crawler_logging_value{ false }; bool election_fork_tally_logging_value{ false }; bool election_expiration_tally_logging_value{ false }; bool network_logging_value{ true }; From 782ea18f797bbb41b71206353ebcd35d5a4c800a Mon Sep 17 00:00:00 2001 From: theohax <81556890+theohax@users.noreply.github.com> Date: Tue, 26 Oct 2021 16:41:51 +0300 Subject: [PATCH 240/346] Disable intermittently failing unit tests (#3526) --- nano/core_test/election.cpp | 5 ++++- nano/core_test/node.cpp | 5 ++++- nano/node/online_reps.hpp | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/nano/core_test/election.cpp b/nano/core_test/election.cpp index 397c61cda4..e7ca92a5a2 100644 --- a/nano/core_test/election.cpp +++ b/nano/core_test/election.cpp @@ -176,7 +176,10 @@ TEST (election, quorum_minimum_confirm_fail) namespace nano { -TEST (election, quorum_minimum_update_weight_before_quorum_checks) +// Test disabled because it's failing intermittently. +// PR in which it got disabled: https://github.com/nanocurrency/nano-node/pull/3526 +// Issue for investigating it: https://github.com/nanocurrency/nano-node/issues/3528 +TEST (election, DISABLED_quorum_minimum_update_weight_before_quorum_checks) { nano::system system; nano::node_config node_config (nano::get_available_port (), system.logging); diff --git a/nano/core_test/node.cpp b/nano/core_test/node.cpp index f283a29e98..c035aa674e 100644 --- a/nano/core_test/node.cpp +++ b/nano/core_test/node.cpp @@ -3159,7 +3159,10 @@ TEST (node, epoch_conflict_confirm) } } -TEST (node, fork_invalid_block_signature) +// Test disabled because it's failing intermittently. +// PR in which it got disabled: https://github.com/nanocurrency/nano-node/pull/3526 +// Issue for investigating it: https://github.com/nanocurrency/nano-node/issues/3527 +TEST (node, DISABLED_fork_invalid_block_signature) { nano::system system; nano::node_flags node_flags; diff --git a/nano/node/online_reps.hpp b/nano/node/online_reps.hpp index 9e327ef3de..92eced3c95 100644 --- a/nano/node/online_reps.hpp +++ b/nano/node/online_reps.hpp @@ -68,7 +68,7 @@ class online_reps final nano::uint128_t online_m; nano::uint128_t minimum; - friend class election_quorum_minimum_update_weight_before_quorum_checks_Test; + friend class election_DISABLED_quorum_minimum_update_weight_before_quorum_checks_Test; friend std::unique_ptr collect_container_info (online_reps & online_reps, std::string const & name); }; From 98404e4e7d8e77137da026d188025dd76ac5c376 Mon Sep 17 00:00:00 2001 From: theohax <81556890+theohax@users.noreply.github.com> Date: Tue, 26 Oct 2021 18:33:27 +0300 Subject: [PATCH 241/346] Include for std::signal usage (#3525) --- nano/nano_node/daemon.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/nano/nano_node/daemon.cpp b/nano/nano_node/daemon.cpp index 3a21161497..51570d55aa 100644 --- a/nano/nano_node/daemon.cpp +++ b/nano/nano_node/daemon.cpp @@ -13,6 +13,7 @@ #include +#include #include namespace From ced4eef0aca91da3190920b17b8c0aee7f568bb8 Mon Sep 17 00:00:00 2001 From: Dimitrios Siganos Date: Wed, 27 Oct 2021 02:54:46 +0100 Subject: [PATCH 242/346] rep_crawler: remove a couple of levels of nested ifs Use if guards to remove a couple of levels of nested ifs that was making the code difficult to read. --- nano/node/repcrawler.cpp | 71 ++++++++++++++++++++++++---------------- 1 file changed, 43 insertions(+), 28 deletions(-) diff --git a/nano/node/repcrawler.cpp b/nano/node/repcrawler.cpp index f60251297b..4fd3247d3f 100644 --- a/nano/node/repcrawler.cpp +++ b/nano/node/repcrawler.cpp @@ -32,46 +32,61 @@ void nano::rep_crawler::validate () nano::lock_guard lock (active_mutex); responses_l.swap (responses); } + auto minimum = node.minimum_principal_weight (); + for (auto const & i : responses_l) { auto & vote = i.second; auto & channel = i.first; debug_assert (channel != nullptr); - if (channel->get_type () != nano::transport::transport_type::loopback) + + if (channel->get_type () == nano::transport::transport_type::loopback) { - nano::uint128_t rep_weight = node.ledger.weight (vote->account); - if (rep_weight > minimum) + if (node.config.logging.rep_crawler_logging ()) { - auto updated_or_inserted = false; - nano::unique_lock lock (probable_reps_mutex); - auto existing (probable_reps.find (vote->account)); - if (existing != probable_reps.end ()) - { - probable_reps.modify (existing, [rep_weight, &updated_or_inserted, &vote, &channel] (nano::representative & info) { - info.last_response = std::chrono::steady_clock::now (); + node.logger.try_log (boost::str (boost::format ("rep_crawler ignoring vote from loopback channel %1%") % channel->to_string ())); + } + continue; + } - // Update if representative channel was changed - if (info.channel->get_endpoint () != channel->get_endpoint ()) - { - debug_assert (info.account == vote->account); - updated_or_inserted = true; - info.weight = rep_weight; - info.channel = channel; - } - }); - } - else + nano::uint128_t rep_weight = node.ledger.weight (vote->account); + if (rep_weight <= minimum) + { + if (node.config.logging.rep_crawler_logging ()) + { + node.logger.try_log (boost::str (boost::format ("rep_crawler ignoring vote from account %1% with too little voting weight %2%") % vote->account.to_account () % rep_weight)); + } + continue; + } + + auto updated_or_inserted = false; + nano::unique_lock lock (probable_reps_mutex); + auto existing (probable_reps.find (vote->account)); + if (existing != probable_reps.end ()) + { + probable_reps.modify (existing, [rep_weight, &updated_or_inserted, &vote, &channel] (nano::representative & info) { + info.last_response = std::chrono::steady_clock::now (); + + // Update if representative channel was changed + if (info.channel->get_endpoint () != channel->get_endpoint ()) { - probable_reps.emplace (nano::representative (vote->account, rep_weight, channel)); + debug_assert (info.account == vote->account); updated_or_inserted = true; + info.weight = rep_weight; + info.channel = channel; } - lock.unlock (); - if (updated_or_inserted) - { - node.logger.try_log (boost::str (boost::format ("Found a representative at %1%") % channel->to_string ())); - } - } + }); + } + else + { + probable_reps.emplace (nano::representative (vote->account, rep_weight, channel)); + updated_or_inserted = true; + } + lock.unlock (); + if (updated_or_inserted) + { + node.logger.try_log (boost::str (boost::format ("Found a representative at %1%") % channel->to_string ())); } } } From 1e241983d4f4e1005f2b03f5591656f4b06ffcec Mon Sep 17 00:00:00 2001 From: Dimitrios Siganos Date: Wed, 27 Oct 2021 03:14:43 +0100 Subject: [PATCH 243/346] Print better and different logs when adding or updating rep_crawler entries It would be nice to know if an entry is new or if an entry is changing existing data. Also print the account address of the rep involved. If modifying data, print the previous data too. --- nano/node/repcrawler.cpp | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/nano/node/repcrawler.cpp b/nano/node/repcrawler.cpp index 4fd3247d3f..1003f2e952 100644 --- a/nano/node/repcrawler.cpp +++ b/nano/node/repcrawler.cpp @@ -60,20 +60,26 @@ void nano::rep_crawler::validate () continue; } - auto updated_or_inserted = false; + // temporary data used for logging after dropping the lock + auto inserted = false; + auto updated = false; + std::shared_ptr prev_channel; + nano::unique_lock lock (probable_reps_mutex); + auto existing (probable_reps.find (vote->account)); if (existing != probable_reps.end ()) { - probable_reps.modify (existing, [rep_weight, &updated_or_inserted, &vote, &channel] (nano::representative & info) { + probable_reps.modify (existing, [rep_weight, &updated, &vote, &channel, &prev_channel] (nano::representative & info) { info.last_response = std::chrono::steady_clock::now (); // Update if representative channel was changed if (info.channel->get_endpoint () != channel->get_endpoint ()) { debug_assert (info.account == vote->account); - updated_or_inserted = true; + updated = true; info.weight = rep_weight; + prev_channel = info.channel; info.channel = channel; } }); @@ -81,12 +87,19 @@ void nano::rep_crawler::validate () else { probable_reps.emplace (nano::representative (vote->account, rep_weight, channel)); - updated_or_inserted = true; + inserted = true; } + lock.unlock (); - if (updated_or_inserted) + + if (inserted) + { + node.logger.try_log (boost::str (boost::format ("Found representative %1% at %2%") % vote->account.to_account () % channel->to_string ())); + } + + if (updated) { - node.logger.try_log (boost::str (boost::format ("Found a representative at %1%") % channel->to_string ())); + node.logger.try_log (boost::str (boost::format ("Updated representative %1% at %2% (was at: %3%)") % vote->account.to_account () % channel->to_string () % prev_channel->to_string ())); } } } From d3ad6a05ba37ee6d292d75b222484c536cc06339 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Wed, 27 Oct 2021 13:18:22 +0100 Subject: [PATCH 244/346] Redesigning vote_processor::flush test to not directly modify timestamp field. The only functional change is that each vote is now its own object rather than modifying an existing one. --- nano/core_test/vote_processor.cpp | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/nano/core_test/vote_processor.cpp b/nano/core_test/vote_processor.cpp index b81d53e5f9..3f515589cb 100644 --- a/nano/core_test/vote_processor.cpp +++ b/nano/core_test/vote_processor.cpp @@ -52,13 +52,11 @@ TEST (vote_processor, flush) { nano::system system (1); auto & node (*system.nodes[0]); - auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 1, std::vector{ nano::dev::genesis->hash () })); auto channel (std::make_shared (node)); for (unsigned i = 0; i < 2000; ++i) { - auto new_vote (std::make_shared (*vote)); - node.vote_processor.vote (new_vote, channel); - ++vote->timestamp; // invalidates votes without signing again + auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 1 + i, std::vector{ nano::dev::genesis->hash () }); + node.vote_processor.vote (vote, channel); } node.vote_processor.flush (); ASSERT_TRUE (node.vote_processor.empty ()); From fb8e912dfc07cb20392a1e7357c8d62d5e04a2a8 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Wed, 27 Oct 2021 14:11:22 +0100 Subject: [PATCH 245/346] Removing timestamp changing and re-signing as this is re-testing something that's already tested above, signature correctness with respect to vote contents. --- nano/core_test/vote_processor.cpp | 6 ------ 1 file changed, 6 deletions(-) diff --git a/nano/core_test/vote_processor.cpp b/nano/core_test/vote_processor.cpp index 3f515589cb..4767199fa5 100644 --- a/nano/core_test/vote_processor.cpp +++ b/nano/core_test/vote_processor.cpp @@ -37,12 +37,6 @@ TEST (vote_processor, codes) // Invalid takes precedence ASSERT_EQ (nano::vote_code::invalid, node.vote_processor.vote_blocking (vote_invalid, channel)); - // A higher timestamp is not a replay - ++vote->timestamp; - ASSERT_EQ (nano::vote_code::invalid, node.vote_processor.vote_blocking (vote, channel)); - vote->signature = nano::sign_message (key.prv, key.pub, vote->hash ()); - ASSERT_EQ (nano::vote_code::vote, node.vote_processor.vote_blocking (vote, channel)); - // Once the election is removed (confirmed / dropped) the vote is again indeterminate node.active.erase (*nano::dev::genesis); ASSERT_EQ (nano::vote_code::indeterminate, node.vote_processor.vote_blocking (vote, channel)); From f58fbe42a114b58e9e27eb0e4b1d89b25ec5fb5c Mon Sep 17 00:00:00 2001 From: clemahieu Date: Wed, 27 Oct 2021 15:49:48 +0100 Subject: [PATCH 246/346] Encapsulating vote::timestamp field as vote::timestamp_m behind vote::timestamp (). --- nano/core_test/vote_processor.cpp | 6 +++--- nano/node/active_transactions.cpp | 6 +++--- nano/node/network.cpp | 2 +- nano/node/vote_processor.cpp | 2 +- nano/node/voting.cpp | 6 +++--- nano/secure/common.cpp | 29 +++++++++++++++++------------ nano/secure/common.hpp | 5 ++++- 7 files changed, 32 insertions(+), 24 deletions(-) diff --git a/nano/core_test/vote_processor.cpp b/nano/core_test/vote_processor.cpp index 4767199fa5..3efdefab95 100644 --- a/nano/core_test/vote_processor.cpp +++ b/nano/core_test/vote_processor.cpp @@ -203,7 +203,7 @@ TEST (vote_processor, no_broadcast_local) auto votes (election->votes ()); auto existing (votes.find (nano::dev::genesis_key.pub)); ASSERT_NE (votes.end (), existing); - ASSERT_EQ (vote->timestamp, existing->second.timestamp); + ASSERT_EQ (vote->timestamp (), existing->second.timestamp); // Ensure the vote, from a local representative, was not broadcast on processing - it should be flooded on generation instead ASSERT_EQ (0, node.stats.count (nano::stat::type::message, nano::stat::detail::confirm_ack, nano::stat::dir::out)); ASSERT_EQ (1, node.stats.count (nano::stat::type::message, nano::stat::detail::publish, nano::stat::dir::out)); @@ -236,7 +236,7 @@ TEST (vote_processor, no_broadcast_local) auto votes2 (election2->votes ()); auto existing2 (votes2.find (nano::dev::genesis_key.pub)); ASSERT_NE (votes2.end (), existing2); - ASSERT_EQ (vote2->timestamp, existing2->second.timestamp); + ASSERT_EQ (vote2->timestamp (), existing2->second.timestamp); // Ensure the vote was broadcast ASSERT_EQ (1, node.stats.count (nano::stat::type::message, nano::stat::detail::confirm_ack, nano::stat::dir::out)); ASSERT_EQ (2, node.stats.count (nano::stat::type::message, nano::stat::detail::publish, nano::stat::dir::out)); @@ -270,7 +270,7 @@ TEST (vote_processor, no_broadcast_local) auto votes3 (election3->votes ()); auto existing3 (votes3.find (nano::dev::genesis_key.pub)); ASSERT_NE (votes3.end (), existing3); - ASSERT_EQ (vote3->timestamp, existing3->second.timestamp); + ASSERT_EQ (vote3->timestamp (), existing3->second.timestamp); // Ensure the vote wass not broadcasst ASSERT_EQ (1, node.stats.count (nano::stat::type::message, nano::stat::detail::confirm_ack, nano::stat::dir::out)); ASSERT_EQ (3, node.stats.count (nano::stat::type::message, nano::stat::detail::publish, nano::stat::dir::out)); diff --git a/nano/node/active_transactions.cpp b/nano/node/active_transactions.cpp index c4481a4799..8c05ad9388 100644 --- a/nano/node/active_transactions.cpp +++ b/nano/node/active_transactions.cpp @@ -875,7 +875,7 @@ nano::vote_code nano::active_transactions::vote (std::shared_ptr con } else if (recently_confirmed_by_hash.count (block_hash) == 0) { - add_inactive_votes_cache (lock, block_hash, vote_a->account, vote_a->timestamp); + add_inactive_votes_cache (lock, block_hash, vote_a->account, vote_a->timestamp ()); } else { @@ -892,7 +892,7 @@ nano::vote_code nano::active_transactions::vote (std::shared_ptr con } else if (recently_confirmed_by_hash.count (block->hash ()) == 0) { - add_inactive_votes_cache (lock, block->hash (), vote_a->account, vote_a->timestamp); + add_inactive_votes_cache (lock, block->hash (), vote_a->account, vote_a->timestamp ()); } else { @@ -908,7 +908,7 @@ nano::vote_code nano::active_transactions::vote (std::shared_ptr con bool processed (false); for (auto const & [election, block_hash] : process) { - auto const result_l = election->vote (vote_a->account, vote_a->timestamp, block_hash); + auto const result_l = election->vote (vote_a->account, vote_a->timestamp (), block_hash); processed = processed || result_l.processed; replay = replay || result_l.replay; } diff --git a/nano/node/network.cpp b/nano/node/network.cpp index aabca2a288..0b2ed57909 100644 --- a/nano/node/network.cpp +++ b/nano/node/network.cpp @@ -474,7 +474,7 @@ class network_message_visitor : public nano::message_visitor { if (node.config.logging.network_message_logging ()) { - node.logger.try_log (boost::str (boost::format ("Received confirm_ack message from %1% for %2% timestamp %3%") % channel->to_string () % message_a.vote->hashes_string () % std::to_string (message_a.vote->timestamp))); + node.logger.try_log (boost::str (boost::format ("Received confirm_ack message from %1% for %2% timestamp %3%") % channel->to_string () % message_a.vote->hashes_string () % std::to_string (message_a.vote->timestamp ()))); } node.stats.inc (nano::stat::type::message, nano::stat::detail::confirm_ack, nano::stat::dir::in); if (!message_a.vote->account.is_zero ()) diff --git a/nano/node/vote_processor.cpp b/nano/node/vote_processor.cpp index ac540b654f..71efa25965 100644 --- a/nano/node/vote_processor.cpp +++ b/nano/node/vote_processor.cpp @@ -198,7 +198,7 @@ nano::vote_code nano::vote_processor::vote_blocking (std::shared_ptr } if (config.logging.vote_logging ()) { - logger.try_log (boost::str (boost::format ("Vote from: %1% timestamp: %2% block(s): %3%status: %4%") % vote_a->account.to_account () % std::to_string (vote_a->timestamp) % vote_a->hashes_string () % status)); + logger.try_log (boost::str (boost::format ("Vote from: %1% timestamp: %2% block(s): %3%status: %4%") % vote_a->account.to_account () % std::to_string (vote_a->timestamp ()) % vote_a->hashes_string () % status)); } return result; } diff --git a/nano/node/voting.cpp b/nano/node/voting.cpp index eed58a186c..a1a4956f8e 100644 --- a/nano/node/voting.cpp +++ b/nano/node/voting.cpp @@ -75,11 +75,11 @@ void nano::local_vote_history::add (nano::root const & root_a, nano::block_hash auto range (history_by_root.equal_range (root_a)); for (auto i (range.first); i != range.second;) { - if (i->hash != hash_a || (vote_a->account == i->vote->account && i->vote->timestamp <= vote_a->timestamp)) + if (i->hash != hash_a || (vote_a->account == i->vote->account && i->vote->timestamp () <= vote_a->timestamp ())) { i = history_by_root.erase (i); } - else if (vote_a->account == i->vote->account && i->vote->timestamp > vote_a->timestamp) + else if (vote_a->account == i->vote->account && i->vote->timestamp () > vote_a->timestamp ()) { add_vote = false; ++i; @@ -123,7 +123,7 @@ std::vector> nano::local_vote_history::votes (nano:: auto range (history.get ().equal_range (root_a)); // clang-format off nano::transform_if (range.first, range.second, std::back_inserter (result), - [&hash_a, is_final_a](auto const & entry) { return entry.hash == hash_a && (!is_final_a || entry.vote->timestamp == std::numeric_limits::max ()); }, + [&hash_a, is_final_a](auto const & entry) { return entry.hash == hash_a && (!is_final_a || entry.vote->timestamp () == std::numeric_limits::max ()); }, [](auto const & entry) { return entry.vote; }); // clang-format on return result; diff --git a/nano/secure/common.cpp b/nano/secure/common.cpp index 4c3764e8f3..613ef5178f 100644 --- a/nano/secure/common.cpp +++ b/nano/secure/common.cpp @@ -473,7 +473,7 @@ bool nano::vote::operator== (nano::vote const & other_a) const } } } - return timestamp == other_a.timestamp && blocks_equal && account == other_a.account && signature == other_a.signature; + return timestamp_m == other_a.timestamp_m && blocks_equal && account == other_a.account && signature == other_a.signature; } bool nano::vote::operator!= (nano::vote const & other_a) const @@ -485,8 +485,8 @@ void nano::vote::serialize_json (boost::property_tree::ptree & tree) const { tree.put ("account", account.to_account ()); tree.put ("signature", signature.number ()); - tree.put ("sequence", std::to_string (timestamp)); - tree.put ("timestamp", std::to_string (timestamp)); + tree.put ("sequence", std::to_string (timestamp ())); + tree.put ("timestamp", std::to_string (timestamp ())); boost::property_tree::ptree blocks_tree; for (auto block : blocks) { @@ -513,8 +513,13 @@ std::string nano::vote::to_json () const return stream.str (); } +uint64_t nano::vote::timestamp () const +{ + return timestamp_m; +} + nano::vote::vote (nano::vote const & other_a) : - timestamp{ other_a.timestamp }, + timestamp_m{ other_a.timestamp_m }, blocks (other_a.blocks), account (other_a.account), signature (other_a.signature) @@ -532,7 +537,7 @@ nano::vote::vote (bool & error_a, nano::stream & stream_a, nano::block_type type { nano::read (stream_a, account.bytes); nano::read (stream_a, signature.bytes); - nano::read (stream_a, timestamp); + nano::read (stream_a, timestamp_m); while (stream_a.in_avail () > 0) { @@ -565,7 +570,7 @@ nano::vote::vote (bool & error_a, nano::stream & stream_a, nano::block_type type } nano::vote::vote (nano::account const & account_a, nano::raw_key const & prv_a, uint64_t timestamp_a, std::shared_ptr const & block_a) : - timestamp{ timestamp_a }, + timestamp_m{ timestamp_a }, blocks (1, block_a), account (account_a), signature (nano::sign_message (prv_a, account_a, hash ())) @@ -573,7 +578,7 @@ nano::vote::vote (nano::account const & account_a, nano::raw_key const & prv_a, } nano::vote::vote (nano::account const & account_a, nano::raw_key const & prv_a, uint64_t timestamp_a, std::vector const & blocks_a) : - timestamp{ timestamp_a }, + timestamp_m{ timestamp_a }, account (account_a) { debug_assert (!blocks_a.empty ()); @@ -614,7 +619,7 @@ nano::block_hash nano::vote::hash () const uint64_t qword; std::array bytes; }; - qword = timestamp; + qword = timestamp_m; blake2b_update (&hash, bytes.data (), sizeof (bytes)); blake2b_final (&hash, result.bytes.data (), sizeof (result.bytes)); return result; @@ -636,7 +641,7 @@ void nano::vote::serialize (nano::stream & stream_a, nano::block_type type) cons { write (stream_a, account); write (stream_a, signature); - write (stream_a, boost::endian::native_to_little (timestamp)); + write (stream_a, boost::endian::native_to_little (timestamp_m)); for (auto const & block : blocks) { if (block.which ()) @@ -662,7 +667,7 @@ void nano::vote::serialize (nano::stream & stream_a) const { write (stream_a, account); write (stream_a, signature); - write (stream_a, boost::endian::native_to_little (timestamp)); + write (stream_a, boost::endian::native_to_little (timestamp_m)); for (auto const & block : blocks) { if (block.which ()) @@ -684,8 +689,8 @@ bool nano::vote::deserialize (nano::stream & stream_a, nano::block_uniquer * uni { nano::read (stream_a, account); nano::read (stream_a, signature); - nano::read (stream_a, timestamp); - boost::endian::little_to_native_inplace (timestamp); + nano::read (stream_a, timestamp_m); + boost::endian::little_to_native_inplace (timestamp_m); nano::block_type type; diff --git a/nano/secure/common.hpp b/nano/secure/common.hpp index 8461e32c34..92a93f3c94 100644 --- a/nano/secure/common.hpp +++ b/nano/secure/common.hpp @@ -264,8 +264,11 @@ class vote final boost::transform_iterator begin () const; boost::transform_iterator end () const; std::string to_json () const; + uint64_t timestamp () const; +private: // Vote timestamp - uint64_t timestamp; + uint64_t timestamp_m; +public: // The blocks, or block hashes, that this vote is for std::vector, nano::block_hash>> blocks; // Account that's voting From 9f2f1b0cf8ff0723b86a7e12afe17431d81bcd6e Mon Sep 17 00:00:00 2001 From: clemahieu Date: Wed, 27 Oct 2021 23:52:52 +0100 Subject: [PATCH 247/346] Add nano::vote::timestamp_min and nano::vote::timestamp_max variables and use these constants in tests. --- nano/core_test/active_transactions.cpp | 22 +++++++++--------- nano/core_test/conflicts.cpp | 2 +- nano/core_test/election.cpp | 12 +++++----- nano/core_test/ledger.cpp | 32 +++++++++++++------------- nano/core_test/node.cpp | 10 ++++---- nano/core_test/vote_processor.cpp | 16 ++++++------- nano/node/vote_processor.cpp | 2 +- nano/node/voting.cpp | 2 +- nano/secure/common.hpp | 6 +++-- 9 files changed, 53 insertions(+), 51 deletions(-) diff --git a/nano/core_test/active_transactions.cpp b/nano/core_test/active_transactions.cpp index fd0888d15b..f7be081522 100644 --- a/nano/core_test/active_transactions.cpp +++ b/nano/core_test/active_transactions.cpp @@ -197,7 +197,7 @@ TEST (active_transactions, inactive_votes_cache) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (latest)) .build_shared (); - auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), std::vector (1, send->hash ()))); + auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, std::vector (1, send->hash ()))); node.vote_processor.vote (vote, std::make_shared (node)); ASSERT_TIMELY (5s, node.active.inactive_votes_cache_size () == 1); node.process_active (send); @@ -252,7 +252,7 @@ TEST (active_transactions, inactive_votes_cache_fork) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (latest)) .build_shared (); - auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), std::vector (1, send1->hash ()))); + auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, std::vector (1, send1->hash ()))); node.vote_processor.vote (vote, std::make_shared (node)); auto channel1 (node.network.udp_channels.create (node.network.endpoint ())); ASSERT_TIMELY (5s, node.active.inactive_votes_cache_size () == 1); @@ -306,13 +306,13 @@ TEST (active_transactions, inactive_votes_cache_existing_vote) ASSERT_NE (nullptr, election); ASSERT_GT (node.weight (key.pub), node.minimum_principal_weight ()); // Insert vote - auto vote1 (std::make_shared (key.pub, key.prv, 1, std::vector (1, send->hash ()))); + auto vote1 (std::make_shared (key.pub, key.prv, nano::vote::timestamp_min * 1, std::vector (1, send->hash ()))); node.vote_processor.vote (vote1, std::make_shared (node)); ASSERT_TIMELY (5s, election->votes ().size () == 2); ASSERT_EQ (1, node.stats.count (nano::stat::type::election, nano::stat::detail::vote_new)); auto last_vote1 (election->votes ()[key.pub]); ASSERT_EQ (send->hash (), last_vote1.hash); - ASSERT_EQ (1, last_vote1.timestamp); + ASSERT_EQ (nano::vote::timestamp_min * 1, last_vote1.timestamp); // Attempt to change vote with inactive_votes_cache nano::unique_lock active_lock (node.active.mutex); node.active.add_inactive_votes_cache (active_lock, send->hash (), key.pub, 0); @@ -459,7 +459,7 @@ TEST (active_transactions, inactive_votes_cache_election_start) // Only open1 & open2 blocks elections should start (send4 is missing previous block in ledger) ASSERT_TIMELY (5s, 2 == node.active.size ()); // Confirm elections with weight quorum - auto vote0 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), hashes)); // Final vote for confirmation + auto vote0 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, hashes)); // Final vote for confirmation node.vote_processor.vote (vote0, std::make_shared (node)); ASSERT_TIMELY (5s, node.active.empty ()); ASSERT_TIMELY (5s, 5 == node.ledger.cache.cemented_count); @@ -519,7 +519,7 @@ TEST (active_transactions, vote_replays) nano::blocks_confirm (node, { send1, open1 }); ASSERT_EQ (2, node.active.size ()); // First vote is not a replay and confirms the election, second vote should be a replay since the election has confirmed but not yet removed - auto vote_send1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), send1)); + auto vote_send1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, send1)); ASSERT_EQ (nano::vote_code::vote, node.active.vote (vote_send1)); ASSERT_EQ (2, node.active.size ()); ASSERT_EQ (nano::vote_code::replay, node.active.vote (vote_send1)); @@ -527,7 +527,7 @@ TEST (active_transactions, vote_replays) ASSERT_TIMELY (3s, node.active.size () == 1); ASSERT_EQ (nano::vote_code::replay, node.active.vote (vote_send1)); // Open new account - auto vote_open1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), open1)); + auto vote_open1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, open1)); ASSERT_EQ (nano::vote_code::vote, node.active.vote (vote_open1)); ASSERT_EQ (nano::vote_code::replay, node.active.vote (vote_open1)); ASSERT_TIMELY (3s, node.active.empty ()); @@ -547,7 +547,7 @@ TEST (active_transactions, vote_replays) node.process_active (send2); nano::blocks_confirm (node, { send2 }); ASSERT_EQ (1, node.active.size ()); - auto vote1_send2 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), send2)); + auto vote1_send2 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, send2)); auto vote2_send2 (std::make_shared (key.pub, key.prv, 0, send2)); ASSERT_EQ (nano::vote_code::vote, node.active.vote (vote2_send2)); ASSERT_EQ (1, node.active.size ()); @@ -690,7 +690,7 @@ TEST (active_transactions, republish_winner) node1.block_processor.flush (); auto election = node1.active.election (fork->qualified_root ()); ASSERT_NE (nullptr, election); - auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), std::vector{ fork->hash () }); + auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, std::vector{ fork->hash () }); node1.vote_processor.vote (vote, std::make_shared (node1)); node1.vote_processor.flush (); node1.block_processor.flush (); @@ -798,7 +798,7 @@ TEST (active_transactions, fork_replacement_tally) .build_shared (); node1.process_active (open); // Confirmation - auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), std::vector{ send->hash (), open->hash () })); + auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, std::vector{ send->hash (), open->hash () })); node1.vote_processor.vote (vote, std::make_shared (node1)); } node1.block_processor.flush (); @@ -981,7 +981,7 @@ TEST (active_transactions, conflicting_block_vote_existing_election) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); - auto vote_fork (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), fork)); + auto vote_fork (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, fork)); ASSERT_EQ (nano::process_result::progress, node.process_local (send).code); node.scheduler.flush (); diff --git a/nano/core_test/conflicts.cpp b/nano/core_test/conflicts.cpp index 709c1b58ac..5d562bc40f 100644 --- a/nano/core_test/conflicts.cpp +++ b/nano/core_test/conflicts.cpp @@ -141,7 +141,7 @@ TEST (vote_uniquer, cleanup) nano::vote_uniquer uniquer (block_uniquer); nano::keypair key; auto vote1 (std::make_shared (key.pub, key.prv, 0, std::make_shared (0, 0, 0, 0, 0, key.prv, key.pub, 0))); - auto vote2 (std::make_shared (key.pub, key.prv, 1, std::make_shared (0, 0, 0, 0, 0, key.prv, key.pub, 0))); + auto vote2 (std::make_shared (key.pub, key.prv, nano::vote::timestamp_min * 1, std::make_shared (0, 0, 0, 0, 0, key.prv, key.pub, 0))); auto vote3 (uniquer.unique (vote1)); auto vote4 (uniquer.unique (vote2)); vote2.reset (); diff --git a/nano/core_test/election.cpp b/nano/core_test/election.cpp index 397c61cda4..c271c6ec36 100644 --- a/nano/core_test/election.cpp +++ b/nano/core_test/election.cpp @@ -55,7 +55,7 @@ TEST (election, quorum_minimum_flip_success) auto election = node1.active.election (send1->qualified_root ()); ASSERT_NE (nullptr, election); ASSERT_EQ (2, election->blocks ().size ()); - auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), send2)); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, send2)); ASSERT_EQ (nano::vote_code::vote, node1.active.vote (vote1)); node1.block_processor.flush (); ASSERT_NE (nullptr, node1.block (send2->hash ())); @@ -101,7 +101,7 @@ TEST (election, quorum_minimum_flip_fail) auto election = node1.active.election (send1->qualified_root ()); ASSERT_NE (nullptr, election); ASSERT_EQ (2, election->blocks ().size ()); - auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), send2)); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, send2)); ASSERT_EQ (nano::vote_code::vote, node1.active.vote (vote1)); node1.block_processor.flush (); ASSERT_NE (nullptr, node1.block (send1->hash ())); @@ -134,7 +134,7 @@ TEST (election, quorum_minimum_confirm_success) auto election = node1.active.election (send1->qualified_root ()); ASSERT_NE (nullptr, election); ASSERT_EQ (1, election->blocks ().size ()); - auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), send1)); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, send1)); ASSERT_EQ (nano::vote_code::vote, node1.active.vote (vote1)); node1.block_processor.flush (); ASSERT_NE (nullptr, node1.block (send1->hash ())); @@ -167,7 +167,7 @@ TEST (election, quorum_minimum_confirm_fail) auto election = node1.active.election (send1->qualified_root ()); ASSERT_NE (nullptr, election); ASSERT_EQ (1, election->blocks ().size ()); - auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), send1)); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, send1)); ASSERT_EQ (nano::vote_code::vote, node1.active.vote (vote1)); node1.block_processor.flush (); ASSERT_NE (nullptr, node1.block (send1->hash ())); @@ -238,9 +238,9 @@ TEST (election, quorum_minimum_update_weight_before_quorum_checks) auto election = node1.active.election (send1->qualified_root ()); ASSERT_NE (nullptr, election); ASSERT_EQ (1, election->blocks ().size ()); - auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), send1)); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, send1)); ASSERT_EQ (nano::vote_code::vote, node1.active.vote (vote1)); - auto vote2 (std::make_shared (key1.pub, key1.prv, std::numeric_limits::max (), send1)); + auto vote2 (std::make_shared (key1.pub, key1.prv, nano::vote::timestamp_max, send1)); auto channel = node1.network.find_channel (node2.network.endpoint ()); ASSERT_NE (channel, nullptr); ASSERT_TIMELY (10s, !node1.rep_crawler.response (channel, vote2)); diff --git a/nano/core_test/ledger.cpp b/nano/core_test/ledger.cpp index 357249df54..6d370c7b87 100644 --- a/nano/core_test/ledger.cpp +++ b/nano/core_test/ledger.cpp @@ -645,7 +645,7 @@ TEST (votes, check_signature) node1.scheduler.flush (); auto election1 = node1.active.election (send1->qualified_root ()); ASSERT_EQ (1, election1->votes ().size ()); - auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 1, send1)); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 1, send1)); vote1->signature.bytes[0] ^= 1; ASSERT_EQ (nano::vote_code::invalid, node1.vote_processor.vote_blocking (vote1, std::make_shared (node1))); vote1->signature.bytes[0] ^= 1; @@ -666,9 +666,9 @@ TEST (votes, add_one) node1.scheduler.flush (); auto election1 = node1.active.election (send1->qualified_root ()); ASSERT_EQ (1, election1->votes ().size ()); - auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 1, send1)); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 1, send1)); ASSERT_EQ (nano::vote_code::vote, node1.active.vote (vote1)); - auto vote2 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 2, send1)); + auto vote2 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 2, send1)); ASSERT_EQ (nano::vote_code::vote, node1.active.vote (vote2)); ASSERT_EQ (2, election1->votes ().size ()); auto votes1 (election1->votes ()); @@ -695,9 +695,9 @@ TEST (votes, add_two) auto election1 = node1.active.election (send1->qualified_root ()); nano::keypair key2; auto send2 = std::make_shared (nano::dev::genesis->hash (), key2.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0); - auto vote2 = std::make_shared (key2.pub, key2.prv, 1, send2); + auto vote2 = std::make_shared (key2.pub, key2.prv, nano::vote::timestamp_min * 1, send2); ASSERT_EQ (nano::vote_code::vote, node1.active.vote (vote2)); - auto vote1 = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 1, send1); + auto vote1 = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 1, send1); ASSERT_EQ (nano::vote_code::vote, node1.active.vote (vote1)); ASSERT_EQ (3, election1->votes ().size ()); auto votes1 = election1->votes (); @@ -734,11 +734,11 @@ TEST (votes, add_existing) node1.scheduler.activate (nano::dev::genesis_key.pub, node1.store.tx_begin_read ()); node1.scheduler.flush (); auto election1 = node1.active.election (send1->qualified_root ()); - auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 1, send1)); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 1, send1)); ASSERT_EQ (nano::vote_code::vote, node1.active.vote (vote1)); // Block is already processed from vote ASSERT_TRUE (node1.active.publish (send1)); - ASSERT_EQ (1, election1->last_votes[nano::dev::genesis_key.pub].timestamp); + ASSERT_EQ (nano::vote::timestamp_min * 1, election1->last_votes[nano::dev::genesis_key.pub].timestamp); nano::keypair key2; std::shared_ptr send2 = builder.state () .account (nano::dev::genesis_key.pub) @@ -750,20 +750,20 @@ TEST (votes, add_existing) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .build (); node1.work_generate_blocking (*send2); - auto vote2 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 2, send2)); + auto vote2 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 2, send2)); // Pretend we've waited the timeout nano::unique_lock lock (election1->mutex); election1->last_votes[nano::dev::genesis_key.pub].time = std::chrono::steady_clock::now () - std::chrono::seconds (20); lock.unlock (); ASSERT_EQ (nano::vote_code::vote, node1.active.vote (vote2)); ASSERT_FALSE (node1.active.publish (send2)); - ASSERT_EQ (2, election1->last_votes[nano::dev::genesis_key.pub].timestamp); + ASSERT_EQ (nano::vote::timestamp_min * 2, election1->last_votes[nano::dev::genesis_key.pub].timestamp); // Also resend the old vote, and see if we respect the timestamp lock.lock (); election1->last_votes[nano::dev::genesis_key.pub].time = std::chrono::steady_clock::now () - std::chrono::seconds (20); lock.unlock (); ASSERT_EQ (nano::vote_code::replay, node1.active.vote (vote1)); - ASSERT_EQ (2, election1->votes ()[nano::dev::genesis_key.pub].timestamp); + ASSERT_EQ (nano::vote::timestamp_min * 2, election1->votes ()[nano::dev::genesis_key.pub].timestamp); auto votes (election1->votes ()); ASSERT_EQ (2, votes.size ()); ASSERT_NE (votes.end (), votes.find (nano::dev::genesis_key.pub)); @@ -784,13 +784,13 @@ TEST (votes, add_old) node1.block_confirm (send1); node1.scheduler.flush (); auto election1 = node1.active.election (send1->qualified_root ()); - auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 2, send1)); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 2, send1)); auto channel (std::make_shared (node1)); node1.vote_processor.vote_blocking (vote1, channel); nano::keypair key2; auto send2 (std::make_shared (nano::dev::genesis->hash (), key2.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send2); - auto vote2 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 1, send2)); + auto vote2 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 1, send2)); { nano::lock_guard lock (election1->mutex); election1->last_votes[nano::dev::genesis_key.pub].time = std::chrono::steady_clock::now () - std::chrono::seconds (20); @@ -823,13 +823,13 @@ TEST (votes, add_old_different_account) ASSERT_NE (nullptr, election2); ASSERT_EQ (1, election1->votes ().size ()); ASSERT_EQ (1, election2->votes ().size ()); - auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 2, send1)); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 2, send1)); auto channel (std::make_shared (node1)); auto vote_result1 (node1.vote_processor.vote_blocking (vote1, channel)); ASSERT_EQ (nano::vote_code::vote, vote_result1); ASSERT_EQ (2, election1->votes ().size ()); ASSERT_EQ (1, election2->votes ().size ()); - auto vote2 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 1, send2)); + auto vote2 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 1, send2)); auto vote_result2 (node1.vote_processor.vote_blocking (vote2, channel)); ASSERT_EQ (nano::vote_code::vote, vote_result2); ASSERT_EQ (2, election1->votes ().size ()); @@ -857,13 +857,13 @@ TEST (votes, add_cooldown) node1.block_confirm (send1); node1.scheduler.flush (); auto election1 = node1.active.election (send1->qualified_root ()); - auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 1, send1)); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 1, send1)); auto channel (std::make_shared (node1)); node1.vote_processor.vote_blocking (vote1, channel); nano::keypair key2; auto send2 (std::make_shared (nano::dev::genesis->hash (), key2.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send2); - auto vote2 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 2, send2)); + auto vote2 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 2, send2)); node1.vote_processor.vote_blocking (vote2, channel); ASSERT_EQ (2, election1->votes ().size ()); auto votes (election1->votes ()); diff --git a/nano/core_test/node.cpp b/nano/core_test/node.cpp index f283a29e98..8043789ee0 100644 --- a/nano/core_test/node.cpp +++ b/nano/core_test/node.cpp @@ -2922,7 +2922,7 @@ TEST (node, vote_republish) node1.process_active (send1); ASSERT_TIMELY (5s, node2.block (send1->hash ())); node1.process_active (send2); - auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), send2)); + auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, send2)); ASSERT_TRUE (node1.active.active (*send1)); ASSERT_TIMELY (10s, node2.active.active (*send1)); node1.vote_processor.vote (vote, std::make_shared (node1)); @@ -3017,7 +3017,7 @@ TEST (node, vote_by_hash_republish) node1.process_active (send2); std::vector vote_blocks; vote_blocks.push_back (send2->hash ()); - auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), vote_blocks); // Final vote for confirmation + auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, vote_blocks); // Final vote for confirmation ASSERT_TRUE (node1.active.active (*send1)); ASSERT_TRUE (node2.active.active (*send1)); node1.vote_processor.vote (vote, std::make_shared (node1)); @@ -3533,7 +3533,7 @@ TEST (node, confirm_back) ASSERT_EQ (3, node.active.size ()); std::vector vote_blocks; vote_blocks.push_back (send2->hash ()); - auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), vote_blocks)); + auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, vote_blocks)); node.vote_processor.vote_blocking (vote, std::make_shared (node)); ASSERT_TIMELY (10s, node.active.empty ()); } @@ -4083,7 +4083,7 @@ TEST (node, rollback_gap_source) ASSERT_EQ (2, election->blocks ().size ()); ASSERT_EQ (1, election->votes ().size ()); // Confirm open - auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), std::vector (1, open->hash ()))); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, std::vector (1, open->hash ()))); node.vote_processor.vote (vote1, std::make_shared (node)); ASSERT_TIMELY (5s, election->votes ().size () == 2); ASSERT_TIMELY (3s, election->confirmed ()); @@ -4110,7 +4110,7 @@ TEST (node, rollback_gap_source) node.block_processor.flush (); ASSERT_EQ (2, election->blocks ().size ()); // Confirm open (again) - auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), std::vector (1, open->hash ()))); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, std::vector (1, open->hash ()))); node.vote_processor.vote (vote1, std::make_shared (node)); ASSERT_TIMELY (5s, election->votes ().size () == 2); } diff --git a/nano/core_test/vote_processor.cpp b/nano/core_test/vote_processor.cpp index 3efdefab95..f3f31ad879 100644 --- a/nano/core_test/vote_processor.cpp +++ b/nano/core_test/vote_processor.cpp @@ -12,7 +12,7 @@ TEST (vote_processor, codes) nano::system system (1); auto & node (*system.nodes[0]); nano::keypair key; - auto vote (std::make_shared (key.pub, key.prv, 1, std::vector{ nano::dev::genesis->hash () })); + auto vote (std::make_shared (key.pub, key.prv, nano::vote::timestamp_min * 1, std::vector{ nano::dev::genesis->hash () })); auto vote_invalid = std::make_shared (*vote); vote_invalid->signature.bytes[0] ^= 1; auto channel (std::make_shared (node)); @@ -49,7 +49,7 @@ TEST (vote_processor, flush) auto channel (std::make_shared (node)); for (unsigned i = 0; i < 2000; ++i) { - auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 1 + i, std::vector{ nano::dev::genesis->hash () }); + auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * (1 + i), std::vector{ nano::dev::genesis->hash () }); node.vote_processor.vote (vote, channel); } node.vote_processor.flush (); @@ -61,7 +61,7 @@ TEST (vote_processor, invalid_signature) nano::system system{ 1 }; auto & node = *system.nodes[0]; nano::keypair key; - auto vote = std::make_shared (key.pub, key.prv, 1, std::vector{ nano::dev::genesis->hash () }); + auto vote = std::make_shared (key.pub, key.prv, nano::vote::timestamp_min * 1, std::vector{ nano::dev::genesis->hash () }); auto vote_invalid = std::make_shared (*vote); vote_invalid->signature.bytes[0] ^= 1; auto channel = std::make_shared (node); @@ -85,7 +85,7 @@ TEST (vote_processor, no_capacity) node_flags.vote_processor_capacity = 0; auto & node (*system.add_node (node_flags)); nano::keypair key; - auto vote (std::make_shared (key.pub, key.prv, 1, std::vector{ nano::dev::genesis->hash () })); + auto vote (std::make_shared (key.pub, key.prv, nano::vote::timestamp_min * 1, std::vector{ nano::dev::genesis->hash () })); auto channel (std::make_shared (node)); ASSERT_TRUE (node.vote_processor.vote (vote, channel)); } @@ -97,7 +97,7 @@ TEST (vote_processor, overflow) node_flags.vote_processor_capacity = 1; auto & node (*system.add_node (node_flags)); nano::keypair key; - auto vote (std::make_shared (key.pub, key.prv, 1, std::vector{ nano::dev::genesis->hash () })); + auto vote (std::make_shared (key.pub, key.prv, nano::vote::timestamp_min * 1, std::vector{ nano::dev::genesis->hash () })); auto channel (std::make_shared (node)); // No way to lock the processor, but queueing votes in quick succession must result in overflow @@ -195,7 +195,7 @@ TEST (vote_processor, no_broadcast_local) ASSERT_TRUE (node.wallets.reps ().exists (nano::dev::genesis_key.pub)); ASSERT_FALSE (node.wallets.reps ().have_half_rep ()); // Process a vote - auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::milliseconds_since_epoch (), std::vector{ send->hash () }); + auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::milliseconds_since_epoch () & nano::vote::timestamp_max, std::vector{ send->hash () }); ASSERT_EQ (nano::vote_code::vote, node.active.vote (vote)); // Make sure the vote was processed auto election (node.active.election (send->qualified_root ())); @@ -228,7 +228,7 @@ TEST (vote_processor, no_broadcast_local) ASSERT_EQ (node.config.vote_minimum, node.weight (nano::dev::genesis_key.pub)); node.block_confirm (send2); // Process a vote - auto vote2 = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::milliseconds_since_epoch (), std::vector{ send2->hash () }); + auto vote2 = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::milliseconds_since_epoch () * nano::vote::timestamp_max, std::vector{ send2->hash () }); ASSERT_EQ (nano::vote_code::vote, node.active.vote (vote2)); // Make sure the vote was processed auto election2 (node.active.election (send2->qualified_root ())); @@ -262,7 +262,7 @@ TEST (vote_processor, no_broadcast_local) ASSERT_TRUE (node.wallets.reps ().exists (nano::dev::genesis_key.pub)); ASSERT_TRUE (node.wallets.reps ().have_half_rep ()); // Process a vote - auto vote3 = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::milliseconds_since_epoch (), std::vector{ open->hash () }); + auto vote3 = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::milliseconds_since_epoch () * nano::vote::timestamp_max, std::vector{ open->hash () }); ASSERT_EQ (nano::vote_code::vote, node.active.vote (vote3)); // Make sure the vote was processed auto election3 (node.active.election (open->qualified_root ())); diff --git a/nano/node/vote_processor.cpp b/nano/node/vote_processor.cpp index 71efa25965..7dced04c01 100644 --- a/nano/node/vote_processor.cpp +++ b/nano/node/vote_processor.cpp @@ -198,7 +198,7 @@ nano::vote_code nano::vote_processor::vote_blocking (std::shared_ptr } if (config.logging.vote_logging ()) { - logger.try_log (boost::str (boost::format ("Vote from: %1% timestamp: %2% block(s): %3%status: %4%") % vote_a->account.to_account () % std::to_string (vote_a->timestamp ()) % vote_a->hashes_string () % status)); + logger.try_log (boost::str (boost::format ("Vote from: %1% timestamp: %2% block(s): %3% status: %4%") % vote_a->account.to_account () % std::to_string (vote_a->timestamp ()) % vote_a->hashes_string () % status)); } return result; } diff --git a/nano/node/voting.cpp b/nano/node/voting.cpp index a1a4956f8e..d6abd122d4 100644 --- a/nano/node/voting.cpp +++ b/nano/node/voting.cpp @@ -361,7 +361,7 @@ void nano::vote_generator::vote (std::vector const & hashes_a, debug_assert (hashes_a.size () == roots_a.size ()); std::vector> votes_l; wallets.foreach_representative ([this, &hashes_a, &votes_l] (nano::public_key const & pub_a, nano::raw_key const & prv_a) { - auto timestamp (this->is_final ? std::numeric_limits::max () : nano::milliseconds_since_epoch ()); + auto timestamp = this->is_final ? nano::vote::timestamp_max : nano::milliseconds_since_epoch (); votes_l.emplace_back (std::make_shared (pub_a, prv_a, timestamp, hashes_a)); }); for (auto const & vote_l : votes_l) diff --git a/nano/secure/common.hpp b/nano/secure/common.hpp index 92a93f3c94..dbf735a6b0 100644 --- a/nano/secure/common.hpp +++ b/nano/secure/common.hpp @@ -249,8 +249,8 @@ class vote final vote (nano::vote const &); vote (bool &, nano::stream &, nano::block_uniquer * = nullptr); vote (bool &, nano::stream &, nano::block_type, nano::block_uniquer * = nullptr); - vote (nano::account const &, nano::raw_key const &, uint64_t, std::shared_ptr const &); - vote (nano::account const &, nano::raw_key const &, uint64_t, std::vector const &); + vote (nano::account const &, nano::raw_key const &, uint64_t timestamp, std::shared_ptr const &); + vote (nano::account const &, nano::raw_key const &, uint64_t timestamp, std::vector const &); std::string hashes_string () const; nano::block_hash hash () const; nano::block_hash full_hash () const; @@ -265,6 +265,8 @@ class vote final boost::transform_iterator end () const; std::string to_json () const; uint64_t timestamp () const; + static uint64_t constexpr timestamp_max = { 0xffff'ffff'ffff'ffffULL }; + static uint64_t constexpr timestamp_min = { 0x0000'0000'0000'0001ULL }; private: // Vote timestamp uint64_t timestamp_m; From 81afa059f8ed24f25a02c7df4248151c7ca36010 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Thu, 28 Oct 2021 01:01:38 +0100 Subject: [PATCH 248/346] Formatting. --- nano/secure/common.hpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/nano/secure/common.hpp b/nano/secure/common.hpp index dbf735a6b0..b9542bf4df 100644 --- a/nano/secure/common.hpp +++ b/nano/secure/common.hpp @@ -267,9 +267,11 @@ class vote final uint64_t timestamp () const; static uint64_t constexpr timestamp_max = { 0xffff'ffff'ffff'ffffULL }; static uint64_t constexpr timestamp_min = { 0x0000'0000'0000'0001ULL }; + private: // Vote timestamp uint64_t timestamp_m; + public: // The blocks, or block hashes, that this vote is for std::vector, nano::block_hash>> blocks; From cf583aec9b276d4a358c013df096cccfc83c320f Mon Sep 17 00:00:00 2001 From: Dimitrios Siganos Date: Wed, 27 Oct 2021 06:54:24 +0100 Subject: [PATCH 249/346] node config: rep_crawler_weight_minimum allows rep crawler to track non PRs Introduced a new node config called 'rep_crawler_weight_minimum'. If rep_crawler_weight_minimum is less than the PR minimum weight then that becomes the minimum weight that the rep crawler tracks. Setting rep_crawler_weight_minimum to zero would track all reps. --- nano/core_test/toml.cpp | 3 +++ nano/node/nodeconfig.cpp | 18 ++++++++++++++++++ nano/node/nodeconfig.hpp | 1 + nano/node/repcrawler.cpp | 4 +++- 4 files changed, 25 insertions(+), 1 deletion(-) diff --git a/nano/core_test/toml.cpp b/nano/core_test/toml.cpp index 9499d30bde..572b9906ec 100644 --- a/nano/core_test/toml.cpp +++ b/nano/core_test/toml.cpp @@ -167,6 +167,7 @@ TEST (toml, daemon_config_deserialize_defaults) ASSERT_EQ (conf.node.network_threads, defaults.node.network_threads); ASSERT_EQ (conf.node.secondary_work_peers, defaults.node.secondary_work_peers); ASSERT_EQ (conf.node.online_weight_minimum, defaults.node.online_weight_minimum); + ASSERT_EQ (conf.node.rep_crawler_weight_minimum, defaults.node.rep_crawler_weight_minimum); ASSERT_EQ (conf.node.election_hint_weight_percent, defaults.node.election_hint_weight_percent); ASSERT_EQ (conf.node.password_fanout, defaults.node.password_fanout); ASSERT_EQ (conf.node.peering_port, defaults.node.peering_port); @@ -405,6 +406,7 @@ TEST (toml, daemon_config_deserialize_no_defaults) lmdb_max_dbs = 999 network_threads = 999 online_weight_minimum = "999" + rep_crawler_weight_minimum = "999" election_hint_weight_percent = 19 password_fanout = 999 peering_port = 999 @@ -572,6 +574,7 @@ TEST (toml, daemon_config_deserialize_no_defaults) ASSERT_NE (conf.node.max_pruning_age, defaults.node.max_pruning_age); ASSERT_NE (conf.node.max_pruning_depth, defaults.node.max_pruning_depth); ASSERT_NE (conf.node.online_weight_minimum, defaults.node.online_weight_minimum); + ASSERT_NE (conf.node.rep_crawler_weight_minimum, defaults.node.rep_crawler_weight_minimum); ASSERT_NE (conf.node.election_hint_weight_percent, defaults.node.election_hint_weight_percent); ASSERT_NE (conf.node.password_fanout, defaults.node.password_fanout); ASSERT_NE (conf.node.peering_port, defaults.node.peering_port); diff --git a/nano/node/nodeconfig.cpp b/nano/node/nodeconfig.cpp index 5bfc9db5e5..5603775168 100644 --- a/nano/node/nodeconfig.cpp +++ b/nano/node/nodeconfig.cpp @@ -113,6 +113,7 @@ nano::error nano::node_config::serialize_toml (nano::tomlconfig & toml) const toml.put ("frontiers_confirmation", serialize_frontiers_confirmation (frontiers_confirmation), "Mode controlling frontier confirmation rate.\ntype:string,{auto,always,disabled}"); toml.put ("max_queued_requests", max_queued_requests, "Limit for number of queued confirmation requests for one channel, after which new requests are dropped until the queue drops below this value.\ntype:uint32"); toml.put ("confirm_req_batches_max", confirm_req_batches_max, "Limit for the number of confirmation requests for one channel per request attempt\ntype:uint32"); + toml.put ("rep_crawler_weight_minimum", rep_crawler_weight_minimum.to_string_dec (), "Rep crawler minimum weight, if this is less than minimum principal weight then this is taken as the minimum weight a rep must have to be tracked. If you want to track all reps set this to 0. If you do not want this to influence anything then set it to max value. This is only useful for debugging or for people who really know what they are doing.\ntype:string,amount,raw"); auto work_peers_l (toml.create_array ("work_peers", "A list of \"address:port\" entries to identify work peers.")); for (auto i (work_peers.begin ()), n (work_peers.end ()); i != n; ++i) @@ -356,6 +357,16 @@ nano::error nano::node_config::deserialize_toml (nano::tomlconfig & toml) toml.get ("max_queued_requests", max_queued_requests); toml.get ("confirm_req_batches_max", confirm_req_batches_max); + auto rep_crawler_weight_minimum_l (rep_crawler_weight_minimum.to_string_dec ()); + if (toml.has_key ("rep_crawler_weight_minimum")) + { + rep_crawler_weight_minimum_l = toml.get ("rep_crawler_weight_minimum"); + } + if (rep_crawler_weight_minimum.decode_dec (rep_crawler_weight_minimum_l)) + { + toml.get_error ().set ("rep_crawler_weight_minimum contains an invalid decimal amount"); + } + if (toml.has_key ("frontiers_confirmation")) { auto frontiers_confirmation_l (toml.get ("frontiers_confirmation")); @@ -491,6 +502,7 @@ nano::error nano::node_config::serialize_json (nano::jsonconfig & json) const json.put ("external_port", external_port); json.put ("tcp_incoming_connections_max", tcp_incoming_connections_max); json.put ("use_memory_pools", use_memory_pools); + json.put ("rep_crawler_weight_minimum", online_weight_minimum.to_string_dec ()); nano::jsonconfig websocket_l; websocket_config.serialize_json (websocket_l); json.put_child ("websocket", websocket_l); @@ -613,6 +625,12 @@ nano::error nano::node_config::deserialize_json (bool & upgraded_a, nano::jsonco json.get_error ().set ("online_weight_minimum contains an invalid decimal amount"); } + auto rep_crawler_weight_minimum_l (json.get ("rep_crawler_weight_minimum")); + if (rep_crawler_weight_minimum.decode_dec (rep_crawler_weight_minimum_l)) + { + json.get_error ().set ("rep_crawler_weight_minimum contains an invalid decimal amount"); + } + auto vote_minimum_l (json.get ("vote_minimum")); if (vote_minimum.decode_dec (vote_minimum_l)) { diff --git a/nano/node/nodeconfig.hpp b/nano/node/nodeconfig.hpp index 13d5b74029..8dab45086b 100644 --- a/nano/node/nodeconfig.hpp +++ b/nano/node/nodeconfig.hpp @@ -52,6 +52,7 @@ class node_config unsigned bootstrap_fraction_numerator{ 1 }; nano::amount receive_minimum{ nano::xrb_ratio }; nano::amount vote_minimum{ nano::Gxrb_ratio }; + nano::amount rep_crawler_weight_minimum{ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }; std::chrono::milliseconds vote_generator_delay{ std::chrono::milliseconds (100) }; unsigned vote_generator_threshold{ 3 }; nano::amount online_weight_minimum{ 60000 * nano::Gxrb_ratio }; diff --git a/nano/node/repcrawler.cpp b/nano/node/repcrawler.cpp index 1003f2e952..38691697a0 100644 --- a/nano/node/repcrawler.cpp +++ b/nano/node/repcrawler.cpp @@ -33,7 +33,9 @@ void nano::rep_crawler::validate () responses_l.swap (responses); } - auto minimum = node.minimum_principal_weight (); + // normally the rep_crawler only tracks principal reps but it can be made to track + // reps with less weight by setting rep_crawler_weight_minimum to a low value + auto minimum = std::min (node.minimum_principal_weight (), node.config.rep_crawler_weight_minimum.number ()); for (auto const & i : responses_l) { From 82f97ad3598030303d30baf3cdcf994060d2c5c3 Mon Sep 17 00:00:00 2001 From: Dimitrios Siganos Date: Wed, 27 Oct 2021 07:14:06 +0100 Subject: [PATCH 250/346] Make rep_crawler_weight_minimum be a valid acceptable value Previously the minimum value was not part of the accepted range, which did not make much sense logically. in practice, this change should be so small that it should insignificant. --- nano/node/repcrawler.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nano/node/repcrawler.cpp b/nano/node/repcrawler.cpp index 38691697a0..d8e307fbd6 100644 --- a/nano/node/repcrawler.cpp +++ b/nano/node/repcrawler.cpp @@ -53,7 +53,7 @@ void nano::rep_crawler::validate () } nano::uint128_t rep_weight = node.ledger.weight (vote->account); - if (rep_weight <= minimum) + if (rep_weight < minimum) { if (node.config.logging.rep_crawler_logging ()) { From 0ef47a165cf34e278bc4c938c444cfd8ff058d4d Mon Sep 17 00:00:00 2001 From: Thiago Silva <82097354+thsfs@users.noreply.github.com> Date: Thu, 28 Oct 2021 15:36:36 -0300 Subject: [PATCH 251/346] Disable intermittently failing unit test (#3532) * Disabled vote_processor.no_broadcast_local test * Disabled node.local_votes_cache_batch test * Disabled bootstrap_processor.push_one test --- nano/core_test/bootstrap.cpp | 5 ++++- nano/core_test/node.cpp | 5 ++++- nano/core_test/vote_processor.cpp | 5 ++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/nano/core_test/bootstrap.cpp b/nano/core_test/bootstrap.cpp index 8cc8a96a08..57da5b07fd 100644 --- a/nano/core_test/bootstrap.cpp +++ b/nano/core_test/bootstrap.cpp @@ -455,7 +455,10 @@ TEST (bootstrap_processor, DISABLED_push_diamond_pruning) node1->stop (); } -TEST (bootstrap_processor, push_one) +// Test disabled because it's failing intermittently. +// PR in which it got disabled: https://github.com/nanocurrency/nano-node/pull/3532 +// Issue for investigating it: https://github.com/nanocurrency/nano-node/issues/3533 +TEST (bootstrap_processor, DISABLED_push_one) { nano::system system; nano::node_config config (nano::get_available_port (), system.logging); diff --git a/nano/core_test/node.cpp b/nano/core_test/node.cpp index c035aa674e..77eb943964 100644 --- a/nano/core_test/node.cpp +++ b/nano/core_test/node.cpp @@ -2737,7 +2737,10 @@ TEST (node, local_votes_cache) ASSERT_FALSE (node.history.votes (send3->root (), send3->hash ()).empty ()); } -TEST (node, local_votes_cache_batch) +// Test disabled because it's failing intermittently. +// PR in which it got disabled: https://github.com/nanocurrency/nano-node/pull/3532 +// Issue for investigating it: https://github.com/nanocurrency/nano-node/issues/3481 +TEST (node, DISABLED_local_votes_cache_batch) { nano::system system; nano::node_config node_config (nano::get_available_port (), system.logging); diff --git a/nano/core_test/vote_processor.cpp b/nano/core_test/vote_processor.cpp index b81d53e5f9..28b3ff3e38 100644 --- a/nano/core_test/vote_processor.cpp +++ b/nano/core_test/vote_processor.cpp @@ -174,7 +174,10 @@ TEST (vote_processor, weights) } } -TEST (vote_processor, no_broadcast_local) +// Test disabled because it's failing intermittently. +// PR in which it got disabled: https://github.com/nanocurrency/nano-node/pull/3532 +// Issue for investigating it: https://github.com/nanocurrency/nano-node/issues/3485 +TEST (vote_processor, DISABLED_no_broadcast_local) { nano::system system; nano::node_flags flags; From 6442495a25e09723ba10c48d2180e7c1bdb4175f Mon Sep 17 00:00:00 2001 From: Thiago Silva <82097354+thsfs@users.noreply.github.com> Date: Thu, 28 Oct 2021 18:39:15 -0300 Subject: [PATCH 252/346] Disable intermittently failing unit test (#3536) * Disabled conflicts.add_two test --- nano/core_test/conflicts.cpp | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/nano/core_test/conflicts.cpp b/nano/core_test/conflicts.cpp index 709c1b58ac..3581bbd050 100644 --- a/nano/core_test/conflicts.cpp +++ b/nano/core_test/conflicts.cpp @@ -49,7 +49,10 @@ TEST (conflicts, add_existing) ASSERT_NE (votes.end (), votes.find (key2.pub)); } -TEST (conflicts, add_two) +// Test disabled because it's failing intermittently. +// PR in which it got disabled: https://github.com/nanocurrency/nano-node/pull/3536 +// Issue for investigating it: https://github.com/nanocurrency/nano-node/issues/3535 +TEST (conflicts, DISABLED_add_two) { nano::system system (1); auto & node1 (*system.nodes[0]); From 1e60488192140281805800e514de6d11d6c7192b Mon Sep 17 00:00:00 2001 From: cryptocode Date: Mon, 1 Nov 2021 16:45:17 +0100 Subject: [PATCH 253/346] Secure websocket support and certificate config improvements. (#3032) --- nano/core_test/toml.cpp | 59 +++++++++++ nano/lib/CMakeLists.txt | 2 + nano/lib/config.cpp | 6 ++ nano/lib/config.hpp | 1 + nano/lib/rpcconfig.cpp | 2 +- nano/lib/rpcconfig.hpp | 10 +- nano/lib/tlsconfig.cpp | 188 +++++++++++++++++++++++++++++++++ nano/lib/tlsconfig.hpp | 63 +++++++++++ nano/nano_node/daemon.cpp | 16 +++ nano/nano_rpc/entry.cpp | 15 +++ nano/nano_wallet/entry.cpp | 18 ++++ nano/node/CMakeLists.txt | 2 + nano/node/cli.cpp | 9 +- nano/node/node.cpp | 2 +- nano/node/websocket.cpp | 44 +++++--- nano/node/websocket.hpp | 28 ++--- nano/node/websocket_stream.cpp | 126 ++++++++++++++++++++++ nano/node/websocket_stream.hpp | 62 +++++++++++ nano/node/websocketconfig.hpp | 5 + nano/rpc/rpc.cpp | 5 +- nano/rpc/rpc_secure.cpp | 103 +----------------- nano/rpc/rpc_secure.hpp | 14 --- 22 files changed, 630 insertions(+), 150 deletions(-) create mode 100644 nano/lib/tlsconfig.cpp create mode 100644 nano/lib/tlsconfig.hpp create mode 100644 nano/node/websocket_stream.cpp create mode 100644 nano/node/websocket_stream.hpp diff --git a/nano/core_test/toml.cpp b/nano/core_test/toml.cpp index 572b9906ec..8025264adb 100644 --- a/nano/core_test/toml.cpp +++ b/nano/core_test/toml.cpp @@ -1,5 +1,6 @@ #include #include +#include #include #include #include @@ -903,3 +904,61 @@ TEST (toml, daemon_read_config) ASSERT_EQ (error.get_message (), expected_message2); } } + +/** Deserialize an tls config with non-default values */ +TEST (toml, tls_config_deserialize_no_defaults) +{ + std::stringstream ss; + + // A config file with values that differs from devnet defaults + ss << R"toml( + enable_https=true + enable_wss=true + verbose_logging=true + server_cert_path="xyz.cert.pem" + server_key_path="xyz.key.pem" + server_key_passphrase="xyz" + server_dh_path="xyz.pem" + )toml"; + + nano::tomlconfig toml; + toml.read (ss); + nano::tls_config conf; + nano::tls_config defaults; + conf.deserialize_toml (toml); + + ASSERT_FALSE (toml.get_error ()) << toml.get_error ().get_message (); + + ASSERT_NE (conf.enable_https, defaults.enable_https); + ASSERT_NE (conf.enable_wss, defaults.enable_wss); + ASSERT_NE (conf.verbose_logging, defaults.verbose_logging); + ASSERT_NE (conf.server_cert_path, defaults.server_cert_path); + ASSERT_NE (conf.server_key_path, defaults.server_key_path); + ASSERT_NE (conf.server_key_passphrase, defaults.server_key_passphrase); + ASSERT_NE (conf.server_dh_path, defaults.server_dh_path); +} + +/** Empty tls config file should match a default config object, and there should be no required values. */ +TEST (toml, tls_config_defaults) +{ + std::stringstream ss; + + // A config with no values + ss << R"toml()toml"; + + nano::tomlconfig toml; + toml.read (ss); + nano::tls_config conf; + nano::tls_config defaults; + conf.deserialize_toml (toml); + + ASSERT_FALSE (toml.get_error ()) << toml.get_error ().get_message (); + + ASSERT_EQ (conf.enable_https, defaults.enable_wss); + ASSERT_EQ (conf.enable_wss, defaults.enable_wss); + ASSERT_EQ (conf.verbose_logging, defaults.verbose_logging); + ASSERT_EQ (conf.server_cert_path, defaults.server_cert_path); + ASSERT_EQ (conf.server_key_path, defaults.server_key_path); + ASSERT_EQ (conf.server_key_passphrase, defaults.server_key_passphrase); + ASSERT_EQ (conf.server_dh_path, defaults.server_dh_path); +} diff --git a/nano/lib/CMakeLists.txt b/nano/lib/CMakeLists.txt index 3a99d8f25d..9f16c6f3a2 100644 --- a/nano/lib/CMakeLists.txt +++ b/nano/lib/CMakeLists.txt @@ -71,6 +71,8 @@ add_library( threading.cpp timer.hpp timer.cpp + tlsconfig.hpp + tlsconfig.cpp tomlconfig.hpp tomlconfig.cpp utility.hpp diff --git a/nano/lib/config.cpp b/nano/lib/config.cpp index 4095764723..4857e8079d 100644 --- a/nano/lib/config.cpp +++ b/nano/lib/config.cpp @@ -304,8 +304,14 @@ std::string get_qtwallet_toml_config_path (boost::filesystem::path const & data_ { return (data_path / "config-qtwallet.toml").string (); } + std::string get_access_toml_config_path (boost::filesystem::path const & data_path) { return (data_path / "config-access.toml").string (); } + +std::string get_tls_toml_config_path (boost::filesystem::path const & data_path) +{ + return (data_path / "config-tls.toml").string (); +} } // namespace nano diff --git a/nano/lib/config.hpp b/nano/lib/config.hpp index a09aed7c64..cd101d921f 100644 --- a/nano/lib/config.hpp +++ b/nano/lib/config.hpp @@ -281,6 +281,7 @@ std::string get_node_toml_config_path (boost::filesystem::path const & data_path std::string get_rpc_toml_config_path (boost::filesystem::path const & data_path); std::string get_access_toml_config_path (boost::filesystem::path const & data_path); std::string get_qtwallet_toml_config_path (boost::filesystem::path const & data_path); +std::string get_tls_toml_config_path (boost::filesystem::path const & data_path); /** Checks if we are running inside a valgrind instance */ bool running_within_valgrind (); diff --git a/nano/lib/rpcconfig.cpp b/nano/lib/rpcconfig.cpp index 57fa5a5f02..f3984ed18f 100644 --- a/nano/lib/rpcconfig.cpp +++ b/nano/lib/rpcconfig.cpp @@ -153,7 +153,7 @@ nano::error nano::rpc_config::deserialize_toml (nano::tomlconfig & toml) auto rpc_secure_l (toml.get_optional_child ("secure")); if (rpc_secure_l) { - secure.deserialize_toml (*rpc_secure_l); + return nano::error ("The RPC secure configuration has moved to config-tls.toml. Please update the configuration."); } boost::asio::ip::address_v6 address_l; diff --git a/nano/lib/rpcconfig.hpp b/nano/lib/rpcconfig.hpp index 87338dcd2d..bd112b5229 100644 --- a/nano/lib/rpcconfig.hpp +++ b/nano/lib/rpcconfig.hpp @@ -3,6 +3,7 @@ #include #include +#include #include #include #include @@ -19,8 +20,12 @@ namespace nano { class jsonconfig; class tomlconfig; +class tls_config; -/** Configuration options for RPC TLS */ +/** + * Configuration options for RPC TLS. + * @note This is deprecated, but kept for a few versions in order to yield a config error message on startup if it's used. + */ class rpc_secure_config final { public: @@ -29,6 +34,7 @@ class rpc_secure_config final nano::error serialize_toml (nano::tomlconfig &) const; nano::error deserialize_toml (nano::tomlconfig &); +private: /** If true, enable TLS */ bool enable{ false }; /** If true, log certificate verification details */ @@ -85,6 +91,8 @@ class rpc_config final uint8_t max_json_depth{ 20 }; uint64_t max_request_size{ 32 * 1024 * 1024 }; nano::rpc_logging_config rpc_logging; + /** Optional TLS config */ + std::shared_ptr tls_config; static unsigned json_version () { return 1; diff --git a/nano/lib/tlsconfig.cpp b/nano/lib/tlsconfig.cpp new file mode 100644 index 0000000000..d16efcfa31 --- /dev/null +++ b/nano/lib/tlsconfig.cpp @@ -0,0 +1,188 @@ +#include +#include +#include +#include + +#include + +#include + +namespace nano +{ +nano::error nano::tls_config::serialize_toml (nano::tomlconfig & toml) const +{ + toml.put ("enable_https", enable_https, "Enable or disable https:// support.\ntype:bool"); + toml.put ("enable_wss", enable_wss, "Enable or disable wss:// support.\ntype:bool"); + toml.put ("verbose_logging", verbose_logging, "Enable or disable verbose TLS logging.\ntype:bool"); + toml.put ("server_key_passphrase", server_key_passphrase, "Server key passphrase.\ntype:string"); + toml.put ("server_cert_path", server_cert_path, "Directory containing certificates.\ntype:string,path"); + toml.put ("server_key_path", server_key_path, "Path to server key PEM file.\ntype:string,path"); + toml.put ("server_dh_path", server_dh_path, "Path to Diffie-Hellman params file.\ntype:string,path"); + toml.put ("client_certs_path", client_certs_path, "Directory containing optional client certificates.\ntype:string,path"); + return toml.get_error (); +} + +nano::error nano::tls_config::deserialize_toml (nano::tomlconfig & toml) +{ + toml.get ("enable_https", enable_https); + toml.get ("enable_wss", enable_wss); + toml.get ("verbose_logging", verbose_logging); + toml.get ("server_key_passphrase", server_key_passphrase); + toml.get ("server_cert_path", server_cert_path); + toml.get ("server_key_path", server_key_path); + toml.get ("server_dh_path", server_dh_path); + toml.get ("client_certs_path", client_certs_path); + return toml.get_error (); +} + +#ifdef NANO_SECURE_RPC +namespace +{ + bool on_verify_certificate (bool preverified, boost::asio::ssl::verify_context & ctx, nano::tls_config & config_a, nano::logger_mt & logger_a) + { + X509_STORE_CTX * cts = ctx.native_handle (); + auto error (X509_STORE_CTX_get_error (cts)); + switch (error) + { + case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT: + logger_a.always_log ("TLS: Unable to get issuer"); + break; + case X509_V_ERR_CERT_NOT_YET_VALID: + case X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD: + logger_a.always_log ("TLS: Certificate not yet valid"); + break; + case X509_V_ERR_CERT_HAS_EXPIRED: + case X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD: + logger_a.always_log ("TLS: Certificate expired"); + break; + case X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN: + if (config_a.verbose_logging) + { + logger_a.always_log ("TLS: Self-signed certificate in chain"); + } + + // Allow self-signed certificates + preverified = true; + break; + case X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT: + logger_a.always_log ("TLS: Self-signed certificate not in the list of trusted certs (forgot to subject-hash certificate filename?)"); + break; + default: + break; + } + + if (config_a.verbose_logging) + { + if (error != 0) + { + logger_a.always_log ("TLS: Error: ", X509_verify_cert_error_string (error)); + logger_a.always_log ("TLS: Error chain depth : ", X509_STORE_CTX_get_error_depth (cts)); + } + + X509 * cert = X509_STORE_CTX_get_current_cert (cts); + char subject_name[512]; + X509_NAME_oneline (X509_get_subject_name (cert), subject_name, sizeof (subject_name) - 1); + logger_a.always_log ("TLS: Verifying: ", subject_name); + logger_a.always_log ("TLS: Verification: ", preverified); + } + else if (!preverified) + { + logger_a.always_log ("TLS: Pre-verification failed. Turn on verbose logging for more information."); + } + + return preverified; + } + + void load_certs (nano::tls_config & config_a, nano::logger_mt & logger_a) + { + try + { + // This is called if the key is password protected + config_a.ssl_context.set_password_callback ( + [&config_a] (std::size_t, + boost::asio::ssl::context_base::password_purpose) { + return config_a.server_key_passphrase; + }); + + // The following two options disables the session cache and enables stateless session resumption. + // This is necessary because of the way the RPC server abruptly terminate connections. + SSL_CTX_set_session_cache_mode (config_a.ssl_context.native_handle (), SSL_SESS_CACHE_OFF); + SSL_CTX_set_options (config_a.ssl_context.native_handle (), SSL_OP_NO_TICKET); + + config_a.ssl_context.set_options ( + boost::asio::ssl::context::default_workarounds | boost::asio::ssl::context::no_sslv2 | boost::asio::ssl::context::no_sslv3 | boost::asio::ssl::context::single_dh_use); + + config_a.ssl_context.use_certificate_chain_file (config_a.server_cert_path); + config_a.ssl_context.use_private_key_file (config_a.server_key_path, boost::asio::ssl::context::pem); + config_a.ssl_context.use_tmp_dh_file (config_a.server_dh_path); + + // Verify client certificates? + if (!config_a.client_certs_path.empty ()) + { + config_a.ssl_context.set_verify_mode (boost::asio::ssl::verify_fail_if_no_peer_cert | boost::asio::ssl::verify_peer); + config_a.ssl_context.add_verify_path (config_a.client_certs_path); + config_a.ssl_context.set_verify_callback ([&config_a, &logger_a] (auto preverified, auto & ctx) { + return on_verify_certificate (preverified, ctx, config_a, logger_a); + }); + } + + logger_a.always_log ("TLS: successfully configured"); + } + catch (boost::system::system_error const & err) + { + auto error (boost::str (boost::format ("Could not load certificate information: %1%. Make sure the paths and the passphrase in config-tls.toml are correct.") % err.what ())); + std::cerr << error << std::endl; + logger_a.always_log (error); + } + } +} +#endif + +nano::error read_tls_config_toml (boost::filesystem::path const & data_path_a, nano::tls_config & config_a, nano::logger_mt & logger_a, std::vector const & config_overrides) +{ + nano::error error; + auto toml_config_path = nano::get_tls_toml_config_path (data_path_a); + + // Parse and deserialize + nano::tomlconfig toml; + + std::stringstream config_overrides_stream; + for (auto const & entry : config_overrides) + { + config_overrides_stream << entry << std::endl; + } + config_overrides_stream << std::endl; + + // Make sure we don't create an empty toml file if it doesn't exist. Running without a tls toml file is the default. + if (!error) + { + if (boost::filesystem::exists (toml_config_path)) + { + error = toml.read (config_overrides_stream, toml_config_path); + } + else + { + error = toml.read (config_overrides_stream); + } + } + + if (!error) + { + error = config_a.deserialize_toml (toml); + } + + if (!error && (config_a.enable_https || config_a.enable_wss)) + { +#ifdef NANO_SECURE_RPC + load_certs (config_a, logger_a); +#else + auto msg ("https or wss is enabled in the TLS configuration, but the node is not built with NANO_SECURE_RPC"); + std::cerr << msg << std::endl; + logger_a.always_log (msg); + std::exit (1); +#endif + } + + return error; +} +} diff --git a/nano/lib/tlsconfig.hpp b/nano/lib/tlsconfig.hpp new file mode 100644 index 0000000000..cd869ed619 --- /dev/null +++ b/nano/lib/tlsconfig.hpp @@ -0,0 +1,63 @@ +#pragma once + +#include +#include + +#include +#include +#include + +#ifdef NANO_SECURE_RPC +#include +#endif + +namespace boost::filesystem +{ +class path; +} + +namespace nano +{ +class logger_mt; +class jsonconfig; +class tomlconfig; + +/** Configuration options for secure RPC and WebSocket connections */ +class tls_config final +{ +public: + nano::error serialize_toml (nano::tomlconfig &) const; + nano::error deserialize_toml (nano::tomlconfig &); + + /** If true, enable TLS for RPC (only allow https, otherwise only allow http) */ + bool enable_https{ false }; + + /** If true, enable TLS for WebSocket (only allow wss, otherwise only allow ws) */ + bool enable_wss{ false }; + + /** If true, log certificate verification details */ + bool verbose_logging{ false }; + + /** Must be set if the private key PEM is password protected */ + std::string server_key_passphrase; + + /** Path to certificate- or chain file. Must be PEM formatted. */ + std::string server_cert_path; + + /** Path to private key file. Must be PEM formatted.*/ + std::string server_key_path; + + /** Path to dhparam file */ + std::string server_dh_path; + + /** Optional path to directory containing client certificates */ + std::string client_certs_path; + +#ifdef NANO_SECURE_RPC + /** The context needs to be shared between sessions to make resumption work */ + boost::asio::ssl::context ssl_context{ boost::asio::ssl::context::tlsv12_server }; +#endif +}; + +nano::error read_tls_config_toml (boost::filesystem::path const & data_path_a, nano::tls_config & config_a, nano::logger_mt & logger_a, std::vector const & config_overrides = std::vector ()); +} diff --git a/nano/nano_node/daemon.cpp b/nano/nano_node/daemon.cpp index 51570d55aa..ff66334ab9 100644 --- a/nano/nano_node/daemon.cpp +++ b/nano/nano_node/daemon.cpp @@ -1,6 +1,7 @@ #include #include #include +#include #include #include #include @@ -90,6 +91,19 @@ void nano_daemon::daemon::run (boost::filesystem::path const & data_path, nano:: { config.node.logging.init (data_path); nano::logger_mt logger{ config.node.logging.min_time_between_log_output }; + + auto tls_config (std::make_shared ()); + error = nano::read_tls_config_toml (data_path, *tls_config, logger); + if (error) + { + std::cerr << error.get_message () << std::endl; + std::exit (1); + } + else + { + config.node.websocket_config.tls_config = tls_config; + } + boost::asio::io_context io_ctx; auto opencl (nano::opencl_work::create (config.opencl_enable, config.opencl, logger, config.node.network_params.work)); nano::work_pool opencl_work (config.node.network_params.network, config.node.work_threads, config.node.pow_sleep_interval, opencl ? [&opencl] (nano::work_version const version_a, nano::root const & root_a, uint64_t difficulty_a, std::atomic & ticket_a) { @@ -157,6 +171,8 @@ void nano_daemon::daemon::run (boost::filesystem::path const & data_path, nano:: std::cout << error.get_message () << std::endl; std::exit (1); } + + rpc_config.tls_config = tls_config; rpc_handler = std::make_unique (*node, ipc_server, config.rpc, [&ipc_server, &workers = node->workers, &io_ctx] () { ipc_server.stop (); workers.add_timed_task (std::chrono::steady_clock::now () + std::chrono::seconds (3), [&io_ctx] () { diff --git a/nano/nano_rpc/entry.cpp b/nano/nano_rpc/entry.cpp index dc4ce2b00d..8c8032cd4a 100644 --- a/nano/nano_rpc/entry.cpp +++ b/nano/nano_rpc/entry.cpp @@ -2,6 +2,7 @@ #include #include #include +#include #include #include #include @@ -46,6 +47,20 @@ void run (boost::filesystem::path const & data_path, std::vector co if (!error) { logging_init (data_path); + nano::logger_mt logger; + + auto tls_config (std::make_shared ()); + error = nano::read_tls_config_toml (data_path, *tls_config, logger); + if (error) + { + std::cerr << error.get_message () << std::endl; + std::exit (1); + } + else + { + rpc_config.tls_config = tls_config; + } + boost::asio::io_context io_ctx; nano::signal_manager sigman; try diff --git a/nano/nano_wallet/entry.cpp b/nano/nano_wallet/entry.cpp index f6967dd19b..7385f303ea 100644 --- a/nano/nano_wallet/entry.cpp +++ b/nano/nano_wallet/entry.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -101,6 +102,19 @@ int run_wallet (QApplication & application, int argc, char * const * argv, boost config.node.logging.init (data_path); nano::logger_mt logger{ config.node.logging.min_time_between_log_output }; + auto tls_config (std::make_shared ()); + error = nano::read_tls_config_toml (data_path, *tls_config, logger); + if (error) + { + splash->hide (); + show_error (error.get_message ()); + std::exit (1); + } + else + { + config.node.websocket_config.tls_config = tls_config; + } + boost::asio::io_context io_ctx; nano::thread_runner runner (io_ctx, config.node.io_threads); @@ -142,6 +156,7 @@ int run_wallet (QApplication & application, int argc, char * const * argv, boost wallet_config.account = wallet->deterministic_insert (transaction); } } + debug_assert (wallet->exists (wallet_config.account)); write_wallet_config (wallet_config, data_path); node->start (); @@ -172,8 +187,11 @@ int run_wallet (QApplication & application, int argc, char * const * argv, boost auto error = nano::read_rpc_config_toml (data_path, rpc_config, flags.rpc_config_overrides); if (error) { + splash->hide (); show_error (error.get_message ()); + std::exit (1); } + rpc_config.tls_config = tls_config; rpc_handler = std::make_unique (*node, ipc, config.rpc); rpc = nano::get_rpc (io_ctx, rpc_config, *rpc_handler); rpc->start (); diff --git a/nano/node/CMakeLists.txt b/nano/node/CMakeLists.txt index 2cc07456b5..6a332b5eec 100644 --- a/nano/node/CMakeLists.txt +++ b/nano/node/CMakeLists.txt @@ -146,6 +146,8 @@ add_library( websocket.cpp websocketconfig.hpp websocketconfig.cpp + websocket_stream.hpp + websocket_stream.cpp write_database_queue.hpp write_database_queue.cpp xorshift.hpp) diff --git a/nano/node/cli.cpp b/nano/node/cli.cpp index 0c5090d28c..8c928345be 100644 --- a/nano/node/cli.cpp +++ b/nano/node/cli.cpp @@ -1,4 +1,5 @@ #include +#include #include #include #include @@ -61,7 +62,7 @@ void nano::add_node_options (boost::program_options::options_description & descr ("rebuild_database", "Rebuild LMDB database with vacuum for best compaction") ("migrate_database_lmdb_to_rocksdb", "Migrates LMDB database to RocksDB") ("diagnostics", "Run internal diagnostics") - ("generate_config", boost::program_options::value (), "Write configuration to stdout, populated with defaults suitable for this system. Pass the configuration type node or rpc. See also use_defaults.") + ("generate_config", boost::program_options::value (), "Write configuration to stdout, populated with defaults suitable for this system. Pass the configuration type node, rpc or tls. See also use_defaults.") ("key_create", "Generates a adhoc random keypair and prints it to stdout") ("key_expand", "Derive public key and account number from ") ("wallet_add_adhoc", "Insert in to ") @@ -684,6 +685,12 @@ std::error_code nano::handle_node_options (boost::program_options::variables_map nano::rpc_config config{ nano::dev::network_params.network }; config.serialize_toml (toml); } + else if (type == "tls") + { + valid_type = true; + nano::tls_config config; + config.serialize_toml (toml); + } else { std::cerr << "Invalid configuration type " << type << ". Must be node or rpc." << std::endl; diff --git a/nano/node/node.cpp b/nano/node/node.cpp index 0f644853dc..0cec7a7c9b 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -128,7 +128,7 @@ nano::node::node (boost::asio::io_context & io_ctx_a, boost::filesystem::path co if (config.websocket_config.enabled) { auto endpoint_l (nano::tcp_endpoint (boost::asio::ip::make_address_v6 (config.websocket_config.address), config.websocket_config.port)); - websocket_server = std::make_shared (logger, wallets, io_ctx, endpoint_l); + websocket_server = std::make_shared (config.websocket_config.tls_config, logger, wallets, io_ctx, endpoint_l); this->websocket_server->run (); } diff --git a/nano/node/websocket.cpp b/nano/node/websocket.cpp index 92b23cc857..34ec7ac6db 100644 --- a/nano/node/websocket.cpp +++ b/nano/node/websocket.cpp @@ -1,6 +1,7 @@ #include #include #include +#include #include #include #include @@ -232,10 +233,19 @@ bool nano::websocket::vote_options::should_filter (nano::websocket::message cons return should_filter_l; } +#ifdef NANO_SECURE_RPC + +nano::websocket::session::session (nano::websocket::listener & listener_a, socket_type socket_a, boost::asio::ssl::context & ctx_a) : + ws_listener (listener_a), ws (std::move (socket_a), ctx_a) +{ + ws_listener.get_logger ().try_log ("Websocket: secure session started"); +} + +#endif + nano::websocket::session::session (nano::websocket::listener & listener_a, socket_type socket_a) : - ws_listener (listener_a), ws (std::move (socket_a)), strand (ws.get_executor ()) + ws_listener (listener_a), ws (std::move (socket_a)) { - ws.text (true); ws_listener.get_logger ().try_log ("Websocket: session started"); } @@ -253,7 +263,7 @@ nano::websocket::session::~session () void nano::websocket::session::handshake () { auto this_l (shared_from_this ()); - ws.async_accept ([this_l] (boost::system::error_code const & ec) { + ws.handshake ([this_l] (boost::system::error_code const & ec) { if (!ec) { // Start reading incoming messages @@ -271,7 +281,7 @@ void nano::websocket::session::close () ws_listener.get_logger ().try_log ("Websocket: session closing"); auto this_l (shared_from_this ()); - boost::asio::dispatch (strand, + boost::asio::dispatch (ws.get_strand (), [this_l] () { boost::beast::websocket::close_reason reason; reason.code = boost::beast::websocket::close_code::normal; @@ -289,7 +299,7 @@ void nano::websocket::session::write (nano::websocket::message message_a) { lk.unlock (); auto this_l (shared_from_this ()); - boost::asio::post (strand, + boost::asio::post (ws.get_strand (), [message_a, this_l] () { bool write_in_progress = !this_l->send_queue.empty (); this_l->send_queue.emplace_back (message_a); @@ -307,7 +317,6 @@ void nano::websocket::session::write_queued_messages () auto this_l (shared_from_this ()); ws.async_write (nano::shared_const_buffer (msg), - boost::asio::bind_executor (strand, [this_l] (boost::system::error_code ec, std::size_t bytes_transferred) { this_l->send_queue.pop_front (); if (!ec) @@ -317,16 +326,15 @@ void nano::websocket::session::write_queued_messages () this_l->write_queued_messages (); } } - })); + }); } void nano::websocket::session::read () { auto this_l (shared_from_this ()); - boost::asio::post (strand, [this_l] () { + boost::asio::post (ws.get_strand (), [this_l] () { this_l->ws.async_read (this_l->read_buffer, - boost::asio::bind_executor (this_l->strand, [this_l] (boost::system::error_code ec, std::size_t bytes_transferred) { if (!ec) { @@ -353,7 +361,7 @@ void nano::websocket::session::read () { this_l->ws_listener.get_logger ().try_log ("Websocket: read failed: ", ec.message ()); } - })); + }); }); } @@ -541,7 +549,8 @@ void nano::websocket::listener::stop () sessions.clear (); } -nano::websocket::listener::listener (nano::logger_mt & logger_a, nano::wallets & wallets_a, boost::asio::io_context & io_ctx_a, boost::asio::ip::tcp::endpoint endpoint_a) : +nano::websocket::listener::listener (std::shared_ptr const & tls_config_a, nano::logger_mt & logger_a, nano::wallets & wallets_a, boost::asio::io_context & io_ctx_a, boost::asio::ip::tcp::endpoint endpoint_a) : + tls_config (tls_config_a), logger (logger_a), wallets (wallets_a), acceptor (io_ctx_a), @@ -590,7 +599,18 @@ void nano::websocket::listener::on_accept (boost::system::error_code ec) else { // Create the session and initiate websocket handshake - auto session (std::make_shared (*this, std::move (socket))); + std::shared_ptr session; + if (tls_config && tls_config->enable_wss) + { +#ifdef NANO_SECURE_RPC + session = std::make_shared (*this, std::move (socket), tls_config->ssl_context); +#endif + } + else + { + session = std::make_shared (*this, std::move (socket)); + } + sessions_mutex.lock (); sessions.push_back (session); // Clean up expired sessions diff --git a/nano/node/websocket.hpp b/nano/node/websocket.hpp index a923a07f9e..74d0e3ba45 100644 --- a/nano/node/websocket.hpp +++ b/nano/node/websocket.hpp @@ -1,13 +1,11 @@ #pragma once -#include -#include -#include #include #include #include #include #include +#include #include #include @@ -20,15 +18,6 @@ #include #include -/* Boost v1.70 introduced breaking changes; the conditional compilation allows 1.6x to be supported as well. */ -#if BOOST_VERSION < 107000 -using socket_type = boost::asio::ip::tcp::socket; -#define beast_buffers boost::beast::buffers -#else -using socket_type = boost::asio::basic_stream_socket; -#define beast_buffers boost::beast::make_printable -#endif - namespace nano { class wallets; @@ -36,6 +25,7 @@ class logger_mt; class vote; class election_status; class telemetry_data; +class tls_config; enum class election_status_type : uint8_t; namespace websocket { @@ -233,8 +223,13 @@ namespace websocket friend class listener; public: +#ifdef NANO_SECURE_RPC + /** Constructor that takes ownership over \p socket_a and creates an SSL stream */ + explicit session (nano::websocket::listener & listener_a, socket_type socket_a, boost::asio::ssl::context & ctx_a); +#endif /** Constructor that takes ownership over \p socket_a */ explicit session (nano::websocket::listener & listener_a, socket_type socket_a); + ~session (); /** Perform Websocket handshake and start reading messages */ @@ -252,12 +247,10 @@ namespace websocket private: /** The owning listener */ nano::websocket::listener & ws_listener; - /** Websocket */ - boost::beast::websocket::stream ws; + /** Websocket stream, supporting both plain and tls connections */ + nano::websocket::stream ws; /** Buffer for received messages */ boost::beast::multi_buffer read_buffer; - /** All websocket operations that are thread unsafe must go through a strand. */ - boost::asio::strand strand; /** Outgoing messages. The send queue is protected by accessing it only through the strand */ std::deque send_queue; @@ -286,7 +279,7 @@ namespace websocket class listener final : public std::enable_shared_from_this { public: - listener (nano::logger_mt & logger_a, nano::wallets & wallets_a, boost::asio::io_context & io_ctx_a, boost::asio::ip::tcp::endpoint endpoint_a); + listener (std::shared_ptr const & tls_config_a, nano::logger_mt & logger_a, nano::wallets & wallets_a, boost::asio::io_context & io_ctx_a, boost::asio::ip::tcp::endpoint endpoint_a); /** Start accepting connections */ void run (); @@ -335,6 +328,7 @@ namespace websocket /** Removes from subscription count of a specific topic*/ void decrease_subscriber_count (nano::websocket::topic const & topic_a); + std::shared_ptr tls_config; nano::logger_mt & logger; nano::wallets & wallets; boost::asio::ip::tcp::acceptor acceptor; diff --git a/nano/node/websocket_stream.cpp b/nano/node/websocket_stream.cpp new file mode 100644 index 0000000000..74d5eaf8a3 --- /dev/null +++ b/nano/node/websocket_stream.cpp @@ -0,0 +1,126 @@ +#include + +#include + +namespace +{ +/** Type-erasing wrapper for tls and non-tls websocket streams */ +template +class stream_wrapper : public nano::websocket::websocket_stream_concept +{ +public: +#ifdef NANO_SECURE_RPC + stream_wrapper (socket_type socket_a, boost::asio::ssl::context & ctx_a) : + ws (std::move (socket_a), ctx_a), strand (ws.get_executor ()) + { + is_tls = true; + ws.text (true); + } +#endif + + stream_wrapper (socket_type socket_a) : + ws (std::move (socket_a)), strand (ws.get_executor ()) + { + ws.text (true); + } + + void handshake (std::function callback_a) override + { + if (is_tls) + { + ssl_handshake (callback_a); + } + else + { + // Websocket handshake + ws.async_accept ([callback_a] (boost::system::error_code const & ec) { + callback_a (ec); + }); + } + } + + void ssl_handshake (std::function callback_a) + { +#ifdef NANO_SECURE_RPC + // Only perform TLS handshakes for TLS streams + if constexpr (std::is_same::value) + { + ws.next_layer ().async_handshake (boost::asio::ssl::stream_base::server, [this, callback_a] (boost::system::error_code const & ec) { + if (!ec) + { + // Websocket handshake + this->ws.async_accept ([callback_a] (boost::system::error_code const & ec) { + callback_a (ec); + }); + } + else + { + callback_a (ec); + } + }); + } +#endif + } + + boost::asio::strand & get_strand () override + { + return strand; + } + + void close (boost::beast::websocket::close_reason const & reason_a, boost::system::error_code & ec_a) override + { + ws.close (reason_a, ec_a); + } + + void async_write (nano::shared_const_buffer const & buffer_a, std::function callback_a) override + { + ws.async_write (buffer_a, boost::asio::bind_executor (strand, callback_a)); + } + + void async_read (boost::beast::multi_buffer & buffer_a, std::function callback_a) override + { + ws.async_read (buffer_a, boost::asio::bind_executor (strand, callback_a)); + } + +private: + bool is_tls{ false }; + stream_type ws; + boost::asio::strand strand; +}; +} + +#ifdef NANO_SECURE_RPC +nano::websocket::stream::stream (socket_type socket_a, boost::asio::ssl::context & ctx_a) +{ + impl = std::make_unique> (std::move (socket_a), ctx_a); +} +#endif +nano::websocket::stream::stream (socket_type socket_a) +{ + impl = std::make_unique> (std::move (socket_a)); +} + +[[nodiscard]] boost::asio::strand & nano::websocket::stream::get_strand () +{ + return impl->get_strand (); +} + +void nano::websocket::stream::handshake (std::function callback_a) +{ + impl->handshake (callback_a); +} + +void nano::websocket::stream::close (boost::beast::websocket::close_reason const & reason_a, boost::system::error_code & ec_a) +{ + impl->close (reason_a, ec_a); +} + +void nano::websocket::stream::async_write (nano::shared_const_buffer const & buffer_a, std::function callback_a) +{ + impl->async_write (buffer_a, callback_a); +} + +void nano::websocket::stream::async_read (boost::beast::multi_buffer & buffer_a, std::function callback_a) +{ + impl->async_read (buffer_a, callback_a); +} diff --git a/nano/node/websocket_stream.hpp b/nano/node/websocket_stream.hpp new file mode 100644 index 0000000000..03e21490ce --- /dev/null +++ b/nano/node/websocket_stream.hpp @@ -0,0 +1,62 @@ +#pragma once + +#include +#include +#include +#include + +#include + +/* Boost v1.70 introduced breaking changes; the conditional compilation allows 1.6x to be supported as well. */ +#if BOOST_VERSION < 107000 +using socket_type = boost::asio::ip::tcp::socket; +#define beast_buffers boost::beast::buffers +#else +using socket_type = boost::asio::basic_stream_socket; +#define beast_buffers boost::beast::make_printable +#endif +using ws_type = boost::beast::websocket::stream; + +#ifdef NANO_SECURE_RPC +#include +#include +#include +using wss_type = boost::beast::websocket::stream>; +#endif + +namespace nano::websocket +{ +/** The minimal stream interface needed by the Nano websocket implementation */ +class websocket_stream_concept +{ +public: + virtual ~websocket_stream_concept () = default; + virtual boost::asio::strand & get_strand () = 0; + virtual void handshake (std::function callback_a) = 0; + virtual void close (boost::beast::websocket::close_reason const & reason_a, boost::system::error_code & ec_a) = 0; + virtual void async_write (nano::shared_const_buffer const & buffer_a, std::function callback_a) = 0; + virtual void async_read (boost::beast::multi_buffer & buffer_a, std::function callback_a) = 0; +}; + +/** + * Beast websockets doesn't provide a common base type for tls and non-tls streams, so we use + * the type erasure idiom to be able to use both kinds of streams through a common type. + */ +class stream final : public websocket_stream_concept +{ +public: +#ifdef NANO_SECURE_RPC + stream (socket_type socket_a, boost::asio::ssl::context & ctx_a); +#endif + stream (socket_type socket_a); + + [[nodiscard]] boost::asio::strand & get_strand () override; + void handshake (std::function callback_a) override; + void close (boost::beast::websocket::close_reason const & reason_a, boost::system::error_code & ec_a) override; + void async_write (nano::shared_const_buffer const & buffer_a, std::function callback_a) override; + void async_read (boost::beast::multi_buffer & buffer_a, std::function callback_a) override; + +private: + std::unique_ptr impl; +}; +} diff --git a/nano/node/websocketconfig.hpp b/nano/node/websocketconfig.hpp index 3bafa29447..9c9bbbfac9 100644 --- a/nano/node/websocketconfig.hpp +++ b/nano/node/websocketconfig.hpp @@ -3,10 +3,13 @@ #include #include +#include + namespace nano { class jsonconfig; class tomlconfig; +class tls_config; namespace websocket { /** websocket configuration */ @@ -22,6 +25,8 @@ namespace websocket bool enabled{ false }; uint16_t port; std::string address; + /** Optional TLS config */ + std::shared_ptr tls_config; }; } } diff --git a/nano/rpc/rpc.cpp b/nano/rpc/rpc.cpp index d3bdb7b8db..e98601f59a 100644 --- a/nano/rpc/rpc.cpp +++ b/nano/rpc/rpc.cpp @@ -1,5 +1,6 @@ #include #include +#include #include #include @@ -82,12 +83,10 @@ std::unique_ptr nano::get_rpc (boost::asio::io_context & io_ctx_a, na { std::unique_ptr impl; - if (config_a.secure.enable) + if (config_a.tls_config && config_a.tls_config->enable_https) { #ifdef NANO_SECURE_RPC impl = std::make_unique (io_ctx_a, config_a, rpc_handler_interface_a); -#else - std::cerr << "RPC configured for TLS, but the node is not compiled with TLS support" << std::endl; #endif } else diff --git a/nano/rpc/rpc_secure.cpp b/nano/rpc/rpc_secure.cpp index ba088415c1..3f596a7cba 100644 --- a/nano/rpc/rpc_secure.cpp +++ b/nano/rpc/rpc_secure.cpp @@ -1,4 +1,5 @@ #include +#include #include #include @@ -7,112 +8,14 @@ #include -bool nano::rpc_secure::on_verify_certificate (bool preverified, boost::asio::ssl::verify_context & ctx) -{ - X509_STORE_CTX * cts = ctx.native_handle (); - auto error (X509_STORE_CTX_get_error (cts)); - switch (error) - { - case X509_V_ERR_UNABLE_TO_GET_ISSUER_CERT: - logger.always_log ("TLS: Unable to get issuer"); - break; - case X509_V_ERR_CERT_NOT_YET_VALID: - case X509_V_ERR_ERROR_IN_CERT_NOT_BEFORE_FIELD: - logger.always_log ("TLS: Certificate not yet valid"); - break; - case X509_V_ERR_CERT_HAS_EXPIRED: - case X509_V_ERR_ERROR_IN_CERT_NOT_AFTER_FIELD: - logger.always_log ("TLS: Certificate expired"); - break; - case X509_V_ERR_SELF_SIGNED_CERT_IN_CHAIN: - if (config.secure.verbose_logging) - { - logger.always_log ("TLS: self signed certificate in chain"); - } - - // Allow self-signed certificates - preverified = true; - break; - case X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT: - logger.always_log ("TLS: Self signed certificate not in the list of trusted certs (forgot to subject-hash certificate filename?)"); - break; - default: - break; - } - - if (config.secure.verbose_logging) - { - if (error != 0) - { - logger.always_log ("TLS: Error: ", X509_verify_cert_error_string (error)); - logger.always_log ("TLS: Error chain depth : ", X509_STORE_CTX_get_error_depth (cts)); - } - - X509 * cert = X509_STORE_CTX_get_current_cert (cts); - char subject_name[512]; - X509_NAME_oneline (X509_get_subject_name (cert), subject_name, sizeof (subject_name) - 1); - logger.always_log ("TLS: Verifying: ", subject_name); - logger.always_log ("TLS: Verification: ", preverified); - } - else if (!preverified) - { - logger.always_log ("TLS: Pre-verification failed. Turn on verbose logging for more information."); - } - - return preverified; -} - -void nano::rpc_secure::load_certs (boost::asio::ssl::context & context_a) -{ - try - { - // This is called if the key is password protected - context_a.set_password_callback ( - [this] (std::size_t, - boost::asio::ssl::context_base::password_purpose) { - return config.secure.server_key_passphrase; - }); - - // The following two options disables the session cache and enables stateless session resumption. - // This is necessary because of the way the RPC server abruptly terminate connections. - SSL_CTX_set_session_cache_mode (context_a.native_handle (), SSL_SESS_CACHE_OFF); - SSL_CTX_set_options (context_a.native_handle (), SSL_OP_NO_TICKET); - - context_a.set_options ( - boost::asio::ssl::context::default_workarounds | boost::asio::ssl::context::no_sslv2 | boost::asio::ssl::context::no_sslv3 | boost::asio::ssl::context::single_dh_use); - - context_a.use_certificate_chain_file (config.secure.server_cert_path); - context_a.use_private_key_file (config.secure.server_key_path, boost::asio::ssl::context::pem); - context_a.use_tmp_dh_file (config.secure.server_dh_path); - - // Verify client certificates? - if (!config.secure.client_certs_path.empty ()) - { - context_a.set_verify_mode (boost::asio::ssl::verify_fail_if_no_peer_cert | boost::asio::ssl::verify_peer); - context_a.add_verify_path (config.secure.client_certs_path); - context_a.set_verify_callback ([this] (auto preverified, auto & ctx) { - return this->on_verify_certificate (preverified, ctx); - }); - } - } - catch (boost::system::system_error const & err) - { - auto error (boost::str (boost::format ("Could not load certificate information: %1%. Make sure the paths in the secure rpc configuration are correct.") % err.what ())); - std::cerr << error << std::endl; - logger.always_log (error); - } -} - nano::rpc_secure::rpc_secure (boost::asio::io_context & context_a, nano::rpc_config const & config_a, nano::rpc_handler_interface & rpc_handler_interface_a) : - rpc (context_a, config_a, rpc_handler_interface_a), - ssl_context (boost::asio::ssl::context::tlsv12_server) + rpc (context_a, config_a, rpc_handler_interface_a) { - load_certs (ssl_context); } void nano::rpc_secure::accept () { - auto connection (std::make_shared (config, io_ctx, logger, rpc_handler_interface, this->ssl_context)); + auto connection (std::make_shared (config, io_ctx, logger, rpc_handler_interface, config.tls_config->ssl_context)); acceptor.async_accept (connection->socket, boost::asio::bind_executor (connection->strand, [this, connection] (boost::system::error_code const & ec) { if (ec != boost::asio::error::operation_aborted && acceptor.is_open ()) { diff --git a/nano/rpc/rpc_secure.hpp b/nano/rpc/rpc_secure.hpp index 2601614504..44ea22a9e0 100644 --- a/nano/rpc/rpc_secure.hpp +++ b/nano/rpc/rpc_secure.hpp @@ -1,8 +1,6 @@ #pragma once #include -#include - namespace boost { namespace asio @@ -23,17 +21,5 @@ class rpc_secure : public rpc /** Starts accepting connections */ void accept () override; - - /** Installs the server certificate, key and DH, and optionally sets up client certificate verification */ - void load_certs (boost::asio::ssl::context & ctx); - - /** - * If client certificates are used, this is called to verify them. - * @param preverified The TLS preverification status. The callback may revalidate, such as accepting self-signed certs. - */ - bool on_verify_certificate (bool preverified, boost::asio::ssl::verify_context & ctx); - - /** The context needs to be shared between sessions to make resumption work */ - boost::asio::ssl::context ssl_context; }; } From 63f7b6853ce111a4fae83cfff8f75e08dc81655d Mon Sep 17 00:00:00 2001 From: clemahieu Date: Tue, 2 Nov 2021 12:41:05 +0000 Subject: [PATCH 254/346] Updating miniupnp to v2.2.3 (#3541) * Updating miniupnp to v2.2.3 * Update include paths for miniupnp update. --- miniupnp | 2 +- nano/node/portmapping.cpp | 4 ++-- nano/node/portmapping.hpp | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/miniupnp b/miniupnp index 81029a860b..2df8120326 160000 --- a/miniupnp +++ b/miniupnp @@ -1 +1 @@ -Subproject commit 81029a860baf1f727903e5b85307903b3f40cbc8 +Subproject commit 2df8120326ed4246e049a7a6de707539604cd514 diff --git a/nano/node/portmapping.cpp b/nano/node/portmapping.cpp index efb09f0c6f..12146d27e2 100644 --- a/nano/node/portmapping.cpp +++ b/nano/node/portmapping.cpp @@ -1,8 +1,8 @@ #include #include -#include -#include +#include +#include #include #include diff --git a/nano/node/portmapping.hpp b/nano/node/portmapping.hpp index e5e8539e62..7c355074fb 100644 --- a/nano/node/portmapping.hpp +++ b/nano/node/portmapping.hpp @@ -1,6 +1,6 @@ #pragma once -#include +#include #include From 608b4c4765c071409a30a15e6b25622a0339e92a Mon Sep 17 00:00:00 2001 From: clemahieu Date: Wed, 3 Nov 2021 12:00:52 +0000 Subject: [PATCH 255/346] Community Patch 1 (from VoxPopuli Team) - removed low_active_elections check as if active elections> 500. Election limiting in handled by the election scheduler rather than by individual call sites. (#3540) --- nano/node/active_transactions.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/nano/node/active_transactions.cpp b/nano/node/active_transactions.cpp index c4481a4799..2ab4de9ac8 100644 --- a/nano/node/active_transactions.cpp +++ b/nano/node/active_transactions.cpp @@ -244,10 +244,7 @@ void nano::active_transactions::block_cemented_callback (std::shared_ptrsize () < nano::active_transactions::max_active_elections_frontier_insertion / 2; }; - - if (cemented_bootstrap_count_reached && was_active && low_active_elections ()) + if (cemented_bootstrap_count_reached && was_active) { // Start or vote for the next unconfirmed block scheduler.activate (account, transaction); From ad392627a33ccc251700ba65ca83a64ee8fd6507 Mon Sep 17 00:00:00 2001 From: coranos Date: Wed, 3 Nov 2021 20:12:29 -0500 Subject: [PATCH 256/346] bugfix --- nano/node/nodeconfig.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nano/node/nodeconfig.hpp b/nano/node/nodeconfig.hpp index 98c7061f55..25cf31ce5a 100644 --- a/nano/node/nodeconfig.hpp +++ b/nano/node/nodeconfig.hpp @@ -51,7 +51,7 @@ class node_config std::vector preconfigured_representatives; unsigned bootstrap_fraction_numerator{ 1 }; nano::amount receive_minimum{ nano::xrb_ratio }; - nano::amount vote_minimum{ nano::Gxrb_ratio }; + nano::amount vote_minimum{ nano::MBAN_ratio }; nano::amount rep_crawler_weight_minimum{ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }; std::chrono::milliseconds vote_generator_delay{ std::chrono::milliseconds (100) }; unsigned vote_generator_threshold{ 3 }; From 2ef18c5bb0f2667d73884dde7fe64bd1df929140 Mon Sep 17 00:00:00 2001 From: coranos Date: Wed, 3 Nov 2021 20:15:43 -0500 Subject: [PATCH 257/346] bugfix --- nano/node/nodeconfig.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nano/node/nodeconfig.hpp b/nano/node/nodeconfig.hpp index 25cf31ce5a..13e95eb648 100644 --- a/nano/node/nodeconfig.hpp +++ b/nano/node/nodeconfig.hpp @@ -50,7 +50,7 @@ class node_config std::vector preconfigured_peers; std::vector preconfigured_representatives; unsigned bootstrap_fraction_numerator{ 1 }; - nano::amount receive_minimum{ nano::xrb_ratio }; + nano::amount receive_minimum{ nano::RAW_ratio }; nano::amount vote_minimum{ nano::MBAN_ratio }; nano::amount rep_crawler_weight_minimum{ "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF" }; std::chrono::milliseconds vote_generator_delay{ std::chrono::milliseconds (100) }; From 25899f0db502ebd284be1efb58633149ccb1115d Mon Sep 17 00:00:00 2001 From: coranos Date: Wed, 3 Nov 2021 20:21:43 -0500 Subject: [PATCH 258/346] bugfix --- nano/node/json_handler.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nano/node/json_handler.hpp b/nano/node/json_handler.hpp index eb743d4b56..9a62bac5de 100644 --- a/nano/node/json_handler.hpp +++ b/nano/node/json_handler.hpp @@ -73,8 +73,8 @@ class json_handler : public std::enable_shared_from_this void key_create (); void key_expand (); void ledger (); - void mnano_to_raw (nano::uint128_t = nano::Mxrb_ratio); - void mnano_from_raw (nano::uint128_t = nano::Mxrb_ratio); + void mnano_to_raw (nano::uint128_t = nano::BAN_ratio); + void mnano_from_raw (nano::uint128_t = nano::BAN_ratio); void nano_to_raw (); void raw_to_nano (); void node_id (); From 7f13635a31100cd2dd73d673fccb0fa886165cb9 Mon Sep 17 00:00:00 2001 From: coranos Date: Wed, 3 Nov 2021 20:29:46 -0500 Subject: [PATCH 259/346] clang format --- nano/lib/config.hpp | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) diff --git a/nano/lib/config.hpp b/nano/lib/config.hpp index 3d19edc39b..3df5ce4dde 100644 --- a/nano/lib/config.hpp +++ b/nano/lib/config.hpp @@ -141,10 +141,18 @@ class network_constants // A representative is classified as principal based on its weight and this factor principal_weight_factor = 2000; // 0.2% - default_node_port = is_live_network () ? 7071 : is_beta_network () ? 54000 : is_test_network () ? test_node_port () : 40000; - default_rpc_port = is_live_network () ? 7072 : is_beta_network () ? 55000 : is_test_network () ? test_rpc_port () : 41000; - default_ipc_port = is_live_network () ? 7073 : is_beta_network () ? 56000 : is_test_network () ? test_ipc_port () : 42000; - default_websocket_port = is_live_network () ? 7074 : is_beta_network () ? 57000 : is_test_network () ? test_websocket_port () : 43000; + default_node_port = is_live_network () ? 7071 : is_beta_network () ? 54000 + : is_test_network () ? test_node_port () + : 44000; + default_rpc_port = is_live_network () ? 7072 : is_beta_network () ? 55000 + : is_test_network () ? test_rpc_port () + : 45000; + default_ipc_port = is_live_network () ? 7073 : is_beta_network () ? 56000 + : is_test_network () ? test_ipc_port () + : 46000; + default_websocket_port = is_live_network () ? 7074 : is_beta_network () ? 57000 + : is_test_network () ? test_websocket_port () + : 47000; request_interval_ms = is_dev_network () ? 20 : 500; cleanup_period = is_dev_network () ? std::chrono::seconds (1) : std::chrono::seconds (60); idle_timeout = is_dev_network () ? cleanup_period * 15 : cleanup_period * 2; From 6913f918332b898c5b90df24aef91716d7a92148 Mon Sep 17 00:00:00 2001 From: coranos Date: Wed, 3 Nov 2021 20:38:29 -0500 Subject: [PATCH 260/346] bugfix --- nano/node/json_handler.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index 866cb449c4..f2f18ebe47 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -2780,7 +2780,7 @@ void nano::json_handler::nano_to_raw () auto amount (amount_impl ()); if (!ec) { - auto result (amount.number () * nano::Mxrb_ratio); + auto result (amount.number () * nano::MBAN_ratio); if (result > amount.number ()) { response_l.put ("amount", result.convert_to ()); @@ -2798,7 +2798,7 @@ void nano::json_handler::raw_to_nano () auto amount (amount_impl ()); if (!ec) { - auto result (amount.number () / nano::Mxrb_ratio); + auto result (amount.number () / nano::MBAN_ratio); response_l.put ("amount", result.convert_to ()); } response_errors (); From 97158e8b6bf06493751cc71f81ad308ccdcbfbf0 Mon Sep 17 00:00:00 2001 From: coranos Date: Wed, 3 Nov 2021 20:51:32 -0500 Subject: [PATCH 261/346] bugfix --- nano/secure/utility.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nano/secure/utility.cpp b/nano/secure/utility.cpp index 97830e8072..32cd884c8f 100644 --- a/nano/secure/utility.cpp +++ b/nano/secure/utility.cpp @@ -21,7 +21,7 @@ boost::filesystem::path nano::working_path (nano::networks network) result /= "BananoBeta"; break; case nano::networks::nano_live_network: - result /= "Banano"; + result /= "BananoData"; break; case nano::networks::nano_test_network: result /= "BananoTest"; From e1e666633e0961b896e6699fd4ed6015c5a2705f Mon Sep 17 00:00:00 2001 From: coranos Date: Wed, 3 Nov 2021 21:05:32 -0500 Subject: [PATCH 262/346] fix peers --- nano/lib/config.hpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nano/lib/config.hpp b/nano/lib/config.hpp index 3df5ce4dde..6b778b33bd 100644 --- a/nano/lib/config.hpp +++ b/nano/lib/config.hpp @@ -71,9 +71,9 @@ enum class networks : uint16_t // Normal work parameters, secret beta genesis key, beta IP ports nano_beta_network = 0x4242, // 'B', 'B' // Normal work parameters, secret live key, live IP ports - nano_live_network = 0x4243, // 'B', 'C' + nano_live_network = 0x4258, // 'B', 'X' // Normal work parameters, secret test genesis key, test IP ports - nano_test_network = 0x4258, // 'B', 'X' + nano_test_network = 0x4243, // 'B', 'C' }; enum class work_version From d9af3a4283024d700aee5bfbf846b6ec0f623182 Mon Sep 17 00:00:00 2001 From: Shryder Date: Thu, 4 Nov 2021 14:33:05 +0100 Subject: [PATCH 263/346] Implement "accounts_representatives" RPC (#3409) (#3412) --- nano/node/json_handler.cpp | 21 +++++++++++++++++++++ nano/node/json_handler.hpp | 1 + nano/rpc_test/rpc.cpp | 17 +++++++++++++++++ 3 files changed, 39 insertions(+) diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index 128632dcba..a2a780521b 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -906,6 +906,26 @@ void nano::json_handler::accounts_balances () response_errors (); } +void nano::json_handler::accounts_representatives () +{ + boost::property_tree::ptree representatives; + for (auto & accounts : request.get_child ("accounts")) + { + auto account (account_impl (accounts.second.data ())); + auto transaction (node.store.tx_begin_read ()); + auto info (account_info_impl (transaction, account)); + + if (!ec) + { + boost::property_tree::ptree entry; + entry.put ("", info.representative.to_account ()); + representatives.push_back (std::make_pair (accounts.second.data (), entry)); + } + } + response_l.add_child ("representatives", representatives); + response_errors (); +} + void nano::json_handler::accounts_create () { node.workers.push_task (create_worker_task ([] (std::shared_ptr const & rpc_l) { @@ -5167,6 +5187,7 @@ ipc_json_handler_no_arg_func_map create_ipc_json_handler_no_arg_func_map () no_arg_funcs.emplace ("account_representative_set", &nano::json_handler::account_representative_set); no_arg_funcs.emplace ("account_weight", &nano::json_handler::account_weight); no_arg_funcs.emplace ("accounts_balances", &nano::json_handler::accounts_balances); + no_arg_funcs.emplace ("accounts_representatives", &nano::json_handler::accounts_representatives); no_arg_funcs.emplace ("accounts_create", &nano::json_handler::accounts_create); no_arg_funcs.emplace ("accounts_frontiers", &nano::json_handler::accounts_frontiers); no_arg_funcs.emplace ("accounts_pending", &nano::json_handler::accounts_pending); diff --git a/nano/node/json_handler.hpp b/nano/node/json_handler.hpp index eb743d4b56..c204a65ee0 100644 --- a/nano/node/json_handler.hpp +++ b/nano/node/json_handler.hpp @@ -40,6 +40,7 @@ class json_handler : public std::enable_shared_from_this void account_representative_set (); void account_weight (); void accounts_balances (); + void accounts_representatives (); void accounts_create (); void accounts_frontiers (); void accounts_pending (); diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index 3b02a74e74..7624f3daae 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -2973,6 +2973,23 @@ TEST (rpc, accounts_balances) } } +TEST (rpc, accounts_representatives) +{ + nano::system system; + auto node = add_ipc_enabled_node (system); + auto [rpc, rpc_ctx] = add_rpc (system, node); + boost::property_tree::ptree request; + request.put ("action", "accounts_representatives"); + boost::property_tree::ptree entry; + boost::property_tree::ptree accounts; + entry.put ("", nano::dev::genesis_key.pub.to_account ()); + accounts.push_back (std::make_pair ("", entry)); + request.add_child ("accounts", accounts); + auto response (wait_response (system, rpc, request)); + auto response_representative (response.get_child("representatives").get(nano::dev::genesis->account ().to_account ())); + ASSERT_EQ (response_representative, nano::dev::genesis->account ().to_account ()); +} + TEST (rpc, accounts_frontiers) { nano::system system; From a063100a0c1dc3e279dadd029d6405dd810768d0 Mon Sep 17 00:00:00 2001 From: theohax <81556890+theohax@users.noreply.github.com> Date: Fri, 5 Nov 2021 19:36:39 +0200 Subject: [PATCH 264/346] Fix crash in nano_wallet when ran with --config option (#3546) --- nano/nano_wallet/entry.cpp | 21 ++++++++++++--------- 1 file changed, 12 insertions(+), 9 deletions(-) diff --git a/nano/nano_wallet/entry.cpp b/nano/nano_wallet/entry.cpp index 7385f303ea..10b3bf1080 100644 --- a/nano/nano_wallet/entry.cpp +++ b/nano/nano_wallet/entry.cpp @@ -74,11 +74,11 @@ int run_wallet (QApplication & application, int argc, char * const * argv, boost boost::filesystem::create_directories (data_path); nano::set_secure_perm_directory (data_path, error_chmod); QPixmap pixmap (":/logo.png"); - QSplashScreen * splash = new QSplashScreen (pixmap); + auto * splash = new QSplashScreen (pixmap); splash->show (); - application.processEvents (); + QApplication::processEvents (); splash->showMessage (QSplashScreen::tr ("Remember - Back Up Your Wallet Seed"), Qt::AlignBottom | Qt::AlignHCenter, Qt::darkGray); - application.processEvents (); + QApplication::processEvents (); nano::network_params network_params{ nano::network_constants::active_network }; nano::daemon_config config{ data_path, network_params }; @@ -184,7 +184,7 @@ int run_wallet (QApplication & application, int argc, char * const * argv, boost { // Launch rpc in-process nano::rpc_config rpc_config{ config.node.network_params.network }; - auto error = nano::read_rpc_config_toml (data_path, rpc_config, flags.rpc_config_overrides); + error = nano::read_rpc_config_toml (data_path, rpc_config, flags.rpc_config_overrides); if (error) { splash->hide (); @@ -228,13 +228,13 @@ int run_wallet (QApplication & application, int argc, char * const * argv, boost #endif runner.stop_event_processing (); }); - application.postEvent (&processor, new nano_qt::eventloop_event ([&] () { + QApplication::postEvent (&processor, new nano_qt::eventloop_event ([&] () { gui = std::make_shared (application, processor, *node, wallet, wallet_config.account); splash->close (); gui->start (); gui->client_window->show (); })); - result = application.exec (); + result = QApplication::exec (); runner.join (); } else @@ -256,9 +256,11 @@ int main (int argc, char * const * argv) { nano::set_umask (); nano::node_singleton_memory_pool_purge_guard memory_pool_cleanup_guard; + + QApplication application (argc, const_cast (argv)); + try { - QApplication application (argc, const_cast (argv)); boost::program_options::options_description description ("Command line options"); // clang-format off description.add_options() @@ -292,9 +294,10 @@ int main (int argc, char * const * argv) } std::vector config_overrides; - if (vm.count ("config")) + const auto configItr = vm.find ("config"); + if (configItr != vm.cend ()) { - config_overrides = vm["config"].as> (); + config_overrides = nano::config_overrides (configItr->second.as> ()); } auto ec = nano::handle_node_options (vm); From cbe19d8091953075df1187c8887bd0832b5d4387 Mon Sep 17 00:00:00 2001 From: theohax <81556890+theohax@users.noreply.github.com> Date: Fri, 5 Nov 2021 19:36:52 +0200 Subject: [PATCH 265/346] Fix conflicts.add_two unit test (#3545) * Fix conflicts.add_two unit test * Style fixes * Address code review --- nano/core_test/conflicts.cpp | 93 ++++++++++++++++++++++++++++++++++++ nano/rpc_test/rpc.cpp | 2 +- 2 files changed, 94 insertions(+), 1 deletion(-) diff --git a/nano/core_test/conflicts.cpp b/nano/core_test/conflicts.cpp index 5b4fe5dc21..6f994cf162 100644 --- a/nano/core_test/conflicts.cpp +++ b/nano/core_test/conflicts.cpp @@ -71,6 +71,99 @@ TEST (conflicts, DISABLED_add_two) ASSERT_EQ (2, node1.active.size ()); } +TEST (conflicts, add_two) +{ + nano::system system{}; + auto const & node = system.add_node (); + + // define a functor that sends from given account to given destination, + // optionally force-confirming the send blocks *and* receiving on the destination account; + // the functor returns a pair of the send and receive blocks created or nullptrs if something failed + // + auto const do_send = [&node] (auto const & previous, auto const & from, auto const & to, bool forceConfirm = true) + -> std::pair, std::shared_ptr> { + auto send = std::make_shared (previous->hash (), to.pub, 0, from.prv, from.pub, 0); + node->work_generate_blocking (*send); + + if (nano::process_result::progress != node->process (*send).code) + { + send.reset (); + return std::make_pair (std::move (send), std::move (send)); + } + + if (forceConfirm) + { + node->block_confirm (send); + node->active.election (send->qualified_root ())->force_confirm (); + + auto receive = std::make_shared (send->hash (), to.pub, to.pub, to.prv, to.pub, 0); + node->work_generate_blocking (*receive); + + if (nano::process_result::progress != node->process (*receive).code) + { + return std::make_pair (nullptr, nullptr); + } + + node->block_confirm (receive); + node->active.election (receive->qualified_root ())->force_confirm (); + + return std::make_pair (std::move (send), std::move (receive)); + } + + return std::make_pair (std::move (send), nullptr); + }; + + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); + + // send from genesis to account1 and receive it on account1 + // + nano::keypair account1{}; + auto const [send1, receive1] = do_send (nano::dev::genesis, nano::dev::genesis_key, account1); + ASSERT_TRUE (send1 && receive1); + // both blocks having been fully confirmed, we expect 1 (genesis) + 2 (send/receive) = 3 cemented blocks + // + ASSERT_TIMELY (3s, 3 == node->ledger.cache.cemented_count); + + // send from genesis to account2 and receive it on account2 + // + nano::keypair account2{}; + auto const [send2, receive2] = do_send (send1, nano::dev::genesis_key, account2); + ASSERT_TRUE (send2 && receive2); + ASSERT_TIMELY (3s, 5 == node->ledger.cache.cemented_count); + + // send from account1 to account3 but do not receive it on account3 and do not force confirm the send block + // + nano::keypair account3{}; + { + auto const [send3, _] = do_send (receive1, account1, account3, false); + ASSERT_TRUE (send3); + // expect the number of cemented blocks not to have changed since the last operation + // + ASSERT_TIMELY (3s, 5 == node->ledger.cache.cemented_count); + } + + // send from account1 to account3 but do not receive it on account3 and do not force confirm the send block + // + { + auto const [send4, _] = do_send (receive2, account2, account3, false); + ASSERT_TRUE (send4); + // expect the number of cemented blocks not to have changed since the last operation + // + ASSERT_TIMELY (3s, 5 == node->ledger.cache.cemented_count); + } + + // activate elections for the previous two send blocks (to account3) that we did not forcefully confirm + // + node->scheduler.activate (account3.pub, node->store.tx_begin_read ()); + node->scheduler.flush (); + + // wait 3s before asserting just to make sure there would be enough time + // for the Active Elections Container to evict both elections in case they would wrongfully get confirmed + // + std::this_thread::sleep_for (3s); + ASSERT_EQ (2, node->active.size ()); +} + TEST (vote_uniquer, null) { nano::block_uniquer block_uniquer; diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index 7624f3daae..ceec0cf4bf 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -2986,7 +2986,7 @@ TEST (rpc, accounts_representatives) accounts.push_back (std::make_pair ("", entry)); request.add_child ("accounts", accounts); auto response (wait_response (system, rpc, request)); - auto response_representative (response.get_child("representatives").get(nano::dev::genesis->account ().to_account ())); + auto response_representative (response.get_child ("representatives").get (nano::dev::genesis->account ().to_account ())); ASSERT_EQ (response_representative, nano::dev::genesis->account ().to_account ()); } From f2cb6ed43af738d3510dc20f296718fa8cde01ed Mon Sep 17 00:00:00 2001 From: renesq Date: Sat, 6 Nov 2021 11:20:19 +0100 Subject: [PATCH 266/346] updated bootstrap weights --- .gitignore | 11 +++++++++++ rep_weights_live.bin | Bin 160 -> 2032 bytes 2 files changed, 11 insertions(+) diff --git a/.gitignore b/.gitignore index eef7f3c2df..9e48e4df49 100644 --- a/.gitignore +++ b/.gitignore @@ -81,3 +81,14 @@ Testing # Autogenerated Build Prep artifacts util/build_prep/*/prep.sh + +# rene compiling ignore +.gitignore +bootstrap_weights_beta.cpp +bootstrap_weights_live.cpp +build_version.cc +config-node.toml.sample +config-rpc.toml.sample +flatc +nano/ipc_flatbuffers_lib/flatbuffers-build/FlatbuffersConfigVersion.cmake +nano/ipc_flatbuffers_lib/flatbuffers-build/flatbuffers.pc \ No newline at end of file diff --git a/rep_weights_live.bin b/rep_weights_live.bin index daa476bfb7ae51b4bad229f6c5740a3b407b8813..1cb4e9e299615070487ed53824b68d4fd491ff54 100644 GIT binary patch delta 1966 zcmV;f2T}N-0q_q%0000000000000000l)hXNdSiCD>rNo`>JaB#1d)leR4mTv}SY` z@O70Qm>xejGt+>4@v5a>NO*fUSwZ;Dkw73oAU6Fy7#?T#IUoPw!9(!Ar5c(kwo=bo zYn(IZP==81{5sFG0*p6MNr)^3yfS$97@+x5y5rEzB#rW8dKz#(yAchAOo_j7*7Mo@|f1U;xvBa2*=Elp1s1AmL}aFG2D*ZzMN z25qcNkq{t%0l(NPn_^-tyg5nHB@}05rtS>ef7xZY?b=TG%o%aueR{e5LdKf=?ahkL z0bMZtsW)W?Q5#&dRqI2CD;7tS!$uY>W^*^~?IMVOq+{2LO8fJ(c*Ep`*pXF)x&cR) z#Sj2}96>6_uA9PhD z>bG@&^#E!XO?2loAoPHF(UZ}a@T{t830)9@dA2ZM3w z11a-J*dXLeB*#~7@+#v9zi4)Q{rH$R)V?!+L&Rh9Fb!DGSH|rk`>z!J@V0BL5VRdXv2A3aXK&e!tHtvvyB^ zAufO|DqiC)er>YiRCI*qn}}480HIIvXnVQi1}ceDvP2l36sseNP`KJ#uCl=gL^aX& zSjehUku+2Q&cgZDEzjvL0GST|U!QwTVG(D^dJW2MD-30zW6r`iCFc#Y(~)DufFRay ze2xQB!P<<4J{0)%0D(bmnMYJOOC^hc1m<;KD^`H=QB2GK&EfU{MK3!E>P!9`srLFr zb;pXr(}BVxlmL7j;>BM@-iL8$fl0w=(%Ydbj?!=>1V}$s8N#woJTIL5k}(RjGF9{T zHl8P?CjeW4BTK#AS)YED5Gd($W*tHQxuxN<^rRUV9zV>`-QZW+|KB z)Di$p7@+;D57Id;TT9ydV3<`ERWPJ`I#Tq6Fr2HxU~#(hg(9Vyw!nFhfH&Afp9}y+ zt@)p~3LZEItUii=f6YCV(jkAP=+6A%>0W+nQ_TV9;K^#wO(LdB4VpQj7sFi(dDP2c@PHRoe4Di(*f~6i@SE_GkxUYj!q-_-dIpCESC%(hI z5geNR9#I-4nbsL%I^Ys?B*457i8IQIB+;g!WxAmPv1~{~2wJrOIMuF>OcYE0I1Yff zjj`@Nwb1N1!80(e3)de3Xtg{j6^fyhiPkPNf zMU`hC3J~EB69?9>?IN)1&&`lX>_I7iLXCEInNqzAJ}(v6 zF>$IQ+Rr2#@Sv=TZD9Z=gu>}lLC01))`~^|000Z)B-y+CjMI?`18UCw^-jV>c2NEo zlC&7Efo1aOIu8IOJf_$`*^YW00Y+!jxn2=NH8xpI9?4TSqUG4XW}2v9kLA0PNi43h z-sorwcg_G7)FAVJ$Yg=dREHyIKmY(Xof*@6bO6XbLcniI16>Z47p>!zA55%1Y8#k+ z@Z_pJGeB>AiJ=(s?sk^BmG=V$1Dys?IU9pKzz-cbPC|LjfuYeH&00}EEx~5hlAZm!J z(rdNSHpy6BJl9=n+=K%^y_O3fV<-(MyT2d=c#qPWs+{bWNB{`P#mFKmZQ&eW$ms7% zT?s(gbgE3~T+)6%R6^1)?aJrF@@k+pugGJUUrI;m_W%c(2pV=%H_fg3cD4byG|myF A7XSbN delta 81 zcmeyszkpGI0R>b_Okz|Jh^p=Cop1Xx@-?%c{eK{s=%64FbkJ(2K_YiBS6##dkd}!H GFvS3z(HK+! From c6c6451851845400e9ede3fff91a004b5f9e8f46 Mon Sep 17 00:00:00 2001 From: coranos Date: Sat, 6 Nov 2021 09:24:50 -0400 Subject: [PATCH 267/346] tracking V23develop merging (#31) * Redesigning vote_processor::flush test to not directly modify timestamp field. The only functional change is that each vote is now its own object rather than modifying an existing one. * Removing timestamp changing and re-signing as this is re-testing something that's already tested above, signature correctness with respect to vote contents. * Encapsulating vote::timestamp field as vote::timestamp_m behind vote::timestamp (). * Add nano::vote::timestamp_min and nano::vote::timestamp_max variables and use these constants in tests. * Formatting. * Implement "accounts_representatives" RPC (#3409) (#3412) * Fix crash in nano_wallet when ran with --config option (#3546) * Fix conflicts.add_two unit test (#3545) * Fix conflicts.add_two unit test * Style fixes * Address code review Co-authored-by: clemahieu Co-authored-by: Shryder Co-authored-by: theohax <81556890+theohax@users.noreply.github.com> --- nano/core_test/active_transactions.cpp | 22 +++--- nano/core_test/conflicts.cpp | 95 +++++++++++++++++++++++++- nano/core_test/election.cpp | 12 ++-- nano/core_test/ledger.cpp | 32 ++++----- nano/core_test/node.cpp | 10 +-- nano/core_test/vote_processor.cpp | 32 ++++----- nano/nano_wallet/entry.cpp | 21 +++--- nano/node/active_transactions.cpp | 6 +- nano/node/json_handler.cpp | 21 ++++++ nano/node/json_handler.hpp | 1 + nano/node/network.cpp | 2 +- nano/node/vote_processor.cpp | 2 +- nano/node/voting.cpp | 8 +-- nano/rpc_test/rpc.cpp | 17 +++++ nano/secure/common.cpp | 29 ++++---- nano/secure/common.hpp | 13 +++- 16 files changed, 231 insertions(+), 92 deletions(-) diff --git a/nano/core_test/active_transactions.cpp b/nano/core_test/active_transactions.cpp index 5293cdfffd..1639b2024b 100644 --- a/nano/core_test/active_transactions.cpp +++ b/nano/core_test/active_transactions.cpp @@ -197,7 +197,7 @@ TEST (active_transactions, inactive_votes_cache) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (latest)) .build_shared (); - auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), std::vector (1, send->hash ()))); + auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, std::vector (1, send->hash ()))); node.vote_processor.vote (vote, std::make_shared (node)); ASSERT_TIMELY (5s, node.active.inactive_votes_cache_size () == 1); node.process_active (send); @@ -252,7 +252,7 @@ TEST (active_transactions, inactive_votes_cache_fork) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (latest)) .build_shared (); - auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), std::vector (1, send1->hash ()))); + auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, std::vector (1, send1->hash ()))); node.vote_processor.vote (vote, std::make_shared (node)); auto channel1 (node.network.udp_channels.create (node.network.endpoint ())); ASSERT_TIMELY (5s, node.active.inactive_votes_cache_size () == 1); @@ -306,13 +306,13 @@ TEST (active_transactions, inactive_votes_cache_existing_vote) ASSERT_NE (nullptr, election); ASSERT_GT (node.weight (key.pub), node.minimum_principal_weight ()); // Insert vote - auto vote1 (std::make_shared (key.pub, key.prv, 1, std::vector (1, send->hash ()))); + auto vote1 (std::make_shared (key.pub, key.prv, nano::vote::timestamp_min * 1, std::vector (1, send->hash ()))); node.vote_processor.vote (vote1, std::make_shared (node)); ASSERT_TIMELY (5s, election->votes ().size () == 2); ASSERT_EQ (1, node.stats.count (nano::stat::type::election, nano::stat::detail::vote_new)); auto last_vote1 (election->votes ()[key.pub]); ASSERT_EQ (send->hash (), last_vote1.hash); - ASSERT_EQ (1, last_vote1.timestamp); + ASSERT_EQ (nano::vote::timestamp_min * 1, last_vote1.timestamp); // Attempt to change vote with inactive_votes_cache nano::unique_lock active_lock (node.active.mutex); node.active.add_inactive_votes_cache (active_lock, send->hash (), key.pub, 0); @@ -459,7 +459,7 @@ TEST (active_transactions, inactive_votes_cache_election_start) // Only open1 & open2 blocks elections should start (send4 is missing previous block in ledger) ASSERT_TIMELY (5s, 2 == node.active.size ()); // Confirm elections with weight quorum - auto vote0 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), hashes)); // Final vote for confirmation + auto vote0 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, hashes)); // Final vote for confirmation node.vote_processor.vote (vote0, std::make_shared (node)); ASSERT_TIMELY (5s, node.active.empty ()); ASSERT_TIMELY (5s, 5 == node.ledger.cache.cemented_count); @@ -519,7 +519,7 @@ TEST (active_transactions, vote_replays) nano::blocks_confirm (node, { send1, open1 }); ASSERT_EQ (2, node.active.size ()); // First vote is not a replay and confirms the election, second vote should be a replay since the election has confirmed but not yet removed - auto vote_send1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), send1)); + auto vote_send1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, send1)); ASSERT_EQ (nano::vote_code::vote, node.active.vote (vote_send1)); ASSERT_EQ (2, node.active.size ()); ASSERT_EQ (nano::vote_code::replay, node.active.vote (vote_send1)); @@ -527,7 +527,7 @@ TEST (active_transactions, vote_replays) ASSERT_TIMELY (3s, node.active.size () == 1); ASSERT_EQ (nano::vote_code::replay, node.active.vote (vote_send1)); // Open new account - auto vote_open1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), open1)); + auto vote_open1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, open1)); ASSERT_EQ (nano::vote_code::vote, node.active.vote (vote_open1)); ASSERT_EQ (nano::vote_code::replay, node.active.vote (vote_open1)); ASSERT_TIMELY (3s, node.active.empty ()); @@ -547,7 +547,7 @@ TEST (active_transactions, vote_replays) node.process_active (send2); nano::blocks_confirm (node, { send2 }); ASSERT_EQ (1, node.active.size ()); - auto vote1_send2 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), send2)); + auto vote1_send2 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, send2)); auto vote2_send2 (std::make_shared (key.pub, key.prv, 0, send2)); ASSERT_EQ (nano::vote_code::vote, node.active.vote (vote2_send2)); ASSERT_EQ (1, node.active.size ()); @@ -690,7 +690,7 @@ TEST (active_transactions, republish_winner) node1.block_processor.flush (); auto election = node1.active.election (fork->qualified_root ()); ASSERT_NE (nullptr, election); - auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), std::vector{ fork->hash () }); + auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, std::vector{ fork->hash () }); node1.vote_processor.vote (vote, std::make_shared (node1)); node1.vote_processor.flush (); node1.block_processor.flush (); @@ -798,7 +798,7 @@ TEST (active_transactions, fork_replacement_tally) .build_shared (); node1.process_active (open); // Confirmation - auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), std::vector{ send->hash (), open->hash () })); + auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, std::vector{ send->hash (), open->hash () })); node1.vote_processor.vote (vote, std::make_shared (node1)); } node1.block_processor.flush (); @@ -981,7 +981,7 @@ TEST (active_transactions, conflicting_block_vote_existing_election) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); - auto vote_fork (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), fork)); + auto vote_fork (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, fork)); ASSERT_EQ (nano::process_result::progress, node.process_local (send).code); node.scheduler.flush (); diff --git a/nano/core_test/conflicts.cpp b/nano/core_test/conflicts.cpp index 3581bbd050..6f994cf162 100644 --- a/nano/core_test/conflicts.cpp +++ b/nano/core_test/conflicts.cpp @@ -71,6 +71,99 @@ TEST (conflicts, DISABLED_add_two) ASSERT_EQ (2, node1.active.size ()); } +TEST (conflicts, add_two) +{ + nano::system system{}; + auto const & node = system.add_node (); + + // define a functor that sends from given account to given destination, + // optionally force-confirming the send blocks *and* receiving on the destination account; + // the functor returns a pair of the send and receive blocks created or nullptrs if something failed + // + auto const do_send = [&node] (auto const & previous, auto const & from, auto const & to, bool forceConfirm = true) + -> std::pair, std::shared_ptr> { + auto send = std::make_shared (previous->hash (), to.pub, 0, from.prv, from.pub, 0); + node->work_generate_blocking (*send); + + if (nano::process_result::progress != node->process (*send).code) + { + send.reset (); + return std::make_pair (std::move (send), std::move (send)); + } + + if (forceConfirm) + { + node->block_confirm (send); + node->active.election (send->qualified_root ())->force_confirm (); + + auto receive = std::make_shared (send->hash (), to.pub, to.pub, to.prv, to.pub, 0); + node->work_generate_blocking (*receive); + + if (nano::process_result::progress != node->process (*receive).code) + { + return std::make_pair (nullptr, nullptr); + } + + node->block_confirm (receive); + node->active.election (receive->qualified_root ())->force_confirm (); + + return std::make_pair (std::move (send), std::move (receive)); + } + + return std::make_pair (std::move (send), nullptr); + }; + + system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); + + // send from genesis to account1 and receive it on account1 + // + nano::keypair account1{}; + auto const [send1, receive1] = do_send (nano::dev::genesis, nano::dev::genesis_key, account1); + ASSERT_TRUE (send1 && receive1); + // both blocks having been fully confirmed, we expect 1 (genesis) + 2 (send/receive) = 3 cemented blocks + // + ASSERT_TIMELY (3s, 3 == node->ledger.cache.cemented_count); + + // send from genesis to account2 and receive it on account2 + // + nano::keypair account2{}; + auto const [send2, receive2] = do_send (send1, nano::dev::genesis_key, account2); + ASSERT_TRUE (send2 && receive2); + ASSERT_TIMELY (3s, 5 == node->ledger.cache.cemented_count); + + // send from account1 to account3 but do not receive it on account3 and do not force confirm the send block + // + nano::keypair account3{}; + { + auto const [send3, _] = do_send (receive1, account1, account3, false); + ASSERT_TRUE (send3); + // expect the number of cemented blocks not to have changed since the last operation + // + ASSERT_TIMELY (3s, 5 == node->ledger.cache.cemented_count); + } + + // send from account1 to account3 but do not receive it on account3 and do not force confirm the send block + // + { + auto const [send4, _] = do_send (receive2, account2, account3, false); + ASSERT_TRUE (send4); + // expect the number of cemented blocks not to have changed since the last operation + // + ASSERT_TIMELY (3s, 5 == node->ledger.cache.cemented_count); + } + + // activate elections for the previous two send blocks (to account3) that we did not forcefully confirm + // + node->scheduler.activate (account3.pub, node->store.tx_begin_read ()); + node->scheduler.flush (); + + // wait 3s before asserting just to make sure there would be enough time + // for the Active Elections Container to evict both elections in case they would wrongfully get confirmed + // + std::this_thread::sleep_for (3s); + ASSERT_EQ (2, node->active.size ()); +} + TEST (vote_uniquer, null) { nano::block_uniquer block_uniquer; @@ -144,7 +237,7 @@ TEST (vote_uniquer, cleanup) nano::vote_uniquer uniquer (block_uniquer); nano::keypair key; auto vote1 (std::make_shared (key.pub, key.prv, 0, std::make_shared (0, 0, 0, 0, 0, key.prv, key.pub, 0))); - auto vote2 (std::make_shared (key.pub, key.prv, 1, std::make_shared (0, 0, 0, 0, 0, key.prv, key.pub, 0))); + auto vote2 (std::make_shared (key.pub, key.prv, nano::vote::timestamp_min * 1, std::make_shared (0, 0, 0, 0, 0, key.prv, key.pub, 0))); auto vote3 (uniquer.unique (vote1)); auto vote4 (uniquer.unique (vote2)); vote2.reset (); diff --git a/nano/core_test/election.cpp b/nano/core_test/election.cpp index e7ca92a5a2..8912981b78 100644 --- a/nano/core_test/election.cpp +++ b/nano/core_test/election.cpp @@ -55,7 +55,7 @@ TEST (election, quorum_minimum_flip_success) auto election = node1.active.election (send1->qualified_root ()); ASSERT_NE (nullptr, election); ASSERT_EQ (2, election->blocks ().size ()); - auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), send2)); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, send2)); ASSERT_EQ (nano::vote_code::vote, node1.active.vote (vote1)); node1.block_processor.flush (); ASSERT_NE (nullptr, node1.block (send2->hash ())); @@ -101,7 +101,7 @@ TEST (election, quorum_minimum_flip_fail) auto election = node1.active.election (send1->qualified_root ()); ASSERT_NE (nullptr, election); ASSERT_EQ (2, election->blocks ().size ()); - auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), send2)); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, send2)); ASSERT_EQ (nano::vote_code::vote, node1.active.vote (vote1)); node1.block_processor.flush (); ASSERT_NE (nullptr, node1.block (send1->hash ())); @@ -134,7 +134,7 @@ TEST (election, quorum_minimum_confirm_success) auto election = node1.active.election (send1->qualified_root ()); ASSERT_NE (nullptr, election); ASSERT_EQ (1, election->blocks ().size ()); - auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), send1)); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, send1)); ASSERT_EQ (nano::vote_code::vote, node1.active.vote (vote1)); node1.block_processor.flush (); ASSERT_NE (nullptr, node1.block (send1->hash ())); @@ -167,7 +167,7 @@ TEST (election, quorum_minimum_confirm_fail) auto election = node1.active.election (send1->qualified_root ()); ASSERT_NE (nullptr, election); ASSERT_EQ (1, election->blocks ().size ()); - auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), send1)); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, send1)); ASSERT_EQ (nano::vote_code::vote, node1.active.vote (vote1)); node1.block_processor.flush (); ASSERT_NE (nullptr, node1.block (send1->hash ())); @@ -241,9 +241,9 @@ TEST (election, DISABLED_quorum_minimum_update_weight_before_quorum_checks) auto election = node1.active.election (send1->qualified_root ()); ASSERT_NE (nullptr, election); ASSERT_EQ (1, election->blocks ().size ()); - auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), send1)); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, send1)); ASSERT_EQ (nano::vote_code::vote, node1.active.vote (vote1)); - auto vote2 (std::make_shared (key1.pub, key1.prv, std::numeric_limits::max (), send1)); + auto vote2 (std::make_shared (key1.pub, key1.prv, nano::vote::timestamp_max, send1)); auto channel = node1.network.find_channel (node2.network.endpoint ()); ASSERT_NE (channel, nullptr); ASSERT_TIMELY (10s, !node1.rep_crawler.response (channel, vote2)); diff --git a/nano/core_test/ledger.cpp b/nano/core_test/ledger.cpp index b88eb687ac..db1bee4d35 100644 --- a/nano/core_test/ledger.cpp +++ b/nano/core_test/ledger.cpp @@ -645,7 +645,7 @@ TEST (votes, check_signature) node1.scheduler.flush (); auto election1 = node1.active.election (send1->qualified_root ()); ASSERT_EQ (1, election1->votes ().size ()); - auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 1, send1)); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 1, send1)); vote1->signature.bytes[0] ^= 1; ASSERT_EQ (nano::vote_code::invalid, node1.vote_processor.vote_blocking (vote1, std::make_shared (node1))); vote1->signature.bytes[0] ^= 1; @@ -666,9 +666,9 @@ TEST (votes, add_one) node1.scheduler.flush (); auto election1 = node1.active.election (send1->qualified_root ()); ASSERT_EQ (1, election1->votes ().size ()); - auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 1, send1)); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 1, send1)); ASSERT_EQ (nano::vote_code::vote, node1.active.vote (vote1)); - auto vote2 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 2, send1)); + auto vote2 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 2, send1)); ASSERT_EQ (nano::vote_code::vote, node1.active.vote (vote2)); ASSERT_EQ (2, election1->votes ().size ()); auto votes1 (election1->votes ()); @@ -695,9 +695,9 @@ TEST (votes, add_two) auto election1 = node1.active.election (send1->qualified_root ()); nano::keypair key2; auto send2 = std::make_shared (nano::dev::genesis->hash (), key2.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0); - auto vote2 = std::make_shared (key2.pub, key2.prv, 1, send2); + auto vote2 = std::make_shared (key2.pub, key2.prv, nano::vote::timestamp_min * 1, send2); ASSERT_EQ (nano::vote_code::vote, node1.active.vote (vote2)); - auto vote1 = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 1, send1); + auto vote1 = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 1, send1); ASSERT_EQ (nano::vote_code::vote, node1.active.vote (vote1)); ASSERT_EQ (3, election1->votes ().size ()); auto votes1 = election1->votes (); @@ -734,11 +734,11 @@ TEST (votes, add_existing) node1.scheduler.activate (nano::dev::genesis_key.pub, node1.store.tx_begin_read ()); node1.scheduler.flush (); auto election1 = node1.active.election (send1->qualified_root ()); - auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 1, send1)); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 1, send1)); ASSERT_EQ (nano::vote_code::vote, node1.active.vote (vote1)); // Block is already processed from vote ASSERT_TRUE (node1.active.publish (send1)); - ASSERT_EQ (1, election1->last_votes[nano::dev::genesis_key.pub].timestamp); + ASSERT_EQ (nano::vote::timestamp_min * 1, election1->last_votes[nano::dev::genesis_key.pub].timestamp); nano::keypair key2; std::shared_ptr send2 = builder.state () .account (nano::dev::genesis_key.pub) @@ -750,20 +750,20 @@ TEST (votes, add_existing) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .build (); node1.work_generate_blocking (*send2); - auto vote2 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 2, send2)); + auto vote2 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 2, send2)); // Pretend we've waited the timeout nano::unique_lock lock (election1->mutex); election1->last_votes[nano::dev::genesis_key.pub].time = std::chrono::steady_clock::now () - std::chrono::seconds (20); lock.unlock (); ASSERT_EQ (nano::vote_code::vote, node1.active.vote (vote2)); ASSERT_FALSE (node1.active.publish (send2)); - ASSERT_EQ (2, election1->last_votes[nano::dev::genesis_key.pub].timestamp); + ASSERT_EQ (nano::vote::timestamp_min * 2, election1->last_votes[nano::dev::genesis_key.pub].timestamp); // Also resend the old vote, and see if we respect the timestamp lock.lock (); election1->last_votes[nano::dev::genesis_key.pub].time = std::chrono::steady_clock::now () - std::chrono::seconds (20); lock.unlock (); ASSERT_EQ (nano::vote_code::replay, node1.active.vote (vote1)); - ASSERT_EQ (2, election1->votes ()[nano::dev::genesis_key.pub].timestamp); + ASSERT_EQ (nano::vote::timestamp_min * 2, election1->votes ()[nano::dev::genesis_key.pub].timestamp); auto votes (election1->votes ()); ASSERT_EQ (2, votes.size ()); ASSERT_NE (votes.end (), votes.find (nano::dev::genesis_key.pub)); @@ -784,13 +784,13 @@ TEST (votes, add_old) node1.block_confirm (send1); node1.scheduler.flush (); auto election1 = node1.active.election (send1->qualified_root ()); - auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 2, send1)); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 2, send1)); auto channel (std::make_shared (node1)); node1.vote_processor.vote_blocking (vote1, channel); nano::keypair key2; auto send2 (std::make_shared (nano::dev::genesis->hash (), key2.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send2); - auto vote2 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 1, send2)); + auto vote2 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 1, send2)); { nano::lock_guard lock (election1->mutex); election1->last_votes[nano::dev::genesis_key.pub].time = std::chrono::steady_clock::now () - std::chrono::seconds (20); @@ -823,13 +823,13 @@ TEST (votes, add_old_different_account) ASSERT_NE (nullptr, election2); ASSERT_EQ (1, election1->votes ().size ()); ASSERT_EQ (1, election2->votes ().size ()); - auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 2, send1)); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 2, send1)); auto channel (std::make_shared (node1)); auto vote_result1 (node1.vote_processor.vote_blocking (vote1, channel)); ASSERT_EQ (nano::vote_code::vote, vote_result1); ASSERT_EQ (2, election1->votes ().size ()); ASSERT_EQ (1, election2->votes ().size ()); - auto vote2 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 1, send2)); + auto vote2 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 1, send2)); auto vote_result2 (node1.vote_processor.vote_blocking (vote2, channel)); ASSERT_EQ (nano::vote_code::vote, vote_result2); ASSERT_EQ (2, election1->votes ().size ()); @@ -857,13 +857,13 @@ TEST (votes, add_cooldown) node1.block_confirm (send1); node1.scheduler.flush (); auto election1 = node1.active.election (send1->qualified_root ()); - auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 1, send1)); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 1, send1)); auto channel (std::make_shared (node1)); node1.vote_processor.vote_blocking (vote1, channel); nano::keypair key2; auto send2 (std::make_shared (nano::dev::genesis->hash (), key2.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send2); - auto vote2 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 2, send2)); + auto vote2 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 2, send2)); node1.vote_processor.vote_blocking (vote2, channel); ASSERT_EQ (2, election1->votes ().size ()); auto votes (election1->votes ()); diff --git a/nano/core_test/node.cpp b/nano/core_test/node.cpp index d87f05c841..b4b7f891d7 100644 --- a/nano/core_test/node.cpp +++ b/nano/core_test/node.cpp @@ -2925,7 +2925,7 @@ TEST (node, vote_republish) node1.process_active (send1); ASSERT_TIMELY (5s, node2.block (send1->hash ())); node1.process_active (send2); - auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), send2)); + auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, send2)); ASSERT_TRUE (node1.active.active (*send1)); ASSERT_TIMELY (10s, node2.active.active (*send1)); node1.vote_processor.vote (vote, std::make_shared (node1)); @@ -3020,7 +3020,7 @@ TEST (node, vote_by_hash_republish) node1.process_active (send2); std::vector vote_blocks; vote_blocks.push_back (send2->hash ()); - auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), vote_blocks); // Final vote for confirmation + auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, vote_blocks); // Final vote for confirmation ASSERT_TRUE (node1.active.active (*send1)); ASSERT_TRUE (node2.active.active (*send1)); node1.vote_processor.vote (vote, std::make_shared (node1)); @@ -3539,7 +3539,7 @@ TEST (node, confirm_back) ASSERT_EQ (3, node.active.size ()); std::vector vote_blocks; vote_blocks.push_back (send2->hash ()); - auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), vote_blocks)); + auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, vote_blocks)); node.vote_processor.vote_blocking (vote, std::make_shared (node)); ASSERT_TIMELY (10s, node.active.empty ()); } @@ -4089,7 +4089,7 @@ TEST (node, rollback_gap_source) ASSERT_EQ (2, election->blocks ().size ()); ASSERT_EQ (1, election->votes ().size ()); // Confirm open - auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), std::vector (1, open->hash ()))); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, std::vector (1, open->hash ()))); node.vote_processor.vote (vote1, std::make_shared (node)); ASSERT_TIMELY (5s, election->votes ().size () == 2); ASSERT_TIMELY (3s, election->confirmed ()); @@ -4116,7 +4116,7 @@ TEST (node, rollback_gap_source) node.block_processor.flush (); ASSERT_EQ (2, election->blocks ().size ()); // Confirm open (again) - auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, std::numeric_limits::max (), std::vector (1, open->hash ()))); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, std::vector (1, open->hash ()))); node.vote_processor.vote (vote1, std::make_shared (node)); ASSERT_TIMELY (5s, election->votes ().size () == 2); } diff --git a/nano/core_test/vote_processor.cpp b/nano/core_test/vote_processor.cpp index 28b3ff3e38..bbec716a29 100644 --- a/nano/core_test/vote_processor.cpp +++ b/nano/core_test/vote_processor.cpp @@ -12,7 +12,7 @@ TEST (vote_processor, codes) nano::system system (1); auto & node (*system.nodes[0]); nano::keypair key; - auto vote (std::make_shared (key.pub, key.prv, 1, std::vector{ nano::dev::genesis->hash () })); + auto vote (std::make_shared (key.pub, key.prv, nano::vote::timestamp_min * 1, std::vector{ nano::dev::genesis->hash () })); auto vote_invalid = std::make_shared (*vote); vote_invalid->signature.bytes[0] ^= 1; auto channel (std::make_shared (node)); @@ -37,12 +37,6 @@ TEST (vote_processor, codes) // Invalid takes precedence ASSERT_EQ (nano::vote_code::invalid, node.vote_processor.vote_blocking (vote_invalid, channel)); - // A higher timestamp is not a replay - ++vote->timestamp; - ASSERT_EQ (nano::vote_code::invalid, node.vote_processor.vote_blocking (vote, channel)); - vote->signature = nano::sign_message (key.prv, key.pub, vote->hash ()); - ASSERT_EQ (nano::vote_code::vote, node.vote_processor.vote_blocking (vote, channel)); - // Once the election is removed (confirmed / dropped) the vote is again indeterminate node.active.erase (*nano::dev::genesis); ASSERT_EQ (nano::vote_code::indeterminate, node.vote_processor.vote_blocking (vote, channel)); @@ -52,13 +46,11 @@ TEST (vote_processor, flush) { nano::system system (1); auto & node (*system.nodes[0]); - auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 1, std::vector{ nano::dev::genesis->hash () })); auto channel (std::make_shared (node)); for (unsigned i = 0; i < 2000; ++i) { - auto new_vote (std::make_shared (*vote)); - node.vote_processor.vote (new_vote, channel); - ++vote->timestamp; // invalidates votes without signing again + auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * (1 + i), std::vector{ nano::dev::genesis->hash () }); + node.vote_processor.vote (vote, channel); } node.vote_processor.flush (); ASSERT_TRUE (node.vote_processor.empty ()); @@ -69,7 +61,7 @@ TEST (vote_processor, invalid_signature) nano::system system{ 1 }; auto & node = *system.nodes[0]; nano::keypair key; - auto vote = std::make_shared (key.pub, key.prv, 1, std::vector{ nano::dev::genesis->hash () }); + auto vote = std::make_shared (key.pub, key.prv, nano::vote::timestamp_min * 1, std::vector{ nano::dev::genesis->hash () }); auto vote_invalid = std::make_shared (*vote); vote_invalid->signature.bytes[0] ^= 1; auto channel = std::make_shared (node); @@ -93,7 +85,7 @@ TEST (vote_processor, no_capacity) node_flags.vote_processor_capacity = 0; auto & node (*system.add_node (node_flags)); nano::keypair key; - auto vote (std::make_shared (key.pub, key.prv, 1, std::vector{ nano::dev::genesis->hash () })); + auto vote (std::make_shared (key.pub, key.prv, nano::vote::timestamp_min * 1, std::vector{ nano::dev::genesis->hash () })); auto channel (std::make_shared (node)); ASSERT_TRUE (node.vote_processor.vote (vote, channel)); } @@ -105,7 +97,7 @@ TEST (vote_processor, overflow) node_flags.vote_processor_capacity = 1; auto & node (*system.add_node (node_flags)); nano::keypair key; - auto vote (std::make_shared (key.pub, key.prv, 1, std::vector{ nano::dev::genesis->hash () })); + auto vote (std::make_shared (key.pub, key.prv, nano::vote::timestamp_min * 1, std::vector{ nano::dev::genesis->hash () })); auto channel (std::make_shared (node)); // No way to lock the processor, but queueing votes in quick succession must result in overflow @@ -206,7 +198,7 @@ TEST (vote_processor, DISABLED_no_broadcast_local) ASSERT_TRUE (node.wallets.reps ().exists (nano::dev::genesis_key.pub)); ASSERT_FALSE (node.wallets.reps ().have_half_rep ()); // Process a vote - auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::milliseconds_since_epoch (), std::vector{ send->hash () }); + auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::milliseconds_since_epoch () & nano::vote::timestamp_max, std::vector{ send->hash () }); ASSERT_EQ (nano::vote_code::vote, node.active.vote (vote)); // Make sure the vote was processed auto election (node.active.election (send->qualified_root ())); @@ -214,7 +206,7 @@ TEST (vote_processor, DISABLED_no_broadcast_local) auto votes (election->votes ()); auto existing (votes.find (nano::dev::genesis_key.pub)); ASSERT_NE (votes.end (), existing); - ASSERT_EQ (vote->timestamp, existing->second.timestamp); + ASSERT_EQ (vote->timestamp (), existing->second.timestamp); // Ensure the vote, from a local representative, was not broadcast on processing - it should be flooded on generation instead ASSERT_EQ (0, node.stats.count (nano::stat::type::message, nano::stat::detail::confirm_ack, nano::stat::dir::out)); ASSERT_EQ (1, node.stats.count (nano::stat::type::message, nano::stat::detail::publish, nano::stat::dir::out)); @@ -239,7 +231,7 @@ TEST (vote_processor, DISABLED_no_broadcast_local) ASSERT_EQ (node.config.vote_minimum, node.weight (nano::dev::genesis_key.pub)); node.block_confirm (send2); // Process a vote - auto vote2 = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::milliseconds_since_epoch (), std::vector{ send2->hash () }); + auto vote2 = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::milliseconds_since_epoch () * nano::vote::timestamp_max, std::vector{ send2->hash () }); ASSERT_EQ (nano::vote_code::vote, node.active.vote (vote2)); // Make sure the vote was processed auto election2 (node.active.election (send2->qualified_root ())); @@ -247,7 +239,7 @@ TEST (vote_processor, DISABLED_no_broadcast_local) auto votes2 (election2->votes ()); auto existing2 (votes2.find (nano::dev::genesis_key.pub)); ASSERT_NE (votes2.end (), existing2); - ASSERT_EQ (vote2->timestamp, existing2->second.timestamp); + ASSERT_EQ (vote2->timestamp (), existing2->second.timestamp); // Ensure the vote was broadcast ASSERT_EQ (1, node.stats.count (nano::stat::type::message, nano::stat::detail::confirm_ack, nano::stat::dir::out)); ASSERT_EQ (2, node.stats.count (nano::stat::type::message, nano::stat::detail::publish, nano::stat::dir::out)); @@ -273,7 +265,7 @@ TEST (vote_processor, DISABLED_no_broadcast_local) ASSERT_TRUE (node.wallets.reps ().exists (nano::dev::genesis_key.pub)); ASSERT_TRUE (node.wallets.reps ().have_half_rep ()); // Process a vote - auto vote3 = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::milliseconds_since_epoch (), std::vector{ open->hash () }); + auto vote3 = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::milliseconds_since_epoch () * nano::vote::timestamp_max, std::vector{ open->hash () }); ASSERT_EQ (nano::vote_code::vote, node.active.vote (vote3)); // Make sure the vote was processed auto election3 (node.active.election (open->qualified_root ())); @@ -281,7 +273,7 @@ TEST (vote_processor, DISABLED_no_broadcast_local) auto votes3 (election3->votes ()); auto existing3 (votes3.find (nano::dev::genesis_key.pub)); ASSERT_NE (votes3.end (), existing3); - ASSERT_EQ (vote3->timestamp, existing3->second.timestamp); + ASSERT_EQ (vote3->timestamp (), existing3->second.timestamp); // Ensure the vote wass not broadcasst ASSERT_EQ (1, node.stats.count (nano::stat::type::message, nano::stat::detail::confirm_ack, nano::stat::dir::out)); ASSERT_EQ (3, node.stats.count (nano::stat::type::message, nano::stat::detail::publish, nano::stat::dir::out)); diff --git a/nano/nano_wallet/entry.cpp b/nano/nano_wallet/entry.cpp index 16eb4e8a73..f21272a9e3 100644 --- a/nano/nano_wallet/entry.cpp +++ b/nano/nano_wallet/entry.cpp @@ -74,11 +74,11 @@ int run_wallet (QApplication & application, int argc, char * const * argv, boost boost::filesystem::create_directories (data_path); nano::set_secure_perm_directory (data_path, error_chmod); QPixmap pixmap (":/logo.png"); - QSplashScreen * splash = new QSplashScreen (pixmap); + auto * splash = new QSplashScreen (pixmap); splash->show (); - application.processEvents (); + QApplication::processEvents (); splash->showMessage (QSplashScreen::tr ("Remember - Back Up Your Wallet Seed"), Qt::AlignBottom | Qt::AlignHCenter, Qt::darkGray); - application.processEvents (); + QApplication::processEvents (); nano::network_params network_params{ nano::network_constants::active_network }; nano::daemon_config config{ data_path, network_params }; @@ -184,7 +184,7 @@ int run_wallet (QApplication & application, int argc, char * const * argv, boost { // Launch rpc in-process nano::rpc_config rpc_config{ config.node.network_params.network }; - auto error = nano::read_rpc_config_toml (data_path, rpc_config, flags.rpc_config_overrides); + error = nano::read_rpc_config_toml (data_path, rpc_config, flags.rpc_config_overrides); if (error) { splash->hide (); @@ -228,13 +228,13 @@ int run_wallet (QApplication & application, int argc, char * const * argv, boost #endif runner.stop_event_processing (); }); - application.postEvent (&processor, new nano_qt::eventloop_event ([&] () { + QApplication::postEvent (&processor, new nano_qt::eventloop_event ([&] () { gui = std::make_shared (application, processor, *node, wallet, wallet_config.account); splash->close (); gui->start (); gui->client_window->show (); })); - result = application.exec (); + result = QApplication::exec (); runner.join (); } else @@ -256,9 +256,11 @@ int main (int argc, char * const * argv) { nano::set_umask (); nano::node_singleton_memory_pool_purge_guard memory_pool_cleanup_guard; + + QApplication application (argc, const_cast (argv)); + try { - QApplication application (argc, const_cast (argv)); boost::program_options::options_description description ("Command line options"); // clang-format off description.add_options() @@ -292,9 +294,10 @@ int main (int argc, char * const * argv) } std::vector config_overrides; - if (vm.count ("config")) + const auto configItr = vm.find ("config"); + if (configItr != vm.cend ()) { - config_overrides = vm["config"].as> (); + config_overrides = nano::config_overrides (configItr->second.as> ()); } auto ec = nano::handle_node_options (vm); diff --git a/nano/node/active_transactions.cpp b/nano/node/active_transactions.cpp index 2ab4de9ac8..d0653f87e6 100644 --- a/nano/node/active_transactions.cpp +++ b/nano/node/active_transactions.cpp @@ -872,7 +872,7 @@ nano::vote_code nano::active_transactions::vote (std::shared_ptr con } else if (recently_confirmed_by_hash.count (block_hash) == 0) { - add_inactive_votes_cache (lock, block_hash, vote_a->account, vote_a->timestamp); + add_inactive_votes_cache (lock, block_hash, vote_a->account, vote_a->timestamp ()); } else { @@ -889,7 +889,7 @@ nano::vote_code nano::active_transactions::vote (std::shared_ptr con } else if (recently_confirmed_by_hash.count (block->hash ()) == 0) { - add_inactive_votes_cache (lock, block->hash (), vote_a->account, vote_a->timestamp); + add_inactive_votes_cache (lock, block->hash (), vote_a->account, vote_a->timestamp ()); } else { @@ -905,7 +905,7 @@ nano::vote_code nano::active_transactions::vote (std::shared_ptr con bool processed (false); for (auto const & [election, block_hash] : process) { - auto const result_l = election->vote (vote_a->account, vote_a->timestamp, block_hash); + auto const result_l = election->vote (vote_a->account, vote_a->timestamp (), block_hash); processed = processed || result_l.processed; replay = replay || result_l.replay; } diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index f2f18ebe47..a4a54d22bd 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -906,6 +906,26 @@ void nano::json_handler::accounts_balances () response_errors (); } +void nano::json_handler::accounts_representatives () +{ + boost::property_tree::ptree representatives; + for (auto & accounts : request.get_child ("accounts")) + { + auto account (account_impl (accounts.second.data ())); + auto transaction (node.store.tx_begin_read ()); + auto info (account_info_impl (transaction, account)); + + if (!ec) + { + boost::property_tree::ptree entry; + entry.put ("", info.representative.to_account ()); + representatives.push_back (std::make_pair (accounts.second.data (), entry)); + } + } + response_l.add_child ("representatives", representatives); + response_errors (); +} + void nano::json_handler::accounts_create () { node.workers.push_task (create_worker_task ([] (std::shared_ptr const & rpc_l) { @@ -5167,6 +5187,7 @@ ipc_json_handler_no_arg_func_map create_ipc_json_handler_no_arg_func_map () no_arg_funcs.emplace ("account_representative_set", &nano::json_handler::account_representative_set); no_arg_funcs.emplace ("account_weight", &nano::json_handler::account_weight); no_arg_funcs.emplace ("accounts_balances", &nano::json_handler::accounts_balances); + no_arg_funcs.emplace ("accounts_representatives", &nano::json_handler::accounts_representatives); no_arg_funcs.emplace ("accounts_create", &nano::json_handler::accounts_create); no_arg_funcs.emplace ("accounts_frontiers", &nano::json_handler::accounts_frontiers); no_arg_funcs.emplace ("accounts_pending", &nano::json_handler::accounts_pending); diff --git a/nano/node/json_handler.hpp b/nano/node/json_handler.hpp index 9a62bac5de..ceae8c44c3 100644 --- a/nano/node/json_handler.hpp +++ b/nano/node/json_handler.hpp @@ -40,6 +40,7 @@ class json_handler : public std::enable_shared_from_this void account_representative_set (); void account_weight (); void accounts_balances (); + void accounts_representatives (); void accounts_create (); void accounts_frontiers (); void accounts_pending (); diff --git a/nano/node/network.cpp b/nano/node/network.cpp index aabca2a288..0b2ed57909 100644 --- a/nano/node/network.cpp +++ b/nano/node/network.cpp @@ -474,7 +474,7 @@ class network_message_visitor : public nano::message_visitor { if (node.config.logging.network_message_logging ()) { - node.logger.try_log (boost::str (boost::format ("Received confirm_ack message from %1% for %2% timestamp %3%") % channel->to_string () % message_a.vote->hashes_string () % std::to_string (message_a.vote->timestamp))); + node.logger.try_log (boost::str (boost::format ("Received confirm_ack message from %1% for %2% timestamp %3%") % channel->to_string () % message_a.vote->hashes_string () % std::to_string (message_a.vote->timestamp ()))); } node.stats.inc (nano::stat::type::message, nano::stat::detail::confirm_ack, nano::stat::dir::in); if (!message_a.vote->account.is_zero ()) diff --git a/nano/node/vote_processor.cpp b/nano/node/vote_processor.cpp index ac540b654f..7dced04c01 100644 --- a/nano/node/vote_processor.cpp +++ b/nano/node/vote_processor.cpp @@ -198,7 +198,7 @@ nano::vote_code nano::vote_processor::vote_blocking (std::shared_ptr } if (config.logging.vote_logging ()) { - logger.try_log (boost::str (boost::format ("Vote from: %1% timestamp: %2% block(s): %3%status: %4%") % vote_a->account.to_account () % std::to_string (vote_a->timestamp) % vote_a->hashes_string () % status)); + logger.try_log (boost::str (boost::format ("Vote from: %1% timestamp: %2% block(s): %3% status: %4%") % vote_a->account.to_account () % std::to_string (vote_a->timestamp ()) % vote_a->hashes_string () % status)); } return result; } diff --git a/nano/node/voting.cpp b/nano/node/voting.cpp index eed58a186c..d6abd122d4 100644 --- a/nano/node/voting.cpp +++ b/nano/node/voting.cpp @@ -75,11 +75,11 @@ void nano::local_vote_history::add (nano::root const & root_a, nano::block_hash auto range (history_by_root.equal_range (root_a)); for (auto i (range.first); i != range.second;) { - if (i->hash != hash_a || (vote_a->account == i->vote->account && i->vote->timestamp <= vote_a->timestamp)) + if (i->hash != hash_a || (vote_a->account == i->vote->account && i->vote->timestamp () <= vote_a->timestamp ())) { i = history_by_root.erase (i); } - else if (vote_a->account == i->vote->account && i->vote->timestamp > vote_a->timestamp) + else if (vote_a->account == i->vote->account && i->vote->timestamp () > vote_a->timestamp ()) { add_vote = false; ++i; @@ -123,7 +123,7 @@ std::vector> nano::local_vote_history::votes (nano:: auto range (history.get ().equal_range (root_a)); // clang-format off nano::transform_if (range.first, range.second, std::back_inserter (result), - [&hash_a, is_final_a](auto const & entry) { return entry.hash == hash_a && (!is_final_a || entry.vote->timestamp == std::numeric_limits::max ()); }, + [&hash_a, is_final_a](auto const & entry) { return entry.hash == hash_a && (!is_final_a || entry.vote->timestamp () == std::numeric_limits::max ()); }, [](auto const & entry) { return entry.vote; }); // clang-format on return result; @@ -361,7 +361,7 @@ void nano::vote_generator::vote (std::vector const & hashes_a, debug_assert (hashes_a.size () == roots_a.size ()); std::vector> votes_l; wallets.foreach_representative ([this, &hashes_a, &votes_l] (nano::public_key const & pub_a, nano::raw_key const & prv_a) { - auto timestamp (this->is_final ? std::numeric_limits::max () : nano::milliseconds_since_epoch ()); + auto timestamp = this->is_final ? nano::vote::timestamp_max : nano::milliseconds_since_epoch (); votes_l.emplace_back (std::make_shared (pub_a, prv_a, timestamp, hashes_a)); }); for (auto const & vote_l : votes_l) diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index 9273aa0720..1dafacda9c 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -2973,6 +2973,23 @@ TEST (rpc, accounts_balances) } } +TEST (rpc, accounts_representatives) +{ + nano::system system; + auto node = add_ipc_enabled_node (system); + auto [rpc, rpc_ctx] = add_rpc (system, node); + boost::property_tree::ptree request; + request.put ("action", "accounts_representatives"); + boost::property_tree::ptree entry; + boost::property_tree::ptree accounts; + entry.put ("", nano::dev::genesis_key.pub.to_account ()); + accounts.push_back (std::make_pair ("", entry)); + request.add_child ("accounts", accounts); + auto response (wait_response (system, rpc, request)); + auto response_representative (response.get_child ("representatives").get (nano::dev::genesis->account ().to_account ())); + ASSERT_EQ (response_representative, nano::dev::genesis->account ().to_account ()); +} + TEST (rpc, accounts_frontiers) { nano::system system; diff --git a/nano/secure/common.cpp b/nano/secure/common.cpp index 6e7c4ff6d9..4c3292b9aa 100644 --- a/nano/secure/common.cpp +++ b/nano/secure/common.cpp @@ -473,7 +473,7 @@ bool nano::vote::operator== (nano::vote const & other_a) const } } } - return timestamp == other_a.timestamp && blocks_equal && account == other_a.account && signature == other_a.signature; + return timestamp_m == other_a.timestamp_m && blocks_equal && account == other_a.account && signature == other_a.signature; } bool nano::vote::operator!= (nano::vote const & other_a) const @@ -485,8 +485,8 @@ void nano::vote::serialize_json (boost::property_tree::ptree & tree) const { tree.put ("account", account.to_account ()); tree.put ("signature", signature.number ()); - tree.put ("sequence", std::to_string (timestamp)); - tree.put ("timestamp", std::to_string (timestamp)); + tree.put ("sequence", std::to_string (timestamp ())); + tree.put ("timestamp", std::to_string (timestamp ())); boost::property_tree::ptree blocks_tree; for (auto block : blocks) { @@ -513,8 +513,13 @@ std::string nano::vote::to_json () const return stream.str (); } +uint64_t nano::vote::timestamp () const +{ + return timestamp_m; +} + nano::vote::vote (nano::vote const & other_a) : - timestamp{ other_a.timestamp }, + timestamp_m{ other_a.timestamp_m }, blocks (other_a.blocks), account (other_a.account), signature (other_a.signature) @@ -532,7 +537,7 @@ nano::vote::vote (bool & error_a, nano::stream & stream_a, nano::block_type type { nano::read (stream_a, account.bytes); nano::read (stream_a, signature.bytes); - nano::read (stream_a, timestamp); + nano::read (stream_a, timestamp_m); while (stream_a.in_avail () > 0) { @@ -565,7 +570,7 @@ nano::vote::vote (bool & error_a, nano::stream & stream_a, nano::block_type type } nano::vote::vote (nano::account const & account_a, nano::raw_key const & prv_a, uint64_t timestamp_a, std::shared_ptr const & block_a) : - timestamp{ timestamp_a }, + timestamp_m{ timestamp_a }, blocks (1, block_a), account (account_a), signature (nano::sign_message (prv_a, account_a, hash ())) @@ -573,7 +578,7 @@ nano::vote::vote (nano::account const & account_a, nano::raw_key const & prv_a, } nano::vote::vote (nano::account const & account_a, nano::raw_key const & prv_a, uint64_t timestamp_a, std::vector const & blocks_a) : - timestamp{ timestamp_a }, + timestamp_m{ timestamp_a }, account (account_a) { debug_assert (!blocks_a.empty ()); @@ -614,7 +619,7 @@ nano::block_hash nano::vote::hash () const uint64_t qword; std::array bytes; }; - qword = timestamp; + qword = timestamp_m; blake2b_update (&hash, bytes.data (), sizeof (bytes)); blake2b_final (&hash, result.bytes.data (), sizeof (result.bytes)); return result; @@ -636,7 +641,7 @@ void nano::vote::serialize (nano::stream & stream_a, nano::block_type type) cons { write (stream_a, account); write (stream_a, signature); - write (stream_a, boost::endian::native_to_little (timestamp)); + write (stream_a, boost::endian::native_to_little (timestamp_m)); for (auto const & block : blocks) { if (block.which ()) @@ -662,7 +667,7 @@ void nano::vote::serialize (nano::stream & stream_a) const { write (stream_a, account); write (stream_a, signature); - write (stream_a, boost::endian::native_to_little (timestamp)); + write (stream_a, boost::endian::native_to_little (timestamp_m)); for (auto const & block : blocks) { if (block.which ()) @@ -684,8 +689,8 @@ bool nano::vote::deserialize (nano::stream & stream_a, nano::block_uniquer * uni { nano::read (stream_a, account); nano::read (stream_a, signature); - nano::read (stream_a, timestamp); - boost::endian::little_to_native_inplace (timestamp); + nano::read (stream_a, timestamp_m); + boost::endian::little_to_native_inplace (timestamp_m); nano::block_type type; diff --git a/nano/secure/common.hpp b/nano/secure/common.hpp index 8461e32c34..b9542bf4df 100644 --- a/nano/secure/common.hpp +++ b/nano/secure/common.hpp @@ -249,8 +249,8 @@ class vote final vote (nano::vote const &); vote (bool &, nano::stream &, nano::block_uniquer * = nullptr); vote (bool &, nano::stream &, nano::block_type, nano::block_uniquer * = nullptr); - vote (nano::account const &, nano::raw_key const &, uint64_t, std::shared_ptr const &); - vote (nano::account const &, nano::raw_key const &, uint64_t, std::vector const &); + vote (nano::account const &, nano::raw_key const &, uint64_t timestamp, std::shared_ptr const &); + vote (nano::account const &, nano::raw_key const &, uint64_t timestamp, std::vector const &); std::string hashes_string () const; nano::block_hash hash () const; nano::block_hash full_hash () const; @@ -264,8 +264,15 @@ class vote final boost::transform_iterator begin () const; boost::transform_iterator end () const; std::string to_json () const; + uint64_t timestamp () const; + static uint64_t constexpr timestamp_max = { 0xffff'ffff'ffff'ffffULL }; + static uint64_t constexpr timestamp_min = { 0x0000'0000'0000'0001ULL }; + +private: // Vote timestamp - uint64_t timestamp; + uint64_t timestamp_m; + +public: // The blocks, or block hashes, that this vote is for std::vector, nano::block_hash>> blocks; // Account that's voting From db0f691175114796617a3aa6bd234e21b4451fe0 Mon Sep 17 00:00:00 2001 From: coranos Date: Sat, 6 Nov 2021 16:20:24 -0500 Subject: [PATCH 268/346] Gxrb_ratio => MBAN_ratio --- nano/core_test/blockprocessor.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nano/core_test/blockprocessor.cpp b/nano/core_test/blockprocessor.cpp index 46d06f1317..a6ddcf4c5d 100644 --- a/nano/core_test/blockprocessor.cpp +++ b/nano/core_test/blockprocessor.cpp @@ -28,7 +28,7 @@ TEST (block_processor, broadcast_block_on_arrival) .account (nano::dev::genesis_key.pub) .previous (nano::dev::genesis->hash ()) .representative (nano::dev::genesis_key.pub) - .balance (nano::dev::constants.genesis_amount - nano::Gxrb_ratio) + .balance (nano::dev::constants.genesis_amount - nano::MBAN_ratio) .link (nano::dev::genesis_key.pub) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) @@ -38,4 +38,4 @@ TEST (block_processor, broadcast_block_on_arrival) node1->process_active (send1); // Checks whether the block was broadcast. ASSERT_TIMELY (5s, node2->ledger.block_or_pruned_exists (send1->hash ())); -} \ No newline at end of file +} From 6e45ffc608596784f320b842272da07d847a3d32 Mon Sep 17 00:00:00 2001 From: coranos Date: Sat, 6 Nov 2021 16:26:06 -0500 Subject: [PATCH 269/346] Gxrb_ratio => MBAN_ratio --- nano/core_test/system.cpp | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/nano/core_test/system.cpp b/nano/core_test/system.cpp index 4854fbd73f..1a9414c664 100644 --- a/nano/core_test/system.cpp +++ b/nano/core_test/system.cpp @@ -153,10 +153,10 @@ TEST (system, rep_initialize_one_reserve) { nano::system system; nano::keypair key; - system.ledger_initialization_set ({ key }, nano::Gxrb_ratio); + system.ledger_initialization_set ({ key }, nano::MBAN_ratio); auto node = system.add_node (); - ASSERT_EQ (nano::dev::constants.genesis_amount - nano::Gxrb_ratio, node->balance (key.pub)); - ASSERT_EQ (nano::Gxrb_ratio, node->balance (nano::dev::genesis_key.pub)); + ASSERT_EQ (nano::dev::constants.genesis_amount - nano::MBAN_ratio, node->balance (key.pub)); + ASSERT_EQ (nano::MBAN_ratio, node->balance (nano::dev::genesis_key.pub)); } TEST (system, rep_initialize_two_reserve) @@ -164,10 +164,10 @@ TEST (system, rep_initialize_two_reserve) nano::system system; nano::keypair key0; nano::keypair key1; - system.ledger_initialization_set ({ key0, key1 }, nano::Gxrb_ratio); + system.ledger_initialization_set ({ key0, key1 }, nano::MBAN_ratio); auto node = system.add_node (); - ASSERT_EQ ((nano::dev::constants.genesis_amount - nano::Gxrb_ratio) / 2, node->balance (key0.pub)); - ASSERT_EQ ((nano::dev::constants.genesis_amount - nano::Gxrb_ratio) / 2, node->balance (key1.pub)); + ASSERT_EQ ((nano::dev::constants.genesis_amount - nano::MBAN_ratio) / 2, node->balance (key0.pub)); + ASSERT_EQ ((nano::dev::constants.genesis_amount - nano::MBAN_ratio) / 2, node->balance (key1.pub)); } TEST (system, rep_initialize_many) @@ -175,11 +175,11 @@ TEST (system, rep_initialize_many) nano::system system; nano::keypair key0; nano::keypair key1; - system.ledger_initialization_set ({ key0, key1 }, nano::Gxrb_ratio); + system.ledger_initialization_set ({ key0, key1 }, nano::MBAN_ratio); auto node0 = system.add_node (); - ASSERT_EQ ((nano::dev::constants.genesis_amount - nano::Gxrb_ratio) / 2, node0->balance (key0.pub)); - ASSERT_EQ ((nano::dev::constants.genesis_amount - nano::Gxrb_ratio) / 2, node0->balance (key1.pub)); + ASSERT_EQ ((nano::dev::constants.genesis_amount - nano::MBAN_ratio) / 2, node0->balance (key0.pub)); + ASSERT_EQ ((nano::dev::constants.genesis_amount - nano::MBAN_ratio) / 2, node0->balance (key1.pub)); auto node1 = system.add_node (); - ASSERT_EQ ((nano::dev::constants.genesis_amount - nano::Gxrb_ratio) / 2, node1->balance (key0.pub)); - ASSERT_EQ ((nano::dev::constants.genesis_amount - nano::Gxrb_ratio) / 2, node1->balance (key1.pub)); + ASSERT_EQ ((nano::dev::constants.genesis_amount - nano::MBAN_ratio) / 2, node1->balance (key0.pub)); + ASSERT_EQ ((nano::dev::constants.genesis_amount - nano::MBAN_ratio) / 2, node1->balance (key1.pub)); } From d295f02e5185b62902b9cf6c01cd9b434c683098 Mon Sep 17 00:00:00 2001 From: coranos Date: Sat, 6 Nov 2021 17:23:49 -0500 Subject: [PATCH 270/346] reverting reneq .gitignore --- .gitignore | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/.gitignore b/.gitignore index 9e48e4df49..eef7f3c2df 100644 --- a/.gitignore +++ b/.gitignore @@ -81,14 +81,3 @@ Testing # Autogenerated Build Prep artifacts util/build_prep/*/prep.sh - -# rene compiling ignore -.gitignore -bootstrap_weights_beta.cpp -bootstrap_weights_live.cpp -build_version.cc -config-node.toml.sample -config-rpc.toml.sample -flatc -nano/ipc_flatbuffers_lib/flatbuffers-build/FlatbuffersConfigVersion.cmake -nano/ipc_flatbuffers_lib/flatbuffers-build/flatbuffers.pc \ No newline at end of file From b698dfb984c82a587953c3e9d087cec967950b9f Mon Sep 17 00:00:00 2001 From: coranos Date: Sat, 6 Nov 2021 17:31:17 -0500 Subject: [PATCH 271/346] making shell files same --- ci/actions/linux/deploy-docker.sh | 2 +- ci/actions/linux/install_deps.sh | 8 ++++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/ci/actions/linux/deploy-docker.sh b/ci/actions/linux/deploy-docker.sh index ae15e32eae..91457471e8 100755 --- a/ci/actions/linux/deploy-docker.sh +++ b/ci/actions/linux/deploy-docker.sh @@ -51,7 +51,7 @@ if [ -n "$DOCKER_PASSWORD" ]; then echo "Deployed nano-env" exit 0 else - tags=$(docker images --format '{{.Repository}}:{{.Tag }}' | grep bananocoin | grep -vE "env|ghcr.io|none") + tags=$(docker images --format '{{.Repository}}:{{.Tag }}' | grep bananocoin | grep -vE "env|ghcr.io|none|latest") for a in $tags; do "$scripts"/custom-timeout.sh 30 docker push "$a" done diff --git a/ci/actions/linux/install_deps.sh b/ci/actions/linux/install_deps.sh index 525a46f813..df682467dd 100755 --- a/ci/actions/linux/install_deps.sh +++ b/ci/actions/linux/install_deps.sh @@ -3,5 +3,9 @@ sudo mkdir -p /etc/docker && echo '{"ipv6":true,"fixed-cidr-v6":"2001:db8:1::/64"}' | sudo tee /etc/docker/daemon.json && sudo service docker restart ci/build-docker-image.sh docker/ci/Dockerfile-base bananocoin/nano-env:base -ci/build-docker-image.sh docker/ci/Dockerfile-gcc bananocoin/nano-env:gcc -ci/build-docker-image.sh docker/ci/Dockerfile-clang-6 bananocoin/nano-env:clang-6 +if [[ "${COMPILER:-}" != "" ]]; then + ci/build-docker-image.sh docker/ci/Dockerfile-gcc bananocoin/nano-env:${COMPILER} +else + ci/build-docker-image.sh docker/ci/Dockerfile-gcc nanocurrency/nano-env:gcc + ci/build-docker-image.sh docker/ci/Dockerfile-clang-6 nanocurrency/nano-env:clang-6 +fi From d90742c63b473587fe918299a0682446a494cff6 Mon Sep 17 00:00:00 2001 From: coranos Date: Sat, 6 Nov 2021 17:32:44 -0500 Subject: [PATCH 272/346] making shell files same --- ci/actions/linux/install_deps.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/ci/actions/linux/install_deps.sh b/ci/actions/linux/install_deps.sh index df682467dd..d9d9bc084d 100755 --- a/ci/actions/linux/install_deps.sh +++ b/ci/actions/linux/install_deps.sh @@ -4,8 +4,8 @@ sudo mkdir -p /etc/docker && echo '{"ipv6":true,"fixed-cidr-v6":"2001:db8:1::/64 ci/build-docker-image.sh docker/ci/Dockerfile-base bananocoin/nano-env:base if [[ "${COMPILER:-}" != "" ]]; then - ci/build-docker-image.sh docker/ci/Dockerfile-gcc bananocoin/nano-env:${COMPILER} + ci/build-docker-image.sh docker/ci/Dockerfile-gcc bananocoin/nano-env:${COMPILER} else - ci/build-docker-image.sh docker/ci/Dockerfile-gcc nanocurrency/nano-env:gcc - ci/build-docker-image.sh docker/ci/Dockerfile-clang-6 nanocurrency/nano-env:clang-6 + ci/build-docker-image.sh docker/ci/Dockerfile-gcc nanocurrency/nano-env:gcc + ci/build-docker-image.sh docker/ci/Dockerfile-clang-6 nanocurrency/nano-env:clang-6 fi From f49be1a9ee9b3c7ebd60d0b421af80e9a215a64c Mon Sep 17 00:00:00 2001 From: coranos Date: Sat, 6 Nov 2021 17:34:46 -0500 Subject: [PATCH 273/346] making shell files same --- ci/build-centos.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/ci/build-centos.sh b/ci/build-centos.sh index a16f8072ab..8c6c95dd20 100755 --- a/ci/build-centos.sh +++ b/ci/build-centos.sh @@ -16,7 +16,6 @@ run_build() { run_update() { for file in ./nanocurrency*.in; do - outfile="$(echo "${file}" | sed 's@\.in$@@')" echo "Updating \"${outfile}\"..." From 24cd771072941a4ec8f7beea94f1b3c1d41ca6bf Mon Sep 17 00:00:00 2001 From: coranos Date: Sat, 6 Nov 2021 17:35:48 -0500 Subject: [PATCH 274/346] making shell files same --- ci/build-centos.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ci/build-centos.sh b/ci/build-centos.sh index 8c6c95dd20..8372ba2a5a 100755 --- a/ci/build-centos.sh +++ b/ci/build-centos.sh @@ -15,8 +15,8 @@ run_build() { } run_update() { - for file in ./nanocurrency*.in; do - outfile="$(echo "${file}" | sed 's@\.in$@@')" + for file in ./bananocoin*.in; do + outfile="${file//.in/}" echo "Updating \"${outfile}\"..." From a5e681b1956a8b1165b78c6b7b2a5ff91031f33a Mon Sep 17 00:00:00 2001 From: coranos Date: Sat, 6 Nov 2021 17:39:02 -0500 Subject: [PATCH 275/346] removing stray crlf --- nano/core_test/block_store.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/nano/core_test/block_store.cpp b/nano/core_test/block_store.cpp index 9c1b8caedd..b15efe1a6c 100644 --- a/nano/core_test/block_store.cpp +++ b/nano/core_test/block_store.cpp @@ -1005,7 +1005,6 @@ TEST (mdb_block_store, sideband_height) nano::stat stat; nano::ledger ledger (store, stat, nano::dev::constants); auto transaction (store.tx_begin_write ()); - store.initialize (transaction, ledger.cache); nano::work_pool pool{ nano::dev::network_params.network, std::numeric_limits::max () }; nano::send_block send (nano::dev::genesis->hash (), nano::dev::genesis_key.pub, nano::dev::constants.genesis_amount - nano::MBAN_ratio, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *pool.generate (nano::dev::genesis->hash ())); From bf22417a10a3cd770af66e9a3732775ca2d7f65d Mon Sep 17 00:00:00 2001 From: Thiago Silva <82097354+thsfs@users.noreply.github.com> Date: Sat, 6 Nov 2021 19:44:58 -0300 Subject: [PATCH 276/346] Removing old (disabled) conflicts.add_two unit test (#3547) --- nano/core_test/conflicts.cpp | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/nano/core_test/conflicts.cpp b/nano/core_test/conflicts.cpp index 6f994cf162..0c296913a7 100644 --- a/nano/core_test/conflicts.cpp +++ b/nano/core_test/conflicts.cpp @@ -49,28 +49,6 @@ TEST (conflicts, add_existing) ASSERT_NE (votes.end (), votes.find (key2.pub)); } -// Test disabled because it's failing intermittently. -// PR in which it got disabled: https://github.com/nanocurrency/nano-node/pull/3536 -// Issue for investigating it: https://github.com/nanocurrency/nano-node/issues/3535 -TEST (conflicts, DISABLED_add_two) -{ - nano::system system (1); - auto & node1 (*system.nodes[0]); - nano::keypair key1; - auto send1 (std::make_shared (nano::dev::genesis->hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); - node1.work_generate_blocking (*send1); - ASSERT_EQ (nano::process_result::progress, node1.process (*send1).code); - node1.block_confirm (send1); - node1.active.election (send1->qualified_root ())->force_confirm (); - nano::keypair key2; - auto send2 (std::make_shared (send1->hash (), key2.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); - node1.work_generate_blocking (*send2); - ASSERT_EQ (nano::process_result::progress, node1.process (*send2).code); - node1.scheduler.activate (nano::dev::genesis_key.pub, node1.store.tx_begin_read ()); - node1.scheduler.flush (); - ASSERT_EQ (2, node1.active.size ()); -} - TEST (conflicts, add_two) { nano::system system{}; From c3eb619100ee682f0415e878d4146c84bd07bf05 Mon Sep 17 00:00:00 2001 From: coranos Date: Sat, 6 Nov 2021 18:57:52 -0500 Subject: [PATCH 277/346] re-adding test add_two --- nano/core_test/conflicts.cpp | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/nano/core_test/conflicts.cpp b/nano/core_test/conflicts.cpp index 6f994cf162..5345203d0c 100644 --- a/nano/core_test/conflicts.cpp +++ b/nano/core_test/conflicts.cpp @@ -49,10 +49,7 @@ TEST (conflicts, add_existing) ASSERT_NE (votes.end (), votes.find (key2.pub)); } -// Test disabled because it's failing intermittently. -// PR in which it got disabled: https://github.com/nanocurrency/nano-node/pull/3536 -// Issue for investigating it: https://github.com/nanocurrency/nano-node/issues/3535 -TEST (conflicts, DISABLED_add_two) +TEST (conflicts, add_two) { nano::system system (1); auto & node1 (*system.nodes[0]); From 07c8237e52450ecea3d4d36f76726f1fcdcd719a Mon Sep 17 00:00:00 2001 From: coranos Date: Sat, 6 Nov 2021 18:59:48 -0500 Subject: [PATCH 278/346] re-adding test add_two --- nano/core_test/conflicts.cpp | 19 ------------------- 1 file changed, 19 deletions(-) diff --git a/nano/core_test/conflicts.cpp b/nano/core_test/conflicts.cpp index 5345203d0c..0c296913a7 100644 --- a/nano/core_test/conflicts.cpp +++ b/nano/core_test/conflicts.cpp @@ -49,25 +49,6 @@ TEST (conflicts, add_existing) ASSERT_NE (votes.end (), votes.find (key2.pub)); } -TEST (conflicts, add_two) -{ - nano::system system (1); - auto & node1 (*system.nodes[0]); - nano::keypair key1; - auto send1 (std::make_shared (nano::dev::genesis->hash (), key1.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); - node1.work_generate_blocking (*send1); - ASSERT_EQ (nano::process_result::progress, node1.process (*send1).code); - node1.block_confirm (send1); - node1.active.election (send1->qualified_root ())->force_confirm (); - nano::keypair key2; - auto send2 (std::make_shared (send1->hash (), key2.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); - node1.work_generate_blocking (*send2); - ASSERT_EQ (nano::process_result::progress, node1.process (*send2).code); - node1.scheduler.activate (nano::dev::genesis_key.pub, node1.store.tx_begin_read ()); - node1.scheduler.flush (); - ASSERT_EQ (2, node1.active.size ()); -} - TEST (conflicts, add_two) { nano::system system{}; From b49d4a24c50d62c2e5da1acb76c5a72f85b013af Mon Sep 17 00:00:00 2001 From: coranos Date: Sat, 6 Nov 2021 19:54:22 -0500 Subject: [PATCH 279/346] had MBAN instead of BAN in nano_to_raw --- nano/node/json_handler.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index a4a54d22bd..a7b24c7d67 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -2800,7 +2800,7 @@ void nano::json_handler::nano_to_raw () auto amount (amount_impl ()); if (!ec) { - auto result (amount.number () * nano::MBAN_ratio); + auto result (amount.number () * nano::BAN_ratio); if (result > amount.number ()) { response_l.put ("amount", result.convert_to ()); @@ -2818,7 +2818,7 @@ void nano::json_handler::raw_to_nano () auto amount (amount_impl ()); if (!ec) { - auto result (amount.number () / nano::MBAN_ratio); + auto result (amount.number () / nano::BAN_ratio); response_l.put ("amount", result.convert_to ()); } response_errors (); From 3641cfe9650c71181f3305d3ac93a05fdd0b7380 Mon Sep 17 00:00:00 2001 From: coranos Date: Sat, 6 Nov 2021 20:04:59 -0500 Subject: [PATCH 280/346] removing qt_system --- nano/qt_system/entry.cpp | 49 ---------------------------------------- 1 file changed, 49 deletions(-) delete mode 100644 nano/qt_system/entry.cpp diff --git a/nano/qt_system/entry.cpp b/nano/qt_system/entry.cpp deleted file mode 100644 index ff13982b6a..0000000000 --- a/nano/qt_system/entry.cpp +++ /dev/null @@ -1,49 +0,0 @@ -#include -#include -#include -#include -#include -#include - -#include - -#include -int main (int argc, char ** argv) -{ - nano::force_nano_dev_network (); - nano::node_singleton_memory_pool_purge_guard memory_pool_cleanup_guard; - QApplication application (argc, argv); - QCoreApplication::setOrganizationName ("Banano"); - QCoreApplication::setOrganizationDomain ("nano.org"); - QCoreApplication::setApplicationName ("Banano Wallet"); - nano_qt::eventloop_processor processor; - const uint16_t count (16); - nano::system system (count); - nano::thread_runner runner (system.io_ctx, system.nodes[0]->config.io_threads); - std::unique_ptr client_tabs (new QTabWidget); - std::vector> guis; - for (auto i (0); i < count; ++i) - { - auto wallet (system.nodes[i]->wallets.create (nano::random_wallet_id ())); - nano::keypair key; - wallet->insert_adhoc (key.prv); - guis.push_back (std::make_unique (application, processor, *system.nodes[i], wallet, key.pub)); - client_tabs->addTab (guis.back ()->client_window, boost::str (boost::format ("Wallet %1%") % i).c_str ()); - } - client_tabs->show (); - QObject::connect (&application, &QApplication::aboutToQuit, [&] () { - system.stop (); - }); - int result; - try - { - result = application.exec (); - } - catch (...) - { - result = -1; - debug_assert (false); - } - runner.join (); - return result; -} From 82d1b6c7b2a0412cdade3d1ff85761e482884927 Mon Sep 17 00:00:00 2001 From: coranos Date: Sat, 6 Nov 2021 20:08:19 -0500 Subject: [PATCH 281/346] fixing QT.cpp --- nano/qt/qt.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nano/qt/qt.cpp b/nano/qt/qt.cpp index 0a32460f09..16fb0e9d86 100644 --- a/nano/qt/qt.cpp +++ b/nano/qt/qt.cpp @@ -1825,7 +1825,7 @@ nano_qt::advanced_actions::advanced_actions (nano_qt::wallet & wallet_a) : QObject::connect (nano_unit, &QRadioButton::toggled, [this] () { if (nano_unit->isChecked ()) { - this->wallet.change_rendering_ratio (nano::Mxrb_ratio); + this->wallet.change_rendering_ratio (nano::BAN_ratio); QSettings ().setValue (saved_ratio_key, ratio_group->id (nano_unit)); } }); From f8dbbf5accf0cd82eb10a65f3506a433362392b5 Mon Sep 17 00:00:00 2001 From: coranos Date: Sat, 6 Nov 2021 20:16:36 -0500 Subject: [PATCH 282/346] fixing whitespace --- nano/secure/common.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nano/secure/common.cpp b/nano/secure/common.cpp index 4c3292b9aa..487b285a2f 100644 --- a/nano/secure/common.cpp +++ b/nano/secure/common.cpp @@ -56,7 +56,7 @@ char const * live_genesis_data = R"%%%({ "account": "ban_1bananobh5rat99qfgt1ptpieie5swmoth87thi74qgbfrij7dcgjiij94xr", "work": "fa055f79fa56abcf", "signature": "533DCAB343547B93C4128E779848DEA5877D3278CB5EA948BB3A9AA1AE0DB293DE6D9DA4F69E8D1DDFA385F9B4C5E4F38DFA42C00D7B183560435D07AFA18900" - })%%%"; + })%%%"; std::string const test_genesis_data = nano::get_env_or_default ("NANO_TEST_GENESIS_BLOCK", R"%%%({ "type": "open", From 0c1a0fe0cc44dac58358501186cb7a41fa7e189f Mon Sep 17 00:00:00 2001 From: coranos Date: Sat, 6 Nov 2021 20:17:39 -0500 Subject: [PATCH 283/346] fixing whitespace --- nano/secure/common.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nano/secure/common.cpp b/nano/secure/common.cpp index 487b285a2f..c72da84b7d 100644 --- a/nano/secure/common.cpp +++ b/nano/secure/common.cpp @@ -56,7 +56,7 @@ char const * live_genesis_data = R"%%%({ "account": "ban_1bananobh5rat99qfgt1ptpieie5swmoth87thi74qgbfrij7dcgjiij94xr", "work": "fa055f79fa56abcf", "signature": "533DCAB343547B93C4128E779848DEA5877D3278CB5EA948BB3A9AA1AE0DB293DE6D9DA4F69E8D1DDFA385F9B4C5E4F38DFA42C00D7B183560435D07AFA18900" - })%%%"; +})%%%"; std::string const test_genesis_data = nano::get_env_or_default ("NANO_TEST_GENESIS_BLOCK", R"%%%({ "type": "open", From 8410b293a23834f57aefca21e10fd9f5c1d12247 Mon Sep 17 00:00:00 2001 From: coranos Date: Sat, 6 Nov 2021 20:18:52 -0500 Subject: [PATCH 284/346] fixing whitespace --- nano/secure/common.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nano/secure/common.cpp b/nano/secure/common.cpp index c72da84b7d..173f4921cf 100644 --- a/nano/secure/common.cpp +++ b/nano/secure/common.cpp @@ -56,7 +56,7 @@ char const * live_genesis_data = R"%%%({ "account": "ban_1bananobh5rat99qfgt1ptpieie5swmoth87thi74qgbfrij7dcgjiij94xr", "work": "fa055f79fa56abcf", "signature": "533DCAB343547B93C4128E779848DEA5877D3278CB5EA948BB3A9AA1AE0DB293DE6D9DA4F69E8D1DDFA385F9B4C5E4F38DFA42C00D7B183560435D07AFA18900" -})%%%"; + })%%%"; std::string const test_genesis_data = nano::get_env_or_default ("NANO_TEST_GENESIS_BLOCK", R"%%%({ "type": "open", From 57757e3b1edde7771f2601faf3012e83773ccce0 Mon Sep 17 00:00:00 2001 From: coranos Date: Sat, 6 Nov 2021 20:38:41 -0500 Subject: [PATCH 285/346] fixing difficulty test. --- nano/core_test/difficulty.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nano/core_test/difficulty.cpp b/nano/core_test/difficulty.cpp index 5de21226d7..87154eee9a 100644 --- a/nano/core_test/difficulty.cpp +++ b/nano/core_test/difficulty.cpp @@ -24,7 +24,7 @@ TEST (difficultyDeathTest, multipliers) { uint64_t base = 0xfffffe0000000000; - uint64_t difficulty = 0xfffffe0000000000; + uint64_t difficulty = 0xffffffc000000000; double expected_multiplier = 0.125; ASSERT_NEAR (expected_multiplier, nano::difficulty::to_multiplier (difficulty, base), 1e-10); From 089de1577d1b15847817ea83f3804aa2de900742 Mon Sep 17 00:00:00 2001 From: coranos Date: Sat, 6 Nov 2021 20:40:58 -0500 Subject: [PATCH 286/346] fixing difficulty test. --- nano/core_test/difficulty.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nano/core_test/difficulty.cpp b/nano/core_test/difficulty.cpp index 87154eee9a..f766a34946 100644 --- a/nano/core_test/difficulty.cpp +++ b/nano/core_test/difficulty.cpp @@ -23,8 +23,8 @@ TEST (difficultyDeathTest, multipliers) } { - uint64_t base = 0xfffffe0000000000; - uint64_t difficulty = 0xffffffc000000000; + uint64_t base = 0xffffffc000000000; + uint64_t difficulty = 0xfffffe0000000000; double expected_multiplier = 0.125; ASSERT_NEAR (expected_multiplier, nano::difficulty::to_multiplier (difficulty, base), 1e-10); From 6a5837c52a84ee4fa1743531de9323ebcd68ac89 Mon Sep 17 00:00:00 2001 From: coranos Date: Sat, 6 Nov 2021 20:46:35 -0500 Subject: [PATCH 287/346] fixing block test --- nano/core_test/block.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nano/core_test/block.cpp b/nano/core_test/block.cpp index e4627facf3..7834e59b57 100644 --- a/nano/core_test/block.cpp +++ b/nano/core_test/block.cpp @@ -630,7 +630,7 @@ TEST (block_builder, open) .representative_address ("ban_1bananobh5rat99qfgt1ptpieie5swmoth87thi74qgbfrij7dcgjiij94xr") .source_hex ("2514452A978F08D1CF76BB40B6AD064183CF275D3CC5D3E0515DC96E2112AD4E") .build (ec); - ASSERT_EQ (block->hash ().to_string (), "991CF190094C00F0B68E2E5F75F6BEE95A2E0BD93CEAA4A6734DB9F19B728948"); + ASSERT_EQ (block->hash ().to_string (), "F61A79F286ABC5CC01D3D09686F0567812B889A5C63ADE0E82DD30F3B2D96463"); ASSERT_EQ (block->source ().to_string (), "2514452A978F08D1CF76BB40B6AD064183CF275D3CC5D3E0515DC96E2112AD4E"); ASSERT_TRUE (block->destination ().is_zero ()); ASSERT_TRUE (block->link ().is_zero ()); @@ -710,7 +710,7 @@ TEST (block_builder, send) .build (ec); ASSERT_EQ (block->hash ().to_string (), "4560E7B1F3735D082700CFC2852F5D1F378F7418FD24CEF1AD45AB69316F15CD"); ASSERT_TRUE (block->source ().is_zero ()); - ASSERT_EQ (block->destination ().to_account (), "nano_1gys8r4crpxhp94n4uho5cshaho81na6454qni5gu9n53gksoyy1wcd4udyb"); + ASSERT_EQ (block->destination ().to_account (), "ban_1gys8r4crpxhp94n4uho5cshaho81na6454qni5gu9n53gksoyy1wcd4udyb"); ASSERT_TRUE (block->link ().is_zero ()); } From aa3602e1f0dd2ba087fed7e1344df67f23cc9380 Mon Sep 17 00:00:00 2001 From: coranos Date: Sat, 6 Nov 2021 20:51:17 -0500 Subject: [PATCH 288/346] fixing difficulty, message, toml tests. --- nano/core_test/difficulty.cpp | 4 ++-- nano/core_test/message.cpp | 2 +- nano/core_test/toml.cpp | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/nano/core_test/difficulty.cpp b/nano/core_test/difficulty.cpp index f766a34946..aca6358ae7 100644 --- a/nano/core_test/difficulty.cpp +++ b/nano/core_test/difficulty.cpp @@ -111,8 +111,8 @@ TEST (difficulty, network_constants) auto & beta_thresholds = nano::work_thresholds::publish_beta; auto & dev_thresholds = nano::work_thresholds::publish_dev; - ASSERT_NEAR (8., nano::difficulty::to_multiplier (full_thresholds.epoch_2, full_thresholds.epoch_1), 1e-10); - ASSERT_NEAR (1 / 8., nano::difficulty::to_multiplier (full_thresholds.epoch_2_receive, full_thresholds.epoch_1), 1e-10); + ASSERT_NEAR (32., nano::difficulty::to_multiplier (full_thresholds.epoch_2, full_thresholds.epoch_1), 1e-10); + ASSERT_NEAR (0., nano::difficulty::to_multiplier (full_thresholds.epoch_2_receive, full_thresholds.epoch_1), 1e-10); ASSERT_NEAR (1., nano::difficulty::to_multiplier (full_thresholds.epoch_2_receive, full_thresholds.entry), 1e-10); ASSERT_NEAR (1., nano::difficulty::to_multiplier (full_thresholds.epoch_2, full_thresholds.base), 1e-10); diff --git a/nano/core_test/message.cpp b/nano/core_test/message.cpp index 67a90f28a0..27fa690eda 100644 --- a/nano/core_test/message.cpp +++ b/nano/core_test/message.cpp @@ -52,7 +52,7 @@ TEST (message, publish_serialization) publish.header.serialize (stream); } ASSERT_EQ (8, bytes.size ()); - ASSERT_EQ (0x52, bytes[0]); + ASSERT_EQ (0x42, bytes[0]); ASSERT_EQ (0x41, bytes[1]); ASSERT_EQ (nano::dev::network_params.network.protocol_version, bytes[2]); ASSERT_EQ (nano::dev::network_params.network.protocol_version, bytes[3]); diff --git a/nano/core_test/toml.cpp b/nano/core_test/toml.cpp index 23e5fbbde1..19d5c25070 100644 --- a/nano/core_test/toml.cpp +++ b/nano/core_test/toml.cpp @@ -413,7 +413,7 @@ TEST (toml, daemon_config_deserialize_no_defaults) peering_port = 999 pow_sleep_interval= 999 preconfigured_peers = ["dev.org"] - preconfigured_representatives = ["nano_3arg3asgtigae3xckabaaewkx3bzsh7nwz7jkmjos79ihyaxwphhm6qgjps4"] + preconfigured_representatives = ["bano_3arg3asgtigae3xckabaaewkx3bzsh7nwz7jkmjos79ihyaxwphhm6qgjps4"] receive_minimum = "999" signature_checker_threads = 999 tcp_incoming_connections_max = 999 From 116fdb3cd4c66a20e2bcbf72ccb77c345173d174 Mon Sep 17 00:00:00 2001 From: coranos Date: Sat, 6 Nov 2021 20:53:55 -0500 Subject: [PATCH 289/346] fixing amount test --- nano/core_test/uint256_union.cpp | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/nano/core_test/uint256_union.cpp b/nano/core_test/uint256_union.cpp index bbba571889..40db1c4bee 100644 --- a/nano/core_test/uint256_union.cpp +++ b/nano/core_test/uint256_union.cpp @@ -99,11 +99,11 @@ TEST (uint128_union, balance_format) { ASSERT_EQ ("0", nano::amount (nano::uint128_t ("0")).format_balance (nano::BAN_ratio, 0, false)); ASSERT_EQ ("0", nano::amount (nano::uint128_t ("0")).format_balance (nano::BAN_ratio, 2, true)); - ASSERT_EQ ("340,282,366", nano::amount (nano::uint128_t ("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF")).format_balance (nano::BAN_ratio, 0, true)); - ASSERT_EQ ("340,282,366.920938463463374607431768211455", nano::amount (nano::uint128_t ("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF")).format_balance (nano::BAN_ratio, 64, true)); - ASSERT_EQ ("340,282,366,920,938,463,463,374,607,431,768,211,455", nano::amount (nano::uint128_t ("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF")).format_balance (1, 4, true)); - ASSERT_EQ ("340,282,366", nano::amount (nano::uint128_t ("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE")).format_balance (nano::BAN_ratio, 0, true)); - ASSERT_EQ ("340,282,366.920938463463374607431768211454", nano::amount (nano::uint128_t ("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE")).format_balance (nano::BAN_ratio, 64, true)); + ASSERT_EQ ("3,402,823,669", nano::amount (nano::uint128_t ("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF")).format_balance (nano::BAN_ratio, 0, true)); + ASSERT_EQ ("3,402,823,669.20938463463374607431768211455", nano::amount (nano::uint128_t ("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF")).format_balance (nano::BAN_ratio, 64, true)); + ASSERT_EQ ("3,402,823,669,209,384,634,633,746,074,317,682,114,55", nano::amount (nano::uint128_t ("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF")).format_balance (1, 4, true)); + ASSERT_EQ ("3,402,823,669", nano::amount (nano::uint128_t ("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE")).format_balance (nano::BAN_ratio, 0, true)); + ASSERT_EQ ("3,402,823,669.20938463463374607431768211454", nano::amount (nano::uint128_t ("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE")).format_balance (nano::BAN_ratio, 64, true)); ASSERT_EQ ("340282366920938463463374607431768211454", nano::amount (nano::uint128_t ("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE")).format_balance (1, 4, false)); ASSERT_EQ ("170,141,183", nano::amount (nano::uint128_t ("0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE")).format_balance (nano::BAN_ratio, 0, true)); ASSERT_EQ ("170,141,183.460469231731687303715884105726", nano::amount (nano::uint128_t ("0x7FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE")).format_balance (nano::BAN_ratio, 64, true)); From 93bbdfa43fdd233b1c9d7529756ab40963e6deb5 Mon Sep 17 00:00:00 2001 From: coranos Date: Sat, 6 Nov 2021 20:57:10 -0500 Subject: [PATCH 290/346] fixing uint256 and wallet tests --- nano/core_test/uint256_union.cpp | 4 ++-- nano/core_test/wallet.cpp | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/nano/core_test/uint256_union.cpp b/nano/core_test/uint256_union.cpp index 40db1c4bee..9475703b0d 100644 --- a/nano/core_test/uint256_union.cpp +++ b/nano/core_test/uint256_union.cpp @@ -383,7 +383,7 @@ TEST (uint256_union, account_transcode) * Handle different offsets for the underscore separator * for "ban_" prefixed and "nano_" prefixed accounts */ - unsigned offset = (text.front () == 'x') ? 3 : 4; + unsigned offset = (text.front () == 'b') ? 3 : 4; ASSERT_EQ ('_', text[offset]); text[offset] = '-'; nano::account value2; @@ -401,7 +401,7 @@ TEST (uint256_union, account_encode_lex) /* * Handle different lengths for "ban_" prefixed and "nano_" prefixed accounts */ - unsigned length = (min_text.front () == 'x') ? 64 : 65; + unsigned length = (min_text.front () == 'b') ? 64 : 65; ASSERT_EQ (length, min_text.size ()); ASSERT_EQ (length, max_text.size ()); diff --git a/nano/core_test/wallet.cpp b/nano/core_test/wallet.cpp index c8d7f9215d..52fbe1d09a 100644 --- a/nano/core_test/wallet.cpp +++ b/nano/core_test/wallet.cpp @@ -342,7 +342,7 @@ TEST (account, encode_zero) /* * Handle different lengths for "ban_" prefixed and "nano_" prefixed accounts */ - ASSERT_EQ ((str0.front () == 'x') ? 64 : 65, str0.size ()); + ASSERT_EQ ((str0.front () == 'b') ? 64 : 65, str0.size ()); ASSERT_EQ (65, str0.size ()); nano::account number1; ASSERT_FALSE (number1.decode_account (str0)); @@ -359,7 +359,7 @@ TEST (account, encode_all) /* * Handle different lengths for "ban_" prefixed and "nano_" prefixed accounts */ - ASSERT_EQ ((str0.front () == 'x') ? 64 : 65, str0.size ()); + ASSERT_EQ ((str0.front () == 'b') ? 64 : 65, str0.size ()); nano::account number1; ASSERT_FALSE (number1.decode_account (str0)); ASSERT_EQ (number0, number1); From 7b35f52499a8188fcf1be39c6f876519abfaa94c Mon Sep 17 00:00:00 2001 From: coranos Date: Sat, 6 Nov 2021 21:02:00 -0500 Subject: [PATCH 291/346] debugging difficulty test. --- nano/core_test/difficulty.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nano/core_test/difficulty.cpp b/nano/core_test/difficulty.cpp index aca6358ae7..bb9374f013 100644 --- a/nano/core_test/difficulty.cpp +++ b/nano/core_test/difficulty.cpp @@ -112,7 +112,7 @@ TEST (difficulty, network_constants) auto & dev_thresholds = nano::work_thresholds::publish_dev; ASSERT_NEAR (32., nano::difficulty::to_multiplier (full_thresholds.epoch_2, full_thresholds.epoch_1), 1e-10); - ASSERT_NEAR (0., nano::difficulty::to_multiplier (full_thresholds.epoch_2_receive, full_thresholds.epoch_1), 1e-10); + ASSERT_NEAR (1., nano::difficulty::to_multiplier (full_thresholds.epoch_2_receive, full_thresholds.epoch_1), 1e-10); ASSERT_NEAR (1., nano::difficulty::to_multiplier (full_thresholds.epoch_2_receive, full_thresholds.entry), 1e-10); ASSERT_NEAR (1., nano::difficulty::to_multiplier (full_thresholds.epoch_2, full_thresholds.base), 1e-10); From e79f50e249412a6e5ec5dd65be710b75a7b9e4dc Mon Sep 17 00:00:00 2001 From: coranos Date: Sat, 6 Nov 2021 21:07:42 -0500 Subject: [PATCH 292/346] debugging difficulty test. --- nano/core_test/difficulty.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nano/core_test/difficulty.cpp b/nano/core_test/difficulty.cpp index bb9374f013..d3bf337b12 100644 --- a/nano/core_test/difficulty.cpp +++ b/nano/core_test/difficulty.cpp @@ -112,7 +112,7 @@ TEST (difficulty, network_constants) auto & dev_thresholds = nano::work_thresholds::publish_dev; ASSERT_NEAR (32., nano::difficulty::to_multiplier (full_thresholds.epoch_2, full_thresholds.epoch_1), 1e-10); - ASSERT_NEAR (1., nano::difficulty::to_multiplier (full_thresholds.epoch_2_receive, full_thresholds.epoch_1), 1e-10); + ASSERT_NEAR (1 / 8., nano::difficulty::to_multiplier (full_thresholds.epoch_2_receive, full_thresholds.epoch_1), 1e-10); ASSERT_NEAR (1., nano::difficulty::to_multiplier (full_thresholds.epoch_2_receive, full_thresholds.entry), 1e-10); ASSERT_NEAR (1., nano::difficulty::to_multiplier (full_thresholds.epoch_2, full_thresholds.base), 1e-10); From 468c33f7a17f33d0b08a7e41b7446eae32b1922c Mon Sep 17 00:00:00 2001 From: coranos Date: Sat, 6 Nov 2021 21:10:01 -0500 Subject: [PATCH 293/346] debugging difficulty test. --- nano/core_test/difficulty.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nano/core_test/difficulty.cpp b/nano/core_test/difficulty.cpp index d3bf337b12..f766a34946 100644 --- a/nano/core_test/difficulty.cpp +++ b/nano/core_test/difficulty.cpp @@ -111,7 +111,7 @@ TEST (difficulty, network_constants) auto & beta_thresholds = nano::work_thresholds::publish_beta; auto & dev_thresholds = nano::work_thresholds::publish_dev; - ASSERT_NEAR (32., nano::difficulty::to_multiplier (full_thresholds.epoch_2, full_thresholds.epoch_1), 1e-10); + ASSERT_NEAR (8., nano::difficulty::to_multiplier (full_thresholds.epoch_2, full_thresholds.epoch_1), 1e-10); ASSERT_NEAR (1 / 8., nano::difficulty::to_multiplier (full_thresholds.epoch_2_receive, full_thresholds.epoch_1), 1e-10); ASSERT_NEAR (1., nano::difficulty::to_multiplier (full_thresholds.epoch_2_receive, full_thresholds.entry), 1e-10); ASSERT_NEAR (1., nano::difficulty::to_multiplier (full_thresholds.epoch_2, full_thresholds.base), 1e-10); From 67042e2f15de66bcb59115fd5937935c1cebe193 Mon Sep 17 00:00:00 2001 From: coranos Date: Sat, 6 Nov 2021 21:16:03 -0500 Subject: [PATCH 294/346] debugging union test --- nano/core_test/uint256_union.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nano/core_test/uint256_union.cpp b/nano/core_test/uint256_union.cpp index 9475703b0d..3fca234bae 100644 --- a/nano/core_test/uint256_union.cpp +++ b/nano/core_test/uint256_union.cpp @@ -101,7 +101,7 @@ TEST (uint128_union, balance_format) ASSERT_EQ ("0", nano::amount (nano::uint128_t ("0")).format_balance (nano::BAN_ratio, 2, true)); ASSERT_EQ ("3,402,823,669", nano::amount (nano::uint128_t ("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF")).format_balance (nano::BAN_ratio, 0, true)); ASSERT_EQ ("3,402,823,669.20938463463374607431768211455", nano::amount (nano::uint128_t ("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF")).format_balance (nano::BAN_ratio, 64, true)); - ASSERT_EQ ("3,402,823,669,209,384,634,633,746,074,317,682,114,55", nano::amount (nano::uint128_t ("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF")).format_balance (1, 4, true)); + ASSERT_EQ ("340,282,366,920,938,463,463,374,607,431,768,211,455", nano::amount (nano::uint128_t ("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF")).format_balance (1, 4, true)); ASSERT_EQ ("3,402,823,669", nano::amount (nano::uint128_t ("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE")).format_balance (nano::BAN_ratio, 0, true)); ASSERT_EQ ("3,402,823,669.20938463463374607431768211454", nano::amount (nano::uint128_t ("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE")).format_balance (nano::BAN_ratio, 64, true)); ASSERT_EQ ("340282366920938463463374607431768211454", nano::amount (nano::uint128_t ("0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFE")).format_balance (1, 4, false)); From 1b6b7eff2d18acac1bb187aea7c279c0e5d9f5cd Mon Sep 17 00:00:00 2001 From: coranos Date: Sun, 7 Nov 2021 09:16:12 -0600 Subject: [PATCH 295/346] debuging remaining tests. --- nano/core_test/difficulty.cpp | 2 +- nano/core_test/uint256_union.cpp | 2 +- nano/core_test/wallet.cpp | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/nano/core_test/difficulty.cpp b/nano/core_test/difficulty.cpp index f766a34946..d3bf337b12 100644 --- a/nano/core_test/difficulty.cpp +++ b/nano/core_test/difficulty.cpp @@ -111,7 +111,7 @@ TEST (difficulty, network_constants) auto & beta_thresholds = nano::work_thresholds::publish_beta; auto & dev_thresholds = nano::work_thresholds::publish_dev; - ASSERT_NEAR (8., nano::difficulty::to_multiplier (full_thresholds.epoch_2, full_thresholds.epoch_1), 1e-10); + ASSERT_NEAR (32., nano::difficulty::to_multiplier (full_thresholds.epoch_2, full_thresholds.epoch_1), 1e-10); ASSERT_NEAR (1 / 8., nano::difficulty::to_multiplier (full_thresholds.epoch_2_receive, full_thresholds.epoch_1), 1e-10); ASSERT_NEAR (1., nano::difficulty::to_multiplier (full_thresholds.epoch_2_receive, full_thresholds.entry), 1e-10); ASSERT_NEAR (1., nano::difficulty::to_multiplier (full_thresholds.epoch_2, full_thresholds.base), 1e-10); diff --git a/nano/core_test/uint256_union.cpp b/nano/core_test/uint256_union.cpp index 3fca234bae..cf39c10978 100644 --- a/nano/core_test/uint256_union.cpp +++ b/nano/core_test/uint256_union.cpp @@ -369,7 +369,7 @@ TEST (uint256_union, decode_nano_variant) { nano::account key; ASSERT_FALSE (key.decode_account ("ban_1111111111111111111111111111111111111111111111111111hifc8npp")); - ASSERT_FALSE (key.decode_account ("nano_1111111111111111111111111111111111111111111111111111hifc8npp")); + ASSERT_FALSE (key.decode_account ("ban_1111111111111111111111111111111111111111111111111111hifc8npp")); } TEST (uint256_union, account_transcode) diff --git a/nano/core_test/wallet.cpp b/nano/core_test/wallet.cpp index 52fbe1d09a..cbfc613f3e 100644 --- a/nano/core_test/wallet.cpp +++ b/nano/core_test/wallet.cpp @@ -343,7 +343,7 @@ TEST (account, encode_zero) * Handle different lengths for "ban_" prefixed and "nano_" prefixed accounts */ ASSERT_EQ ((str0.front () == 'b') ? 64 : 65, str0.size ()); - ASSERT_EQ (65, str0.size ()); + ASSERT_EQ (64, str0.size ()); nano::account number1; ASSERT_FALSE (number1.decode_account (str0)); ASSERT_EQ (number0, number1); From 9e5f453dea127c9612535fcc1e84312abc4e885a Mon Sep 17 00:00:00 2001 From: coranos Date: Sun, 7 Nov 2021 09:36:06 -0600 Subject: [PATCH 296/346] debuging remaining tests. --- nano/core_test/difficulty.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nano/core_test/difficulty.cpp b/nano/core_test/difficulty.cpp index d3bf337b12..14901a813d 100644 --- a/nano/core_test/difficulty.cpp +++ b/nano/core_test/difficulty.cpp @@ -111,7 +111,7 @@ TEST (difficulty, network_constants) auto & beta_thresholds = nano::work_thresholds::publish_beta; auto & dev_thresholds = nano::work_thresholds::publish_dev; - ASSERT_NEAR (32., nano::difficulty::to_multiplier (full_thresholds.epoch_2, full_thresholds.epoch_1), 1e-10); + ASSERT_NEAR (24., nano::difficulty::to_multiplier (full_thresholds.epoch_2, full_thresholds.epoch_1), 1e-10); ASSERT_NEAR (1 / 8., nano::difficulty::to_multiplier (full_thresholds.epoch_2_receive, full_thresholds.epoch_1), 1e-10); ASSERT_NEAR (1., nano::difficulty::to_multiplier (full_thresholds.epoch_2_receive, full_thresholds.entry), 1e-10); ASSERT_NEAR (1., nano::difficulty::to_multiplier (full_thresholds.epoch_2, full_thresholds.base), 1e-10); From a8d1cd48a52a25e26db33811c7931c2a7399a75b Mon Sep 17 00:00:00 2001 From: coranos Date: Sun, 7 Nov 2021 09:49:00 -0600 Subject: [PATCH 297/346] debugging difficulty test. --- nano/core_test/difficulty.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nano/core_test/difficulty.cpp b/nano/core_test/difficulty.cpp index 14901a813d..d67f12bbb0 100644 --- a/nano/core_test/difficulty.cpp +++ b/nano/core_test/difficulty.cpp @@ -111,7 +111,7 @@ TEST (difficulty, network_constants) auto & beta_thresholds = nano::work_thresholds::publish_beta; auto & dev_thresholds = nano::work_thresholds::publish_dev; - ASSERT_NEAR (24., nano::difficulty::to_multiplier (full_thresholds.epoch_2, full_thresholds.epoch_1), 1e-10); + ASSERT_NEAR (16., nano::difficulty::to_multiplier (full_thresholds.epoch_2, full_thresholds.epoch_1), 1e-10); ASSERT_NEAR (1 / 8., nano::difficulty::to_multiplier (full_thresholds.epoch_2_receive, full_thresholds.epoch_1), 1e-10); ASSERT_NEAR (1., nano::difficulty::to_multiplier (full_thresholds.epoch_2_receive, full_thresholds.entry), 1e-10); ASSERT_NEAR (1., nano::difficulty::to_multiplier (full_thresholds.epoch_2, full_thresholds.base), 1e-10); From 838e86d2c3c277697873a706c1c197cc65ae0697 Mon Sep 17 00:00:00 2001 From: coranos Date: Sun, 7 Nov 2021 09:53:12 -0600 Subject: [PATCH 298/346] debugging difficulty test. --- nano/core_test/difficulty.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nano/core_test/difficulty.cpp b/nano/core_test/difficulty.cpp index d67f12bbb0..da87b5fbc0 100644 --- a/nano/core_test/difficulty.cpp +++ b/nano/core_test/difficulty.cpp @@ -111,7 +111,7 @@ TEST (difficulty, network_constants) auto & beta_thresholds = nano::work_thresholds::publish_beta; auto & dev_thresholds = nano::work_thresholds::publish_dev; - ASSERT_NEAR (16., nano::difficulty::to_multiplier (full_thresholds.epoch_2, full_thresholds.epoch_1), 1e-10); + ASSERT_NEAR (1e-10., nano::difficulty::to_multiplier (full_thresholds.epoch_2, full_thresholds.epoch_1), 1e-10); ASSERT_NEAR (1 / 8., nano::difficulty::to_multiplier (full_thresholds.epoch_2_receive, full_thresholds.epoch_1), 1e-10); ASSERT_NEAR (1., nano::difficulty::to_multiplier (full_thresholds.epoch_2_receive, full_thresholds.entry), 1e-10); ASSERT_NEAR (1., nano::difficulty::to_multiplier (full_thresholds.epoch_2, full_thresholds.base), 1e-10); From ecda289026479ccca10f6d18ec73fb660fb3da18 Mon Sep 17 00:00:00 2001 From: coranos Date: Sun, 7 Nov 2021 09:53:41 -0600 Subject: [PATCH 299/346] debugging difficulty test. --- nano/core_test/difficulty.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nano/core_test/difficulty.cpp b/nano/core_test/difficulty.cpp index da87b5fbc0..6918f47645 100644 --- a/nano/core_test/difficulty.cpp +++ b/nano/core_test/difficulty.cpp @@ -111,7 +111,7 @@ TEST (difficulty, network_constants) auto & beta_thresholds = nano::work_thresholds::publish_beta; auto & dev_thresholds = nano::work_thresholds::publish_dev; - ASSERT_NEAR (1e-10., nano::difficulty::to_multiplier (full_thresholds.epoch_2, full_thresholds.epoch_1), 1e-10); + ASSERT_NEAR (1e-10, nano::difficulty::to_multiplier (full_thresholds.epoch_2, full_thresholds.epoch_1), 1e-10); ASSERT_NEAR (1 / 8., nano::difficulty::to_multiplier (full_thresholds.epoch_2_receive, full_thresholds.epoch_1), 1e-10); ASSERT_NEAR (1., nano::difficulty::to_multiplier (full_thresholds.epoch_2_receive, full_thresholds.entry), 1e-10); ASSERT_NEAR (1., nano::difficulty::to_multiplier (full_thresholds.epoch_2, full_thresholds.base), 1e-10); From e8bf3334ff0c59713a1b57d99778289cc9b52813 Mon Sep 17 00:00:00 2001 From: Thiago Silva <82097354+thsfs@users.noreply.github.com> Date: Tue, 16 Nov 2021 10:20:54 -0300 Subject: [PATCH 300/346] Fixes/splits vote_processor.no_broadcast_local (#3550) Split vote_processor.no_broadcast_local in to 3 separate tests. Previously this was testing 3 separate concepts in one test which made it difficult to reason around. no_broadcast_local local_broadcast_without_a_representative no_broadcast_local_with_a_principal_representative --- nano/core_test/vote_processor.cpp | 171 ++++++++++++++++++------------ 1 file changed, 106 insertions(+), 65 deletions(-) diff --git a/nano/core_test/vote_processor.cpp b/nano/core_test/vote_processor.cpp index bbec716a29..85cbb953b1 100644 --- a/nano/core_test/vote_processor.cpp +++ b/nano/core_test/vote_processor.cpp @@ -166,16 +166,21 @@ TEST (vote_processor, weights) } } -// Test disabled because it's failing intermittently. -// PR in which it got disabled: https://github.com/nanocurrency/nano-node/pull/3532 -// Issue for investigating it: https://github.com/nanocurrency/nano-node/issues/3485 -TEST (vote_processor, DISABLED_no_broadcast_local) +// Issue that tracks last changes on this test: https://github.com/nanocurrency/nano-node/issues/3485 +// Reopen in case the nondeterministic failure appears again. +// Checks local votes (a vote with a key that is in the node's wallet) are not re-broadcast when received. +// Nodes should not relay their own votes +TEST (vote_processor, no_broadcast_local) { nano::system system; nano::node_flags flags; flags.disable_request_loop = true; - auto & node (*system.add_node (flags)); - system.add_node (flags); + nano::node_config config1, config2; + config1.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; + auto & node (*system.add_node (config1, flags)); + config2.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; + config2.peering_port = nano::get_available_port (); + system.add_node (config2, flags); nano::block_builder builder; std::error_code ec; // Reduce the weight of genesis to 2x default min voting weight @@ -191,90 +196,126 @@ TEST (vote_processor, DISABLED_no_broadcast_local) .build (ec); ASSERT_FALSE (ec); ASSERT_EQ (nano::process_result::progress, node.process_local (send).code); + ASSERT_TIMELY (10s, !node.active.empty ()); ASSERT_EQ (2 * node.config.vote_minimum.number (), node.weight (nano::dev::genesis_key.pub)); - // Insert account in wallet + // Insert account in wallet. Votes on node are not enabled. system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); + // Ensure that the node knows the genesis key in its wallet. node.wallets.compute_reps (); ASSERT_TRUE (node.wallets.reps ().exists (nano::dev::genesis_key.pub)); - ASSERT_FALSE (node.wallets.reps ().have_half_rep ()); - // Process a vote + ASSERT_FALSE (node.wallets.reps ().have_half_rep ()); // Genesis balance remaining after `send' is less than the half_rep threshold + // Process a vote with a key that is in the local wallet. auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::milliseconds_since_epoch () & nano::vote::timestamp_max, std::vector{ send->hash () }); ASSERT_EQ (nano::vote_code::vote, node.active.vote (vote)); - // Make sure the vote was processed + // Make sure the vote was processed. auto election (node.active.election (send->qualified_root ())); ASSERT_NE (nullptr, election); auto votes (election->votes ()); auto existing (votes.find (nano::dev::genesis_key.pub)); ASSERT_NE (votes.end (), existing); ASSERT_EQ (vote->timestamp (), existing->second.timestamp); - // Ensure the vote, from a local representative, was not broadcast on processing - it should be flooded on generation instead + // Ensure the vote, from a local representative, was not broadcast on processing - it should be flooded on vote generation instead. ASSERT_EQ (0, node.stats.count (nano::stat::type::message, nano::stat::detail::confirm_ack, nano::stat::dir::out)); ASSERT_EQ (1, node.stats.count (nano::stat::type::message, nano::stat::detail::publish, nano::stat::dir::out)); +} - // Repeat test with no representative - // Erase account from the wallet - system.wallet (0)->store.erase (node.wallets.tx_begin_write (), nano::dev::genesis_key.pub); - node.wallets.compute_reps (); - ASSERT_FALSE (node.wallets.reps ().exists (nano::dev::genesis_key.pub)); - - std::shared_ptr send2 = builder.state () - .account (nano::dev::genesis_key.pub) - .representative (nano::dev::genesis_key.pub) - .previous (send->hash ()) - .balance (node.config.vote_minimum) - .link (key.pub) - .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) - .work (*system.work.generate (send->hash ())) - .build (ec); +// Issue that tracks last changes on this test: https://github.com/nanocurrency/nano-node/issues/3485 +// Reopen in case the nondeterministic failure appears again. +// Checks non-local votes (a vote with a key that is not in the node's wallet) are re-broadcast when received. +// Done without a representative. +TEST (vote_processor, local_broadcast_without_a_representative) +{ + nano::system system; + nano::node_flags flags; + flags.disable_request_loop = true; + nano::node_config config1, config2; + config1.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; + auto & node (*system.add_node (config1, flags)); + config2.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; + config2.peering_port = nano::get_available_port (); + system.add_node (config2, flags); + nano::block_builder builder; + std::error_code ec; + // Reduce the weight of genesis to 2x default min voting weight + nano::keypair key; + std::shared_ptr send = builder.state () + .account (nano::dev::genesis_key.pub) + .representative (nano::dev::genesis_key.pub) + .previous (nano::dev::genesis->hash ()) + .balance (node.config.vote_minimum.number ()) + .link (key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) + .work (*system.work.generate (nano::dev::genesis->hash ())) + .build (ec); ASSERT_FALSE (ec); - ASSERT_EQ (nano::process_result::progress, node.process_local (send2).code); + ASSERT_EQ (nano::process_result::progress, node.process_local (send).code); + ASSERT_TIMELY (10s, !node.active.empty ()); ASSERT_EQ (node.config.vote_minimum, node.weight (nano::dev::genesis_key.pub)); - node.block_confirm (send2); - // Process a vote - auto vote2 = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::milliseconds_since_epoch () * nano::vote::timestamp_max, std::vector{ send2->hash () }); - ASSERT_EQ (nano::vote_code::vote, node.active.vote (vote2)); - // Make sure the vote was processed - auto election2 (node.active.election (send2->qualified_root ())); - ASSERT_NE (nullptr, election2); - auto votes2 (election2->votes ()); - auto existing2 (votes2.find (nano::dev::genesis_key.pub)); - ASSERT_NE (votes2.end (), existing2); - ASSERT_EQ (vote2->timestamp (), existing2->second.timestamp); + node.block_confirm (send); + // Process a vote without a representative + auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::milliseconds_since_epoch () & nano::vote::timestamp_max, std::vector{ send->hash () }); + ASSERT_EQ (nano::vote_code::vote, node.active.vote (vote)); + // Make sure the vote was processed. + auto election (node.active.election (send->qualified_root ())); + ASSERT_NE (nullptr, election); + auto votes (election->votes ()); + auto existing (votes.find (nano::dev::genesis_key.pub)); + ASSERT_NE (votes.end (), existing); + ASSERT_EQ (vote->timestamp (), existing->second.timestamp); // Ensure the vote was broadcast ASSERT_EQ (1, node.stats.count (nano::stat::type::message, nano::stat::detail::confirm_ack, nano::stat::dir::out)); - ASSERT_EQ (2, node.stats.count (nano::stat::type::message, nano::stat::detail::publish, nano::stat::dir::out)); + ASSERT_EQ (1, node.stats.count (nano::stat::type::message, nano::stat::detail::publish, nano::stat::dir::out)); +} - // Repeat test with a PR in the wallet - // Increase the genesis weight again - std::shared_ptr open = builder.state () - .account (key.pub) +// Issue that tracks last changes on this test: https://github.com/nanocurrency/nano-node/issues/3485 +// Reopen in case the nondeterministic failure appears again. +// Checks local votes (a vote with a key that is in the node's wallet) are not re-broadcast when received. +// Done with a principal representative. +TEST (vote_processor, no_broadcast_local_with_a_principal_representative) +{ + nano::system system; + nano::node_flags flags; + flags.disable_request_loop = true; + nano::node_config config1, config2; + config1.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; + auto & node (*system.add_node (config1, flags)); + config2.frontiers_confirmation = nano::frontiers_confirmation_mode::disabled; + config2.peering_port = nano::get_available_port (); + system.add_node (config2, flags); + nano::block_builder builder; + std::error_code ec; + // Reduce the weight of genesis to 2x default min voting weight + nano::keypair key; + std::shared_ptr send = builder.state () + .account (nano::dev::genesis_key.pub) .representative (nano::dev::genesis_key.pub) - .previous (0) + .previous (nano::dev::genesis->hash ()) .balance (nano::dev::constants.genesis_amount - 2 * node.config.vote_minimum.number ()) - .link (send->hash ()) - .sign (key.prv, key.pub) - .work (*system.work.generate (key.pub)) + .link (key.pub) + .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) + .work (*system.work.generate (nano::dev::genesis->hash ())) .build (ec); ASSERT_FALSE (ec); - ASSERT_EQ (nano::process_result::progress, node.process_local (open).code); - ASSERT_EQ (nano::dev::constants.genesis_amount - node.config.vote_minimum.number (), node.weight (nano::dev::genesis_key.pub)); - node.block_confirm (open); - // Insert account in wallet + ASSERT_EQ (nano::process_result::progress, node.process_local (send).code); + ASSERT_TIMELY (10s, !node.active.empty ()); + ASSERT_EQ (nano::dev::constants.genesis_amount - 2 * node.config.vote_minimum.number (), node.weight (nano::dev::genesis_key.pub)); + // Insert account in wallet. Votes on node are not enabled. system.wallet (0)->insert_adhoc (nano::dev::genesis_key.prv); + // Ensure that the node knows the genesis key in its wallet. node.wallets.compute_reps (); ASSERT_TRUE (node.wallets.reps ().exists (nano::dev::genesis_key.pub)); - ASSERT_TRUE (node.wallets.reps ().have_half_rep ()); - // Process a vote - auto vote3 = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::milliseconds_since_epoch () * nano::vote::timestamp_max, std::vector{ open->hash () }); - ASSERT_EQ (nano::vote_code::vote, node.active.vote (vote3)); - // Make sure the vote was processed - auto election3 (node.active.election (open->qualified_root ())); - ASSERT_NE (nullptr, election3); - auto votes3 (election3->votes ()); - auto existing3 (votes3.find (nano::dev::genesis_key.pub)); - ASSERT_NE (votes3.end (), existing3); - ASSERT_EQ (vote3->timestamp (), existing3->second.timestamp); - // Ensure the vote wass not broadcasst - ASSERT_EQ (1, node.stats.count (nano::stat::type::message, nano::stat::detail::confirm_ack, nano::stat::dir::out)); - ASSERT_EQ (3, node.stats.count (nano::stat::type::message, nano::stat::detail::publish, nano::stat::dir::out)); + ASSERT_TRUE (node.wallets.reps ().have_half_rep ()); // Genesis balance after `send' is over both half_rep and PR threshold. + // Process a vote with a key that is in the local wallet. + auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::milliseconds_since_epoch () & nano::vote::timestamp_max, std::vector{ send->hash () }); + ASSERT_EQ (nano::vote_code::vote, node.active.vote (vote)); + // Make sure the vote was processed. + auto election (node.active.election (send->qualified_root ())); + ASSERT_NE (nullptr, election); + auto votes (election->votes ()); + auto existing (votes.find (nano::dev::genesis_key.pub)); + ASSERT_NE (votes.end (), existing); + ASSERT_EQ (vote->timestamp (), existing->second.timestamp); + // Ensure the vote was not broadcast. + ASSERT_EQ (0, node.stats.count (nano::stat::type::message, nano::stat::detail::confirm_ack, nano::stat::dir::out)); + ASSERT_EQ (1, node.stats.count (nano::stat::type::message, nano::stat::detail::publish, nano::stat::dir::out)); } From b3f6f272f5d4e1d0d5fdc112d2128b74ee8df101 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Tue, 16 Nov 2021 13:54:03 +0000 Subject: [PATCH 301/346] Deadline timer cleanup (#2921) * Converting the socket write queue to an atomic number since strands already ensure non-concurrent execution. * Moving responsibility for message drop policy in to tcp channel, rather than in the socket class itself. Having the socket class handle the limiter drop policy is a layering violation where the socket class knows about specific usages by its clients. This simplifies the socket class to be a more light weight wrapper around raw TCP sockets and reduces complexity. * Making max value a static constexpr. * Removing boost::optional for io_timeout as it's unnecessary. * With io_timeout being atomic it can be set without strand synchronization. Co-authored-by: Sergey Kroshnin Co-authored-by: Thiago Silva --- nano/core_test/socket.cpp | 20 ++++++++++---------- nano/node/bootstrap/bootstrap_server.cpp | 4 ++-- nano/node/socket.cpp | 24 +++++++++--------------- nano/node/socket.hpp | 6 +++--- nano/node/transport/tcp.cpp | 2 +- 5 files changed, 25 insertions(+), 31 deletions(-) diff --git a/nano/core_test/socket.cpp b/nano/core_test/socket.cpp index c8e68c2186..a5746023b9 100644 --- a/nano/core_test/socket.cpp +++ b/nano/core_test/socket.cpp @@ -45,13 +45,13 @@ TEST (socket, max_connections) // start 3 clients, 2 will persist but 1 will be dropped - auto client1 = std::make_shared (*node, boost::none); + auto client1 = std::make_shared (*node); client1->async_connect (dst_endpoint, connect_handler); - auto client2 = std::make_shared (*node, boost::none); + auto client2 = std::make_shared (*node); client2->async_connect (dst_endpoint, connect_handler); - auto client3 = std::make_shared (*node, boost::none); + auto client3 = std::make_shared (*node); client3->async_connect (dst_endpoint, connect_handler); auto get_tcp_accept_failures = [&node] () { @@ -70,10 +70,10 @@ TEST (socket, max_connections) server_sockets[0].reset (); - auto client4 = std::make_shared (*node, boost::none); + auto client4 = std::make_shared (*node); client4->async_connect (dst_endpoint, connect_handler); - auto client5 = std::make_shared (*node, boost::none); + auto client5 = std::make_shared (*node); client5->async_connect (dst_endpoint, connect_handler); ASSERT_TIMELY (5s, get_tcp_accept_failures () == 2); @@ -87,13 +87,13 @@ TEST (socket, max_connections) server_sockets[2].reset (); ASSERT_EQ (server_sockets.size (), 3); - auto client6 = std::make_shared (*node, boost::none); + auto client6 = std::make_shared (*node); client6->async_connect (dst_endpoint, connect_handler); - auto client7 = std::make_shared (*node, boost::none); + auto client7 = std::make_shared (*node); client7->async_connect (dst_endpoint, connect_handler); - auto client8 = std::make_shared (*node, boost::none); + auto client8 = std::make_shared (*node); client8->async_connect (dst_endpoint, connect_handler); ASSERT_TIMELY (5s, get_tcp_accept_failures () == 3); @@ -132,7 +132,7 @@ TEST (socket, drop_policy) return true; }); - auto client = std::make_shared (*node, boost::none); + auto client = std::make_shared (*node); nano::transport::channel_tcp channel{ *node, client }; nano::util::counted_completion write_completion (static_cast (total_message_count)); @@ -244,7 +244,7 @@ TEST (socket, concurrent_writes) std::vector> clients; for (unsigned i = 0; i < client_count; i++) { - auto client = std::make_shared (*node, boost::none); + auto client = std::make_shared (*node); clients.push_back (client); client->async_connect (boost::asio::ip::tcp::endpoint (boost::asio::ip::address_v4::loopback (), 25000), [&connection_count_completion] (boost::system::error_code const & ec_a) { diff --git a/nano/node/bootstrap/bootstrap_server.cpp b/nano/node/bootstrap/bootstrap_server.cpp index 29825159b2..b7632ef717 100644 --- a/nano/node/bootstrap/bootstrap_server.cpp +++ b/nano/node/bootstrap/bootstrap_server.cpp @@ -143,7 +143,7 @@ void nano::bootstrap_server::stop () void nano::bootstrap_server::receive () { // Increase timeout to receive TCP header (idle server socket) - socket->set_timeout (node->network_params.network.idle_timeout); + socket->timeout_set (node->network_params.network.idle_timeout); auto this_l (shared_from_this ()); socket->async_read (receive_buffer, 8, [this_l] (boost::system::error_code const & ec, std::size_t size_a) { // Set remote_endpoint @@ -152,7 +152,7 @@ void nano::bootstrap_server::receive () this_l->remote_endpoint = this_l->socket->remote_endpoint (); } // Decrease timeout to default - this_l->socket->set_timeout (this_l->node->config.tcp_io_timeout); + this_l->socket->timeout_set (this_l->node->config.tcp_io_timeout); // Receive header this_l->receive_header_action (ec, size_a); }); diff --git a/nano/node/socket.cpp b/nano/node/socket.cpp index af2d0e3e45..7e6ad87bd7 100644 --- a/nano/node/socket.cpp +++ b/nano/node/socket.cpp @@ -8,18 +8,14 @@ #include -nano::socket::socket (nano::node & node_a, boost::optional io_timeout_a) : +nano::socket::socket (nano::node & node_a) : strand{ node_a.io_ctx.get_executor () }, tcp_socket{ node_a.io_ctx }, node{ node_a }, next_deadline{ std::numeric_limits::max () }, last_completion_time{ 0 }, - io_timeout{ io_timeout_a } + io_timeout{ node_a.config.tcp_io_timeout } { - if (!io_timeout) - { - io_timeout = node_a.config.tcp_io_timeout; - } } nano::socket::~socket () @@ -108,7 +104,7 @@ void nano::socket::async_write (nano::shared_const_buffer const & buffer_a, std: void nano::socket::start_timer () { - start_timer (io_timeout.get ()); + start_timer (io_timeout); } void nano::socket::start_timer (std::chrono::seconds deadline_a) @@ -156,12 +152,9 @@ bool nano::socket::has_timed_out () const return timed_out; } -void nano::socket::set_timeout (std::chrono::seconds io_timeout_a) +void nano::socket::timeout_set (std::chrono::seconds io_timeout_a) { - auto this_l (shared_from_this ()); - boost::asio::dispatch (strand, boost::asio::bind_executor (strand, [this_l, io_timeout_a] () { - this_l->io_timeout = io_timeout_a; - })); + io_timeout = io_timeout_a; } void nano::socket::close () @@ -177,7 +170,7 @@ void nano::socket::close_internal () { if (!closed.exchange (true)) { - io_timeout = boost::none; + io_timeout = std::chrono::seconds (0); boost::system::error_code ec; // Ignore error code for shutdown as it is best-effort @@ -202,11 +195,12 @@ nano::tcp_endpoint nano::socket::local_endpoint () const } nano::server_socket::server_socket (nano::node & node_a, boost::asio::ip::tcp::endpoint local_a, std::size_t max_connections_a) : - socket{ node_a, std::chrono::seconds::max () }, + socket{ node_a }, acceptor{ node_a.io_ctx }, local{ local_a }, max_inbound_connections{ max_connections_a } { + io_timeout = std::chrono::seconds::max (); } void nano::server_socket::start (boost::system::error_code & ec_a) @@ -250,7 +244,7 @@ void nano::server_socket::on_connection (std::function (this_l->node, boost::none); + auto new_connection = std::make_shared (this_l->node); this_l->acceptor.async_accept (new_connection->tcp_socket, new_connection->remote, boost::asio::bind_executor (this_l->strand, [this_l, new_connection, callback_a] (boost::system::error_code const & ec_a) { diff --git a/nano/node/socket.hpp b/nano/node/socket.hpp index f4c8f8289d..1b4868fd3d 100644 --- a/nano/node/socket.hpp +++ b/nano/node/socket.hpp @@ -46,7 +46,7 @@ class socket : public std::enable_shared_from_this * @param io_timeout If tcp async operation is not completed within the timeout, the socket is closed. If not set, the tcp_io_timeout config option is used. * @param concurrency write concurrency */ - explicit socket (nano::node & node, boost::optional io_timeout = boost::none); + explicit socket (nano::node & node); virtual ~socket (); void async_connect (boost::asio::ip::tcp::endpoint const &, std::function); void async_read (std::shared_ptr> const &, std::size_t, std::function); @@ -58,7 +58,7 @@ class socket : public std::enable_shared_from_this /** Returns true if the socket has timed out */ bool has_timed_out () const; /** This can be called to change the maximum idle time, e.g. based on the type of traffic detected. */ - void set_timeout (std::chrono::seconds io_timeout_a); + void timeout_set (std::chrono::seconds io_timeout_a); void start_timer (std::chrono::seconds deadline_a); bool max () const { @@ -96,7 +96,7 @@ class socket : public std::enable_shared_from_this std::atomic next_deadline; std::atomic last_completion_time; std::atomic timed_out{ false }; - boost::optional io_timeout; + std::atomic io_timeout; std::atomic queue_size{ 0 }; /** Set by close() - completion handlers must check this. This is more reliable than checking diff --git a/nano/node/transport/tcp.cpp b/nano/node/transport/tcp.cpp index 59c4064736..75ba49ded6 100644 --- a/nano/node/transport/tcp.cpp +++ b/nano/node/transport/tcp.cpp @@ -523,7 +523,7 @@ void nano::transport::tcp_channels::start_tcp (nano::endpoint const & endpoint_a node.network.tcp_channels.udp_fallback (endpoint_a); return; } - auto socket = std::make_shared (node, boost::none); + auto socket = std::make_shared (node); std::weak_ptr socket_w (socket); auto channel (std::make_shared (node, socket_w)); std::weak_ptr node_w (node.shared ()); From 57ed3ccb19a770bb946317db8586d2a9a1edec0c Mon Sep 17 00:00:00 2001 From: clemahieu Date: Thu, 18 Nov 2021 12:30:15 +0000 Subject: [PATCH 302/346] Adding duration to vote timestamps. (#3548) * Adding duration to vote timestamps. This value is packed in the 4 low order bits of the timestamp field. This forces the timestamp to have a minimum granularity of 16ms. The duration bits encode a duration = 2^(x+4) which represents 16-524,288ms in power of 2 increments. * Internally truncating least duration field bits inside nano::vote rather than requiring caller to clear them for simplicity. --- nano/core_test/active_transactions.cpp | 36 +++++++++++------------ nano/core_test/conflicts.cpp | 18 ++++++------ nano/core_test/election.cpp | 12 ++++---- nano/core_test/ledger.cpp | 26 ++++++++--------- nano/core_test/message.cpp | 4 +-- nano/core_test/message_parser.cpp | 2 +- nano/core_test/network.cpp | 4 +-- nano/core_test/node.cpp | 40 +++++++++++++------------- nano/core_test/vote_processor.cpp | 16 +++++------ nano/core_test/websocket.cpp | 2 +- nano/nano_node/entry.cpp | 2 +- nano/node/vote_processor.cpp | 2 +- nano/node/voting.cpp | 3 +- nano/rpc_test/rpc.cpp | 2 +- nano/secure/common.cpp | 31 +++++++++++++++++--- nano/secure/common.hpp | 15 +++++++--- nano/slow_test/node.cpp | 2 +- 17 files changed, 124 insertions(+), 93 deletions(-) diff --git a/nano/core_test/active_transactions.cpp b/nano/core_test/active_transactions.cpp index f7be081522..9032dca70f 100644 --- a/nano/core_test/active_transactions.cpp +++ b/nano/core_test/active_transactions.cpp @@ -197,7 +197,7 @@ TEST (active_transactions, inactive_votes_cache) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (latest)) .build_shared (); - auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, std::vector (1, send->hash ()))); + auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, nano::vote::duration_max, std::vector (1, send->hash ()))); node.vote_processor.vote (vote, std::make_shared (node)); ASSERT_TIMELY (5s, node.active.inactive_votes_cache_size () == 1); node.process_active (send); @@ -219,7 +219,7 @@ TEST (active_transactions, inactive_votes_cache_non_final) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (latest)) .build_shared (); - auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, std::vector (1, send->hash ()))); // Non-final vote + auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, 0, std::vector (1, send->hash ()))); // Non-final vote node.vote_processor.vote (vote, std::make_shared (node)); ASSERT_TIMELY (5s, node.active.inactive_votes_cache_size () == 1); node.process_active (send); @@ -252,7 +252,7 @@ TEST (active_transactions, inactive_votes_cache_fork) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (latest)) .build_shared (); - auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, std::vector (1, send1->hash ()))); + auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, nano::vote::duration_max, std::vector (1, send1->hash ()))); node.vote_processor.vote (vote, std::make_shared (node)); auto channel1 (node.network.udp_channels.create (node.network.endpoint ())); ASSERT_TIMELY (5s, node.active.inactive_votes_cache_size () == 1); @@ -306,7 +306,7 @@ TEST (active_transactions, inactive_votes_cache_existing_vote) ASSERT_NE (nullptr, election); ASSERT_GT (node.weight (key.pub), node.minimum_principal_weight ()); // Insert vote - auto vote1 (std::make_shared (key.pub, key.prv, nano::vote::timestamp_min * 1, std::vector (1, send->hash ()))); + auto vote1 (std::make_shared (key.pub, key.prv, nano::vote::timestamp_min * 1, 0, std::vector (1, send->hash ()))); node.vote_processor.vote (vote1, std::make_shared (node)); ASSERT_TIMELY (5s, election->votes ().size () == 2); ASSERT_EQ (1, node.stats.count (nano::stat::type::election, nano::stat::detail::vote_new)); @@ -367,9 +367,9 @@ TEST (active_transactions, inactive_votes_cache_multiple_votes) node.block_processor.add (open); node.block_processor.flush (); // Process votes - auto vote1 (std::make_shared (key1.pub, key1.prv, 0, std::vector (1, send1->hash ()))); + auto vote1 (std::make_shared (key1.pub, key1.prv, 0, 0, std::vector (1, send1->hash ()))); node.vote_processor.vote (vote1, std::make_shared (node)); - auto vote2 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, std::vector (1, send1->hash ()))); + auto vote2 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, 0, std::vector (1, send1->hash ()))); node.vote_processor.vote (vote2, std::make_shared (node)); ASSERT_TIMELY (5s, node.active.find_inactive_votes_cache (send1->hash ()).voters.size () == 2); ASSERT_EQ (1, node.active.inactive_votes_cache_size ()); @@ -448,18 +448,18 @@ TEST (active_transactions, inactive_votes_cache_election_start) .build_shared (); // Inactive votes std::vector hashes{ open1->hash (), open2->hash (), send4->hash () }; - auto vote1 (std::make_shared (key1.pub, key1.prv, 0, hashes)); + auto vote1 (std::make_shared (key1.pub, key1.prv, 0, 0, hashes)); node.vote_processor.vote (vote1, std::make_shared (node)); ASSERT_TIMELY (5s, node.active.inactive_votes_cache_size () == 3); ASSERT_TRUE (node.active.empty ()); ASSERT_EQ (1, node.ledger.cache.cemented_count); // 2 votes are required to start election (dev network) - auto vote2 (std::make_shared (key2.pub, key2.prv, 0, hashes)); + auto vote2 (std::make_shared (key2.pub, key2.prv, 0, 0, hashes)); node.vote_processor.vote (vote2, std::make_shared (node)); // Only open1 & open2 blocks elections should start (send4 is missing previous block in ledger) ASSERT_TIMELY (5s, 2 == node.active.size ()); // Confirm elections with weight quorum - auto vote0 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, hashes)); // Final vote for confirmation + auto vote0 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, nano::vote::duration_max, hashes)); // Final vote for confirmation node.vote_processor.vote (vote0, std::make_shared (node)); ASSERT_TIMELY (5s, node.active.empty ()); ASSERT_TIMELY (5s, 5 == node.ledger.cache.cemented_count); @@ -519,7 +519,7 @@ TEST (active_transactions, vote_replays) nano::blocks_confirm (node, { send1, open1 }); ASSERT_EQ (2, node.active.size ()); // First vote is not a replay and confirms the election, second vote should be a replay since the election has confirmed but not yet removed - auto vote_send1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, send1)); + auto vote_send1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, nano::vote::duration_max, send1)); ASSERT_EQ (nano::vote_code::vote, node.active.vote (vote_send1)); ASSERT_EQ (2, node.active.size ()); ASSERT_EQ (nano::vote_code::replay, node.active.vote (vote_send1)); @@ -527,7 +527,7 @@ TEST (active_transactions, vote_replays) ASSERT_TIMELY (3s, node.active.size () == 1); ASSERT_EQ (nano::vote_code::replay, node.active.vote (vote_send1)); // Open new account - auto vote_open1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, open1)); + auto vote_open1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, nano::vote::duration_max, open1)); ASSERT_EQ (nano::vote_code::vote, node.active.vote (vote_open1)); ASSERT_EQ (nano::vote_code::replay, node.active.vote (vote_open1)); ASSERT_TIMELY (3s, node.active.empty ()); @@ -547,8 +547,8 @@ TEST (active_transactions, vote_replays) node.process_active (send2); nano::blocks_confirm (node, { send2 }); ASSERT_EQ (1, node.active.size ()); - auto vote1_send2 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, send2)); - auto vote2_send2 (std::make_shared (key.pub, key.prv, 0, send2)); + auto vote1_send2 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, nano::vote::duration_max, send2)); + auto vote2_send2 (std::make_shared (key.pub, key.prv, 0, 0, send2)); ASSERT_EQ (nano::vote_code::vote, node.active.vote (vote2_send2)); ASSERT_EQ (1, node.active.size ()); ASSERT_EQ (nano::vote_code::replay, node.active.vote (vote2_send2)); @@ -690,7 +690,7 @@ TEST (active_transactions, republish_winner) node1.block_processor.flush (); auto election = node1.active.election (fork->qualified_root ()); ASSERT_NE (nullptr, election); - auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, std::vector{ fork->hash () }); + auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, nano::vote::duration_max, std::vector{ fork->hash () }); node1.vote_processor.vote (vote, std::make_shared (node1)); node1.vote_processor.flush (); node1.block_processor.flush (); @@ -798,7 +798,7 @@ TEST (active_transactions, fork_replacement_tally) .build_shared (); node1.process_active (open); // Confirmation - auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, std::vector{ send->hash (), open->hash () })); + auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, nano::vote::duration_max, std::vector{ send->hash (), open->hash () })); node1.vote_processor.vote (vote, std::make_shared (node1)); } node1.block_processor.flush (); @@ -848,7 +848,7 @@ TEST (active_transactions, fork_replacement_tally) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (latest)) .build_shared (); - auto vote (std::make_shared (keys[i].pub, keys[i].prv, 0, std::vector{ fork->hash () })); + auto vote (std::make_shared (keys[i].pub, keys[i].prv, 0, 0, std::vector{ fork->hash () })); node1.vote_processor.vote (vote, std::make_shared (node1)); node1.vote_processor.flush (); node1.process_active (fork); @@ -878,7 +878,7 @@ TEST (active_transactions, fork_replacement_tally) ASSERT_FALSE (blocks1.find (send_last->hash ()) != blocks1.end ()); // Process vote for correct block & replace existing lowest tally block - auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, std::vector{ send_last->hash () })); + auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, 0, std::vector{ send_last->hash () })); node1.vote_processor.vote (vote, std::make_shared (node1)); node1.vote_processor.flush (); node2.network.flood_block (send_last); @@ -981,7 +981,7 @@ TEST (active_transactions, conflicting_block_vote_existing_election) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .work (*system.work.generate (nano::dev::genesis->hash ())) .build_shared (); - auto vote_fork (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, fork)); + auto vote_fork (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, nano::vote::duration_max, fork)); ASSERT_EQ (nano::process_result::progress, node.process_local (send).code); node.scheduler.flush (); diff --git a/nano/core_test/conflicts.cpp b/nano/core_test/conflicts.cpp index 0c296913a7..a4aaeb94de 100644 --- a/nano/core_test/conflicts.cpp +++ b/nano/core_test/conflicts.cpp @@ -42,7 +42,7 @@ TEST (conflicts, add_existing) auto election1 = node1.active.election (send2->qualified_root ()); ASSERT_NE (nullptr, election1); ASSERT_EQ (1, node1.active.size ()); - auto vote1 (std::make_shared (key2.pub, key2.prv, 0, send2)); + auto vote1 (std::make_shared (key2.pub, key2.prv, 0, 0, send2)); node1.active.vote (vote1); ASSERT_EQ (2, election1->votes ().size ()); auto votes (election1->votes ()); @@ -155,7 +155,7 @@ TEST (vote_uniquer, same_vote) nano::block_uniquer block_uniquer; nano::vote_uniquer uniquer (block_uniquer); nano::keypair key; - auto vote1 (std::make_shared (key.pub, key.prv, 0, std::make_shared (0, 0, 0, 0, 0, key.prv, key.pub, 0))); + auto vote1 (std::make_shared (key.pub, key.prv, 0, 0, std::make_shared (0, 0, 0, 0, 0, key.prv, key.pub, 0))); auto vote2 (std::make_shared (*vote1)); ASSERT_EQ (vote1, uniquer.unique (vote1)); ASSERT_EQ (vote1, uniquer.unique (vote2)); @@ -170,8 +170,8 @@ TEST (vote_uniquer, same_block) nano::keypair key2; auto block1 (std::make_shared (0, 0, 0, 0, 0, key1.prv, key1.pub, 0)); auto block2 (std::make_shared (*block1)); - auto vote1 (std::make_shared (key1.pub, key1.prv, 0, block1)); - auto vote2 (std::make_shared (key1.pub, key1.prv, 0, block2)); + auto vote1 (std::make_shared (key1.pub, key1.prv, 0, 0, block1)); + auto vote2 (std::make_shared (key1.pub, key1.prv, 0, 0, block2)); ASSERT_EQ (vote1, uniquer.unique (vote1)); ASSERT_EQ (vote2, uniquer.unique (vote2)); ASSERT_NE (vote1, vote2); @@ -186,7 +186,7 @@ TEST (vote_uniquer, vbh_one) auto block (std::make_shared (0, 0, 0, 0, 0, key.prv, key.pub, 0)); std::vector hashes; hashes.push_back (block->hash ()); - auto vote1 (std::make_shared (key.pub, key.prv, 0, hashes)); + auto vote1 (std::make_shared (key.pub, key.prv, 0, 0, hashes)); auto vote2 (std::make_shared (*vote1)); ASSERT_EQ (vote1, uniquer.unique (vote1)); ASSERT_EQ (vote1, uniquer.unique (vote2)); @@ -203,8 +203,8 @@ TEST (vote_uniquer, vbh_two) auto block2 (std::make_shared (1, 0, 0, 0, 0, key.prv, key.pub, 0)); std::vector hashes2; hashes2.push_back (block2->hash ()); - auto vote1 (std::make_shared (key.pub, key.prv, 0, hashes1)); - auto vote2 (std::make_shared (key.pub, key.prv, 0, hashes2)); + auto vote1 (std::make_shared (key.pub, key.prv, 0, 0, hashes1)); + auto vote2 (std::make_shared (key.pub, key.prv, 0, 0, hashes2)); ASSERT_EQ (vote1, uniquer.unique (vote1)); ASSERT_EQ (vote2, uniquer.unique (vote2)); } @@ -214,8 +214,8 @@ TEST (vote_uniquer, cleanup) nano::block_uniquer block_uniquer; nano::vote_uniquer uniquer (block_uniquer); nano::keypair key; - auto vote1 (std::make_shared (key.pub, key.prv, 0, std::make_shared (0, 0, 0, 0, 0, key.prv, key.pub, 0))); - auto vote2 (std::make_shared (key.pub, key.prv, nano::vote::timestamp_min * 1, std::make_shared (0, 0, 0, 0, 0, key.prv, key.pub, 0))); + auto vote1 (std::make_shared (key.pub, key.prv, 0, 0, std::make_shared (0, 0, 0, 0, 0, key.prv, key.pub, 0))); + auto vote2 (std::make_shared (key.pub, key.prv, nano::vote::timestamp_min * 1, 0, std::make_shared (0, 0, 0, 0, 0, key.prv, key.pub, 0))); auto vote3 (uniquer.unique (vote1)); auto vote4 (uniquer.unique (vote2)); vote2.reset (); diff --git a/nano/core_test/election.cpp b/nano/core_test/election.cpp index 8912981b78..a89d7a5a78 100644 --- a/nano/core_test/election.cpp +++ b/nano/core_test/election.cpp @@ -55,7 +55,7 @@ TEST (election, quorum_minimum_flip_success) auto election = node1.active.election (send1->qualified_root ()); ASSERT_NE (nullptr, election); ASSERT_EQ (2, election->blocks ().size ()); - auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, send2)); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, nano::vote::duration_max, send2)); ASSERT_EQ (nano::vote_code::vote, node1.active.vote (vote1)); node1.block_processor.flush (); ASSERT_NE (nullptr, node1.block (send2->hash ())); @@ -101,7 +101,7 @@ TEST (election, quorum_minimum_flip_fail) auto election = node1.active.election (send1->qualified_root ()); ASSERT_NE (nullptr, election); ASSERT_EQ (2, election->blocks ().size ()); - auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, send2)); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, nano::vote::duration_max, send2)); ASSERT_EQ (nano::vote_code::vote, node1.active.vote (vote1)); node1.block_processor.flush (); ASSERT_NE (nullptr, node1.block (send1->hash ())); @@ -134,7 +134,7 @@ TEST (election, quorum_minimum_confirm_success) auto election = node1.active.election (send1->qualified_root ()); ASSERT_NE (nullptr, election); ASSERT_EQ (1, election->blocks ().size ()); - auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, send1)); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, nano::vote::duration_max, send1)); ASSERT_EQ (nano::vote_code::vote, node1.active.vote (vote1)); node1.block_processor.flush (); ASSERT_NE (nullptr, node1.block (send1->hash ())); @@ -167,7 +167,7 @@ TEST (election, quorum_minimum_confirm_fail) auto election = node1.active.election (send1->qualified_root ()); ASSERT_NE (nullptr, election); ASSERT_EQ (1, election->blocks ().size ()); - auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, send1)); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, nano::vote::duration_max, send1)); ASSERT_EQ (nano::vote_code::vote, node1.active.vote (vote1)); node1.block_processor.flush (); ASSERT_NE (nullptr, node1.block (send1->hash ())); @@ -241,9 +241,9 @@ TEST (election, DISABLED_quorum_minimum_update_weight_before_quorum_checks) auto election = node1.active.election (send1->qualified_root ()); ASSERT_NE (nullptr, election); ASSERT_EQ (1, election->blocks ().size ()); - auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, send1)); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, nano::vote::duration_max, send1)); ASSERT_EQ (nano::vote_code::vote, node1.active.vote (vote1)); - auto vote2 (std::make_shared (key1.pub, key1.prv, nano::vote::timestamp_max, send1)); + auto vote2 (std::make_shared (key1.pub, key1.prv, nano::vote::timestamp_max, nano::vote::duration_max, send1)); auto channel = node1.network.find_channel (node2.network.endpoint ()); ASSERT_NE (channel, nullptr); ASSERT_TIMELY (10s, !node1.rep_crawler.response (channel, vote2)); diff --git a/nano/core_test/ledger.cpp b/nano/core_test/ledger.cpp index 6d370c7b87..e7ed84fc06 100644 --- a/nano/core_test/ledger.cpp +++ b/nano/core_test/ledger.cpp @@ -645,7 +645,7 @@ TEST (votes, check_signature) node1.scheduler.flush (); auto election1 = node1.active.election (send1->qualified_root ()); ASSERT_EQ (1, election1->votes ().size ()); - auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 1, send1)); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 1, 0, send1)); vote1->signature.bytes[0] ^= 1; ASSERT_EQ (nano::vote_code::invalid, node1.vote_processor.vote_blocking (vote1, std::make_shared (node1))); vote1->signature.bytes[0] ^= 1; @@ -666,9 +666,9 @@ TEST (votes, add_one) node1.scheduler.flush (); auto election1 = node1.active.election (send1->qualified_root ()); ASSERT_EQ (1, election1->votes ().size ()); - auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 1, send1)); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 1, 0, send1)); ASSERT_EQ (nano::vote_code::vote, node1.active.vote (vote1)); - auto vote2 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 2, send1)); + auto vote2 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 2, 0, send1)); ASSERT_EQ (nano::vote_code::vote, node1.active.vote (vote2)); ASSERT_EQ (2, election1->votes ().size ()); auto votes1 (election1->votes ()); @@ -695,9 +695,9 @@ TEST (votes, add_two) auto election1 = node1.active.election (send1->qualified_root ()); nano::keypair key2; auto send2 = std::make_shared (nano::dev::genesis->hash (), key2.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0); - auto vote2 = std::make_shared (key2.pub, key2.prv, nano::vote::timestamp_min * 1, send2); + auto vote2 = std::make_shared (key2.pub, key2.prv, nano::vote::timestamp_min * 1, 0, send2); ASSERT_EQ (nano::vote_code::vote, node1.active.vote (vote2)); - auto vote1 = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 1, send1); + auto vote1 = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 1, 0, send1); ASSERT_EQ (nano::vote_code::vote, node1.active.vote (vote1)); ASSERT_EQ (3, election1->votes ().size ()); auto votes1 = election1->votes (); @@ -734,7 +734,7 @@ TEST (votes, add_existing) node1.scheduler.activate (nano::dev::genesis_key.pub, node1.store.tx_begin_read ()); node1.scheduler.flush (); auto election1 = node1.active.election (send1->qualified_root ()); - auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 1, send1)); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 1, 0, send1)); ASSERT_EQ (nano::vote_code::vote, node1.active.vote (vote1)); // Block is already processed from vote ASSERT_TRUE (node1.active.publish (send1)); @@ -750,7 +750,7 @@ TEST (votes, add_existing) .sign (nano::dev::genesis_key.prv, nano::dev::genesis_key.pub) .build (); node1.work_generate_blocking (*send2); - auto vote2 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 2, send2)); + auto vote2 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 2, 0, send2)); // Pretend we've waited the timeout nano::unique_lock lock (election1->mutex); election1->last_votes[nano::dev::genesis_key.pub].time = std::chrono::steady_clock::now () - std::chrono::seconds (20); @@ -784,13 +784,13 @@ TEST (votes, add_old) node1.block_confirm (send1); node1.scheduler.flush (); auto election1 = node1.active.election (send1->qualified_root ()); - auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 2, send1)); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 2, 0, send1)); auto channel (std::make_shared (node1)); node1.vote_processor.vote_blocking (vote1, channel); nano::keypair key2; auto send2 (std::make_shared (nano::dev::genesis->hash (), key2.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send2); - auto vote2 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 1, send2)); + auto vote2 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 1, 0, send2)); { nano::lock_guard lock (election1->mutex); election1->last_votes[nano::dev::genesis_key.pub].time = std::chrono::steady_clock::now () - std::chrono::seconds (20); @@ -823,13 +823,13 @@ TEST (votes, add_old_different_account) ASSERT_NE (nullptr, election2); ASSERT_EQ (1, election1->votes ().size ()); ASSERT_EQ (1, election2->votes ().size ()); - auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 2, send1)); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 2, 0, send1)); auto channel (std::make_shared (node1)); auto vote_result1 (node1.vote_processor.vote_blocking (vote1, channel)); ASSERT_EQ (nano::vote_code::vote, vote_result1); ASSERT_EQ (2, election1->votes ().size ()); ASSERT_EQ (1, election2->votes ().size ()); - auto vote2 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 1, send2)); + auto vote2 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 1, 0, send2)); auto vote_result2 (node1.vote_processor.vote_blocking (vote2, channel)); ASSERT_EQ (nano::vote_code::vote, vote_result2); ASSERT_EQ (2, election1->votes ().size ()); @@ -857,13 +857,13 @@ TEST (votes, add_cooldown) node1.block_confirm (send1); node1.scheduler.flush (); auto election1 = node1.active.election (send1->qualified_root ()); - auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 1, send1)); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 1, 0, send1)); auto channel (std::make_shared (node1)); node1.vote_processor.vote_blocking (vote1, channel); nano::keypair key2; auto send2 (std::make_shared (nano::dev::genesis->hash (), key2.pub, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); node1.work_generate_blocking (*send2); - auto vote2 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 2, send2)); + auto vote2 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * 2, 0, send2)); node1.vote_processor.vote_blocking (vote2, channel); ASSERT_EQ (2, election1->votes ().size ()); auto votes (election1->votes ()); diff --git a/nano/core_test/message.cpp b/nano/core_test/message.cpp index 67a90f28a0..13c71fd374 100644 --- a/nano/core_test/message.cpp +++ b/nano/core_test/message.cpp @@ -73,7 +73,7 @@ TEST (message, publish_serialization) TEST (message, confirm_ack_serialization) { nano::keypair key1; - auto vote (std::make_shared (key1.pub, key1.prv, 0, std::make_shared (0, 1, 2, key1.prv, 4, 5))); + auto vote (std::make_shared (key1.pub, key1.prv, 0, 0, std::make_shared (0, 1, 2, key1.prv, 4, 5))); nano::confirm_ack con1{ nano::dev::network_params.network, vote }; std::vector bytes; { @@ -101,7 +101,7 @@ TEST (message, confirm_ack_hash_serialization) hashes.push_back (block.hash ()); } nano::keypair representative1; - auto vote (std::make_shared (representative1.pub, representative1.prv, 0, hashes)); + auto vote (std::make_shared (representative1.pub, representative1.prv, 0, 0, hashes)); nano::confirm_ack con1{ nano::dev::network_params.network, vote }; std::vector bytes; { diff --git a/nano/core_test/message_parser.cpp b/nano/core_test/message_parser.cpp index 0bf62f22bf..5430cc3ec2 100644 --- a/nano/core_test/message_parser.cpp +++ b/nano/core_test/message_parser.cpp @@ -69,7 +69,7 @@ TEST (message_parser, exact_confirm_ack_size) nano::vote_uniquer vote_uniquer (block_uniquer); nano::message_parser parser (filter, block_uniquer, vote_uniquer, visitor, system.work, nano::dev::network_params.network); auto block (std::make_shared (1, 1, 2, nano::keypair ().prv, 4, *system.work.generate (nano::root (1)))); - auto vote (std::make_shared (0, nano::keypair ().prv, 0, std::move (block))); + auto vote (std::make_shared (0, nano::keypair ().prv, 0, 0, std::move (block))); nano::confirm_ack message{ nano::dev::network_params.network, vote }; std::vector bytes; { diff --git a/nano/core_test/network.cpp b/nano/core_test/network.cpp index 8dda64b817..f0464c6767 100644 --- a/nano/core_test/network.cpp +++ b/nano/core_test/network.cpp @@ -356,7 +356,7 @@ TEST (receivable_processor, confirm_insufficient_pos) ASSERT_EQ (nano::process_result::progress, node1.process (*block1).code); node1.scheduler.activate (nano::dev::genesis_key.pub, node1.store.tx_begin_read ()); nano::keypair key1; - auto vote (std::make_shared (key1.pub, key1.prv, 0, block1)); + auto vote (std::make_shared (key1.pub, key1.prv, 0, 0, block1)); nano::confirm_ack con1{ nano::dev::network_params.network, vote }; node1.network.inbound (con1, node1.network.udp_channels.create (node1.network.endpoint ())); } @@ -369,7 +369,7 @@ TEST (receivable_processor, confirm_sufficient_pos) node1.work_generate_blocking (*block1); ASSERT_EQ (nano::process_result::progress, node1.process (*block1).code); node1.scheduler.activate (nano::dev::genesis_key.pub, node1.store.tx_begin_read ()); - auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, block1)); + auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, 0, block1)); nano::confirm_ack con1{ nano::dev::network_params.network, vote }; node1.network.inbound (con1, node1.network.udp_channels.create (node1.network.endpoint ())); } diff --git a/nano/core_test/node.cpp b/nano/core_test/node.cpp index e8e718259e..88342b2479 100644 --- a/nano/core_test/node.cpp +++ b/nano/core_test/node.cpp @@ -1533,7 +1533,7 @@ TEST (node, fork_no_vote_quorum) nano::raw_key key3; auto transaction (system.wallet (1)->wallets.tx_begin_read ()); ASSERT_FALSE (system.wallet (1)->store.fetch (transaction, key1, key3)); - auto vote (std::make_shared (key1, key3, 0, send2)); + auto vote (std::make_shared (key1, key3, 0, 0, send2)); nano::confirm_ack confirm{ nano::dev::network_params.network, vote }; std::vector buffer; { @@ -1622,7 +1622,7 @@ TEST (node, DISABLED_fork_stale) auto & node2 (*system2.nodes[0]); node2.bootstrap_initiator.bootstrap (node1.network.endpoint (), false); std::shared_ptr channel (std::make_shared (node2.network.udp_channels, node1.network.endpoint (), node2.network_params.network.protocol_version)); - auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, std::vector ()); + auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, 0, std::vector ()); node2.rep_crawler.response (channel, vote); nano::keypair key1; nano::keypair key2; @@ -2185,9 +2185,9 @@ TEST (node, rep_weight) ASSERT_NE (nullptr, channel2); std::shared_ptr channel3 = nano::establish_tcp (system, node, node3.network.endpoint ()); ASSERT_NE (nullptr, channel3); - auto vote0 = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, nano::dev::genesis); - auto vote1 = std::make_shared (keypair1.pub, keypair1.prv, 0, nano::dev::genesis); - auto vote2 = std::make_shared (keypair2.pub, keypair2.prv, 0, nano::dev::genesis); + auto vote0 = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, 0, nano::dev::genesis); + auto vote1 = std::make_shared (keypair1.pub, keypair1.prv, 0, 0, nano::dev::genesis); + auto vote2 = std::make_shared (keypair2.pub, keypair2.prv, 0, 0, nano::dev::genesis); node.rep_crawler.response (channel1, vote0); node.rep_crawler.response (channel2, vote1); node.rep_crawler.response (channel3, vote2); @@ -2263,7 +2263,7 @@ TEST (node, rep_remove) nano::endpoint endpoint0 (boost::asio::ip::address_v6::loopback (), nano::get_available_port ()); std::shared_ptr channel0 (std::make_shared (node.network.udp_channels, endpoint0, node.network_params.network.protocol_version)); auto channel_udp = node.network.udp_channels.insert (endpoint0, node.network_params.network.protocol_version); - auto vote1 = std::make_shared (keypair1.pub, keypair1.prv, 0, nano::dev::genesis); + auto vote1 = std::make_shared (keypair1.pub, keypair1.prv, 0, 0, nano::dev::genesis); ASSERT_FALSE (node.rep_crawler.response (channel0, vote1)); ASSERT_TIMELY (5s, node.rep_crawler.representative_count () == 1); auto reps (node.rep_crawler.representatives (1)); @@ -2284,13 +2284,13 @@ TEST (node, rep_remove) system.wallet (1)->insert_adhoc (nano::dev::genesis_key.prv); auto channel1 (node.network.find_channel (node1->network.endpoint ())); ASSERT_NE (nullptr, channel1); - auto vote2 = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, nano::dev::genesis); + auto vote2 = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, 0, nano::dev::genesis); node.rep_crawler.response (channel1, vote2); ASSERT_TIMELY (10s, node.rep_crawler.representative_count () == 1); auto node2 (std::make_shared (system.io_ctx, nano::unique_path (), nano::node_config (nano::get_available_port (), system.logging), system.work)); node2->start (); std::weak_ptr node_w (node.shared ()); - auto vote3 = std::make_shared (keypair2.pub, keypair2.prv, 0, nano::dev::genesis); + auto vote3 = std::make_shared (keypair2.pub, keypair2.prv, 0, 0, nano::dev::genesis); node.network.tcp_channels.start_tcp (node2->network.endpoint ()); std::shared_ptr channel2; ASSERT_TIMELY (10s, (channel2 = node.network.tcp_channels.find_channel (nano::transport::map_endpoint_to_tcp (node2->network.endpoint ()))) != nullptr); @@ -2491,7 +2491,7 @@ TEST (node, online_reps_rep_crawler) nano::node_flags flags; flags.disable_rep_crawler = true; auto & node1 = *system.add_node (flags); - auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::milliseconds_since_epoch (), std::vector{ nano::dev::genesis->hash () }); + auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::milliseconds_since_epoch (), 0, std::vector{ nano::dev::genesis->hash () }); ASSERT_EQ (0, node1.online_reps.online ()); // Without rep crawler node1.vote_processor.vote_blocking (vote, std::make_shared (node1)); @@ -2529,7 +2529,7 @@ TEST (node, online_reps_election) node1.scheduler.flush (); ASSERT_EQ (1, node1.active.size ()); // Process vote for ongoing election - auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::milliseconds_since_epoch (), std::vector{ send1->hash () }); + auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::milliseconds_since_epoch (), 0, std::vector{ send1->hash () }); ASSERT_EQ (0, node1.online_reps.online ()); node1.vote_processor.vote_blocking (vote, std::make_shared (node1)); ASSERT_EQ (nano::dev::constants.genesis_amount - nano::Gxrb_ratio, node1.online_reps.online ()); @@ -2885,7 +2885,7 @@ TEST (node, local_votes_cache_fork) .build_shared (); ASSERT_EQ (nano::process_result::progress, node1.process (*send1).code); // Cache vote - auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, std::vector (1, send1->hash ()))); + auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, 0, std::vector (1, send1->hash ()))); node1.vote_processor.vote (vote, std::make_shared (node1)); node1.history.add (send1->root (), send1->hash (), vote); auto votes2 (node1.history.votes (send1->root (), send1->hash ())); @@ -2925,7 +2925,7 @@ TEST (node, vote_republish) node1.process_active (send1); ASSERT_TIMELY (5s, node2.block (send1->hash ())); node1.process_active (send2); - auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, send2)); + auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, nano::vote::duration_max, send2)); ASSERT_TRUE (node1.active.active (*send1)); ASSERT_TIMELY (10s, node2.active.active (*send1)); node1.vote_processor.vote (vote, std::make_shared (node1)); @@ -3020,7 +3020,7 @@ TEST (node, vote_by_hash_republish) node1.process_active (send2); std::vector vote_blocks; vote_blocks.push_back (send2->hash ()); - auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, vote_blocks); // Final vote for confirmation + auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, nano::vote::duration_max, vote_blocks); // Final vote for confirmation ASSERT_TRUE (node1.active.active (*send1)); ASSERT_TRUE (node2.active.active (*send1)); node1.vote_processor.vote (vote, std::make_shared (node1)); @@ -3060,7 +3060,7 @@ TEST (node, vote_by_hash_epoch_block_republish) node1.active.publish (epoch1); std::vector vote_blocks; vote_blocks.push_back (epoch1->hash ()); - auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, vote_blocks)); + auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, 0, vote_blocks)); ASSERT_TRUE (node1.active.active (*send1)); ASSERT_TRUE (node2.active.active (*send1)); node1.vote_processor.vote (vote, std::make_shared (node1)); @@ -3195,8 +3195,8 @@ TEST (node, DISABLED_fork_invalid_block_signature) .build_shared (); auto send2_corrupt (std::make_shared (*send2)); send2_corrupt->signature = nano::signature (123); - auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, send2)); - auto vote_corrupt (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, send2_corrupt)); + auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, 0, send2)); + auto vote_corrupt (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, 0, send2_corrupt)); node1.process_active (send1); ASSERT_TIMELY (5s, node1.block (send1->hash ())); @@ -3539,7 +3539,7 @@ TEST (node, confirm_back) ASSERT_EQ (3, node.active.size ()); std::vector vote_blocks; vote_blocks.push_back (send2->hash ()); - auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, vote_blocks)); + auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, nano::vote::duration_max, vote_blocks)); node.vote_processor.vote_blocking (vote, std::make_shared (node)); ASSERT_TIMELY (10s, node.active.empty ()); } @@ -4089,7 +4089,7 @@ TEST (node, rollback_gap_source) ASSERT_EQ (2, election->blocks ().size ()); ASSERT_EQ (1, election->votes ().size ()); // Confirm open - auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, std::vector (1, open->hash ()))); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, nano::vote::duration_max, std::vector (1, open->hash ()))); node.vote_processor.vote (vote1, std::make_shared (node)); ASSERT_TIMELY (5s, election->votes ().size () == 2); ASSERT_TIMELY (3s, election->confirmed ()); @@ -4116,7 +4116,7 @@ TEST (node, rollback_gap_source) node.block_processor.flush (); ASSERT_EQ (2, election->blocks ().size ()); // Confirm open (again) - auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, std::vector (1, open->hash ()))); + auto vote1 (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_max, nano::vote::duration_max, std::vector (1, open->hash ()))); node.vote_processor.vote (vote1, std::make_shared (node)); ASSERT_TIMELY (5s, election->votes ().size () == 2); } @@ -4660,7 +4660,7 @@ TEST (rep_crawler, local) flags.disable_rep_crawler = true; auto & node = *system.add_node (flags); auto loopback = std::make_shared (node); - auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, std::vector{ nano::dev::genesis->hash () }); + auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, 0, std::vector{ nano::dev::genesis->hash () }); { nano::lock_guard guard (node.rep_crawler.probable_reps_mutex); node.rep_crawler.active.insert (nano::dev::genesis->hash ()); diff --git a/nano/core_test/vote_processor.cpp b/nano/core_test/vote_processor.cpp index 85cbb953b1..d262462c35 100644 --- a/nano/core_test/vote_processor.cpp +++ b/nano/core_test/vote_processor.cpp @@ -12,7 +12,7 @@ TEST (vote_processor, codes) nano::system system (1); auto & node (*system.nodes[0]); nano::keypair key; - auto vote (std::make_shared (key.pub, key.prv, nano::vote::timestamp_min * 1, std::vector{ nano::dev::genesis->hash () })); + auto vote (std::make_shared (key.pub, key.prv, nano::vote::timestamp_min * 1, 0, std::vector{ nano::dev::genesis->hash () })); auto vote_invalid = std::make_shared (*vote); vote_invalid->signature.bytes[0] ^= 1; auto channel (std::make_shared (node)); @@ -49,7 +49,7 @@ TEST (vote_processor, flush) auto channel (std::make_shared (node)); for (unsigned i = 0; i < 2000; ++i) { - auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * (1 + i), std::vector{ nano::dev::genesis->hash () }); + auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::vote::timestamp_min * (1 + i), 0, std::vector{ nano::dev::genesis->hash () }); node.vote_processor.vote (vote, channel); } node.vote_processor.flush (); @@ -61,7 +61,7 @@ TEST (vote_processor, invalid_signature) nano::system system{ 1 }; auto & node = *system.nodes[0]; nano::keypair key; - auto vote = std::make_shared (key.pub, key.prv, nano::vote::timestamp_min * 1, std::vector{ nano::dev::genesis->hash () }); + auto vote = std::make_shared (key.pub, key.prv, nano::vote::timestamp_min * 1, 0, std::vector{ nano::dev::genesis->hash () }); auto vote_invalid = std::make_shared (*vote); vote_invalid->signature.bytes[0] ^= 1; auto channel = std::make_shared (node); @@ -85,7 +85,7 @@ TEST (vote_processor, no_capacity) node_flags.vote_processor_capacity = 0; auto & node (*system.add_node (node_flags)); nano::keypair key; - auto vote (std::make_shared (key.pub, key.prv, nano::vote::timestamp_min * 1, std::vector{ nano::dev::genesis->hash () })); + auto vote (std::make_shared (key.pub, key.prv, nano::vote::timestamp_min * 1, 0, std::vector{ nano::dev::genesis->hash () })); auto channel (std::make_shared (node)); ASSERT_TRUE (node.vote_processor.vote (vote, channel)); } @@ -97,7 +97,7 @@ TEST (vote_processor, overflow) node_flags.vote_processor_capacity = 1; auto & node (*system.add_node (node_flags)); nano::keypair key; - auto vote (std::make_shared (key.pub, key.prv, nano::vote::timestamp_min * 1, std::vector{ nano::dev::genesis->hash () })); + auto vote (std::make_shared (key.pub, key.prv, nano::vote::timestamp_min * 1, 0, std::vector{ nano::dev::genesis->hash () })); auto channel (std::make_shared (node)); // No way to lock the processor, but queueing votes in quick succession must result in overflow @@ -205,7 +205,7 @@ TEST (vote_processor, no_broadcast_local) ASSERT_TRUE (node.wallets.reps ().exists (nano::dev::genesis_key.pub)); ASSERT_FALSE (node.wallets.reps ().have_half_rep ()); // Genesis balance remaining after `send' is less than the half_rep threshold // Process a vote with a key that is in the local wallet. - auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::milliseconds_since_epoch () & nano::vote::timestamp_max, std::vector{ send->hash () }); + auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::milliseconds_since_epoch (), nano::vote::duration_max, std::vector{ send->hash () }); ASSERT_EQ (nano::vote_code::vote, node.active.vote (vote)); // Make sure the vote was processed. auto election (node.active.election (send->qualified_root ())); @@ -253,7 +253,7 @@ TEST (vote_processor, local_broadcast_without_a_representative) ASSERT_EQ (node.config.vote_minimum, node.weight (nano::dev::genesis_key.pub)); node.block_confirm (send); // Process a vote without a representative - auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::milliseconds_since_epoch () & nano::vote::timestamp_max, std::vector{ send->hash () }); + auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::milliseconds_since_epoch (), nano::vote::duration_max, std::vector{ send->hash () }); ASSERT_EQ (nano::vote_code::vote, node.active.vote (vote)); // Make sure the vote was processed. auto election (node.active.election (send->qualified_root ())); @@ -306,7 +306,7 @@ TEST (vote_processor, no_broadcast_local_with_a_principal_representative) ASSERT_TRUE (node.wallets.reps ().exists (nano::dev::genesis_key.pub)); ASSERT_TRUE (node.wallets.reps ().have_half_rep ()); // Genesis balance after `send' is over both half_rep and PR threshold. // Process a vote with a key that is in the local wallet. - auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::milliseconds_since_epoch () & nano::vote::timestamp_max, std::vector{ send->hash () }); + auto vote = std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, nano::milliseconds_since_epoch (), nano::vote::duration_max, std::vector{ send->hash () }); ASSERT_EQ (nano::vote_code::vote, node.active.vote (vote)); // Make sure the vote was processed. auto election (node.active.election (send->qualified_root ())); diff --git a/nano/core_test/websocket.cpp b/nano/core_test/websocket.cpp index f9462d82fa..c05ec8636b 100644 --- a/nano/core_test/websocket.cpp +++ b/nano/core_test/websocket.cpp @@ -530,7 +530,7 @@ TEST (websocket, vote_options_type) ASSERT_TIMELY (5s, ack_ready); // Custom made votes for simplicity - auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, nano::dev::genesis)); + auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, 0, 0, nano::dev::genesis)); nano::websocket::message_builder builder; auto msg (builder.vote_received (vote, nano::vote_code::replay)); node1->websocket_server->broadcast (msg); diff --git a/nano/nano_node/entry.cpp b/nano/nano_node/entry.cpp index e7027375a8..63cb13e863 100644 --- a/nano/nano_node/entry.cpp +++ b/nano/nano_node/entry.cpp @@ -1088,7 +1088,7 @@ int main (int argc, char * const * argv) uint64_t sequence (1); for (auto & i : blocks) { - auto vote (std::make_shared (keys[j].pub, keys[j].prv, sequence, std::vector (1, i->hash ()))); + auto vote (std::make_shared (keys[j].pub, keys[j].prv, sequence, 0, std::vector (1, i->hash ()))); votes.push_back (vote); sequence++; } diff --git a/nano/node/vote_processor.cpp b/nano/node/vote_processor.cpp index 7dced04c01..a85025643f 100644 --- a/nano/node/vote_processor.cpp +++ b/nano/node/vote_processor.cpp @@ -198,7 +198,7 @@ nano::vote_code nano::vote_processor::vote_blocking (std::shared_ptr } if (config.logging.vote_logging ()) { - logger.try_log (boost::str (boost::format ("Vote from: %1% timestamp: %2% block(s): %3% status: %4%") % vote_a->account.to_account () % std::to_string (vote_a->timestamp ()) % vote_a->hashes_string () % status)); + logger.try_log (boost::str (boost::format ("Vote from: %1% timestamp: %2% duration %3%ms block(s): %4% status: %5%") % vote_a->account.to_account () % std::to_string (vote_a->timestamp ()) % std::to_string (vote_a->duration ().count ()) % vote_a->hashes_string () % status)); } return result; } diff --git a/nano/node/voting.cpp b/nano/node/voting.cpp index d6abd122d4..124879d52c 100644 --- a/nano/node/voting.cpp +++ b/nano/node/voting.cpp @@ -362,7 +362,8 @@ void nano::vote_generator::vote (std::vector const & hashes_a, std::vector> votes_l; wallets.foreach_representative ([this, &hashes_a, &votes_l] (nano::public_key const & pub_a, nano::raw_key const & prv_a) { auto timestamp = this->is_final ? nano::vote::timestamp_max : nano::milliseconds_since_epoch (); - votes_l.emplace_back (std::make_shared (pub_a, prv_a, timestamp, hashes_a)); + uint8_t duration = this->is_final ? nano::vote::duration_max : /*8192ms*/ 0x9; + votes_l.emplace_back (std::make_shared (pub_a, prv_a, timestamp, duration, hashes_a)); }); for (auto const & vote_l : votes_l) { diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index ceec0cf4bf..24d27f0615 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -5299,7 +5299,7 @@ TEST (rpc, memory_stats) auto block (std::make_shared (0, 0, 0, 0, 0, key.prv, key.pub, 0)); std::vector hashes; hashes.push_back (block->hash ()); - auto vote (std::make_shared (key.pub, key.prv, 0, hashes)); + auto vote (std::make_shared (key.pub, key.prv, 0, 0, hashes)); node->vote_uniquer.unique (vote); boost::property_tree::ptree request; request.put ("action", "stats"); diff --git a/nano/secure/common.cpp b/nano/secure/common.cpp index 613ef5178f..25d01f1653 100644 --- a/nano/secure/common.cpp +++ b/nano/secure/common.cpp @@ -487,6 +487,7 @@ void nano::vote::serialize_json (boost::property_tree::ptree & tree) const tree.put ("signature", signature.number ()); tree.put ("sequence", std::to_string (timestamp ())); tree.put ("timestamp", std::to_string (timestamp ())); + tree.put ("duration", std::to_string (duration_bits ())); boost::property_tree::ptree blocks_tree; for (auto block : blocks) { @@ -518,6 +519,21 @@ uint64_t nano::vote::timestamp () const return timestamp_m; } +uint8_t nano::vote::duration_bits () const +{ + // Duration field is specified in the 4 low-order bits of the timestamp. + // This makes the timestamp have a minimum granularity of 16ms + // The duration is specified as 2^(duration + 4) giving it a range of 16-524,288ms in power of two increments + auto result = timestamp_m & ~timestamp_mask; + debug_assert (result < 16); + return static_cast (result); +} + +std::chrono::milliseconds nano::vote::duration () const +{ + return std::chrono::milliseconds{ 1u << (duration_bits () + 4) }; +} + nano::vote::vote (nano::vote const & other_a) : timestamp_m{ other_a.timestamp_m }, blocks (other_a.blocks), @@ -569,16 +585,16 @@ nano::vote::vote (bool & error_a, nano::stream & stream_a, nano::block_type type } } -nano::vote::vote (nano::account const & account_a, nano::raw_key const & prv_a, uint64_t timestamp_a, std::shared_ptr const & block_a) : - timestamp_m{ timestamp_a }, +nano::vote::vote (nano::account const & account_a, nano::raw_key const & prv_a, uint64_t timestamp_a, uint8_t duration, std::shared_ptr const & block_a) : + timestamp_m{ packed_timestamp (timestamp_a, duration) }, blocks (1, block_a), account (account_a), signature (nano::sign_message (prv_a, account_a, hash ())) { } -nano::vote::vote (nano::account const & account_a, nano::raw_key const & prv_a, uint64_t timestamp_a, std::vector const & blocks_a) : - timestamp_m{ timestamp_a }, +nano::vote::vote (nano::account const & account_a, nano::raw_key const & prv_a, uint64_t timestamp_a, uint8_t duration, std::vector const & blocks_a) : + timestamp_m{ packed_timestamp (timestamp_a, duration) }, account (account_a) { debug_assert (!blocks_a.empty ()); @@ -738,6 +754,13 @@ bool nano::vote::validate () const return nano::validate_message (account, hash (), signature); } +uint64_t nano::vote::packed_timestamp (uint64_t timestamp, uint8_t duration) const +{ + debug_assert (duration <= duration_max && "Invalid duration"); + debug_assert ((!(timestamp == timestamp_max) || (duration == duration_max)) && "Invalid final vote"); + return (timestamp & timestamp_mask) | duration; +} + nano::block_hash nano::iterate_vote_blocks_as_hash::operator() (boost::variant, nano::block_hash> const & item) const { nano::block_hash result; diff --git a/nano/secure/common.hpp b/nano/secure/common.hpp index b9542bf4df..078ccdb774 100644 --- a/nano/secure/common.hpp +++ b/nano/secure/common.hpp @@ -249,8 +249,8 @@ class vote final vote (nano::vote const &); vote (bool &, nano::stream &, nano::block_uniquer * = nullptr); vote (bool &, nano::stream &, nano::block_type, nano::block_uniquer * = nullptr); - vote (nano::account const &, nano::raw_key const &, uint64_t timestamp, std::shared_ptr const &); - vote (nano::account const &, nano::raw_key const &, uint64_t timestamp, std::vector const &); + vote (nano::account const &, nano::raw_key const &, uint64_t timestamp, uint8_t duration, std::shared_ptr const &); + vote (nano::account const &, nano::raw_key const &, uint64_t timestamp, uint8_t duration, std::vector const &); std::string hashes_string () const; nano::block_hash hash () const; nano::block_hash full_hash () const; @@ -265,8 +265,12 @@ class vote final boost::transform_iterator end () const; std::string to_json () const; uint64_t timestamp () const; - static uint64_t constexpr timestamp_max = { 0xffff'ffff'ffff'ffffULL }; - static uint64_t constexpr timestamp_min = { 0x0000'0000'0000'0001ULL }; + uint8_t duration_bits () const; + std::chrono::milliseconds duration () const; + static uint64_t constexpr timestamp_mask = { 0xffff'ffff'ffff'fff0ULL }; + static uint64_t constexpr timestamp_max = { 0xffff'ffff'ffff'fff0ULL }; + static uint64_t constexpr timestamp_min = { 0x0000'0000'0000'0010ULL }; + static uint8_t constexpr duration_max = { 0x0fu }; private: // Vote timestamp @@ -280,6 +284,9 @@ class vote final // Signature of timestamp + block hashes nano::signature signature; static std::string const hash_prefix; + +private: + uint64_t packed_timestamp (uint64_t timestamp, uint8_t duration) const; }; /** * This class serves to find and return unique variants of a vote in order to minimize memory usage diff --git a/nano/slow_test/node.cpp b/nano/slow_test/node.cpp index 69396e17af..f430eb5320 100644 --- a/nano/slow_test/node.cpp +++ b/nano/slow_test/node.cpp @@ -418,7 +418,7 @@ TEST (store, vote_load) auto block (std::make_shared (0, 0, 0, nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, 0)); for (auto i (0); i < 1000000; ++i) { - auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, i, block)); + auto vote (std::make_shared (nano::dev::genesis_key.pub, nano::dev::genesis_key.prv, i, 0, block)); node.vote_processor.vote (vote, std::make_shared (node)); } } From 82a7fcf45b9dcd1c1655c9b213573534fba4704d Mon Sep 17 00:00:00 2001 From: Thiago Silva <82097354+thsfs@users.noreply.github.com> Date: Wed, 3 Nov 2021 20:47:24 -0300 Subject: [PATCH 303/346] * Adds a maximum per ip connection limit to incoming connections * Adds rules for the subnetwork --- nano/boost/asio/ip/network_v6.hpp | 7 + nano/core_test/socket.cpp | 275 ++++++++++++++++++++++++++++-- nano/lib/config.hpp | 4 +- nano/lib/stats.cpp | 9 + nano/lib/stats.hpp | 3 + nano/node/nodeconfig.hpp | 1 + nano/node/socket.cpp | 119 ++++++++++++- nano/node/socket.hpp | 27 ++- nano/node/transport/transport.cpp | 13 +- nano/node/transport/transport.hpp | 2 + 10 files changed, 433 insertions(+), 27 deletions(-) create mode 100644 nano/boost/asio/ip/network_v6.hpp diff --git a/nano/boost/asio/ip/network_v6.hpp b/nano/boost/asio/ip/network_v6.hpp new file mode 100644 index 0000000000..b9f213ab63 --- /dev/null +++ b/nano/boost/asio/ip/network_v6.hpp @@ -0,0 +1,7 @@ +#pragma once + +#include + +DISABLE_ASIO_WARNINGS +#include +REENABLE_WARNINGS diff --git a/nano/core_test/socket.cpp b/nano/core_test/socket.cpp index a5746023b9..03ebc096a5 100644 --- a/nano/core_test/socket.cpp +++ b/nano/core_test/socket.cpp @@ -1,3 +1,5 @@ +#include +#include #include #include #include @@ -5,23 +7,22 @@ #include +#include +#include +#include +#include + using namespace std::chrono_literals; TEST (socket, max_connections) { - // this is here just so that ASSERT_TIMELY can be used nano::system system; - auto node_flags = nano::inactive_node_flag_defaults (); - node_flags.read_only = false; - nano::inactive_node inactivenode (nano::unique_path (), node_flags); - auto node = inactivenode.node; + auto node = system.add_node (); - nano::thread_runner runner (node->io_ctx, 1); - - auto server_port (nano::get_available_port ()); - boost::asio::ip::tcp::endpoint listen_endpoint (boost::asio::ip::address_v6::any (), server_port); - boost::asio::ip::tcp::endpoint dst_endpoint (boost::asio::ip::address_v6::loopback (), server_port); + auto server_port = nano::get_available_port (); + boost::asio::ip::tcp::endpoint listen_endpoint{ boost::asio::ip::address_v6::any (), server_port }; + boost::asio::ip::tcp::endpoint dst_endpoint{ boost::asio::ip::address_v6::loopback (), server_port }; // start a server socket that allows max 2 live connections auto server_socket = std::make_shared (*node, listen_endpoint, 2); @@ -37,10 +38,10 @@ TEST (socket, max_connections) }); // client side connection tracking - std::atomic connection_attempts = 0; + std::atomic connection_attempts = 0; auto connect_handler = [&connection_attempts] (boost::system::error_code const & ec_a) { ASSERT_EQ (ec_a.value (), 0); - connection_attempts++; + ++connection_attempts; }; // start 3 clients, 2 will persist but 1 will be dropped @@ -102,8 +103,252 @@ TEST (socket, max_connections) ASSERT_TIMELY (5s, server_sockets.size () == 5); // connections accepted by the server node->stop (); - runner.stop_event_processing (); - runner.join (); +} + +TEST (socket, max_connections_per_ip) +{ + nano::system system; + + auto node = system.add_node (); + ASSERT_FALSE (node->flags.disable_max_peers_per_ip); + + auto server_port = nano::get_available_port (); + boost::asio::ip::tcp::endpoint listen_endpoint{ boost::asio::ip::address_v6::any (), server_port }; + boost::asio::ip::tcp::endpoint dst_endpoint{ boost::asio::ip::address_v6::loopback (), server_port }; + + const auto max_ip_connections = node->network_params.network.max_peers_per_ip; + ASSERT_TRUE (max_ip_connections >= 1); + + const auto max_global_connections = 1000; + + auto server_socket = std::make_shared (*node, listen_endpoint, max_global_connections); + boost::system::error_code ec; + server_socket->start (ec); + ASSERT_FALSE (ec); + + // successful incoming connections are stored in server_sockets to keep them alive (server side) + std::vector> server_sockets; + server_socket->on_connection ([&server_sockets] (std::shared_ptr const & new_connection, boost::system::error_code const & ec_a) { + server_sockets.push_back (new_connection); + return true; + }); + + // client side connection tracking + std::atomic connection_attempts = 0; + auto connect_handler = [&connection_attempts] (boost::system::error_code const & ec_a) { + ASSERT_EQ (ec_a.value (), 0); + ++connection_attempts; + }; + + // start n clients, n-1 will persist but 1 will be dropped, where n == max_ip_connections + std::vector> client_list; + client_list.reserve (max_ip_connections + 1); + + for (auto idx = 0; idx < max_ip_connections + 1; ++idx) + { + auto client = std::make_shared (*node); + client->async_connect (dst_endpoint, connect_handler); + client_list.push_back (client); + } + + auto get_tcp_max_per_ip = [&node] () { + return node->stats.count (nano::stat::type::tcp, nano::stat::detail::tcp_max_per_ip, nano::stat::dir::in); + }; + + auto get_tcp_accept_successes = [&node] () { + return node->stats.count (nano::stat::type::tcp, nano::stat::detail::tcp_accept_success, nano::stat::dir::in); + }; + + ASSERT_TIMELY (5s, get_tcp_accept_successes () == max_ip_connections); + ASSERT_TIMELY (5s, get_tcp_max_per_ip () == 1); + ASSERT_TIMELY (5s, connection_attempts == max_ip_connections + 1); + + node->stop (); +} + +TEST (socket, limited_subnet_address) +{ + auto address = boost::asio::ip::make_address ("a41d:b7b2:8298:cf45:672e:bd1a:e7fb:f713"); + auto network = nano::socket_functions::get_ipv6_subnet_address (address.to_v6 (), 32); // network prefix = 32. + ASSERT_EQ ("a41d:b7b2:8298:cf45:672e:bd1a:e7fb:f713/32", network.to_string ()); + ASSERT_EQ ("a41d:b7b2::/32", network.canonical ().to_string ()); +} + +TEST (socket, first_ipv6_subnet_address) +{ + auto address = boost::asio::ip::make_address ("a41d:b7b2:8298:cf45:672e:bd1a:e7fb:f713"); + auto first_address = nano::socket_functions::first_ipv6_subnet_address (address.to_v6 (), 32); // network prefix = 32. + ASSERT_EQ ("a41d:b7b2::", first_address.to_string ()); +} + +TEST (socket, last_ipv6_subnet_address) +{ + auto address = boost::asio::ip::make_address ("a41d:b7b2:8298:cf45:672e:bd1a:e7fb:f713"); + auto last_address = nano::socket_functions::last_ipv6_subnet_address (address.to_v6 (), 32); // network prefix = 32. + ASSERT_EQ ("a41d:b7b2:ffff:ffff:ffff:ffff:ffff:ffff", last_address.to_string ()); +} + +TEST (socket, count_subnetwork_connections) +{ + nano::system system; + auto node = system.add_node (); + + auto address0 = boost::asio::ip::make_address ("a41d:b7b1:ffff:ffff:ffff:ffff:ffff:ffff"); // out of network prefix + auto address1 = boost::asio::ip::make_address ("a41d:b7b2:8298:cf45:672e:bd1a:e7fb:f713"); // referece address + auto address2 = boost::asio::ip::make_address ("a41d:b7b2::"); // start of the network range + auto address3 = boost::asio::ip::make_address ("a41d:b7b2::1"); + auto address4 = boost::asio::ip::make_address ("a41d:b7b2:ffff:ffff:ffff:ffff:ffff:ffff"); // end of the network range + auto address5 = boost::asio::ip::make_address ("a41d:b7b3::"); // out of the network prefix + auto address6 = boost::asio::ip::make_address ("a41d:b7b3::1"); // out of the network prefix + + auto connection0 = std::make_shared (*node); + auto connection1 = std::make_shared (*node); + auto connection2 = std::make_shared (*node); + auto connection3 = std::make_shared (*node); + auto connection4 = std::make_shared (*node); + auto connection5 = std::make_shared (*node); + auto connection6 = std::make_shared (*node); + + nano::address_socket_mmap connections_per_address; + connections_per_address.emplace (address0, connection0); + connections_per_address.emplace (address1, connection1); + connections_per_address.emplace (address2, connection2); + connections_per_address.emplace (address3, connection3); + connections_per_address.emplace (address4, connection4); + connections_per_address.emplace (address5, connection5); + connections_per_address.emplace (address6, connection6); + + // Asserts it counts only the connections for the specified address and its network prefix. + ASSERT_EQ (4, nano::socket_functions::count_subnetwork_connections (connections_per_address, address1.to_v6 (), 32)); +} + +TEST (socket, max_connections_per_subnetwork) +{ + nano::system system; + + nano::node_flags node_flags; + // disabling IP limit because it will be used the same IP address to check they come from the same subnetwork. + node_flags.disable_max_peers_per_ip = true; + node_flags.disable_max_peers_per_subnetwork = false; + auto node = system.add_node (node_flags); + ASSERT_TRUE (node->flags.disable_max_peers_per_ip); + ASSERT_FALSE (node->flags.disable_max_peers_per_subnetwork); + + auto server_port = nano::get_available_port (); + boost::asio::ip::tcp::endpoint listen_endpoint{ boost::asio::ip::address_v6::any (), server_port }; + boost::asio::ip::tcp::endpoint dst_endpoint{ boost::asio::ip::address_v6::loopback (), server_port }; + + const auto max_subnetwork_connections = node->network_params.network.max_peers_per_subnetwork; + ASSERT_TRUE (max_subnetwork_connections >= 1); + + const auto max_global_connections = 1000; + + auto server_socket = std::make_shared (*node, listen_endpoint, max_global_connections); + boost::system::error_code ec; + server_socket->start (ec); + ASSERT_FALSE (ec); + + // successful incoming connections are stored in server_sockets to keep them alive (server side) + std::vector> server_sockets; + server_socket->on_connection ([&server_sockets] (std::shared_ptr const & new_connection, boost::system::error_code const & ec_a) { + server_sockets.push_back (new_connection); + return true; + }); + + // client side connection tracking + std::atomic connection_attempts = 0; + auto connect_handler = [&connection_attempts] (boost::system::error_code const & ec_a) { + ASSERT_EQ (ec_a.value (), 0); + ++connection_attempts; + }; + + // start n clients, n-1 will persist but 1 will be dropped, where n == max_subnetwork_connections + std::vector> client_list; + client_list.reserve (max_subnetwork_connections + 1); + + for (auto idx = 0; idx < max_subnetwork_connections + 1; ++idx) + { + auto client = std::make_shared (*node); + client->async_connect (dst_endpoint, connect_handler); + client_list.push_back (client); + } + + auto get_tcp_max_per_subnetwork = [&node] () { + return node->stats.count (nano::stat::type::tcp, nano::stat::detail::tcp_max_per_subnetwork, nano::stat::dir::in); + }; + + auto get_tcp_accept_successes = [&node] () { + return node->stats.count (nano::stat::type::tcp, nano::stat::detail::tcp_accept_success, nano::stat::dir::in); + }; + + ASSERT_TIMELY (5s, get_tcp_accept_successes () == max_subnetwork_connections); + ASSERT_TIMELY (5s, get_tcp_max_per_subnetwork () == 1); + ASSERT_TIMELY (5s, connection_attempts == max_subnetwork_connections + 1); + + node->stop (); +} + +TEST (socket, disabled_max_peers_per_ip) +{ + nano::system system; + + nano::node_flags node_flags; + node_flags.disable_max_peers_per_ip = true; + auto node = system.add_node (node_flags); + ASSERT_TRUE (node->flags.disable_max_peers_per_ip); + + auto server_port = nano::get_available_port (); + boost::asio::ip::tcp::endpoint listen_endpoint{ boost::asio::ip::address_v6::any (), server_port }; + boost::asio::ip::tcp::endpoint dst_endpoint{ boost::asio::ip::address_v6::loopback (), server_port }; + + const auto max_ip_connections = node->network_params.network.max_peers_per_ip; + ASSERT_TRUE (max_ip_connections >= 1); + + const auto max_global_connections = 1000; + + auto server_socket = std::make_shared (*node, listen_endpoint, max_global_connections); + boost::system::error_code ec; + server_socket->start (ec); + ASSERT_FALSE (ec); + + // successful incoming connections are stored in server_sockets to keep them alive (server side) + std::vector> server_sockets; + server_socket->on_connection ([&server_sockets] (std::shared_ptr const & new_connection, boost::system::error_code const & ec_a) { + server_sockets.push_back (new_connection); + return true; + }); + + // client side connection tracking + std::atomic connection_attempts = 0; + auto connect_handler = [&connection_attempts] (boost::system::error_code const & ec_a) { + ASSERT_EQ (ec_a.value (), 0); + ++connection_attempts; + }; + + // start n clients, n-1 will persist but 1 will be dropped, where n == max_ip_connections + std::vector> client_list; + client_list.reserve (max_ip_connections + 1); + + for (auto idx = 0; idx < max_ip_connections + 1; ++idx) + { + auto client = std::make_shared (*node); + client->async_connect (dst_endpoint, connect_handler); + client_list.push_back (client); + } + + auto get_tcp_max_per_ip = [&node] () { + return node->stats.count (nano::stat::type::tcp, nano::stat::detail::tcp_max_per_ip, nano::stat::dir::in); + }; + + auto get_tcp_accept_successes = [&node] () { + return node->stats.count (nano::stat::type::tcp, nano::stat::detail::tcp_accept_success, nano::stat::dir::in); + }; + + ASSERT_TIMELY (5s, get_tcp_accept_successes () == max_ip_connections + 1); + ASSERT_TIMELY (5s, get_tcp_max_per_ip () == 0); + ASSERT_TIMELY (5s, connection_attempts == max_ip_connections + 1); + + node->stop (); } TEST (socket, drop_policy) @@ -173,6 +418,8 @@ TEST (socket, concurrent_writes) { auto node_flags = nano::inactive_node_flag_defaults (); node_flags.read_only = false; + node_flags.disable_max_peers_per_ip = true; + node_flags.disable_max_peers_per_subnetwork = true; nano::inactive_node inactivenode (nano::unique_path (), node_flags); auto node = inactivenode.node; diff --git a/nano/lib/config.hpp b/nano/lib/config.hpp index cd101d921f..52c8ab2142 100644 --- a/nano/lib/config.hpp +++ b/nano/lib/config.hpp @@ -160,6 +160,7 @@ class network_constants bootstrap_interval = std::chrono::seconds (15 * 60); max_peers_per_ip = is_dev_network () ? 10 : 5; max_peers_per_subnetwork = max_peers_per_ip * 4; + ipv6_subnetwork_prefix_for_limiting = 64; // Equivalent to network prefix /64. peer_dump_interval = is_dev_network () ? std::chrono::seconds (1) : std::chrono::seconds (5 * 60); } @@ -190,10 +191,11 @@ class network_constants std::chrono::seconds idle_timeout; std::chrono::seconds syn_cookie_cutoff; std::chrono::seconds bootstrap_interval; - /** Maximum number of peers per IP */ + /** Maximum number of peers per IP. It is also the max number of connections per IP */ size_t max_peers_per_ip; /** Maximum number of peers per subnetwork */ size_t max_peers_per_subnetwork; + size_t ipv6_subnetwork_prefix_for_limiting; std::chrono::seconds peer_dump_interval; /** Returns the network this object contains values for */ diff --git a/nano/lib/stats.cpp b/nano/lib/stats.cpp index 7df9eab711..74fe635809 100644 --- a/nano/lib/stats.cpp +++ b/nano/lib/stats.cpp @@ -775,6 +775,15 @@ std::string nano::stat::detail_to_string (uint32_t key) case nano::stat::detail::tcp_max_per_ip: res = "tcp_max_per_ip"; break; + case nano::stat::detail::tcp_max_per_subnetwork: + res = "tcp_max_per_subnetwork"; + break; + case nano::stat::detail::tcp_silent_connection_drop: + res = "tcp_silent_connection_drop"; + break; + case nano::stat::detail::tcp_io_timeout_drop: + res = "tcp_io_timeout_drop"; + break; case nano::stat::detail::unreachable_host: res = "unreachable_host"; break; diff --git a/nano/lib/stats.hpp b/nano/lib/stats.hpp index ea5ba2a1fe..6002aa5225 100644 --- a/nano/lib/stats.hpp +++ b/nano/lib/stats.hpp @@ -345,6 +345,9 @@ class stat final tcp_write_no_socket_drop, tcp_excluded, tcp_max_per_ip, + tcp_max_per_subnetwork, + tcp_silent_connection_drop, + tcp_io_timeout_drop, // ipc invocations, diff --git a/nano/node/nodeconfig.hpp b/nano/node/nodeconfig.hpp index 8dab45086b..54a219906b 100644 --- a/nano/node/nodeconfig.hpp +++ b/nano/node/nodeconfig.hpp @@ -144,6 +144,7 @@ class node_flags final bool disable_block_processor_republishing{ false }; bool allow_bootstrap_peers_duplicates{ false }; bool disable_max_peers_per_ip{ false }; // For testing only + bool disable_max_peers_per_subnetwork{ false }; // For testing only bool force_use_write_database_queue{ false }; // For testing only. RocksDB does not use the database queue, but some tests rely on it being used. bool disable_search_pending{ false }; // For testing only bool enable_pruning{ false }; diff --git a/nano/node/socket.cpp b/nano/node/socket.cpp index 7e6ad87bd7..ae1710bee5 100644 --- a/nano/node/socket.cpp +++ b/nano/node/socket.cpp @@ -1,12 +1,19 @@ #include #include +#include +#include +#include #include #include #include +#include #include +#include +#include #include +#include nano::socket::socket (nano::node & node_a) : strand{ node_a.io_ctx.get_executor () }, @@ -221,17 +228,80 @@ void nano::server_socket::close () boost::asio::dispatch (strand, boost::asio::bind_executor (strand, [this_l] () { this_l->close_internal (); this_l->acceptor.close (); - for (auto & connection_w : this_l->connections) + for (auto & address_connection_pair : this_l->connections_per_address) { - if (auto connection_l = connection_w.lock ()) + if (auto connection_l = address_connection_pair.second.lock ()) { connection_l->close (); } } - this_l->connections.clear (); + this_l->connections_per_address.clear (); })); } +boost::asio::ip::network_v6 nano::socket_functions::get_ipv6_subnet_address (boost::asio::ip::address_v6 const & ip_address, size_t network_prefix) +{ + return boost::asio::ip::make_network_v6 (ip_address, network_prefix); +} + +boost::asio::ip::address nano::socket_functions::first_ipv6_subnet_address (boost::asio::ip::address_v6 const & ip_address, size_t network_prefix) +{ + auto range = get_ipv6_subnet_address (ip_address, network_prefix).hosts (); + debug_assert (!range.empty ()); + return *(range.begin ()); +} + +boost::asio::ip::address nano::socket_functions::last_ipv6_subnet_address (boost::asio::ip::address_v6 const & ip_address, size_t network_prefix) +{ + auto range = get_ipv6_subnet_address (ip_address, network_prefix).hosts (); + debug_assert (!range.empty ()); + return *(--range.end ()); +} + +size_t nano::socket_functions::count_subnetwork_connections ( +nano::address_socket_mmap const & per_address_connections, +boost::asio::ip::address_v6 const & remote_address, +size_t network_prefix) +{ + auto range = get_ipv6_subnet_address (remote_address, network_prefix).hosts (); + if (range.empty ()) + { + return 0; + } + auto const first_ip = first_ipv6_subnet_address (remote_address, network_prefix); + auto const last_ip = last_ipv6_subnet_address (remote_address, network_prefix); + auto const counted_connections = std::distance (per_address_connections.lower_bound (first_ip), per_address_connections.upper_bound (last_ip)); + return counted_connections; +} + +bool nano::server_socket::limit_reached_for_incoming_subnetwork_connections (std::shared_ptr const & new_connection) +{ + debug_assert (strand.running_in_this_thread ()); + if (node.flags.disable_max_peers_per_subnetwork) + { + // If the limit is disabled, then it is unreachable. + return false; + } + auto const counted_connections = socket_functions::count_subnetwork_connections ( + connections_per_address, + nano::transport::mapped_from_v4_or_v6 (new_connection->remote.address ()), + node.network_params.network.ipv6_subnetwork_prefix_for_limiting); + return counted_connections >= node.network_params.network.max_peers_per_subnetwork; +} + +bool nano::server_socket::limit_reached_for_incoming_ip_connections (std::shared_ptr const & new_connection) +{ + debug_assert (strand.running_in_this_thread ()); + if (node.flags.disable_max_peers_per_ip) + { + // If the limit is disabled, then it is unreachable. + return false; + } + auto const address_connections_range = connections_per_address.equal_range (new_connection->remote.address ()); + auto const counted_connections = std::distance (address_connections_range.first, address_connections_range.second); + return counted_connections >= node.network_params.network.max_peers_per_ip; +} + void nano::server_socket::on_connection (std::function const &, boost::system::error_code const &)> callback_a) { auto this_l (std::static_pointer_cast (shared_from_this ())); @@ -250,14 +320,41 @@ void nano::server_socket::on_connection (std::functionevict_dead_connections (); - if (this_l->connections.size () >= this_l->max_inbound_connections) + if (this_l->connections_per_address.size () >= this_l->max_inbound_connections) { - this_l->node.logger.always_log ("Network: max_inbound_connections reached, unable to open new connection"); + this_l->node.logger.try_log ("Network: max_inbound_connections reached, unable to open new connection"); this_l->node.stats.inc (nano::stat::type::tcp, nano::stat::detail::tcp_accept_failure, nano::stat::dir::in); this_l->on_connection_requeue_delayed (callback_a); return; } + if (this_l->limit_reached_for_incoming_ip_connections (new_connection)) + { + auto const remote_ip_address = new_connection->remote_endpoint ().address (); + auto const log_message = boost::str ( + boost::format ("Network: max connections per IP (max_peers_per_ip) was reached for %1%, unable to open new connection") + % remote_ip_address.to_string ()); + this_l->node.logger.try_log (log_message); + this_l->node.stats.inc (nano::stat::type::tcp, nano::stat::detail::tcp_max_per_ip, nano::stat::dir::in); + this_l->on_connection_requeue_delayed (callback_a); + return; + } + + if (this_l->limit_reached_for_incoming_subnetwork_connections (new_connection)) + { + auto const remote_ip_address = new_connection->remote_endpoint ().address (); + debug_assert (remote_ip_address.is_v6 ()); + auto const remote_subnet = socket_functions::get_ipv6_subnet_address (remote_ip_address.to_v6 (), this_l->node.network_params.network.max_peers_per_subnetwork); + auto const log_message = boost::str ( + boost::format ("Network: max connections per subnetwork (max_peers_per_subnetwork) was reached for subnetwork %1% (remote IP: %2%), unable to open new connection") + % remote_subnet.canonical ().to_string () + % remote_ip_address.to_string ()); + this_l->node.logger.try_log (log_message); + this_l->node.stats.inc (nano::stat::type::tcp, nano::stat::detail::tcp_max_per_subnetwork, nano::stat::dir::in); + this_l->on_connection_requeue_delayed (callback_a); + return; + } + if (!ec_a) { // Make sure the new connection doesn't idle. Note that in most cases, the callback is going to start @@ -265,7 +362,7 @@ void nano::server_socket::on_connection (std::functioncheckup (); new_connection->start_timer (this_l->node.network_params.network.is_dev_network () ? std::chrono::seconds (2) : this_l->node.network_params.network.idle_timeout); this_l->node.stats.inc (nano::stat::type::tcp, nano::stat::detail::tcp_accept_success, nano::stat::dir::in); - this_l->connections.push_back (new_connection); + this_l->connections_per_address.emplace (new_connection->remote.address (), new_connection); if (callback_a (new_connection, ec_a)) { this_l->on_connection (callback_a); @@ -329,5 +426,13 @@ bool nano::server_socket::is_temporary_error (boost::system::error_code const ec void nano::server_socket::evict_dead_connections () { debug_assert (strand.running_in_this_thread ()); - connections.erase (std::remove_if (connections.begin (), connections.end (), [] (auto & connection) { return connection.expired (); }), connections.end ()); + for (auto it = connections_per_address.begin (); it != connections_per_address.end ();) + { + if (it->second.expired ()) + { + it = connections_per_address.erase (it); + continue; + } + ++it; + } } diff --git a/nano/node/socket.hpp b/nano/node/socket.hpp index 1b4868fd3d..ddbe5ed2ba 100644 --- a/nano/node/socket.hpp +++ b/nano/node/socket.hpp @@ -8,9 +8,21 @@ #include #include +#include #include #include +namespace boost +{ +namespace asio +{ + namespace ip + { + class network_v6; + } +} +} + namespace nano { /** Policy to affect at which stage a buffer can be dropped */ @@ -114,6 +126,16 @@ class socket : public std::enable_shared_from_this static std::size_t constexpr queue_size_max = 128; }; +using address_socket_mmap = std::multimap>; + +namespace socket_functions +{ + boost::asio::ip::network_v6 get_ipv6_subnet_address (boost::asio::ip::address_v6 const &, size_t); + boost::asio::ip::address first_ipv6_subnet_address (boost::asio::ip::address_v6 const &, size_t); + boost::asio::ip::address last_ipv6_subnet_address (boost::asio::ip::address_v6 const &, size_t); + size_t count_subnetwork_connections (nano::address_socket_mmap const &, boost::asio::ip::address_v6 const &, size_t); +} + /** Socket class for TCP servers */ class server_socket final : public socket { @@ -138,12 +160,15 @@ class server_socket final : public socket } private: - std::vector> connections; + nano::address_socket_mmap connections_per_address; boost::asio::ip::tcp::acceptor acceptor; boost::asio::ip::tcp::endpoint local; std::size_t max_inbound_connections; void evict_dead_connections (); bool is_temporary_error (boost::system::error_code const ec_a); void on_connection_requeue_delayed (std::function const & new_connection, boost::system::error_code const &)>); + /** Checks whether the maximum number of connections per IP was reached. If so, it returns true. */ + bool limit_reached_for_incoming_ip_connections (std::shared_ptr const & new_connection); + bool limit_reached_for_incoming_subnetwork_connections (std::shared_ptr const & new_connection); }; } diff --git a/nano/node/transport/transport.cpp b/nano/node/transport/transport.cpp index 718df5d39b..79998ec594 100644 --- a/nano/node/transport/transport.cpp +++ b/nano/node/transport/transport.cpp @@ -2,6 +2,9 @@ #include #include +#include +#include +#include #include #include @@ -82,7 +85,7 @@ nano::tcp_endpoint nano::transport::map_endpoint_to_tcp (nano::endpoint const & boost::asio::ip::address nano::transport::map_address_to_subnetwork (boost::asio::ip::address const & address_a) { debug_assert (address_a.is_v6 ()); - static short const ipv6_subnet_prefix_length = 32; // Limits for /32 IPv6 subnetwork + static short const ipv6_subnet_prefix_length = 32; // Equivalent to network prefix /32. static short const ipv4_subnet_prefix_length = (128 - 32) + 24; // Limits for /24 IPv4 subnetwork return address_a.to_v6 ().is_v4_mapped () ? boost::asio::ip::make_network_v6 (address_a.to_v6 (), ipv4_subnet_prefix_length).network () : boost::asio::ip::make_network_v6 (address_a.to_v6 (), ipv6_subnet_prefix_length).network (); } @@ -159,12 +162,14 @@ std::string nano::transport::channel_loopback::to_string () const return boost::str (boost::format ("%1%") % endpoint); } -namespace -{ -boost::asio::ip::address_v6 mapped_from_v4_bytes (unsigned long address_a) +boost::asio::ip::address_v6 nano::transport::mapped_from_v4_bytes (unsigned long address_a) { return boost::asio::ip::address_v6::v4_mapped (boost::asio::ip::address_v4 (address_a)); } + +boost::asio::ip::address_v6 nano::transport::mapped_from_v4_or_v6 (boost::asio::ip::address const & address_a) +{ + return address_a.is_v4 () ? boost::asio::ip::address_v6::v4_mapped (address_a.to_v4 ()) : address_a.to_v6 (); } bool nano::transport::reserved_address (nano::endpoint const & endpoint_a, bool allow_local_peers) diff --git a/nano/node/transport/transport.hpp b/nano/node/transport/transport.hpp index 56e5f6b134..66af0baa48 100644 --- a/nano/node/transport/transport.hpp +++ b/nano/node/transport/transport.hpp @@ -30,6 +30,8 @@ namespace transport nano::tcp_endpoint map_endpoint_to_tcp (nano::endpoint const &); boost::asio::ip::address map_address_to_subnetwork (boost::asio::ip::address const &); boost::asio::ip::address ipv4_address_or_ipv6_subnet (boost::asio::ip::address const &); + boost::asio::ip::address_v6 mapped_from_v4_bytes (unsigned long); + boost::asio::ip::address_v6 mapped_from_v4_or_v6 (boost::asio::ip::address const &); // Unassigned, reserved, self bool reserved_address (nano::endpoint const &, bool = false); static std::chrono::seconds constexpr syn_cookie_cutoff = std::chrono::seconds (5); From d41789d5770719f64c1854367f66b6eae9c449ac Mon Sep 17 00:00:00 2001 From: Thiago Silva <82097354+thsfs@users.noreply.github.com> Date: Wed, 3 Nov 2021 20:48:38 -0300 Subject: [PATCH 304/346] Separate the logic for sub-network limiting on outgoing connections (#90) * Makes the disabling flags for max ip/subnetwork coherent --- nano/core_test/network.cpp | 10 +++++--- nano/lib/stats.cpp | 6 +++++ nano/lib/stats.hpp | 2 ++ nano/node/transport/tcp.cpp | 48 ++++++++++++++++++++++++++++--------- nano/node/transport/tcp.hpp | 4 +++- nano/node/transport/udp.cpp | 42 +++++++++++++++++++++++++------- nano/node/transport/udp.hpp | 4 +++- 7 files changed, 91 insertions(+), 25 deletions(-) diff --git a/nano/core_test/network.cpp b/nano/core_test/network.cpp index 8dda64b817..37e35b8922 100644 --- a/nano/core_test/network.cpp +++ b/nano/core_test/network.cpp @@ -1,3 +1,4 @@ +#include #include #include #include @@ -918,7 +919,10 @@ namespace transport { TEST (network, peer_max_tcp_attempts_subnetwork) { - nano::system system (1); + nano::node_flags node_flags; + node_flags.disable_max_peers_per_ip = true; + nano::system system; + system.add_node (node_flags); auto node (system.nodes[0]); for (auto i (0); i < node->network_params.network.max_peers_per_subnetwork; ++i) { @@ -927,9 +931,9 @@ namespace transport ASSERT_FALSE (node->network.tcp_channels.reachout (endpoint)); } ASSERT_EQ (0, node->network.size ()); - ASSERT_EQ (0, node->stats.count (nano::stat::type::tcp, nano::stat::detail::tcp_max_per_ip, nano::stat::dir::out)); + ASSERT_EQ (0, node->stats.count (nano::stat::type::tcp, nano::stat::detail::tcp_max_per_subnetwork, nano::stat::dir::out)); ASSERT_TRUE (node->network.tcp_channels.reachout (nano::endpoint (boost::asio::ip::make_address_v6 ("::ffff:127.0.0.1"), nano::get_available_port ()))); - ASSERT_EQ (1, node->stats.count (nano::stat::type::tcp, nano::stat::detail::tcp_max_per_ip, nano::stat::dir::out)); + ASSERT_EQ (1, node->stats.count (nano::stat::type::tcp, nano::stat::detail::tcp_max_per_subnetwork, nano::stat::dir::out)); } } } diff --git a/nano/lib/stats.cpp b/nano/lib/stats.cpp index 74fe635809..3325ba0d8b 100644 --- a/nano/lib/stats.cpp +++ b/nano/lib/stats.cpp @@ -817,6 +817,12 @@ std::string nano::stat::detail_to_string (uint32_t key) case nano::stat::detail::outdated_version: res = "outdated_version"; break; + case nano::stat::detail::udp_max_per_ip: + res = "udp_max_per_ip"; + break; + case nano::stat::detail::udp_max_per_subnetwork: + res = "udp_max_per_subnetwork"; + break; case nano::stat::detail::blocks_confirmed: res = "blocks_confirmed"; break; diff --git a/nano/lib/stats.hpp b/nano/lib/stats.hpp index 6002aa5225..3eed7d4014 100644 --- a/nano/lib/stats.hpp +++ b/nano/lib/stats.hpp @@ -337,6 +337,8 @@ class stat final invalid_telemetry_req_message, invalid_telemetry_ack_message, outdated_version, + udp_max_per_ip, + udp_max_per_subnetwork, // tcp tcp_accept_success, diff --git a/nano/node/transport/tcp.cpp b/nano/node/transport/tcp.cpp index 75ba49ded6..d5bfffef08 100644 --- a/nano/node/transport/tcp.cpp +++ b/nano/node/transport/tcp.cpp @@ -362,17 +362,17 @@ void nano::transport::tcp_channels::stop () bool nano::transport::tcp_channels::max_ip_connections (nano::tcp_endpoint const & endpoint_a) { - bool result (false); - if (!node.flags.disable_max_peers_per_ip) + if (node.flags.disable_max_peers_per_ip) { - auto const address (nano::transport::ipv4_address_or_ipv6_subnet (endpoint_a.address ())); - auto const subnet (nano::transport::map_address_to_subnetwork (endpoint_a.address ())); - nano::unique_lock lock (mutex); - result = channels.get ().count (address) >= node.network_params.network.max_peers_per_ip || channels.get ().count (subnet) >= node.network_params.network.max_peers_per_subnetwork; - if (!result) - { - result = attempts.get ().count (address) >= node.network_params.network.max_peers_per_ip || attempts.get ().count (subnet) >= node.network_params.network.max_peers_per_subnetwork; - } + return false; + } + bool result{ false }; + auto const address (nano::transport::ipv4_address_or_ipv6_subnet (endpoint_a.address ())); + nano::unique_lock lock (mutex); + result = channels.get ().count (address) >= node.network_params.network.max_peers_per_ip; + if (!result) + { + result = attempts.get ().count (address) >= node.network_params.network.max_peers_per_ip; } if (result) { @@ -381,11 +381,37 @@ bool nano::transport::tcp_channels::max_ip_connections (nano::tcp_endpoint const return result; } +bool nano::transport::tcp_channels::max_subnetwork_connections (nano::tcp_endpoint const & endpoint_a) +{ + if (node.flags.disable_max_peers_per_subnetwork) + { + return false; + } + bool result{ false }; + auto const subnet (nano::transport::map_address_to_subnetwork (endpoint_a.address ())); + nano::unique_lock lock (mutex); + result = channels.get ().count (subnet) >= node.network_params.network.max_peers_per_subnetwork; + if (!result) + { + result = attempts.get ().count (subnet) >= node.network_params.network.max_peers_per_subnetwork; + } + if (result) + { + node.stats.inc (nano::stat::type::tcp, nano::stat::detail::tcp_max_per_subnetwork, nano::stat::dir::out); + } + return result; +} + +bool nano::transport::tcp_channels::max_ip_or_subnetwork_connections (nano::tcp_endpoint const & endpoint_a) +{ + return max_ip_connections (endpoint_a) || max_subnetwork_connections (endpoint_a); +} + bool nano::transport::tcp_channels::reachout (nano::endpoint const & endpoint_a) { auto tcp_endpoint (nano::transport::map_endpoint_to_tcp (endpoint_a)); // Don't overload single IP - bool error = node.network.excluded_peers.check (tcp_endpoint) || max_ip_connections (tcp_endpoint); + bool error = node.network.excluded_peers.check (tcp_endpoint) || max_ip_or_subnetwork_connections (tcp_endpoint); if (!error && !node.flags.disable_tcp_realtime) { // Don't keepalive to nodes that already sent us something diff --git a/nano/node/transport/tcp.hpp b/nano/node/transport/tcp.hpp index 611791b508..353f35de37 100644 --- a/nano/node/transport/tcp.hpp +++ b/nano/node/transport/tcp.hpp @@ -91,7 +91,9 @@ namespace transport void stop (); void process_messages (); void process_message (nano::message const &, nano::tcp_endpoint const &, nano::account const &, std::shared_ptr const &); - bool max_ip_connections (nano::tcp_endpoint const &); + bool max_ip_connections (nano::tcp_endpoint const & endpoint_a); + bool max_subnetwork_connections (nano::tcp_endpoint const & endpoint_a); + bool max_ip_or_subnetwork_connections (nano::tcp_endpoint const & endpoint_a); // Should we reach out to this endpoint with a keepalive message bool reachout (nano::endpoint const &); std::unique_ptr collect_container_info (std::string const &); diff --git a/nano/node/transport/udp.cpp b/nano/node/transport/udp.cpp index 9b4885ba9b..8013e1a81c 100644 --- a/nano/node/transport/udp.cpp +++ b/nano/node/transport/udp.cpp @@ -100,7 +100,7 @@ std::shared_ptr nano::transport::udp_channels::ins { debug_assert (endpoint_a.address ().is_v6 ()); std::shared_ptr result; - if (!node.network.not_a_peer (endpoint_a, node.config.allow_local_peers) && (node.network_params.network.is_dev_network () || !max_ip_connections (endpoint_a))) + if (!node.network.not_a_peer (endpoint_a, node.config.allow_local_peers) && (node.network_params.network.is_dev_network () || !max_ip_or_subnetwork_connections (endpoint_a))) { nano::unique_lock lock (mutex); auto existing (channels.get ().find (endpoint_a)); @@ -373,7 +373,7 @@ class udp_message_visitor : public nano::message_visitor } void keepalive (nano::keepalive const & message_a) override { - if (!node.network.udp_channels.max_ip_connections (endpoint)) + if (!node.network.udp_channels.max_ip_or_subnetwork_connections (endpoint)) { auto cookie (node.network.syn_cookies.assign (endpoint)); if (cookie) @@ -630,21 +630,45 @@ std::shared_ptr nano::transport::udp_channels::create bool nano::transport::udp_channels::max_ip_connections (nano::endpoint const & endpoint_a) { - bool result (false); - if (!node.flags.disable_max_peers_per_ip) + if (node.flags.disable_max_peers_per_ip) { - auto const address (nano::transport::ipv4_address_or_ipv6_subnet (endpoint_a.address ())); - auto const subnet (nano::transport::map_address_to_subnetwork (endpoint_a.address ())); - nano::unique_lock lock (mutex); - result = channels.get ().count (address) >= node.network_params.network.max_peers_per_ip || channels.get ().count (subnet) >= node.network_params.network.max_peers_per_subnetwork; + return false; + } + auto const address (nano::transport::ipv4_address_or_ipv6_subnet (endpoint_a.address ())); + nano::unique_lock lock (mutex); + auto const result = channels.get ().count (address) >= node.network_params.network.max_peers_per_ip; + if (!result) + { + node.stats.inc (nano::stat::type::udp, nano::stat::detail::udp_max_per_ip, nano::stat::dir::out); } return result; } +bool nano::transport::udp_channels::max_subnetwork_connections (nano::endpoint const & endpoint_a) +{ + if (node.flags.disable_max_peers_per_subnetwork) + { + return false; + } + auto const subnet (nano::transport::map_address_to_subnetwork (endpoint_a.address ())); + nano::unique_lock lock (mutex); + auto const result = channels.get ().count (subnet) >= node.network_params.network.max_peers_per_subnetwork; + if (!result) + { + node.stats.inc (nano::stat::type::udp, nano::stat::detail::udp_max_per_subnetwork, nano::stat::dir::out); + } + return result; +} + +bool nano::transport::udp_channels::max_ip_or_subnetwork_connections (nano::endpoint const & endpoint_a) +{ + return max_ip_connections (endpoint_a) || max_subnetwork_connections (endpoint_a); +} + bool nano::transport::udp_channels::reachout (nano::endpoint const & endpoint_a) { // Don't overload single IP - bool error = max_ip_connections (endpoint_a); + bool error = max_ip_or_subnetwork_connections (endpoint_a); if (!error && !node.flags.disable_udp) { auto endpoint_l (nano::transport::map_endpoint_to_v6 (endpoint_a)); diff --git a/nano/node/transport/udp.hpp b/nano/node/transport/udp.hpp index 6eb0e9bc3c..25e88e56d1 100644 --- a/nano/node/transport/udp.hpp +++ b/nano/node/transport/udp.hpp @@ -96,7 +96,9 @@ namespace transport void receive_action (nano::message_buffer *); void process_packets (); std::shared_ptr create (nano::endpoint const &); - bool max_ip_connections (nano::endpoint const &); + bool max_ip_connections (nano::endpoint const & endpoint_a); + bool max_subnetwork_connections (nano::endpoint const & endpoint_a); + bool max_ip_or_subnetwork_connections (nano::endpoint const & endpoint_a); // Should we reach out to this endpoint with a keepalive message bool reachout (nano::endpoint const &); std::unique_ptr collect_container_info (std::string const &); From 5a274cd2bf838a8c1d26dc8d8980122b49c59ecf Mon Sep 17 00:00:00 2001 From: clemahieu Date: Thu, 18 Nov 2021 17:40:47 +0000 Subject: [PATCH 305/346] Fix issue identified with valgrind where priv_key starts uninitialized. --- nano/core_test/bootstrap.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/nano/core_test/bootstrap.cpp b/nano/core_test/bootstrap.cpp index 57da5b07fd..1fc41623d7 100644 --- a/nano/core_test/bootstrap.cpp +++ b/nano/core_test/bootstrap.cpp @@ -1532,19 +1532,18 @@ TEST (frontier_req, confirmed_frontier) { nano::system system (1); auto node1 = system.nodes[0]; - nano::raw_key priv_key; + nano::keypair key_before_genesis; // Public key before genesis in accounts table - while (nano::pub_key (priv_key).number () >= nano::dev::genesis_key.pub.number ()) + while (key_before_genesis.pub.number () >= nano::dev::genesis_key.pub.number ()) { - priv_key = nano::keypair ().prv; + key_before_genesis = nano::keypair (); } - nano::keypair key_before_genesis (priv_key.to_string ()); + nano::keypair key_after_genesis; // Public key after genesis in accounts table - while (nano::pub_key (priv_key).number () <= nano::dev::genesis_key.pub.number ()) + while (key_after_genesis.pub.number () <= nano::dev::genesis_key.pub.number ()) { - priv_key = nano::keypair ().prv; + key_after_genesis = nano::keypair (); } - nano::keypair key_after_genesis (priv_key.to_string ()); nano::state_block_builder builder; auto send1 = builder From 62fbc459ec460f7f3699e55abb8291dd9e6679f4 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Thu, 18 Nov 2021 17:10:35 +0000 Subject: [PATCH 306/346] Timeouts silent incoming connections Timeouts silent incoming connections Adds new stat counters: - tcp_silent_connection_drop - tcp_io_timeout_drop --- nano/core_test/socket.cpp | 28 +++++++++++++++++++++++ nano/lib/config.hpp | 2 ++ nano/node/bootstrap/bootstrap_server.cpp | 2 +- nano/node/socket.cpp | 29 +++++++++++++++++++++++- nano/node/socket.hpp | 12 ++++++++++ 5 files changed, 71 insertions(+), 2 deletions(-) diff --git a/nano/core_test/socket.cpp b/nano/core_test/socket.cpp index 03ebc096a5..32d921dd01 100644 --- a/nano/core_test/socket.cpp +++ b/nano/core_test/socket.cpp @@ -351,6 +351,34 @@ TEST (socket, disabled_max_peers_per_ip) node->stop (); } +TEST (socket, disconnection_of_silent_connections) +{ + nano::system system; + auto node = system.add_node (); + auto socket = std::make_shared (*node); + // Classify the socket type as real-time as the disconnections are done only for this connection type. + socket->type_set (nano::socket::type_t::realtime); + // Silent connections are connections open by external peers that don't contribute with any data. + socket->set_silent_connection_tolerance_time (std::chrono::seconds{ 5 }); + auto bootstrap_endpoint = node->bootstrap.endpoint (); + std::atomic connected{ false }; + // Opening a connection that will be closed because it remains silent during the tolerance time. + socket->async_connect (bootstrap_endpoint, [socket, &connected] (boost::system::error_code const & ec) { + ASSERT_FALSE (ec); + connected = true; + }); + ASSERT_TIMELY (4s, connected); + // Checking the connection was closed. + ASSERT_TIMELY (10s, socket->is_closed ()); + + auto get_tcp_silent_connection_drops = [&node] () { + return node->stats.count (nano::stat::type::tcp, nano::stat::detail::tcp_silent_connection_drop, nano::stat::dir::in); + }; + ASSERT_EQ (1, get_tcp_silent_connection_drops ()); + + node->stop (); +} + TEST (socket, drop_policy) { auto node_flags = nano::inactive_node_flag_defaults (); diff --git a/nano/lib/config.hpp b/nano/lib/config.hpp index 52c8ab2142..e6eb1c50d7 100644 --- a/nano/lib/config.hpp +++ b/nano/lib/config.hpp @@ -156,6 +156,7 @@ class network_constants request_interval_ms = is_dev_network () ? 20 : 500; cleanup_period = is_dev_network () ? std::chrono::seconds (1) : std::chrono::seconds (60); idle_timeout = is_dev_network () ? cleanup_period * 15 : cleanup_period * 2; + silent_connection_tolerance_time = std::chrono::seconds (120); syn_cookie_cutoff = std::chrono::seconds (5); bootstrap_interval = std::chrono::seconds (15 * 60); max_peers_per_ip = is_dev_network () ? 10 : 5; @@ -189,6 +190,7 @@ class network_constants } /** Default maximum idle time for a socket before it's automatically closed */ std::chrono::seconds idle_timeout; + std::chrono::seconds silent_connection_tolerance_time; std::chrono::seconds syn_cookie_cutoff; std::chrono::seconds bootstrap_interval; /** Maximum number of peers per IP. It is also the max number of connections per IP */ diff --git a/nano/node/bootstrap/bootstrap_server.cpp b/nano/node/bootstrap/bootstrap_server.cpp index b7632ef717..a4993cd6d7 100644 --- a/nano/node/bootstrap/bootstrap_server.cpp +++ b/nano/node/bootstrap/bootstrap_server.cpp @@ -749,5 +749,5 @@ bool nano::bootstrap_server::is_bootstrap_connection () bool nano::bootstrap_server::is_realtime_connection () { - return socket->type () == nano::socket::type_t::realtime || socket->type () == nano::socket::type_t::realtime_response_server; + return socket->is_realtime_connection (); } diff --git a/nano/node/socket.cpp b/nano/node/socket.cpp index ae1710bee5..1e4d78d7f6 100644 --- a/nano/node/socket.cpp +++ b/nano/node/socket.cpp @@ -21,7 +21,9 @@ nano::socket::socket (nano::node & node_a) : node{ node_a }, next_deadline{ std::numeric_limits::max () }, last_completion_time{ 0 }, - io_timeout{ node_a.config.tcp_io_timeout } + last_receive_time{ 0 }, + io_timeout{ node_a.config.tcp_io_timeout }, + silent_connection_tolerance_time{ node_a.network_params.network.silent_connection_tolerance_time } { } @@ -58,6 +60,7 @@ void nano::socket::async_read (std::shared_ptr> const & buf [this_l, buffer_a, callback_a] (boost::system::error_code const & ec, std::size_t size_a) { this_l->node.stats.add (nano::stat::type::traffic_tcp, nano::stat::dir::in, size_a); this_l->stop_timer (); + this_l->update_last_receive_time (); callback_a (ec, size_a); })); })); @@ -124,6 +127,11 @@ void nano::socket::stop_timer () last_completion_time = nano::seconds_since_epoch (); } +void nano::socket::update_last_receive_time () +{ + last_receive_time = nano::seconds_since_epoch (); +} + void nano::socket::checkup () { std::weak_ptr this_w (shared_from_this ()); @@ -131,7 +139,18 @@ void nano::socket::checkup () if (auto this_l = this_w.lock ()) { uint64_t now (nano::seconds_since_epoch ()); + auto condition_to_disconnect{ false }; + if (this_l->is_realtime_connection () && now - this_l->last_receive_time > this_l->silent_connection_tolerance_time.count ()) + { + this_l->node.stats.inc (nano::stat::type::tcp, nano::stat::detail::tcp_silent_connection_drop, nano::stat::dir::in); + condition_to_disconnect = true; + } if (this_l->next_deadline != std::numeric_limits::max () && now - this_l->last_completion_time > this_l->next_deadline) + { + this_l->node.stats.inc (nano::stat::type::tcp, nano::stat::detail::tcp_io_timeout_drop, nano::stat::dir::in); + condition_to_disconnect = true; + } + if (condition_to_disconnect) { if (this_l->node.config.logging.network_timeout_logging ()) { @@ -164,6 +183,14 @@ void nano::socket::timeout_set (std::chrono::seconds io_timeout_a) io_timeout = io_timeout_a; } +void nano::socket::set_silent_connection_tolerance_time (std::chrono::seconds tolerance_time_a) +{ + auto this_l (shared_from_this ()); + boost::asio::dispatch (strand, boost::asio::bind_executor (strand, [this_l, tolerance_time_a] () { + this_l->silent_connection_tolerance_time = tolerance_time_a; + })); +} + void nano::socket::close () { auto this_l (shared_from_this ()); diff --git a/nano/node/socket.hpp b/nano/node/socket.hpp index ddbe5ed2ba..cda8c2bc03 100644 --- a/nano/node/socket.hpp +++ b/nano/node/socket.hpp @@ -72,6 +72,7 @@ class socket : public std::enable_shared_from_this /** This can be called to change the maximum idle time, e.g. based on the type of traffic detected. */ void timeout_set (std::chrono::seconds io_timeout_a); void start_timer (std::chrono::seconds deadline_a); + void set_silent_connection_tolerance_time (std::chrono::seconds tolerance_time_a); bool max () const { return queue_size >= queue_size_max; @@ -88,6 +89,14 @@ class socket : public std::enable_shared_from_this { type_m = type_a; } + bool is_realtime_connection () + { + return type () == nano::socket::type_t::realtime || type () == nano::socket::type_t::realtime_response_server; + } + bool is_closed () + { + return closed; + } protected: /** Holds the buffer and callback for queued writes */ @@ -107,8 +116,10 @@ class socket : public std::enable_shared_from_this std::atomic next_deadline; std::atomic last_completion_time; + std::atomic last_receive_time; std::atomic timed_out{ false }; std::atomic io_timeout; + std::chrono::seconds silent_connection_tolerance_time; std::atomic queue_size{ 0 }; /** Set by close() - completion handlers must check this. This is more reliable than checking @@ -117,6 +128,7 @@ class socket : public std::enable_shared_from_this void close_internal (); void start_timer (); void stop_timer (); + void update_last_receive_time (); void checkup (); private: From dd53b8ee217b7e563ff2d3e85ca8e6f15bf85818 Mon Sep 17 00:00:00 2001 From: theohax <81556890+theohax@users.noreply.github.com> Date: Mon, 22 Nov 2021 12:12:48 +0200 Subject: [PATCH 307/346] Disable intermittently failing UT rpc.send_epoch_2 (#3560) --- nano/rpc_test/rpc.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/nano/rpc_test/rpc.cpp b/nano/rpc_test/rpc.cpp index 24d27f0615..79deec660c 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -513,7 +513,11 @@ TEST (rpc, send_idempotent) ASSERT_EQ (std::error_code (nano::error_common::insufficient_balance).message (), response3.get ("error")); } -TEST (rpc, send_epoch_2) +// Test disabled because it's failing intermittently. +// PR in which it got disabled: https://github.com/nanocurrency/nano-node/pull/3560 +// Issue for investigating it: https://github.com/nanocurrency/nano-node/issues/3561 +// CI run in which it failed: https://github.com/nanocurrency/nano-node/runs/4280938039?check_suite_focus=true#step:5:1895 +TEST (rpc, DISABLED_send_epoch_2) { nano::system system; auto node = add_ipc_enabled_node (system); From 46092e8f56ebc25c39954b10a59af1840bfd58e3 Mon Sep 17 00:00:00 2001 From: theohax <81556890+theohax@users.noreply.github.com> Date: Mon, 22 Nov 2021 13:04:43 +0200 Subject: [PATCH 308/346] Disable intermittently failing UT bootstrap_processor.push_diamond (#3558) --- nano/core_test/bootstrap.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/nano/core_test/bootstrap.cpp b/nano/core_test/bootstrap.cpp index 57da5b07fd..e17867c101 100644 --- a/nano/core_test/bootstrap.cpp +++ b/nano/core_test/bootstrap.cpp @@ -378,7 +378,11 @@ TEST (bootstrap_processor, DISABLED_pull_requeue_network_error) ASSERT_EQ (0, node1->stats.count (nano::stat::type::bootstrap, nano::stat::detail::bulk_pull_failed_account, nano::stat::dir::in)); // Requeue is not increasing failed attempts } -TEST (bootstrap_processor, push_diamond) +// Test disabled because it's failing intermittently. +// PR in which it got disabled: https://github.com/nanocurrency/nano-node/pull/3558 +// Issue for investigating it: https://github.com/nanocurrency/nano-node/issues/3559 +// CI run in which it failed: https://github.com/nanocurrency/nano-node/runs/4280675502?check_suite_focus=true#step:6:398 +TEST (bootstrap_processor, DISABLED_push_diamond) { nano::system system; nano::node_config config (nano::get_available_port (), system.logging); From 5fbe75ed26c5cd79e2c1ada2397bcfb6d36b61a5 Mon Sep 17 00:00:00 2001 From: theohax <81556890+theohax@users.noreply.github.com> Date: Mon, 22 Nov 2021 13:05:05 +0200 Subject: [PATCH 309/346] Disable intermittently failing UT node.vote_by_hash_republish (#3556) --- nano/core_test/node.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/nano/core_test/node.cpp b/nano/core_test/node.cpp index 88342b2479..6b13aca79e 100644 --- a/nano/core_test/node.cpp +++ b/nano/core_test/node.cpp @@ -2993,7 +2993,11 @@ TEST (node, vote_by_hash_bundle) ASSERT_TIMELY (20s, max_hashes.load () >= 3); } -TEST (node, vote_by_hash_republish) +// Test disabled because it's failing intermittently. +// PR in which it got disabled: https://github.com/nanocurrency/nano-node/pull/3556 +// Issue for investigating it: https://github.com/nanocurrency/nano-node/issues/3557 +// CI run in which it failed: https://github.com/nanocurrency/nano-node/runs/4278407269?check_suite_focus=true#step:6:1144 +TEST (node, DISABLED_vote_by_hash_republish) { nano::system system{ 2 }; auto & node1 = *system.nodes[0]; From 5d369ddcdd6c9c668f1d6703066c34728e15643c Mon Sep 17 00:00:00 2001 From: clemahieu Date: Fri, 19 Nov 2021 21:29:17 +0000 Subject: [PATCH 310/346] Add suppressions for Rijndael::Base::FillEncTable and Rijndael::Base::FillDecTable. There is a race condition when initializing these tables but since their contents is static, the fields will always have the correct, constant values. --- nano/core_test/uint256_union.cpp | 19 +++++++++++++++++++ tsan_suppressions | 2 ++ 2 files changed, 21 insertions(+) diff --git a/nano/core_test/uint256_union.cpp b/nano/core_test/uint256_union.cpp index bde76e3da5..89300e16bb 100644 --- a/nano/core_test/uint256_union.cpp +++ b/nano/core_test/uint256_union.cpp @@ -1,8 +1,11 @@ +#include #include #include #include +#include + namespace { template @@ -567,3 +570,19 @@ void check_operator_greater_than (Num lhs, Num rhs) ASSERT_FALSE (rhs > rhs); } } + +TEST (random_pool, multithreading) +{ + std::vector threads; + for (auto i = 0; i < 100; ++i) + { + threads.emplace_back ([] () { + nano::uint256_union number; + nano::random_pool::generate_block (number.bytes.data (), number.bytes.size ()); + }); + } + for (auto & i : threads) + { + i.join (); + } +} diff --git a/tsan_suppressions b/tsan_suppressions index 85f74e588b..e08006cef7 100644 --- a/tsan_suppressions +++ b/tsan_suppressions @@ -1,2 +1,4 @@ race:mdb.c race:rocksdb +race:Rijndael::Base::FillEncTable +race:Rijndael::Base::FillDecTable From 242e9e38a26f80ccacc562637385df69804745b7 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Mon, 22 Nov 2021 17:34:55 +0000 Subject: [PATCH 311/346] Updating version for V23.0RC1 --- CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 60d2407b38..e1833805b2 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -48,8 +48,8 @@ endif() set(CPACK_PACKAGE_VERSION_MAJOR "23") set(CPACK_PACKAGE_VERSION_MINOR "0") -set(CPACK_PACKAGE_VERSION_PATCH "0") -set(CPACK_PACKAGE_VERSION_PRE_RELEASE "99") +set(CPACK_PACKAGE_VERSION_PATCH "1") +set(CPACK_PACKAGE_VERSION_PRE_RELEASE "0") set(CPACK_PACKAGE_VENDOR "Nano Currency") if(CI_BUILD) From 7e0d054247b9de79a4af39aa1831c9b7af511493 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Mon, 22 Nov 2021 18:24:45 +0000 Subject: [PATCH 312/346] Update live rep weights file: (#3565) cutoff block height is 136120191 nano_1b9wguhh39at8qtm93oghd6r4f4ubk7zmqc9oi5ape6yyz4s1gamuwn3jjit: 16059664531550213508638724141600000000 nano_37imps4zk1dfahkqweqa91xpysacb7scqxf3jqhktepeofcxqnpx531b3mnt: 10758697153474955291212437751210509092 nano_3jwrszth46rk1mu7rmb4rhm54us8yg1gw3ipodftqtikf5yqdyr7471nsg1k: 6310977529609251949261467414462447325 nano_19qo4gtzpoyqf6zzezbcuazcsxtqtdin5qbtk8jkoz4fdmq4ssagn3u1odhz: 6146309944312471712577724863352993053 nano_1ninja7rh37ehfp9utkor5ixmxyg8kme8fnzc4zty145ibch8kf5jwpnzr3r: 4905584965410554464397861712928135520 nano_1natrium1o3z5519ifou7xii8crpxpk8y65qmkih8e8bpsjri651oza8imdd: 4815483875722983802304723936550956261 nano_3arg3asgtigae3xckabaaewkx3bzsh7nwz7jkmjos79ihyaxwphhm6qgjps4: 4728610269316435944863044751857497767 nano_3oxhohaxp9ceobppkhp7wahauxd4zgyz4fhxfniyp4mb9opq4upfnaccswo7: 4201556264676356535934809611421529209 nano_3rw4un6ys57hrb39sy1qx8qy5wukst1iiponztrz9qiz6qqa55kxzx4491or: 3960880553931851168315661556037210663 nano_3pczxuorp48td8645bs3m6c3xotxd3idskrenmi65rbrga5zmkemzhwkaznh: 3521890412068766706894027169903178006 nano_1rs5rtyeo1owjt6cz9ypdkqyydq656kai8t35haiioapts39x96br5u4mbdw: 2907752493147327700052534483561497850 nano_1bj5cf9hkgkcspmn15day8cyn3hyaciufbba4rqmbnkmbdpjdmo9pwyatjoi: 2002166410648119218893056134706194595 nano_1iuz18n4g4wfp9gf7p1s8qkygxw7wx9qfjq6a9aq68uyrdnningdcjontgar: 2001440565761884366101082460008891675 nano_1x7biz69cem95oo7gxkrw6kzhfywq4x5dupw4z1bdzkb74dk9kpxwzjbdhhs: 1821704239654660894411974260008865930 nano_1stofnrxuz3cai7ze75o174bpm7scwj9jn3nxsn8ntzg784jf1gzn1jjdkou: 1770495647588116206149619721031538920 nano_3chartsi6ja8ay1qq9xg3xegqnbg1qx76nouw6jedyb8wx3r4wu94rxap7hg: 1554243270252773859363592885183520115 nano_3power3gwb43rs7u9ky3rsjp6fojftejceexfkf845sfczyue4q3r1hfpr3o: 1313952312386177880583352914844871188 nano_1zuksmn4e8tjw1ch8m8fbrwy5459bx8645o9euj699rs13qy6ysjhrewioey: 1199509218754413616468603467360123142 nano_1wenanoqm7xbypou7x3nue1isaeddamjdnc3z99tekjbfezdbq8fmb659o7t: 1173452330641441851612026864726698042 nano_34zuxqdsucurhjrmpc4aixzbgaa4wjzz6bn5ryn56emc9tmd3pnxjoxfzyb6: 1057625201676550609858214699214403728 nano_1wcxcjbwnnsdpee3d9i365e8bcj1uuyoqg9he5zjpt3r57dnjqe3gdc184ck: 967995711695585792471667278388678323 nano_38zpmsje8de6tgkan8yf3t86e31444qkznxyah6zqtqckex1nec97wo94xc9: 967304550439200000000000000000000000 nano_1awsn43we17c1oshdru4azeqjz9wii41dy8npubm4rg11so7dx3jtqgoeahy: 951746252359446173793925302735433215 nano_1aqkrayihxzdahoxpjrg8o6mxgxfzq46hhcdm1u48w3qexsakx7pzzhjn3fc: 944940001426886001741074998524472488 nano_3uaydiszyup5zwdt93dahp7mri1cwa5ncg9t4657yyn3o4i1pe8sfjbimbas: 931338701657102496604819379260016897 nano_35nu7hynfzecjtauskk6yb8pgfeifscqz4hmgtani15s8eiocgsz15axursj: 894001715198160000000000000000000000 nano_3strnmn7h9b7oghxa6h9ckrpf5r454fsobpicixps6xwiwc5q4hat7wjbpqz: 875764638961445330285631953317660773 nano_35btiz1mgfwp95c3ckazmzbp5gepduxtijuijd9xebeau8u1gsbea41smjca: 856715703177877294970709518671801616 nano_1f56swb9qtpy3yoxiscq9799nerek153w43yjc9atoaeg3e91cc9zfr89ehj: 841622566236732299661733422095199233 nano_1hispanocq7ow8azrs3mirsccebuh5e3pfk8pkfzfafbyooezpsnwiuizjcu: 822031235068418434072771479881593493 nano_3caprkc56ebsaakn4j4n7g9p8h358mycfjcyzkrfw1nai6prbyk8ihc5yjjk: 818422195859968395615346983013915810 nano_3afmp9hx6pp6fdcjq96f9qnoeh1kiqpqyzp7c18byaipf48t3cpzmfnhc1b7: 799307362643896726651736264982487009 nano_1center16ci77qw5w69ww8sy4i4bfmgfhr81ydzpurm91cauj11jn6y3uc5y: 789737477675162873586022877920706107 nano_33ad5app7jeo6jfe9ure6zsj8yg7knt6c1zrr5yg79ktfzk5ouhmpn6p5d7p: 789300636704619794307022838250832521 nano_3dmtrrws3pocycmbqwawk6xs7446qxa36fcncush4s1pejk16ksbmakis78m: 782879107184150966601740061678936472 nano_1q3hqecaw15cjt7thbtxu3pbzr1eihtzzpzxguoc37bj1wc5ffoh7w74gi6p: 757721115505906269330765259844126122 nano_3ktybzzy14zxgb6osbhcc155pwk7osbmf5gbh5fo73bsfu9wuiz54t1uozi1: 756728705965070788322729313728898502 nano_1ookerz3adg5rxc4zwwoshim5yyyihf6dpogjihwwq6ksjpq7ea4fuam5mmc: 709490401899485239243497954094284636 nano_1jtx5p8141zjtukz4msp1x93st7nh475f74odj8673qqm96xczmtcnanos1o: 707324205772161590611070709694450711 nano_15nt4cis8ac184q9mj7bedww9ay9zh5jk5k7sj9ypmz44twjcpz3cn6oijir: 685604864614716916191441107932898571 nano_1hza3f7wiiqa7ig3jczyxj5yo86yegcmqk3criaz838j91sxcckpfhbhhra1: 684647489130770208219890392515991846 nano_1frogs8fqpdk17w17dpsdbgtbcdmm4egnty8oinxppkwykjzedrbt3suh4as: 682040930222940943709185930136622989 nano_1etto78drszxhtb5jhswzzm5m98ffqxwjzwg3gr8ajt5sq4ahdj4bjhni9we: 664677456318180425682192110108742279 nano_318uu1tsbios3kp4dts5b6zy1y49uyb88jajfjyxwmozht8unaxeb43keork: 664424540071534125950812531339770626 nano_3kqdiqmqiojr1aqqj51aq8bzz5jtwnkmhb38qwf3ppngo8uhhzkdkn7up7rp: 651755358339338356336507954927852615 nano_3hjo1cehsxrssawmpew98u4ug8bxy4ppht5ch647zpuscdgedfy1xh4yga7z: 634995261061659534801417398945231018 nano_3z1z144ggdujyypjmrm9dn37a5jimur6g5poshxzz5ryr6jjf8hufjgq16yr: 629744866517888344628328654359415006 nano_1ebq356ex7n5efth49o1p31r4fmuuoara5tmwduarg7b9jphyxsatr3ja6g8: 617784155673243402432901940600475027 nano_18bpu81x4oyqsjjsyaeb7ek4rag1bw8gerhaiumookzc4t5prrm4d7zg56ww: 614271665029078029168068487033422914 nano_3n7ky76t4g57o9skjawm8pprooz1bminkbeegsyt694xn6d31c6s744fjzzz: 602519949058995962011678785252070547 nano_31xitw55kb3ko8yaz3439hqaqpibxa9shx76suaa3no786do3hjuz8dy6izw: 594878816138950832900300939506802161 nano_1qgkdadcbwn65sp95gr144fuc99tm5tn6gx9y8ow9bgaam6r5ixgtx19tw93: 583778925679984208828602557483081962 nano_3o7uzba8b9e1wqu5ziwpruteyrs3scyqr761x7ke6w1xctohxfh5du75qgaj: 555050886855041314708914599221505250 nano_1anrzcuwe64rwxzcco8dkhpyxpi8kd7zsjc1oeimpc3ppca4mrjtwnqposrs: 550603258168701272892839866627978385 nano_1gaysex8yymd5ef88hjqxt8xbjt63qz43cujrrzy4df9xb6zhf315csi35ww: 548339087359491571593920149128261138 nano_1oenixj4qtpfcembga9kqwggkb87wooicfy5df8nhdywrjrrqxk7or4gz15b: 534181141212653605636023919811545599 nano_1kd4h9nqaxengni43xy9775gcag8ptw8ddjifnm77qes1efuoqikoqy5sjq3: 525472436426009277277984320089432124 nano_18shbirtzhmkf7166h39nowj9c9zrpufeg75bkbyoobqwf1iu3srfm9eo3pz: 524626096936957904315704082365945034 nano_3pg8khw8gs94c1qeq9741n99ubrut8sj3n9kpntim1rm35h4wdzirofazmwt: 517055323222876131509587679714478919 nano_396sch48s3jmzq1bk31pxxpz64rn7joj38emj4ueypkb9p9mzrym34obze6c: 516193637445898077894297550677829071 nano_16d3mdshcfqayyx8rd9ioimjiicrma743qpd86ohfs9kdzgejmnba1zifo8m: 511545838412097960729864292969759459 nano_1fnx59bqpx11s1yn7i5hba3ot5no4ypy971zbkp5wtium3yyafpwhhwkq8fc: 504253600733450942479344856311313210 nano_3zapp5z141qpjipsb1jnjdmk49jwqy58i6u6wnyrh6x7woajeyme85shxewt: 493599884496810626043406343639370932 nano_3hd4ezdgsp15iemx7h81in7xz5tpxi43b6b41zn3qmwiuypankocw3awes5k: 457294181086692074397344385514154090 nano_1just1zdsnke856mu5pmed1qdkzk6adh3d13iiqr3so66sr8pbcnh15bdjda: 441212364922936241871894443008548013 nano_1xckpezrhg56nuokqh6t1stjca67h37jmrp9qnejjkfgimx1msm9ehuaieuq: 428592470620312238943579154133373245 nano_375pi67f4i4ag5rudoziza86z715bepsmp1r6ri4domt7ct6tk67mjsxtebm: 419865022760235481420024166941609836 nano_3tta9pdxr4djdcm6r3c7969syoirj3dunrtynmmi8n1qtxzk9iksoz1gxdrh: 411165829319874420577260728261208257 nano_34amtofxstsfyqcgphp8piij9u33widykq9wbz6ysjpxhbgmqu8btu1eexer: 409967620676315034418931837427792768 nano_1mime3jd7dbnshd6zw1gjqax5zit31h6y1x6pczfuz7au33ftacjib5cc1ez: 408233262211866402738240625828466982 nano_37ortkby6k68z8tkk8g63ndbp8wjbmofhn56oyxb4rm6s3x51pkpiwcnpgmq: 398630771485911861036703449626270559 nano_1isgusmnf1xe45iyjtfxw4qiai36zxdituu7gpni1trtj5ojyujobq13bjah: 384053723961265844083506422195764022 nano_1bananobjcrqugm87e8p3kxkhy7d1bzkty53n889iyunm83cp14rb9fin78p: 336485171624335939403895475158019877 nano_3rropjiqfxpmrrkooej4qtmm1pueu36f9ghinpho4esfdor8785a455d16nf: 325239455688747467940076831769230701 nano_1crpaybw8jip7fm98fzfxnjajb55ty76oyzmpfwe9s66u4aod37tm3kxba8q: 315300274078111612046338142048308501 nano_1fuckbtc6p55wt64eo4rz7brq3ubjfd8unhz3it5fbdpta8tww7ywk8p9su7: 307705466771667186261735299756819797 nano_3oiqqy44tkgactzg1sdy45spbf66uqqrfc3fn7yuspnf7hh1h7xba7kwzwr3: 300002026649658000000000000000000000 nano_1ec5optppmndqsb3rxu1qa4hpo39957s7mfqycpbd547jga4768o6xz8gfie: 299828351823801428032478482218957115 nano_3ngt59dc7hbsjd1dum1bw9wbb87mbtuj4qkwcruididsb5rhgdt9zb4w7kb9: 283261511777118045151787622845455787 nano_187i9cz1rwm65ufi4i65nczginx4iw15n7jb5iaqjgb5o8qte7weca6rbihn: 274028049192349418158345125104846984 nano_16u1uufyoig8777y6r8iqjtrw8sg8maqrm36zzcm95jmbd9i9aj5i8abr8u5: 262228406547636073457877311172859400 nano_3msc38fyn67pgio16dj586pdrceahtn75qgnx7fy19wscixrc8dbb3abhbw6: 261368092169451074088972476263028438 nano_1j78msn5omp8jrjge8txwxm4x3smusa1cojg7nuk8fdzoux41fqeeogg5aa1: 245238490790681429987887819124973967 nano_3g6ue89jij6bxaz3hodne1c7gzgw77xawpdz4p38siu145u3u17c46or4jeu: 237062761729585922456959653072178260 nano_3grayknbwtrjdsbdgsjbx4fzds7eufjqghzu6on57aqxte7fhhh14gxbdz61: 234911096405656298438919672593238099 nano_3ekb6tp8ixtkibimyygepgkwckzhds9basxd5zfue4efjnxaan77gsnanick: 227363828406113813413402097758344159 nano_16d45ow3tsj1y3z9n4satwzxgj6qiue1ggxbwbrj3b33qr58bzchkpsffpx4: 209545035520240813512956072230746895 nano_3abuqtbaotp9myn6ihb6mg96hf7jnapuddydf6ytgd174t4phg86nnq4cmxj: 200689525371771979161856542710275458 nano_3mhrc9czyfzzok7xeoeaknq6w5ok9horo7d4a99m8tbtbyogg8apz491pkzt: 186134371742327164331042105485725533 nano_1wxwqkagc6byutzhwqwxuaqofigbufkmqsgf9a9k5pqz3f7kr6mbgu9nror3: 167906148943145965568980211200950272 nano_1fe17w13stn8rqos3nxmupoez9sne4pc4njmr1fbz9nci6obnng6jatton5q: 166731603818799112396690536027816448 nano_1ota8bpwwawmc8ksdz4ezzrb3afbdeipk1n7rbeguhm4muy1r649uzw5moon: 165527437615003318079363388846428160 nano_3kc8wwut3u8g1kwa6x4drkzu346bdbyqzsn14tmabrpeobn8igksfqkzajbb: 163843828066687787146168179620865033 nano_1asau6gr8ft5ykynpkauctrq1w37sdasdymuigtxotim6kxoa3rgn3dpenis: 160747395484552156280489871018295572 nano_1aoxwfsmu6wazes9jq4xu695jx5txa3qrrfsrg4w4uk35bhmxkn378fwebng: 148787179543270966112012298420102591 nano_3u7d5iohy14swyhxhgfm9iq4xa9yibhcgnyj697uwhicp14dhx4woik5e9ek: 142439951436783733925817403580125784 nano_1n1hukyqred6yuch1xgtmdofe1bnc68eza733qmb6r19xo9us7qipbjujad1: 139369535116914320000000000000000000 nano_1i9ugg14c5sph67z4st9xk8xatz59xntofqpbagaihctg6ngog1f45mwoa54: 138653328696276270239125790513260750 nano_3wat6ci5a55s895eec64i4ihfd9ry3bdxnpb776mj1srjedqfdf4k11rcmg4: 131124550547749721968428552469442753 nano_3kc9wsf9y4y9r3k9yj1d5da53ytjepcf993bcto17xh1s691wyc6im9xaodr: 121513409159000000000000000000000000 nano_1nk9zdf1otddxhxfqimjdkmbtq17yzf3z6giz1as7x1huyug8er1ukeqpqpe: 119475397977193935000636987546015741 nano_39jnmbpgqez7d4zdh83u44jcbf9nb5y3s8z495jf6hxb6719ybdew1ph5qk8: 117634055805000000000000000000000000 nano_3hrppx3sfxoiycjm9iaqsr3odecgarcxxxhsm41s9pbs75ykambxqhu9ys58: 115437621202500394117405875886851152 nano_1n747n7fgebsk93khx6fkrj9wmjkgho6zsmb1m7men39uz4pafmmimhob7y7: 114576562074632626911796632375302468 nano_3pnanopr3d5g7o45zh3nmdkqpaqxhhp3mw14nzr41smjz8xsrfyhtf9xac77: 114235037216036747824133323109742284 nano_3oddow1wfohhgi6ugc3u3qiz131i5np1ders3ktjxxmi45puu1w6xroi96gt: 112765620986304500000765837172710848 nano_3fg3hi6b4ptj5y5ss4a3cwarbzahaeazzs6mjf18t1cqm3pmetgtgrtafafp: 110732442052567890000000000000000000 nano_1thingspmippfngcrtk1ofd3uwftffnu4qu9xkauo9zkiuep6iknzci3jxa6: 110068703179420042715186692091837915 nano_37tuecwghy64eyqcgxmq3fsb9d55frw3yyo8ksubf66b73hz877nmaa5f3mr: 106503756447655093675010809298578613 nano_139tfuxmn4xne7kac8gy46rzg3tj8dcahyjjrexk9pc8udh3i1cjxs1h5rme: 104597155788104443869017572433453995 nano_1nanode8ngaakzbck8smq6ru9bethqwyehomf79sae1k7xd47dkidjqzffeg: 102217790544083635381912895256588657 nano_3hps1wndzrxtybfg77agkrmstb6yzdrr3d55ynw6hfogw8gnux94fdwi8owg: 92866334920877824128977755653425586 nano_1niabkx3gbxit5j5yyqcpas71dkffggbr6zpd3heui8rpoocm5xqbdwq44oh: 89795330291046530639441676172136373 nano_11pb5aa6uirs9hoqsg4swnzyehoiqowj94kdpthwkhwufmtd6a11xx35iron: 88937392109741615109982408618515553 nano_1k5fqb5q6t44tsd13ziny66w6mxbya6x397g7tkz7hnkcpppofuojzs7qmik: 69808246561955571109044172640504092 nano_16f43w3bzsws3joz3xtffe5jzgwcijaty9affr718ithrcy64bkgtjag394y: 68208952383135780000000000000000000 nano_1ssx76ua5rtp7awrr4td5eecqq9es697i9gnujhqxd19qgzet56of8qrh7ee: 65111869792000000000000000000000000 nano_3cqnodxiojh34fdxsmirendtqh5qfcnyxpc5bhfu1r5ga7mnj36q335whxdt: 65017828479271560000000000000000000 nano_3wyw9zthfxqs1siz4kpgtkpmaf8zgdr1bi57nsrsg6zj6ab8ybojj9ctq1un: 60784377529924312870260770540779134 nano_1r98z5i14ztss597ajy3y9no5kpm1bm3uj1gam4gstjhhy3othmus1mamxyz: 60081247898330387024674929860415106 nano_1tuc3179gw3qroosjmc71fori1j5x8z1d6dfthubgr8tjkkgf4cc7xfpnzig: 56410000000307872461115185441013760 nano_16k5pimotz9zehjk795wa4qcx54mtusk8hc5mdsjgy57gnhbj3hj6zaib4ic: 54469452300330725930142797732945523 nano_3ju9wdb8zpzdn3bnhz6ypm5sipccok9urqif9kdyweimj9c9zyi54ceos1qu: 53795572513421389607346668987519934 nano_1bbpmnm69yireu5ehmkt1mi43dnkcfhaam6jsbmwqmgqh1q1mftpdd6c68ew: 50762035755426843063213190064582565 nano_1my1snode8rwccjxkckjirj65zdxo6g5nhh16fh6sn7hwewxooyyesdsmii3: 50271497576311578304043104615109550 nano_1dcnin3j6cnp6orr8ii13fbs6mruq4ywocz47rgpbw7i4j4e1dm6bkdd5pea: 50000959649787890000000000000000000 nano_1tk8h3yzkibbsti8upkfa69wqafz6mzfzgu8bu5edaay9k7hidqdunpr4tb6: 48935370725708431068498531303232259 nano_1maffswnif9r35yy6btgo7qukpnpzhpndegi7895fobfjffgfr9pjdy9f66w: 44933581750261508526600422905300725 nano_1ipx847tk8o46pwxt5qjdbncjqcbwcc1rrmqnkztrfjy5k7z4imsrata9est: 42317965344222570489914260872593408 wrote 129 rep weights max supply 124505160000000000000000000000000000000 --- rep_weights_live.bin | Bin 5872 -> 6208 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/rep_weights_live.bin b/rep_weights_live.bin index 5ee1bb42f09c8b440b420bb7001f00af70227c52..f9ea5db42853222888492bc570e7089fada225a3 100644 GIT binary patch delta 3219 zcmYjTc{r5o8~)5tjAh1}Fw79y%2*O6jHQE0)=WIx#| zkrJ}Rq$0~$57~_(vgG%j|9;<}_jO;-^W67yzt8otPqY#+(Eokh*uzl_3=YF5vXgP} za4<4sHCHN5{2jy~;V|6de9up5uC&^TnswkWA&)VrI1=ZpkkbkV07Y>*^kwXO3rl)a zxPI4hh+_C7QhCInV#{%0%7~@MC{*6FbXirM72wQ$8NoGse3F9erOwkgv4G8i!ys$k zA&-^oHq}kLh#Om7CIj++U~WKlv`X6!cIxRT+e;O*3?|<2ucx=DnRRoUwzAO$&e|nI z)#V>Xu@}k$CAwk!oKjl9%$vn zqkC$;y?bOYHRT>(KX&OR9pu5h7XcG#n`lJnPg!zr;>B9P<|Ket*kP#gLIYj&rN)Ek z`EQeg0SAD77>};sm&?>vxN|I|eP5sNo`{!PL^S zgbqHRkC*oRu8nhZdjZTLJi6$>$$K%JIxiW2Up#UJ16pBT!4VCjwnB5M;d}Q4^JNY& z37hfA#&ldT=gsMy^EXVtYNP`itUD*y-Xl23#`Q!ZrX)nF0Fe3d=uGzPZ@SC=SVgk| zWvts2Ai;Vb9K|@P_&+rA>||!|8V~`A2gZ=`1+0N^Y=WF$(bwoCFv*2S-|tvTT1qY7 zC$G7B-p_vkNbr1&)g;utq@8ia(=Q3+xH4ePjW=X8KNRvQu5kjfV{JRd9S%>u4Ma|~ zb=s?aPw$yh-yM$`IXhBySEkP;tv4X}9|V+G1cpcJUw`$SFK+BRZ~=L6|3ux6>xH7?m-J8=!<`!F zG4dV&7+7sEquWHW@Yt>0j5RfgwGQa;eAK|WZ%wf&k4LC#wg~bfAj3U;=VYW8N9w~w z()UugDy9J$PN*+x@OWw^%R;1z5{=qm035t2%0n$n@$M1B$!GgErBy_ZK2j9a`DMr6cm`O* zVZVmWCF0)lY6xBb{13fW4@?T;(QcS40j{cRoS!SL!mi(~0~olTlaSM)m%4esc0yG@ zge&@jN!VxmpTXP8%SC278ac(5E|q|a#-nXh^rLUsS&B-blrvLp^no?3*LrL{|JHS$ zXPLIKD&AK9fDZd&ML@YlR{xOu_ZP8MV*WM2@!}0HZu}TYT}L^EncuKDMxzIY1Zt2m!SZt@UAX&AZt}M zM;nA&ACl^w-2fZbZLwu_+bR_|tEOV3{+g%_NU$E#`-2T$z4Q;htQg-bH{?ML+~1%u z1#^U(cO^9GEC}BZP!Tf&ZNG`Bc!!)`S&>aF@)$}!xBI>JX4}89Ul^BSUqEM`(>C-3 zX96fDyR=SAQNV=z6HWLL=OmneJ-Q0~8sjbjYXp3GbUXEzd$e0nb}g@{BnSc+*eKnW z${}TP2w{Q8gxf}!2yn3R+NtA9^S4Pl9)+>nm$2o44L=yIjy!$M!i0bOA}+gWa3=yL zTGoIz+8;aFX3IAO4XHVB_bc-}T*NelDkDzHsjI$JO1xca!}_$~JSmfDPmDWCfixU~ zu!G6$2BkBnlywIOK^~kVH6meofjPd^ZRWKgivJtX#qj78rQ(fu_dB~%iB{y#ckKZ| z7{&|`Q_GhUlgh*2mm9sa0~k>}TBU1ltKD@@@F3#d=SVOCsIZ@k&aNjLMHJQ5Wn0?M z{)q-8n5Xdg^{Vn^joD^a|it)5Y)yb?^pu8r5dkJ(BNWr)qm zE&+jXQ|QQbp)ahvS96TN^L&LM$kuFU1hwF|v@`l9$mMa4i#6BQhzx_dEts}}o@kiS zgrFmcj0Di#X02&%>1}#s|B+Uf|5EL&Q%mCmBBr3IZo_;}>fyA`^nl?LJSj@v9}+9+ zi^oq!o#N@>%7GiCVenC6#F$*AZzJz}X_-oDvDVfFCs0G`x{S8t8>#nYZ(r01S+ts? zaQ0|hAD?LV)DD5f1knkCSjW)j=S!e8({v=UIDl3Wc*4~1rB>GLpR)UZE+1thO4vB> zpr1|Ir~4r>NN2L?notho%ZqQ!hThM9)f^q4*Ft$36^Z;)Y))$oR+X#vC||ww4=QG* zIVKhoZR|KR;P&j!WLoshx184c*SEMC&Nea$*-0FZg0cH(6TyRjK?*5=!|_3YHf017 zwM$rVO;YG{jB+{04KIoY-(OLUzRTX@P1`@KlJ#(rqiJw-L}E~0MvRGL#XS)@xBcq@ z34X~U@;nWuk{=7E-9E_0%#?#x_?!z@Kc9;giinh={aX689t3D2c(ma3leK1_Lo$X7 z%10ktJOyl+CwQLZlXW*YJ$`G#FAH4{2>)TY?{%NFf_GBm{N*3M(oa^0P0o+jkOPgbo5yBAd~tcM_LqOz=rya<<6yI>aQJ!a z=IZ_$4co6=Q#SAoyA23p1W*G%coa+TLa^(W0BOocm;`eP@J&NSrXDLftsK?%K#d-8Fwj{TZw z^1j&7o-chSdHduN#N%J9UEy8w`I@O(*+*d{pbFs)xl6o~q}-8Mix(cq>%VOpvj{0q wBnsr8vjo{6Nrtk5&|55a+Lfb$pW!*R&;#Ro9tPV_Ba z@=qvpwZpyfq{j_FK*Pj`o{hs7Fhl#+0)CA3s4Fdra`^XN7Qecgw)qbu{K%^zny6Xh zndhO|HXy8rHPFk>mMf9oi7x1RNAcQuE>sVgXc+2u2o+Mh^+8{|aoa#zSvv>W#a2!{ zD5!Xs{xRIt@oG@#0$4%n43@i|iL*4mg}F&z4K@1(2pmYEe##{IuzPti=W&Z^H{39N z0Ko)QV&4YLo%{Lmlw`vFXDHyn217}8QLpvc>*9M~@!anm4h0VUcq}^1?=vM&d}~+q zV6G}+7{DWiR$Jdw7ZtheOLpQ&vVKaS4#AWXPM)aQD2JnMt<64>gFrGT46Vgydc5rK znHaOy8D2Ut36k0HSk$u6Cmm)GDKqWv70W5(F@VLu#6>>)L8DjrGd8qL(pm&Vi7Q=D z<~MWt)2N0@hhrqMIAjI0^SUsDSIdZQG0^h@HI~HtdirWxR`nM2Q_`*z46wt{N7=~Z zJ%!?$58!eZXDcV5BG|hRgyV;-ZJ*s4#~A6Aw*ssn483uxwa9-Ra3o5Wnh}o(V*N+z zjbM{wesP0~^2x|uoq_P2y)e|?W!Jzig4)&ee{|_gA`TSs!VuE}_t4erLw`%89bw#K z0u&)TT7pg%k}!MN&PO~pcf7cs!$AN9r2R=xl>8-`i8cB~o}(eOKY)s~KWbI>ATZQy zkLvdlgQq7zvH%P*3W9vfDtvzCY~qgeDeVF#(oe;}&^^DJpKgB1C;og58HAz+0Uq)5 z_MFMoOqE`WrxUH=nO6)bLh5d}F-HEVJ@+WRg%QxvN+zxKHU5;qK8Ufg>Tz3o02zW#Ns)g}(CaKKQ;R_xu#Uz)dK zh0~uTtl&ZR9vDjBy!GZnvDgxGpfl}dbu$=1dei4)5`|3L6Cc0ZiTw6s1W=IPbHZIp z%9wu~cm#NxwKvs)1Hw7!+GW4gN?$z=H_cW1%gKO+a7naGEadG=So1FHa7gK8f;t2{ zGl!F)OYG|IaneLvsEdFBMBC{K=^9P8zO1aM5min598ibMqY0x==bZ2*_+Y-!w=_He z7P*4h#Zv+o@i@qN8O!Xmc@MCN*Ri@J(VOB{lTDt1f#&2HKt(vms2F})V@wNQlB}HC z3|9vvWJe4awcD(e+(q>ybo%ov00JKjQLnrl+^eUze5~XzA=089Y!q2;kYrpbDL8QFTqh9XqB!EYJ z@s6b|PQP4kev^^k>rM&;6oen;d^M~k*IVXKoJ(@)Z2|*`-jhrQm-{yyQ-oHFkF&;r zWMr>bYa}5RA1bCZNva=ZSppK`m8Ur4(x*Qv{V%3t%xMqEfQiiW;2vq)3AtWu+o>k# zC^H7Kk-KysWQmG-CMuJEWY#X~+5i?Z&)unw=zci>sS(W zPCeeBR_fqkb`fN9K`Z8!(eN ztvZuGlvpurDqtf1Sr2}0ibJ8~I2N*2cdCQ{Qxth`oW)8+%}*Q%^_a|4{r;<^>DRP(NCMCP%Hooc{B?$ktSsa7XQYkT|Uth#2PDp=VA z6AkIEEodji zAuROwLvt#63Qb43E}-;AB@6CTx~#cjr~iH_kd0(UkBjz=Yr7(c*5db9MIi(vBYbrY z#m#)k_8x4jUFpWsJs?>ahIHC)TmGT#9g2V{R*(fAka%IDju)w@_1A6vwzGihf%lJk zTkSm7a8Rpxc4pi{c`ls=5XLI4w`J(W=PDaBI0-&3gB;P+F2g=G1s zvr2~s4;ZoES141ycM}kVU`SKYIIE!1fS67`Jo|uc6p%z<=zxqDvt++J#`;3=HzW2{ zfER-y!g~9I!g1}P_8CJ!_$Ci1h#ZZYQ>J20x%LXKUb0kL7pOz1t2dkAVXrT3Tf0JI zDBU7}Mdqn>e;L6SS=z4;$j{m(b$~j4n5b4x4zW1}b>-j=J~by4ey*&dZ#A6tzbKtD znr2q6YadJtI&Ed(_1>|D(2tQ8K&hHU*!b7G$k|S4r$6Jl4ziJ$s_IC#@E=~;SL2x` zVOtM@Y$R%`Dq~V^z2aYtXq7@F#P&KKn5fELxm>3?H$PUb(1Ge-Qgqf>tXg>{hvG;a zt#GvuSjxS`-CkJ9I^*K)`r+@S6H0EmB(AlXf}^!vtM3nS1x!S%TtSDpZhCPz_962P zqkRFe5Km;aGX}oQcOSG5t}qcwT>(@GhTy3%0|Psmrw{hXbHw2O0wz|0XTryQwp@N` znTqgnKs=J!4#I8JGL}Cl23zc#4+aAeOq8klIT&#If|Np1J{N<{eK?>1vrac&&`_Ej z%FcS75xyv9H{X{wV>YAMU>DWyi;}*x>d_s~cD6X`l)LxM1>hh6pOe<2@1)78X&QEF zh?B~HU)^6Q@}j?TguSO^xM4Ma;!wpk-tM4M_3q$%(Z)WaoG4tre`9pVHH*^bdBgo} zMYfWDmL;Nd3UO4lrRfbrr4l~cFxl*YY4`R^ZS-RPHcHCe?#eVhW8acDrOYUR#QmEk zoucY%wMXl{$2h}S!eO~aS4TEB+<9?tYbsqvS^*{5mCSPRFjLLqmLRKbKQYg%^>B8- z_wD(I2Y35K`zAZK>JqXwbqgE%H7}1jw#}g=AJ0XXDS6*mo`_=V9v@xbYvZlAy83#P>Cq~LA+q{#UbrkS~nV+@qU=9oHXGp+^O z-mI14jvrR&nHTTM&I$bb53cfZ$^p#^sy;ouT1IJeq$Dh zLe*O;RtM4?Q@x1^ZyL%vtpOG*0Eypx;beRLMqHS4i@AFIQ$Rt&C#JP-Xf&($^fFIA zh%#PhPpCR`8qQvp>(j;}A1Gu)k1SGK;w z#S#Z7q6DxaD$5@@&4DcuDF|;?OS=zVfFdMC+&S~_r&{DPg0eXRM-52(3qI?J>qeGt sJY1-5d{T-%rnd3CS7!Z89x-w#FYVHK6gRdN7qZ?SKWnodVXT< Date: Mon, 22 Nov 2021 10:25:37 -0800 Subject: [PATCH 313/346] Update beta rep weights file (#3566) --- rep_weights_beta.bin | Bin 64 -> 688 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/rep_weights_beta.bin b/rep_weights_beta.bin index 623e20f67b83fa9caf1d8e8009a35030a1943070..396ffcdf44bc9d142614020ca7aa875682512665 100644 GIT binary patch literal 688 zcmV;h0#E$_0000000000000032pBIVnnSDGcb=C;E*OiW>y;Zp$zjtmjHbCII1f#k z@K<^?se*xcu3;;t6VEh%|Ns9bnn&JQg-3T4pBI70{Y2jfb!Q$>DzMMn%fdGpA~6>W zhp(EtL$iARo_7n2Hh=3Snm`fe%Fzazm%uDMA1bOcya_ywg6>%)kV1kk>Uhq%d#8_Kmycw^&vt8~B5&V3-K3Y0< zPCNfsJvKpNsji&(=^IE4xzrGRzT?I@7}SjGAL^~Q z2$9ZGN_e$T+pw_*#QQH+M3N*z>}SZ^KW$Ocy*crE zqGSzD#EI;cw{1=;UC6nts>!mQ$+`5}_uPI5#QQH+M3N*z>}SKLUirFl7(^TPk+}Dt zQSW_bP6`P6*)S%KXhyvCoT{&{B)zZ)1Y=;@dy5W_pvbA&A?r3`3Y087&5Zu5)j08- zZJGHD*?B3-ImqJNDZtK*51g zVoL$>rGDOUe@(gs0)g%`v`=;j?kfhil^I1N4nwcMdvUGqa1q z*~WjBWsDyK0pW6{$2*vYvYnE!0000bnm}b?MEap^DuovJzMOQXJZz(xmJZu=eH2Q& W4|=@=0OjNs4SE~-y5Kkv0001PJwh1( literal 64 zcmZQzKm|)@InOppQ*OP|U;pz|05gBb>{YW4E4+$oU3I Date: Mon, 22 Nov 2021 18:24:45 +0000 Subject: [PATCH 314/346] Update live rep weights file: (#3565) cutoff block height is 136120191 nano_1b9wguhh39at8qtm93oghd6r4f4ubk7zmqc9oi5ape6yyz4s1gamuwn3jjit: 16059664531550213508638724141600000000 nano_37imps4zk1dfahkqweqa91xpysacb7scqxf3jqhktepeofcxqnpx531b3mnt: 10758697153474955291212437751210509092 nano_3jwrszth46rk1mu7rmb4rhm54us8yg1gw3ipodftqtikf5yqdyr7471nsg1k: 6310977529609251949261467414462447325 nano_19qo4gtzpoyqf6zzezbcuazcsxtqtdin5qbtk8jkoz4fdmq4ssagn3u1odhz: 6146309944312471712577724863352993053 nano_1ninja7rh37ehfp9utkor5ixmxyg8kme8fnzc4zty145ibch8kf5jwpnzr3r: 4905584965410554464397861712928135520 nano_1natrium1o3z5519ifou7xii8crpxpk8y65qmkih8e8bpsjri651oza8imdd: 4815483875722983802304723936550956261 nano_3arg3asgtigae3xckabaaewkx3bzsh7nwz7jkmjos79ihyaxwphhm6qgjps4: 4728610269316435944863044751857497767 nano_3oxhohaxp9ceobppkhp7wahauxd4zgyz4fhxfniyp4mb9opq4upfnaccswo7: 4201556264676356535934809611421529209 nano_3rw4un6ys57hrb39sy1qx8qy5wukst1iiponztrz9qiz6qqa55kxzx4491or: 3960880553931851168315661556037210663 nano_3pczxuorp48td8645bs3m6c3xotxd3idskrenmi65rbrga5zmkemzhwkaznh: 3521890412068766706894027169903178006 nano_1rs5rtyeo1owjt6cz9ypdkqyydq656kai8t35haiioapts39x96br5u4mbdw: 2907752493147327700052534483561497850 nano_1bj5cf9hkgkcspmn15day8cyn3hyaciufbba4rqmbnkmbdpjdmo9pwyatjoi: 2002166410648119218893056134706194595 nano_1iuz18n4g4wfp9gf7p1s8qkygxw7wx9qfjq6a9aq68uyrdnningdcjontgar: 2001440565761884366101082460008891675 nano_1x7biz69cem95oo7gxkrw6kzhfywq4x5dupw4z1bdzkb74dk9kpxwzjbdhhs: 1821704239654660894411974260008865930 nano_1stofnrxuz3cai7ze75o174bpm7scwj9jn3nxsn8ntzg784jf1gzn1jjdkou: 1770495647588116206149619721031538920 nano_3chartsi6ja8ay1qq9xg3xegqnbg1qx76nouw6jedyb8wx3r4wu94rxap7hg: 1554243270252773859363592885183520115 nano_3power3gwb43rs7u9ky3rsjp6fojftejceexfkf845sfczyue4q3r1hfpr3o: 1313952312386177880583352914844871188 nano_1zuksmn4e8tjw1ch8m8fbrwy5459bx8645o9euj699rs13qy6ysjhrewioey: 1199509218754413616468603467360123142 nano_1wenanoqm7xbypou7x3nue1isaeddamjdnc3z99tekjbfezdbq8fmb659o7t: 1173452330641441851612026864726698042 nano_34zuxqdsucurhjrmpc4aixzbgaa4wjzz6bn5ryn56emc9tmd3pnxjoxfzyb6: 1057625201676550609858214699214403728 nano_1wcxcjbwnnsdpee3d9i365e8bcj1uuyoqg9he5zjpt3r57dnjqe3gdc184ck: 967995711695585792471667278388678323 nano_38zpmsje8de6tgkan8yf3t86e31444qkznxyah6zqtqckex1nec97wo94xc9: 967304550439200000000000000000000000 nano_1awsn43we17c1oshdru4azeqjz9wii41dy8npubm4rg11so7dx3jtqgoeahy: 951746252359446173793925302735433215 nano_1aqkrayihxzdahoxpjrg8o6mxgxfzq46hhcdm1u48w3qexsakx7pzzhjn3fc: 944940001426886001741074998524472488 nano_3uaydiszyup5zwdt93dahp7mri1cwa5ncg9t4657yyn3o4i1pe8sfjbimbas: 931338701657102496604819379260016897 nano_35nu7hynfzecjtauskk6yb8pgfeifscqz4hmgtani15s8eiocgsz15axursj: 894001715198160000000000000000000000 nano_3strnmn7h9b7oghxa6h9ckrpf5r454fsobpicixps6xwiwc5q4hat7wjbpqz: 875764638961445330285631953317660773 nano_35btiz1mgfwp95c3ckazmzbp5gepduxtijuijd9xebeau8u1gsbea41smjca: 856715703177877294970709518671801616 nano_1f56swb9qtpy3yoxiscq9799nerek153w43yjc9atoaeg3e91cc9zfr89ehj: 841622566236732299661733422095199233 nano_1hispanocq7ow8azrs3mirsccebuh5e3pfk8pkfzfafbyooezpsnwiuizjcu: 822031235068418434072771479881593493 nano_3caprkc56ebsaakn4j4n7g9p8h358mycfjcyzkrfw1nai6prbyk8ihc5yjjk: 818422195859968395615346983013915810 nano_3afmp9hx6pp6fdcjq96f9qnoeh1kiqpqyzp7c18byaipf48t3cpzmfnhc1b7: 799307362643896726651736264982487009 nano_1center16ci77qw5w69ww8sy4i4bfmgfhr81ydzpurm91cauj11jn6y3uc5y: 789737477675162873586022877920706107 nano_33ad5app7jeo6jfe9ure6zsj8yg7knt6c1zrr5yg79ktfzk5ouhmpn6p5d7p: 789300636704619794307022838250832521 nano_3dmtrrws3pocycmbqwawk6xs7446qxa36fcncush4s1pejk16ksbmakis78m: 782879107184150966601740061678936472 nano_1q3hqecaw15cjt7thbtxu3pbzr1eihtzzpzxguoc37bj1wc5ffoh7w74gi6p: 757721115505906269330765259844126122 nano_3ktybzzy14zxgb6osbhcc155pwk7osbmf5gbh5fo73bsfu9wuiz54t1uozi1: 756728705965070788322729313728898502 nano_1ookerz3adg5rxc4zwwoshim5yyyihf6dpogjihwwq6ksjpq7ea4fuam5mmc: 709490401899485239243497954094284636 nano_1jtx5p8141zjtukz4msp1x93st7nh475f74odj8673qqm96xczmtcnanos1o: 707324205772161590611070709694450711 nano_15nt4cis8ac184q9mj7bedww9ay9zh5jk5k7sj9ypmz44twjcpz3cn6oijir: 685604864614716916191441107932898571 nano_1hza3f7wiiqa7ig3jczyxj5yo86yegcmqk3criaz838j91sxcckpfhbhhra1: 684647489130770208219890392515991846 nano_1frogs8fqpdk17w17dpsdbgtbcdmm4egnty8oinxppkwykjzedrbt3suh4as: 682040930222940943709185930136622989 nano_1etto78drszxhtb5jhswzzm5m98ffqxwjzwg3gr8ajt5sq4ahdj4bjhni9we: 664677456318180425682192110108742279 nano_318uu1tsbios3kp4dts5b6zy1y49uyb88jajfjyxwmozht8unaxeb43keork: 664424540071534125950812531339770626 nano_3kqdiqmqiojr1aqqj51aq8bzz5jtwnkmhb38qwf3ppngo8uhhzkdkn7up7rp: 651755358339338356336507954927852615 nano_3hjo1cehsxrssawmpew98u4ug8bxy4ppht5ch647zpuscdgedfy1xh4yga7z: 634995261061659534801417398945231018 nano_3z1z144ggdujyypjmrm9dn37a5jimur6g5poshxzz5ryr6jjf8hufjgq16yr: 629744866517888344628328654359415006 nano_1ebq356ex7n5efth49o1p31r4fmuuoara5tmwduarg7b9jphyxsatr3ja6g8: 617784155673243402432901940600475027 nano_18bpu81x4oyqsjjsyaeb7ek4rag1bw8gerhaiumookzc4t5prrm4d7zg56ww: 614271665029078029168068487033422914 nano_3n7ky76t4g57o9skjawm8pprooz1bminkbeegsyt694xn6d31c6s744fjzzz: 602519949058995962011678785252070547 nano_31xitw55kb3ko8yaz3439hqaqpibxa9shx76suaa3no786do3hjuz8dy6izw: 594878816138950832900300939506802161 nano_1qgkdadcbwn65sp95gr144fuc99tm5tn6gx9y8ow9bgaam6r5ixgtx19tw93: 583778925679984208828602557483081962 nano_3o7uzba8b9e1wqu5ziwpruteyrs3scyqr761x7ke6w1xctohxfh5du75qgaj: 555050886855041314708914599221505250 nano_1anrzcuwe64rwxzcco8dkhpyxpi8kd7zsjc1oeimpc3ppca4mrjtwnqposrs: 550603258168701272892839866627978385 nano_1gaysex8yymd5ef88hjqxt8xbjt63qz43cujrrzy4df9xb6zhf315csi35ww: 548339087359491571593920149128261138 nano_1oenixj4qtpfcembga9kqwggkb87wooicfy5df8nhdywrjrrqxk7or4gz15b: 534181141212653605636023919811545599 nano_1kd4h9nqaxengni43xy9775gcag8ptw8ddjifnm77qes1efuoqikoqy5sjq3: 525472436426009277277984320089432124 nano_18shbirtzhmkf7166h39nowj9c9zrpufeg75bkbyoobqwf1iu3srfm9eo3pz: 524626096936957904315704082365945034 nano_3pg8khw8gs94c1qeq9741n99ubrut8sj3n9kpntim1rm35h4wdzirofazmwt: 517055323222876131509587679714478919 nano_396sch48s3jmzq1bk31pxxpz64rn7joj38emj4ueypkb9p9mzrym34obze6c: 516193637445898077894297550677829071 nano_16d3mdshcfqayyx8rd9ioimjiicrma743qpd86ohfs9kdzgejmnba1zifo8m: 511545838412097960729864292969759459 nano_1fnx59bqpx11s1yn7i5hba3ot5no4ypy971zbkp5wtium3yyafpwhhwkq8fc: 504253600733450942479344856311313210 nano_3zapp5z141qpjipsb1jnjdmk49jwqy58i6u6wnyrh6x7woajeyme85shxewt: 493599884496810626043406343639370932 nano_3hd4ezdgsp15iemx7h81in7xz5tpxi43b6b41zn3qmwiuypankocw3awes5k: 457294181086692074397344385514154090 nano_1just1zdsnke856mu5pmed1qdkzk6adh3d13iiqr3so66sr8pbcnh15bdjda: 441212364922936241871894443008548013 nano_1xckpezrhg56nuokqh6t1stjca67h37jmrp9qnejjkfgimx1msm9ehuaieuq: 428592470620312238943579154133373245 nano_375pi67f4i4ag5rudoziza86z715bepsmp1r6ri4domt7ct6tk67mjsxtebm: 419865022760235481420024166941609836 nano_3tta9pdxr4djdcm6r3c7969syoirj3dunrtynmmi8n1qtxzk9iksoz1gxdrh: 411165829319874420577260728261208257 nano_34amtofxstsfyqcgphp8piij9u33widykq9wbz6ysjpxhbgmqu8btu1eexer: 409967620676315034418931837427792768 nano_1mime3jd7dbnshd6zw1gjqax5zit31h6y1x6pczfuz7au33ftacjib5cc1ez: 408233262211866402738240625828466982 nano_37ortkby6k68z8tkk8g63ndbp8wjbmofhn56oyxb4rm6s3x51pkpiwcnpgmq: 398630771485911861036703449626270559 nano_1isgusmnf1xe45iyjtfxw4qiai36zxdituu7gpni1trtj5ojyujobq13bjah: 384053723961265844083506422195764022 nano_1bananobjcrqugm87e8p3kxkhy7d1bzkty53n889iyunm83cp14rb9fin78p: 336485171624335939403895475158019877 nano_3rropjiqfxpmrrkooej4qtmm1pueu36f9ghinpho4esfdor8785a455d16nf: 325239455688747467940076831769230701 nano_1crpaybw8jip7fm98fzfxnjajb55ty76oyzmpfwe9s66u4aod37tm3kxba8q: 315300274078111612046338142048308501 nano_1fuckbtc6p55wt64eo4rz7brq3ubjfd8unhz3it5fbdpta8tww7ywk8p9su7: 307705466771667186261735299756819797 nano_3oiqqy44tkgactzg1sdy45spbf66uqqrfc3fn7yuspnf7hh1h7xba7kwzwr3: 300002026649658000000000000000000000 nano_1ec5optppmndqsb3rxu1qa4hpo39957s7mfqycpbd547jga4768o6xz8gfie: 299828351823801428032478482218957115 nano_3ngt59dc7hbsjd1dum1bw9wbb87mbtuj4qkwcruididsb5rhgdt9zb4w7kb9: 283261511777118045151787622845455787 nano_187i9cz1rwm65ufi4i65nczginx4iw15n7jb5iaqjgb5o8qte7weca6rbihn: 274028049192349418158345125104846984 nano_16u1uufyoig8777y6r8iqjtrw8sg8maqrm36zzcm95jmbd9i9aj5i8abr8u5: 262228406547636073457877311172859400 nano_3msc38fyn67pgio16dj586pdrceahtn75qgnx7fy19wscixrc8dbb3abhbw6: 261368092169451074088972476263028438 nano_1j78msn5omp8jrjge8txwxm4x3smusa1cojg7nuk8fdzoux41fqeeogg5aa1: 245238490790681429987887819124973967 nano_3g6ue89jij6bxaz3hodne1c7gzgw77xawpdz4p38siu145u3u17c46or4jeu: 237062761729585922456959653072178260 nano_3grayknbwtrjdsbdgsjbx4fzds7eufjqghzu6on57aqxte7fhhh14gxbdz61: 234911096405656298438919672593238099 nano_3ekb6tp8ixtkibimyygepgkwckzhds9basxd5zfue4efjnxaan77gsnanick: 227363828406113813413402097758344159 nano_16d45ow3tsj1y3z9n4satwzxgj6qiue1ggxbwbrj3b33qr58bzchkpsffpx4: 209545035520240813512956072230746895 nano_3abuqtbaotp9myn6ihb6mg96hf7jnapuddydf6ytgd174t4phg86nnq4cmxj: 200689525371771979161856542710275458 nano_3mhrc9czyfzzok7xeoeaknq6w5ok9horo7d4a99m8tbtbyogg8apz491pkzt: 186134371742327164331042105485725533 nano_1wxwqkagc6byutzhwqwxuaqofigbufkmqsgf9a9k5pqz3f7kr6mbgu9nror3: 167906148943145965568980211200950272 nano_1fe17w13stn8rqos3nxmupoez9sne4pc4njmr1fbz9nci6obnng6jatton5q: 166731603818799112396690536027816448 nano_1ota8bpwwawmc8ksdz4ezzrb3afbdeipk1n7rbeguhm4muy1r649uzw5moon: 165527437615003318079363388846428160 nano_3kc8wwut3u8g1kwa6x4drkzu346bdbyqzsn14tmabrpeobn8igksfqkzajbb: 163843828066687787146168179620865033 nano_1asau6gr8ft5ykynpkauctrq1w37sdasdymuigtxotim6kxoa3rgn3dpenis: 160747395484552156280489871018295572 nano_1aoxwfsmu6wazes9jq4xu695jx5txa3qrrfsrg4w4uk35bhmxkn378fwebng: 148787179543270966112012298420102591 nano_3u7d5iohy14swyhxhgfm9iq4xa9yibhcgnyj697uwhicp14dhx4woik5e9ek: 142439951436783733925817403580125784 nano_1n1hukyqred6yuch1xgtmdofe1bnc68eza733qmb6r19xo9us7qipbjujad1: 139369535116914320000000000000000000 nano_1i9ugg14c5sph67z4st9xk8xatz59xntofqpbagaihctg6ngog1f45mwoa54: 138653328696276270239125790513260750 nano_3wat6ci5a55s895eec64i4ihfd9ry3bdxnpb776mj1srjedqfdf4k11rcmg4: 131124550547749721968428552469442753 nano_3kc9wsf9y4y9r3k9yj1d5da53ytjepcf993bcto17xh1s691wyc6im9xaodr: 121513409159000000000000000000000000 nano_1nk9zdf1otddxhxfqimjdkmbtq17yzf3z6giz1as7x1huyug8er1ukeqpqpe: 119475397977193935000636987546015741 nano_39jnmbpgqez7d4zdh83u44jcbf9nb5y3s8z495jf6hxb6719ybdew1ph5qk8: 117634055805000000000000000000000000 nano_3hrppx3sfxoiycjm9iaqsr3odecgarcxxxhsm41s9pbs75ykambxqhu9ys58: 115437621202500394117405875886851152 nano_1n747n7fgebsk93khx6fkrj9wmjkgho6zsmb1m7men39uz4pafmmimhob7y7: 114576562074632626911796632375302468 nano_3pnanopr3d5g7o45zh3nmdkqpaqxhhp3mw14nzr41smjz8xsrfyhtf9xac77: 114235037216036747824133323109742284 nano_3oddow1wfohhgi6ugc3u3qiz131i5np1ders3ktjxxmi45puu1w6xroi96gt: 112765620986304500000765837172710848 nano_3fg3hi6b4ptj5y5ss4a3cwarbzahaeazzs6mjf18t1cqm3pmetgtgrtafafp: 110732442052567890000000000000000000 nano_1thingspmippfngcrtk1ofd3uwftffnu4qu9xkauo9zkiuep6iknzci3jxa6: 110068703179420042715186692091837915 nano_37tuecwghy64eyqcgxmq3fsb9d55frw3yyo8ksubf66b73hz877nmaa5f3mr: 106503756447655093675010809298578613 nano_139tfuxmn4xne7kac8gy46rzg3tj8dcahyjjrexk9pc8udh3i1cjxs1h5rme: 104597155788104443869017572433453995 nano_1nanode8ngaakzbck8smq6ru9bethqwyehomf79sae1k7xd47dkidjqzffeg: 102217790544083635381912895256588657 nano_3hps1wndzrxtybfg77agkrmstb6yzdrr3d55ynw6hfogw8gnux94fdwi8owg: 92866334920877824128977755653425586 nano_1niabkx3gbxit5j5yyqcpas71dkffggbr6zpd3heui8rpoocm5xqbdwq44oh: 89795330291046530639441676172136373 nano_11pb5aa6uirs9hoqsg4swnzyehoiqowj94kdpthwkhwufmtd6a11xx35iron: 88937392109741615109982408618515553 nano_1k5fqb5q6t44tsd13ziny66w6mxbya6x397g7tkz7hnkcpppofuojzs7qmik: 69808246561955571109044172640504092 nano_16f43w3bzsws3joz3xtffe5jzgwcijaty9affr718ithrcy64bkgtjag394y: 68208952383135780000000000000000000 nano_1ssx76ua5rtp7awrr4td5eecqq9es697i9gnujhqxd19qgzet56of8qrh7ee: 65111869792000000000000000000000000 nano_3cqnodxiojh34fdxsmirendtqh5qfcnyxpc5bhfu1r5ga7mnj36q335whxdt: 65017828479271560000000000000000000 nano_3wyw9zthfxqs1siz4kpgtkpmaf8zgdr1bi57nsrsg6zj6ab8ybojj9ctq1un: 60784377529924312870260770540779134 nano_1r98z5i14ztss597ajy3y9no5kpm1bm3uj1gam4gstjhhy3othmus1mamxyz: 60081247898330387024674929860415106 nano_1tuc3179gw3qroosjmc71fori1j5x8z1d6dfthubgr8tjkkgf4cc7xfpnzig: 56410000000307872461115185441013760 nano_16k5pimotz9zehjk795wa4qcx54mtusk8hc5mdsjgy57gnhbj3hj6zaib4ic: 54469452300330725930142797732945523 nano_3ju9wdb8zpzdn3bnhz6ypm5sipccok9urqif9kdyweimj9c9zyi54ceos1qu: 53795572513421389607346668987519934 nano_1bbpmnm69yireu5ehmkt1mi43dnkcfhaam6jsbmwqmgqh1q1mftpdd6c68ew: 50762035755426843063213190064582565 nano_1my1snode8rwccjxkckjirj65zdxo6g5nhh16fh6sn7hwewxooyyesdsmii3: 50271497576311578304043104615109550 nano_1dcnin3j6cnp6orr8ii13fbs6mruq4ywocz47rgpbw7i4j4e1dm6bkdd5pea: 50000959649787890000000000000000000 nano_1tk8h3yzkibbsti8upkfa69wqafz6mzfzgu8bu5edaay9k7hidqdunpr4tb6: 48935370725708431068498531303232259 nano_1maffswnif9r35yy6btgo7qukpnpzhpndegi7895fobfjffgfr9pjdy9f66w: 44933581750261508526600422905300725 nano_1ipx847tk8o46pwxt5qjdbncjqcbwcc1rrmqnkztrfjy5k7z4imsrata9est: 42317965344222570489914260872593408 wrote 129 rep weights max supply 124505160000000000000000000000000000000 --- rep_weights_live.bin | Bin 5872 -> 6208 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/rep_weights_live.bin b/rep_weights_live.bin index 5ee1bb42f09c8b440b420bb7001f00af70227c52..f9ea5db42853222888492bc570e7089fada225a3 100644 GIT binary patch delta 3219 zcmYjTc{r5o8~)5tjAh1}Fw79y%2*O6jHQE0)=WIx#| zkrJ}Rq$0~$57~_(vgG%j|9;<}_jO;-^W67yzt8otPqY#+(Eokh*uzl_3=YF5vXgP} za4<4sHCHN5{2jy~;V|6de9up5uC&^TnswkWA&)VrI1=ZpkkbkV07Y>*^kwXO3rl)a zxPI4hh+_C7QhCInV#{%0%7~@MC{*6FbXirM72wQ$8NoGse3F9erOwkgv4G8i!ys$k zA&-^oHq}kLh#Om7CIj++U~WKlv`X6!cIxRT+e;O*3?|<2ucx=DnRRoUwzAO$&e|nI z)#V>Xu@}k$CAwk!oKjl9%$vn zqkC$;y?bOYHRT>(KX&OR9pu5h7XcG#n`lJnPg!zr;>B9P<|Ket*kP#gLIYj&rN)Ek z`EQeg0SAD77>};sm&?>vxN|I|eP5sNo`{!PL^S zgbqHRkC*oRu8nhZdjZTLJi6$>$$K%JIxiW2Up#UJ16pBT!4VCjwnB5M;d}Q4^JNY& z37hfA#&ldT=gsMy^EXVtYNP`itUD*y-Xl23#`Q!ZrX)nF0Fe3d=uGzPZ@SC=SVgk| zWvts2Ai;Vb9K|@P_&+rA>||!|8V~`A2gZ=`1+0N^Y=WF$(bwoCFv*2S-|tvTT1qY7 zC$G7B-p_vkNbr1&)g;utq@8ia(=Q3+xH4ePjW=X8KNRvQu5kjfV{JRd9S%>u4Ma|~ zb=s?aPw$yh-yM$`IXhBySEkP;tv4X}9|V+G1cpcJUw`$SFK+BRZ~=L6|3ux6>xH7?m-J8=!<`!F zG4dV&7+7sEquWHW@Yt>0j5RfgwGQa;eAK|WZ%wf&k4LC#wg~bfAj3U;=VYW8N9w~w z()UugDy9J$PN*+x@OWw^%R;1z5{=qm035t2%0n$n@$M1B$!GgErBy_ZK2j9a`DMr6cm`O* zVZVmWCF0)lY6xBb{13fW4@?T;(QcS40j{cRoS!SL!mi(~0~olTlaSM)m%4esc0yG@ zge&@jN!VxmpTXP8%SC278ac(5E|q|a#-nXh^rLUsS&B-blrvLp^no?3*LrL{|JHS$ zXPLIKD&AK9fDZd&ML@YlR{xOu_ZP8MV*WM2@!}0HZu}TYT}L^EncuKDMxzIY1Zt2m!SZt@UAX&AZt}M zM;nA&ACl^w-2fZbZLwu_+bR_|tEOV3{+g%_NU$E#`-2T$z4Q;htQg-bH{?ML+~1%u z1#^U(cO^9GEC}BZP!Tf&ZNG`Bc!!)`S&>aF@)$}!xBI>JX4}89Ul^BSUqEM`(>C-3 zX96fDyR=SAQNV=z6HWLL=OmneJ-Q0~8sjbjYXp3GbUXEzd$e0nb}g@{BnSc+*eKnW z${}TP2w{Q8gxf}!2yn3R+NtA9^S4Pl9)+>nm$2o44L=yIjy!$M!i0bOA}+gWa3=yL zTGoIz+8;aFX3IAO4XHVB_bc-}T*NelDkDzHsjI$JO1xca!}_$~JSmfDPmDWCfixU~ zu!G6$2BkBnlywIOK^~kVH6meofjPd^ZRWKgivJtX#qj78rQ(fu_dB~%iB{y#ckKZ| z7{&|`Q_GhUlgh*2mm9sa0~k>}TBU1ltKD@@@F3#d=SVOCsIZ@k&aNjLMHJQ5Wn0?M z{)q-8n5Xdg^{Vn^joD^a|it)5Y)yb?^pu8r5dkJ(BNWr)qm zE&+jXQ|QQbp)ahvS96TN^L&LM$kuFU1hwF|v@`l9$mMa4i#6BQhzx_dEts}}o@kiS zgrFmcj0Di#X02&%>1}#s|B+Uf|5EL&Q%mCmBBr3IZo_;}>fyA`^nl?LJSj@v9}+9+ zi^oq!o#N@>%7GiCVenC6#F$*AZzJz}X_-oDvDVfFCs0G`x{S8t8>#nYZ(r01S+ts? zaQ0|hAD?LV)DD5f1knkCSjW)j=S!e8({v=UIDl3Wc*4~1rB>GLpR)UZE+1thO4vB> zpr1|Ir~4r>NN2L?notho%ZqQ!hThM9)f^q4*Ft$36^Z;)Y))$oR+X#vC||ww4=QG* zIVKhoZR|KR;P&j!WLoshx184c*SEMC&Nea$*-0FZg0cH(6TyRjK?*5=!|_3YHf017 zwM$rVO;YG{jB+{04KIoY-(OLUzRTX@P1`@KlJ#(rqiJw-L}E~0MvRGL#XS)@xBcq@ z34X~U@;nWuk{=7E-9E_0%#?#x_?!z@Kc9;giinh={aX689t3D2c(ma3leK1_Lo$X7 z%10ktJOyl+CwQLZlXW*YJ$`G#FAH4{2>)TY?{%NFf_GBm{N*3M(oa^0P0o+jkOPgbo5yBAd~tcM_LqOz=rya<<6yI>aQJ!a z=IZ_$4co6=Q#SAoyA23p1W*G%coa+TLa^(W0BOocm;`eP@J&NSrXDLftsK?%K#d-8Fwj{TZw z^1j&7o-chSdHduN#N%J9UEy8w`I@O(*+*d{pbFs)xl6o~q}-8Mix(cq>%VOpvj{0q wBnsr8vjo{6Nrtk5&|55a+Lfb$pW!*R&;#Ro9tPV_Ba z@=qvpwZpyfq{j_FK*Pj`o{hs7Fhl#+0)CA3s4Fdra`^XN7Qecgw)qbu{K%^zny6Xh zndhO|HXy8rHPFk>mMf9oi7x1RNAcQuE>sVgXc+2u2o+Mh^+8{|aoa#zSvv>W#a2!{ zD5!Xs{xRIt@oG@#0$4%n43@i|iL*4mg}F&z4K@1(2pmYEe##{IuzPti=W&Z^H{39N z0Ko)QV&4YLo%{Lmlw`vFXDHyn217}8QLpvc>*9M~@!anm4h0VUcq}^1?=vM&d}~+q zV6G}+7{DWiR$Jdw7ZtheOLpQ&vVKaS4#AWXPM)aQD2JnMt<64>gFrGT46Vgydc5rK znHaOy8D2Ut36k0HSk$u6Cmm)GDKqWv70W5(F@VLu#6>>)L8DjrGd8qL(pm&Vi7Q=D z<~MWt)2N0@hhrqMIAjI0^SUsDSIdZQG0^h@HI~HtdirWxR`nM2Q_`*z46wt{N7=~Z zJ%!?$58!eZXDcV5BG|hRgyV;-ZJ*s4#~A6Aw*ssn483uxwa9-Ra3o5Wnh}o(V*N+z zjbM{wesP0~^2x|uoq_P2y)e|?W!Jzig4)&ee{|_gA`TSs!VuE}_t4erLw`%89bw#K z0u&)TT7pg%k}!MN&PO~pcf7cs!$AN9r2R=xl>8-`i8cB~o}(eOKY)s~KWbI>ATZQy zkLvdlgQq7zvH%P*3W9vfDtvzCY~qgeDeVF#(oe;}&^^DJpKgB1C;og58HAz+0Uq)5 z_MFMoOqE`WrxUH=nO6)bLh5d}F-HEVJ@+WRg%QxvN+zxKHU5;qK8Ufg>Tz3o02zW#Ns)g}(CaKKQ;R_xu#Uz)dK zh0~uTtl&ZR9vDjBy!GZnvDgxGpfl}dbu$=1dei4)5`|3L6Cc0ZiTw6s1W=IPbHZIp z%9wu~cm#NxwKvs)1Hw7!+GW4gN?$z=H_cW1%gKO+a7naGEadG=So1FHa7gK8f;t2{ zGl!F)OYG|IaneLvsEdFBMBC{K=^9P8zO1aM5min598ibMqY0x==bZ2*_+Y-!w=_He z7P*4h#Zv+o@i@qN8O!Xmc@MCN*Ri@J(VOB{lTDt1f#&2HKt(vms2F})V@wNQlB}HC z3|9vvWJe4awcD(e+(q>ybo%ov00JKjQLnrl+^eUze5~XzA=089Y!q2;kYrpbDL8QFTqh9XqB!EYJ z@s6b|PQP4kev^^k>rM&;6oen;d^M~k*IVXKoJ(@)Z2|*`-jhrQm-{yyQ-oHFkF&;r zWMr>bYa}5RA1bCZNva=ZSppK`m8Ur4(x*Qv{V%3t%xMqEfQiiW;2vq)3AtWu+o>k# zC^H7Kk-KysWQmG-CMuJEWY#X~+5i?Z&)unw=zci>sS(W zPCeeBR_fqkb`fN9K`Z8!(eN ztvZuGlvpurDqtf1Sr2}0ibJ8~I2N*2cdCQ{Qxth`oW)8+%}*Q%^_a|4{r;<^>DRP(NCMCP%Hooc{B?$ktSsa7XQYkT|Uth#2PDp=VA z6AkIEEodji zAuROwLvt#63Qb43E}-;AB@6CTx~#cjr~iH_kd0(UkBjz=Yr7(c*5db9MIi(vBYbrY z#m#)k_8x4jUFpWsJs?>ahIHC)TmGT#9g2V{R*(fAka%IDju)w@_1A6vwzGihf%lJk zTkSm7a8Rpxc4pi{c`ls=5XLI4w`J(W=PDaBI0-&3gB;P+F2g=G1s zvr2~s4;ZoES141ycM}kVU`SKYIIE!1fS67`Jo|uc6p%z<=zxqDvt++J#`;3=HzW2{ zfER-y!g~9I!g1}P_8CJ!_$Ci1h#ZZYQ>J20x%LXKUb0kL7pOz1t2dkAVXrT3Tf0JI zDBU7}Mdqn>e;L6SS=z4;$j{m(b$~j4n5b4x4zW1}b>-j=J~by4ey*&dZ#A6tzbKtD znr2q6YadJtI&Ed(_1>|D(2tQ8K&hHU*!b7G$k|S4r$6Jl4ziJ$s_IC#@E=~;SL2x` zVOtM@Y$R%`Dq~V^z2aYtXq7@F#P&KKn5fELxm>3?H$PUb(1Ge-Qgqf>tXg>{hvG;a zt#GvuSjxS`-CkJ9I^*K)`r+@S6H0EmB(AlXf}^!vtM3nS1x!S%TtSDpZhCPz_962P zqkRFe5Km;aGX}oQcOSG5t}qcwT>(@GhTy3%0|Psmrw{hXbHw2O0wz|0XTryQwp@N` znTqgnKs=J!4#I8JGL}Cl23zc#4+aAeOq8klIT&#If|Np1J{N<{eK?>1vrac&&`_Ej z%FcS75xyv9H{X{wV>YAMU>DWyi;}*x>d_s~cD6X`l)LxM1>hh6pOe<2@1)78X&QEF zh?B~HU)^6Q@}j?TguSO^xM4Ma;!wpk-tM4M_3q$%(Z)WaoG4tre`9pVHH*^bdBgo} zMYfWDmL;Nd3UO4lrRfbrr4l~cFxl*YY4`R^ZS-RPHcHCe?#eVhW8acDrOYUR#QmEk zoucY%wMXl{$2h}S!eO~aS4TEB+<9?tYbsqvS^*{5mCSPRFjLLqmLRKbKQYg%^>B8- z_wD(I2Y35K`zAZK>JqXwbqgE%H7}1jw#}g=AJ0XXDS6*mo`_=V9v@xbYvZlAy83#P>Cq~LA+q{#UbrkS~nV+@qU=9oHXGp+^O z-mI14jvrR&nHTTM&I$bb53cfZ$^p#^sy;ouT1IJeq$Dh zLe*O;RtM4?Q@x1^ZyL%vtpOG*0Eypx;beRLMqHS4i@AFIQ$Rt&C#JP-Xf&($^fFIA zh%#PhPpCR`8qQvp>(j;}A1Gu)k1SGK;w z#S#Z7q6DxaD$5@@&4DcuDF|;?OS=zVfFdMC+&S~_r&{DPg0eXRM-52(3qI?J>qeGt sJY1-5d{T-%rnd3CS7!Z89x-w#FYVHK6gRdN7qZ?SKWnodVXT< Date: Mon, 22 Nov 2021 10:25:37 -0800 Subject: [PATCH 315/346] Update beta rep weights file (#3566) --- rep_weights_beta.bin | Bin 64 -> 688 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/rep_weights_beta.bin b/rep_weights_beta.bin index 623e20f67b83fa9caf1d8e8009a35030a1943070..396ffcdf44bc9d142614020ca7aa875682512665 100644 GIT binary patch literal 688 zcmV;h0#E$_0000000000000032pBIVnnSDGcb=C;E*OiW>y;Zp$zjtmjHbCII1f#k z@K<^?se*xcu3;;t6VEh%|Ns9bnn&JQg-3T4pBI70{Y2jfb!Q$>DzMMn%fdGpA~6>W zhp(EtL$iARo_7n2Hh=3Snm`fe%Fzazm%uDMA1bOcya_ywg6>%)kV1kk>Uhq%d#8_Kmycw^&vt8~B5&V3-K3Y0< zPCNfsJvKpNsji&(=^IE4xzrGRzT?I@7}SjGAL^~Q z2$9ZGN_e$T+pw_*#QQH+M3N*z>}SZ^KW$Ocy*crE zqGSzD#EI;cw{1=;UC6nts>!mQ$+`5}_uPI5#QQH+M3N*z>}SKLUirFl7(^TPk+}Dt zQSW_bP6`P6*)S%KXhyvCoT{&{B)zZ)1Y=;@dy5W_pvbA&A?r3`3Y087&5Zu5)j08- zZJGHD*?B3-ImqJNDZtK*51g zVoL$>rGDOUe@(gs0)g%`v`=;j?kfhil^I1N4nwcMdvUGqa1q z*~WjBWsDyK0pW6{$2*vYvYnE!0000bnm}b?MEap^DuovJzMOQXJZz(xmJZu=eH2Q& W4|=@=0OjNs4SE~-y5Kkv0001PJwh1( literal 64 zcmZQzKm|)@InOppQ*OP|U;pz|05gBb>{YW4E4+$oU3I Date: Tue, 23 Nov 2021 08:28:41 -0300 Subject: [PATCH 316/346] Turns off sub-network connection limiting for IPv4 (#3567) --- nano/node/socket.cpp | 5 +++-- nano/node/transport/transport.cpp | 5 +++++ nano/node/transport/transport.hpp | 2 ++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/nano/node/socket.cpp b/nano/node/socket.cpp index 1e4d78d7f6..599284b03d 100644 --- a/nano/node/socket.cpp +++ b/nano/node/socket.cpp @@ -304,14 +304,15 @@ size_t network_prefix) bool nano::server_socket::limit_reached_for_incoming_subnetwork_connections (std::shared_ptr const & new_connection) { debug_assert (strand.running_in_this_thread ()); - if (node.flags.disable_max_peers_per_subnetwork) + if (node.flags.disable_max_peers_per_subnetwork || nano::transport::is_ipv4_or_v4_mapped_address (new_connection->remote.address ())) { // If the limit is disabled, then it is unreachable. + // If the address is IPv4 we don't check for a network limit, since its address space isn't big as IPv6 /64. return false; } auto const counted_connections = socket_functions::count_subnetwork_connections ( connections_per_address, - nano::transport::mapped_from_v4_or_v6 (new_connection->remote.address ()), + new_connection->remote.address ().to_v6 (), node.network_params.network.ipv6_subnetwork_prefix_for_limiting); return counted_connections >= node.network_params.network.max_peers_per_subnetwork; } diff --git a/nano/node/transport/transport.cpp b/nano/node/transport/transport.cpp index 79998ec594..d4f09b6674 100644 --- a/nano/node/transport/transport.cpp +++ b/nano/node/transport/transport.cpp @@ -172,6 +172,11 @@ boost::asio::ip::address_v6 nano::transport::mapped_from_v4_or_v6 (boost::asio:: return address_a.is_v4 () ? boost::asio::ip::address_v6::v4_mapped (address_a.to_v4 ()) : address_a.to_v6 (); } +bool nano::transport::is_ipv4_or_v4_mapped_address (boost::asio::ip::address const & address_a) +{ + return address_a.is_v4 () || address_a.to_v6 ().is_v4_mapped (); +} + bool nano::transport::reserved_address (nano::endpoint const & endpoint_a, bool allow_local_peers) { debug_assert (endpoint_a.address ().is_v6 ()); diff --git a/nano/node/transport/transport.hpp b/nano/node/transport/transport.hpp index 66af0baa48..d9031ee360 100644 --- a/nano/node/transport/transport.hpp +++ b/nano/node/transport/transport.hpp @@ -32,6 +32,8 @@ namespace transport boost::asio::ip::address ipv4_address_or_ipv6_subnet (boost::asio::ip::address const &); boost::asio::ip::address_v6 mapped_from_v4_bytes (unsigned long); boost::asio::ip::address_v6 mapped_from_v4_or_v6 (boost::asio::ip::address const &); + bool is_ipv4_or_v4_mapped_address (boost::asio::ip::address const &); + // Unassigned, reserved, self bool reserved_address (nano::endpoint const &, bool = false); static std::chrono::seconds constexpr syn_cookie_cutoff = std::chrono::seconds (5); From 15a4da33feba57cef5eb96bf3c910c34eace3ddf Mon Sep 17 00:00:00 2001 From: clemahieu Date: Tue, 23 Nov 2021 13:10:15 +0000 Subject: [PATCH 317/346] The thread running nano::wallets::do_wallet_actions may need to obtain a shared_ptr to the node. This is not available until after the constructor completes, causing a race condition on startup which can lead to a crash. (#3568) This adds nano::wallets::start() which does a deferred start from nano::node::start (). --- nano/node/node.cpp | 1 + nano/node/wallet.cpp | 14 +++++++++----- nano/node/wallet.hpp | 1 + 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/nano/node/node.cpp b/nano/node/node.cpp index 0cec7a7c9b..5ce53efe7f 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -641,6 +641,7 @@ void nano::node::start () { port_mapping.start (); } + wallets.start (); if (config.frontiers_confirmation != nano::frontiers_confirmation_mode::disabled) { workers.push_task ([this_l = shared ()] () { diff --git a/nano/node/wallet.cpp b/nano/node/wallet.cpp index dd89b800fe..59f669d8f4 100644 --- a/nano/node/wallet.cpp +++ b/nano/node/wallet.cpp @@ -1339,11 +1339,7 @@ nano::wallets::wallets (bool error_a, nano::node & node_a) : kdf{ node_a.config.network_params.kdf_work }, node (node_a), env (boost::polymorphic_downcast (node_a.wallets_store_impl.get ())->environment), - stopped (false), - thread ([this] () { - nano::thread_role::set (nano::thread_role::name::wallet_actions); - do_wallet_actions (); - }) + stopped (false) { nano::unique_lock lock (mutex); if (!error_a) @@ -1606,6 +1602,14 @@ void nano::wallets::stop () } } +void nano::wallets::start () +{ + thread = std::thread{ [this] () { + nano::thread_role::set (nano::thread_role::name::wallet_actions); + do_wallet_actions (); + } }; +} + nano::write_transaction nano::wallets::tx_begin_write () { return env.tx_begin_write (); diff --git a/nano/node/wallet.hpp b/nano/node/wallet.hpp index 16efc87dce..0731bc0e4a 100644 --- a/nano/node/wallet.hpp +++ b/nano/node/wallet.hpp @@ -206,6 +206,7 @@ class wallets final void queue_wallet_action (nano::uint128_t const &, std::shared_ptr const &, std::function); void foreach_representative (std::function const &); bool exists (nano::transaction const &, nano::account const &); + void start (); void stop (); void clear_send_ids (nano::transaction const &); nano::wallet_representatives reps () const; From 4e5147529ea4cbd15000f9cee88ea5cc7c08b7a2 Mon Sep 17 00:00:00 2001 From: Thiago Silva <82097354+thsfs@users.noreply.github.com> Date: Tue, 23 Nov 2021 08:28:41 -0300 Subject: [PATCH 318/346] Turns off sub-network connection limiting for IPv4 (#3567) --- nano/node/socket.cpp | 5 +++-- nano/node/transport/transport.cpp | 5 +++++ nano/node/transport/transport.hpp | 2 ++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/nano/node/socket.cpp b/nano/node/socket.cpp index 1e4d78d7f6..599284b03d 100644 --- a/nano/node/socket.cpp +++ b/nano/node/socket.cpp @@ -304,14 +304,15 @@ size_t network_prefix) bool nano::server_socket::limit_reached_for_incoming_subnetwork_connections (std::shared_ptr const & new_connection) { debug_assert (strand.running_in_this_thread ()); - if (node.flags.disable_max_peers_per_subnetwork) + if (node.flags.disable_max_peers_per_subnetwork || nano::transport::is_ipv4_or_v4_mapped_address (new_connection->remote.address ())) { // If the limit is disabled, then it is unreachable. + // If the address is IPv4 we don't check for a network limit, since its address space isn't big as IPv6 /64. return false; } auto const counted_connections = socket_functions::count_subnetwork_connections ( connections_per_address, - nano::transport::mapped_from_v4_or_v6 (new_connection->remote.address ()), + new_connection->remote.address ().to_v6 (), node.network_params.network.ipv6_subnetwork_prefix_for_limiting); return counted_connections >= node.network_params.network.max_peers_per_subnetwork; } diff --git a/nano/node/transport/transport.cpp b/nano/node/transport/transport.cpp index 79998ec594..d4f09b6674 100644 --- a/nano/node/transport/transport.cpp +++ b/nano/node/transport/transport.cpp @@ -172,6 +172,11 @@ boost::asio::ip::address_v6 nano::transport::mapped_from_v4_or_v6 (boost::asio:: return address_a.is_v4 () ? boost::asio::ip::address_v6::v4_mapped (address_a.to_v4 ()) : address_a.to_v6 (); } +bool nano::transport::is_ipv4_or_v4_mapped_address (boost::asio::ip::address const & address_a) +{ + return address_a.is_v4 () || address_a.to_v6 ().is_v4_mapped (); +} + bool nano::transport::reserved_address (nano::endpoint const & endpoint_a, bool allow_local_peers) { debug_assert (endpoint_a.address ().is_v6 ()); diff --git a/nano/node/transport/transport.hpp b/nano/node/transport/transport.hpp index 66af0baa48..d9031ee360 100644 --- a/nano/node/transport/transport.hpp +++ b/nano/node/transport/transport.hpp @@ -32,6 +32,8 @@ namespace transport boost::asio::ip::address ipv4_address_or_ipv6_subnet (boost::asio::ip::address const &); boost::asio::ip::address_v6 mapped_from_v4_bytes (unsigned long); boost::asio::ip::address_v6 mapped_from_v4_or_v6 (boost::asio::ip::address const &); + bool is_ipv4_or_v4_mapped_address (boost::asio::ip::address const &); + // Unassigned, reserved, self bool reserved_address (nano::endpoint const &, bool = false); static std::chrono::seconds constexpr syn_cookie_cutoff = std::chrono::seconds (5); From ca6d306959ec8ae6fb4f308e7036c8f97c769723 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Tue, 23 Nov 2021 13:10:15 +0000 Subject: [PATCH 319/346] The thread running nano::wallets::do_wallet_actions may need to obtain a shared_ptr to the node. This is not available until after the constructor completes, causing a race condition on startup which can lead to a crash. (#3568) This adds nano::wallets::start() which does a deferred start from nano::node::start (). --- nano/node/node.cpp | 1 + nano/node/wallet.cpp | 14 +++++++++----- nano/node/wallet.hpp | 1 + 3 files changed, 11 insertions(+), 5 deletions(-) diff --git a/nano/node/node.cpp b/nano/node/node.cpp index 0cec7a7c9b..5ce53efe7f 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -641,6 +641,7 @@ void nano::node::start () { port_mapping.start (); } + wallets.start (); if (config.frontiers_confirmation != nano::frontiers_confirmation_mode::disabled) { workers.push_task ([this_l = shared ()] () { diff --git a/nano/node/wallet.cpp b/nano/node/wallet.cpp index dd89b800fe..59f669d8f4 100644 --- a/nano/node/wallet.cpp +++ b/nano/node/wallet.cpp @@ -1339,11 +1339,7 @@ nano::wallets::wallets (bool error_a, nano::node & node_a) : kdf{ node_a.config.network_params.kdf_work }, node (node_a), env (boost::polymorphic_downcast (node_a.wallets_store_impl.get ())->environment), - stopped (false), - thread ([this] () { - nano::thread_role::set (nano::thread_role::name::wallet_actions); - do_wallet_actions (); - }) + stopped (false) { nano::unique_lock lock (mutex); if (!error_a) @@ -1606,6 +1602,14 @@ void nano::wallets::stop () } } +void nano::wallets::start () +{ + thread = std::thread{ [this] () { + nano::thread_role::set (nano::thread_role::name::wallet_actions); + do_wallet_actions (); + } }; +} + nano::write_transaction nano::wallets::tx_begin_write () { return env.tx_begin_write (); diff --git a/nano/node/wallet.hpp b/nano/node/wallet.hpp index 16efc87dce..0731bc0e4a 100644 --- a/nano/node/wallet.hpp +++ b/nano/node/wallet.hpp @@ -206,6 +206,7 @@ class wallets final void queue_wallet_action (nano::uint128_t const &, std::shared_ptr const &, std::function); void foreach_representative (std::function const &); bool exists (nano::transaction const &, nano::account const &); + void start (); void stop (); void clear_send_ids (nano::transaction const &); nano::wallet_representatives reps () const; From 403760544799fb57ce46680bc618a99c5b6891ad Mon Sep 17 00:00:00 2001 From: clemahieu Date: Tue, 23 Nov 2021 17:38:23 +0000 Subject: [PATCH 320/346] This is a change to release the election scheduler lock while doing active_transactions operations. This ensures the election scheduler is always available to producers while the queue is being consumed. (#3569) --- nano/node/election_scheduler.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/nano/node/election_scheduler.cpp b/nano/node/election_scheduler.cpp index d9d07f7708..4045cfb87d 100644 --- a/nano/node/election_scheduler.cpp +++ b/nano/node/election_scheduler.cpp @@ -116,18 +116,22 @@ void nano::election_scheduler::run () { if (overfill_predicate ()) { + lock.unlock (); node.active.erase_oldest (); } else if (manual_queue_predicate ()) { auto const [block, previous_balance, election_behavior, confirmation_action] = manual_queue.front (); + manual_queue.pop_front (); + lock.unlock (); nano::unique_lock lock2 (node.active.mutex); node.active.insert_impl (lock2, block, previous_balance, election_behavior, confirmation_action); - manual_queue.pop_front (); } else if (priority_queue_predicate ()) { auto block = priority.top (); + priority.pop (); + lock.unlock (); std::shared_ptr election; nano::unique_lock lock2 (node.active.mutex); election = node.active.insert_impl (lock2, block).election; @@ -135,9 +139,9 @@ void nano::election_scheduler::run () { election->transition_active (); } - priority.pop (); } notify (); + lock.lock (); } } } From 9d4e4d00477279cb175da92af361b319ab05d338 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Tue, 23 Nov 2021 17:38:23 +0000 Subject: [PATCH 321/346] This is a change to release the election scheduler lock while doing active_transactions operations. This ensures the election scheduler is always available to producers while the queue is being consumed. (#3569) --- nano/node/election_scheduler.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/nano/node/election_scheduler.cpp b/nano/node/election_scheduler.cpp index d9d07f7708..4045cfb87d 100644 --- a/nano/node/election_scheduler.cpp +++ b/nano/node/election_scheduler.cpp @@ -116,18 +116,22 @@ void nano::election_scheduler::run () { if (overfill_predicate ()) { + lock.unlock (); node.active.erase_oldest (); } else if (manual_queue_predicate ()) { auto const [block, previous_balance, election_behavior, confirmation_action] = manual_queue.front (); + manual_queue.pop_front (); + lock.unlock (); nano::unique_lock lock2 (node.active.mutex); node.active.insert_impl (lock2, block, previous_balance, election_behavior, confirmation_action); - manual_queue.pop_front (); } else if (priority_queue_predicate ()) { auto block = priority.top (); + priority.pop (); + lock.unlock (); std::shared_ptr election; nano::unique_lock lock2 (node.active.mutex); election = node.active.insert_impl (lock2, block).election; @@ -135,9 +139,9 @@ void nano::election_scheduler::run () { election->transition_active (); } - priority.pop (); } notify (); + lock.lock (); } } } From 5db06d4f0de43243a62f287ec28cf56b48c8800b Mon Sep 17 00:00:00 2001 From: clemahieu Date: Tue, 23 Nov 2021 20:45:36 +0000 Subject: [PATCH 322/346] Revert "This is a change to release the election scheduler lock while doing active_transactions operations. This ensures the election scheduler is always available to producers while the queue is being consumed. (#3569)" This reverts commit 9d4e4d00477279cb175da92af361b319ab05d338. --- nano/node/election_scheduler.cpp | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/nano/node/election_scheduler.cpp b/nano/node/election_scheduler.cpp index 4045cfb87d..d9d07f7708 100644 --- a/nano/node/election_scheduler.cpp +++ b/nano/node/election_scheduler.cpp @@ -116,22 +116,18 @@ void nano::election_scheduler::run () { if (overfill_predicate ()) { - lock.unlock (); node.active.erase_oldest (); } else if (manual_queue_predicate ()) { auto const [block, previous_balance, election_behavior, confirmation_action] = manual_queue.front (); - manual_queue.pop_front (); - lock.unlock (); nano::unique_lock lock2 (node.active.mutex); node.active.insert_impl (lock2, block, previous_balance, election_behavior, confirmation_action); + manual_queue.pop_front (); } else if (priority_queue_predicate ()) { auto block = priority.top (); - priority.pop (); - lock.unlock (); std::shared_ptr election; nano::unique_lock lock2 (node.active.mutex); election = node.active.insert_impl (lock2, block).election; @@ -139,9 +135,9 @@ void nano::election_scheduler::run () { election->transition_active (); } + priority.pop (); } notify (); - lock.lock (); } } } From eecd3dce7b5af22997bb6ae5dd4d96241743047e Mon Sep 17 00:00:00 2001 From: clemahieu Date: Wed, 24 Nov 2021 16:12:36 +0000 Subject: [PATCH 323/346] Updating develop branch to v24 version number. (#3571) --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 60d2407b38..ba11c8480c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -46,7 +46,7 @@ if(MSVC) add_definitions(/MP) endif() -set(CPACK_PACKAGE_VERSION_MAJOR "23") +set(CPACK_PACKAGE_VERSION_MAJOR "24") set(CPACK_PACKAGE_VERSION_MINOR "0") set(CPACK_PACKAGE_VERSION_PATCH "0") set(CPACK_PACKAGE_VERSION_PRE_RELEASE "99") From 7eddc04522ba9bde22de351928f3f0a1afd195fd Mon Sep 17 00:00:00 2001 From: clemahieu Date: Wed, 1 Dec 2021 11:54:17 +0000 Subject: [PATCH 324/346] Unlocking lock in all branch cases otherwise lock.lock () can double-lock. (#3572) --- nano/node/election_scheduler.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/nano/node/election_scheduler.cpp b/nano/node/election_scheduler.cpp index 4045cfb87d..cd57368de3 100644 --- a/nano/node/election_scheduler.cpp +++ b/nano/node/election_scheduler.cpp @@ -140,6 +140,10 @@ void nano::election_scheduler::run () election->transition_active (); } } + else + { + lock.unlock (); + } notify (); lock.lock (); } From 60596e08b21e37a646de9df1db1e48845f239c4c Mon Sep 17 00:00:00 2001 From: coranos Date: Wed, 1 Dec 2021 18:21:43 -0600 Subject: [PATCH 325/346] adding git attributes file --- .gitattributes | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000000..d4b214f1ba --- /dev/null +++ b/.gitattributes @@ -0,0 +1,4 @@ +### from this link: +# https://git-scm.com/book/en/v2/Customizing-Git-Git-Attributes +rep_weights_beta.bin merge=ours +rep_weights_live.bin merge=ours From 411d3e35cce723cffac062f502beae6c7fc7c85e Mon Sep 17 00:00:00 2001 From: coranos Date: Wed, 1 Dec 2021 18:35:17 -0600 Subject: [PATCH 326/346] removing git attributes as it didn't help with the complex merge. --- .gitattributes | 4 ---- 1 file changed, 4 deletions(-) delete mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index d4b214f1ba..0000000000 --- a/.gitattributes +++ /dev/null @@ -1,4 +0,0 @@ -### from this link: -# https://git-scm.com/book/en/v2/Customizing-Git-Git-Attributes -rep_weights_beta.bin merge=ours -rep_weights_live.bin merge=ours From 59639b348f378c238467139eb02aa0b8833323cf Mon Sep 17 00:00:00 2001 From: renesq <35303112+renesq@users.noreply.github.com> Date: Sun, 5 Dec 2021 11:24:53 +0100 Subject: [PATCH 327/346] Set version number to 23.0 --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 56963aa556..63aded50fc 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -46,7 +46,7 @@ if(MSVC) add_definitions(/MP) endif() -set(CPACK_PACKAGE_VERSION_MAJOR "24") +set(CPACK_PACKAGE_VERSION_MAJOR "23") set(CPACK_PACKAGE_VERSION_MINOR "0") set(CPACK_PACKAGE_VERSION_PATCH "0") set(CPACK_PACKAGE_VERSION_PRE_RELEASE "99") From ac2dad603f34b302be4a5e1d37c24d59b4095299 Mon Sep 17 00:00:00 2001 From: renesq Date: Mon, 6 Dec 2021 15:09:37 +0100 Subject: [PATCH 328/346] Add decimal outputs --- nano/lib/CMakeLists.txt | 2 + nano/lib/blocks.cpp | 3 + nano/lib/convert.cpp | 34 ++++++++ nano/lib/convert.hpp | 3 + nano/node/json_handler.cpp | 166 ++++++++++++++++++++++++++++++++++++- nano/node/json_handler.hpp | 3 + nano/node/node.cpp | 3 +- nano/node/websocket.cpp | 4 + 8 files changed, 215 insertions(+), 3 deletions(-) create mode 100644 nano/lib/convert.cpp create mode 100644 nano/lib/convert.hpp diff --git a/nano/lib/CMakeLists.txt b/nano/lib/CMakeLists.txt index 9f16c6f3a2..59fb80faf6 100644 --- a/nano/lib/CMakeLists.txt +++ b/nano/lib/CMakeLists.txt @@ -30,6 +30,8 @@ add_library( config.hpp config.cpp configbase.hpp + convert.cpp + convert.hpp diagnosticsconfig.hpp diagnosticsconfig.cpp epoch.hpp diff --git a/nano/lib/blocks.cpp b/nano/lib/blocks.cpp index 28996148a0..8f15ad9a4f 100644 --- a/nano/lib/blocks.cpp +++ b/nano/lib/blocks.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include #include @@ -317,6 +318,7 @@ void nano::send_block::serialize_json (boost::property_tree::ptree & tree) const std::string balance; hashables.balance.encode_hex (balance); tree.put ("balance", balance); + tree.put ("balance_decimal", convert_raw_to_dec (hashables.balance.to_string_dec ())); std::string signature_l; signature.encode_hex (signature_l); tree.put ("work", nano::to_string_hex (work)); @@ -1197,6 +1199,7 @@ void nano::state_block::serialize_json (boost::property_tree::ptree & tree) cons tree.put ("previous", hashables.previous.to_string ()); tree.put ("representative", representative ().to_account ()); tree.put ("balance", hashables.balance.to_string_dec ()); + tree.put ("balance_decimal", convert_raw_to_dec (hashables.balance.to_string_dec ())); tree.put ("link", hashables.link.to_string ()); tree.put ("link_as_account", hashables.link.to_account ()); std::string signature_l; diff --git a/nano/lib/convert.cpp b/nano/lib/convert.cpp new file mode 100644 index 0000000000..a2d2c71192 --- /dev/null +++ b/nano/lib/convert.cpp @@ -0,0 +1,34 @@ +#include + +std::string convert_raw_to_dec(std::string amount_raw, nano::uint128_t ratio) +{ + std::string amount_in_dec = amount_raw; //initialize variable + int amount_length = amount_raw.length (); //count digits of input + int divider_length = ratio.convert_to ().length (); //count digits of ratio divider + + if (divider_length > amount_length) // if amount is less than 1 whole unit of the desired output + { + int rest = divider_length - amount_length; // calculate the number of zeros we need after the decimal separator + for (int i = 1; i < rest; i++) + { + amount_in_dec = "0" + amount_in_dec; // add another trailing zero after decimal separator + } + amount_in_dec = "0." + amount_in_dec; // add the leading zero + } + else // if amount is at least one whole unit of the desired output + { + amount_in_dec.insert(amount_in_dec.end() - (divider_length - 1), '.'); // add a dot according to the desired divider + } + + int unnecessarytrailingzeroscounter = 0; + while(amount_in_dec[amount_in_dec.length () - 1 - unnecessarytrailingzeroscounter] == '0') { + unnecessarytrailingzeroscounter++; // count trailing zeros + } + // if there's no trailing decimals at all because we solely have a whole unit, then lower the counter to keep one 0 after the dot + if (unnecessarytrailingzeroscounter == (divider_length - 1)) { + unnecessarytrailingzeroscounter--; + } + + amount_in_dec.erase(amount_in_dec.length () - unnecessarytrailingzeroscounter, amount_in_dec.length ()); // remove unnecessary trailing zeros. first parameter is the pos after which the cutoff begins, second parameter is supposed to be the number of characters to be truncated but if it's chosen too high it will just stop at the end + return amount_in_dec; +} \ No newline at end of file diff --git a/nano/lib/convert.hpp b/nano/lib/convert.hpp new file mode 100644 index 0000000000..c1e9f4a191 --- /dev/null +++ b/nano/lib/convert.hpp @@ -0,0 +1,3 @@ +#include + +std::string convert_raw_to_dec(std::string amount_raw, nano::uint128_t ratio = nano::BAN_ratio); // using 10^29 by default if not specifically set to other ratio \ No newline at end of file diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index a7b24c7d67..2d56091b42 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -1,6 +1,7 @@ #include #include #include +#include #include #include #include @@ -130,6 +131,18 @@ void nano::json_handler::process_request (bool unsafe_a) { raw_to_nano (); } + else if (action == "raw_to_dec") + { + raw_to_dec (); + } + else if (action == "representatives_decimal") + { + representatives_decimal (); + } + else if (action == "delegators_decimal") + { + delegators_decimal (); + } else if (action == "password_valid") { password_valid (); @@ -526,8 +539,11 @@ void nano::json_handler::account_balance () bool const include_only_confirmed = request.get ("include_only_confirmed", true); auto balance (node.balance_pending (account, include_only_confirmed)); response_l.put ("balance", balance.first.convert_to ()); + response_l.put ("balance_decimal", convert_raw_to_dec (balance.first.convert_to ())); response_l.put ("pending", balance.second.convert_to ()); + response_l.put ("pending_decimal", convert_raw_to_dec (balance.second.convert_to ())); response_l.put ("receivable", balance.second.convert_to ()); + response_l.put ("receivable_decimal", convert_raw_to_dec (balance.second.convert_to ())); } response_errors (); } @@ -627,6 +643,7 @@ void nano::json_handler::account_info () balance_l.encode_dec (balance); response_l.put ("balance", balance); + response_l.put ("balance_decimal", convert_raw_to_dec (balance)); nano::amount confirmed_balance_l; if (include_confirmed) @@ -643,6 +660,7 @@ void nano::json_handler::account_info () std::string confirmed_balance; confirmed_balance_l.encode_dec (confirmed_balance); response_l.put ("confirmed_balance", confirmed_balance); + response_l.put ("confirmed_balance", convert_raw_to_dec (confirmed_balance)); } response_l.put ("modified_timestamp", std::to_string (info.modified)); @@ -689,17 +707,22 @@ void nano::json_handler::account_info () { auto account_weight (node.ledger.weight (account)); response_l.put ("weight", account_weight.convert_to ()); + response_l.put ("weight_decimal", convert_raw_to_dec (account_weight.convert_to ())); + response_l.put ("weight_decimal_millions", convert_raw_to_dec (account_weight.convert_to (), nano::MBAN_ratio)); } if (pending) { auto account_pending (node.ledger.account_pending (transaction, account)); response_l.put ("pending", account_pending.convert_to ()); + response_l.put ("pending_decimal", convert_raw_to_dec (account_pending.convert_to ())); response_l.put ("receivable", account_pending.convert_to ()); + response_l.put ("receivable_decimal", convert_raw_to_dec (account_pending.convert_to ())); if (include_confirmed) { auto account_pending (node.ledger.account_pending (transaction, account, true)); response_l.put ("confirmed_pending", account_pending.convert_to ()); + response_l.put ("confirmed_pending_decimal", convert_raw_to_dec (account_pending.convert_to ())); } } } @@ -882,6 +905,7 @@ void nano::json_handler::account_weight () { auto balance (node.weight (account)); response_l.put ("weight", balance.convert_to ()); + response_l.put ("weight_decimal", convert_raw_to_dec (balance.convert_to ())); } response_errors (); } @@ -897,8 +921,11 @@ void nano::json_handler::accounts_balances () boost::property_tree::ptree entry; auto balance (node.balance_pending (account, false)); entry.put ("balance", balance.first.convert_to ()); + entry.put ("balance_decimal", convert_raw_to_dec (balance.first.convert_to ())); entry.put ("pending", balance.second.convert_to ()); + entry.put ("balance_decimal", convert_raw_to_dec (balance.first.convert_to ())); entry.put ("receivable", balance.second.convert_to ()); + entry.put ("receivable_decimal", convert_raw_to_dec (balance.first.convert_to ())); balances.push_back (std::make_pair (account.to_account (), entry)); } } @@ -1008,6 +1035,7 @@ void nano::json_handler::accounts_pending () { boost::property_tree::ptree pending_tree; pending_tree.put ("amount", info.amount.number ().convert_to ()); + pending_tree.put ("amount_decimal", convert_raw_to_dec (info.amount.number ().convert_to ())); pending_tree.put ("source", info.source.to_account ()); peers_l.add_child (key.hash.to_string (), pending_tree); } @@ -1098,9 +1126,11 @@ void nano::json_handler::block_info () if (!error_or_pruned) { response_l.put ("amount", amount.convert_to ()); + response_l.put ("amount_decimal", convert_raw_to_dec (amount.convert_to ())); } auto balance (node.ledger.balance (transaction, hash)); response_l.put ("balance", balance.convert_to ()); + response_l.put ("balance_decimal", convert_raw_to_dec (balance.convert_to ())); response_l.put ("height", std::to_string (block->sideband ().height)); response_l.put ("local_timestamp", std::to_string (block->sideband ().timestamp)); response_l.put ("successor", block->sideband ().successor.to_string ()); @@ -1256,9 +1286,11 @@ void nano::json_handler::blocks_info () if (!error_or_pruned) { entry.put ("amount", amount.convert_to ()); + entry.put ("amount_decimal", convert_raw_to_dec (amount.convert_to ())); } auto balance (node.ledger.balance (transaction, hash)); entry.put ("balance", balance.convert_to ()); + entry.put ("balance_decimal", convert_raw_to_dec (balance.convert_to ())); entry.put ("height", std::to_string (block->sideband ().height)); entry.put ("local_timestamp", std::to_string (block->sideband ().timestamp)); entry.put ("successor", block->sideband ().successor.to_string ()); @@ -1949,6 +1981,7 @@ void nano::json_handler::confirmation_history () election.put ("duration", status.election_duration.count ()); election.put ("time", status.election_end.count ()); election.put ("tally", status.tally.to_string_dec ()); + election.put ("tally_decimal", convert_raw_to_dec (status.tally.to_string_dec ())); election.add ("final", status.final_tally.to_string_dec ()); election.put ("blocks", std::to_string (status.block_count)); election.put ("voters", std::to_string (status.voter_count)); @@ -1990,6 +2023,7 @@ void nano::json_handler::confirmation_info () { boost::property_tree::ptree entry; entry.put ("tally", tally.convert_to ()); + entry.put ("tally_decimal", convert_raw_to_dec (tally.convert_to ())); total += tally; if (contents) { @@ -2027,7 +2061,9 @@ void nano::json_handler::confirmation_info () blocks.add_child ((block->hash ()).to_string (), entry); } response_l.put ("total_tally", total.convert_to ()); + response_l.put ("total_tally_decimal", convert_raw_to_dec (total.convert_to ())); response_l.put ("final_tally", info.status.final_tally.to_string_dec ()); + //response_l.put ("final_tally_decimal", info.status.final_tally.to_string_dec ()); response_l.add_child ("blocks", blocks); } else @@ -2045,11 +2081,16 @@ void nano::json_handler::confirmation_info () void nano::json_handler::confirmation_quorum () { response_l.put ("quorum_delta", node.online_reps.delta ().convert_to ()); + response_l.put ("quorum_delta_decimal", convert_raw_to_dec (node.online_reps.delta ().convert_to ())); response_l.put ("online_weight_quorum_percent", std::to_string (node.online_reps.online_weight_quorum)); response_l.put ("online_weight_minimum", node.config.online_weight_minimum.to_string_dec ()); + response_l.put ("online_weight_minimum_decimal", convert_raw_to_dec (node.config.online_weight_minimum.to_string_dec ())); response_l.put ("online_stake_total", node.online_reps.online ().convert_to ()); + response_l.put ("online_stake_total_decimal", convert_raw_to_dec (node.online_reps.online ().convert_to ())); response_l.put ("trended_stake_total", node.online_reps.trended ().convert_to ()); + response_l.put ("trended_stake_total_decimal", convert_raw_to_dec (node.online_reps.trended ().convert_to ())); response_l.put ("peers_stake_total", node.rep_crawler.total_weight ().convert_to ()); + response_l.put ("peers_stake_total_decimal", convert_raw_to_dec (node.rep_crawler.total_weight ().convert_to ())); if (request.get ("peer_details", false)) { boost::property_tree::ptree peers; @@ -2059,6 +2100,7 @@ void nano::json_handler::confirmation_quorum () peer_node.put ("account", peer.account.to_account ()); peer_node.put ("ip", peer.channel->to_string ()); peer_node.put ("weight", peer.weight.to_string_dec ()); + peer_node.put ("weight_decimal", convert_raw_to_dec (peer.weight.to_string_dec ())); peers.push_back (std::make_pair ("", peer_node)); } response_l.add_child ("peers", peers); @@ -2147,6 +2189,42 @@ void nano::json_handler::delegators () response_errors (); } +void nano::json_handler::delegators_decimal () +{ + auto representative (account_impl ()); + auto count (count_optional_impl (1024)); + auto threshold (threshold_optional_impl ()); + auto start_account_text (request.get_optional ("start")); + + nano::account start_account{}; + if (!ec && start_account_text.is_initialized ()) + { + start_account = account_impl (start_account_text.get ()); + } + + if (!ec) + { + auto transaction (node.store.tx_begin_read ()); + boost::property_tree::ptree delegators; + for (auto i (node.store.account.begin (transaction, start_account.number () + 1)), n (node.store.account.end ()); i != n && delegators.size () < count; ++i) + { + nano::account_info const & info (i->second); + if (info.representative == representative) + { + if (info.balance.number () >= threshold.number ()) + { + std::string balance; + nano::uint128_union (info.balance).encode_dec (balance); + nano::account const & delegator (i->first); + delegators.put (delegator.to_account (), convert_raw_to_dec (balance)); + } + } + } + response_l.add_child ("delegators", delegators); + } + response_errors (); +} + void nano::json_handler::delegators_count () { auto account (account_impl ()); @@ -2310,11 +2388,13 @@ class history_visitor : public nano::block_visitor if (!error_or_pruned) { tree.put ("amount", amount); + tree.put ("amount_decimal", convert_raw_to_dec (amount)); } if (raw) { tree.put ("destination", account); tree.put ("balance", block_a.hashables.balance.to_string_dec ()); + tree.put ("balance_decimal", convert_raw_to_dec (block_a.hashables.balance.to_string_dec ())); tree.put ("previous", block_a.hashables.previous.to_string ()); } } @@ -2331,6 +2411,7 @@ class history_visitor : public nano::block_visitor tree.put ("account", source_account.to_account ()); } tree.put ("amount", amount); + tree.put ("amount_decimal", convert_raw_to_dec (amount)); } if (raw) { @@ -2364,12 +2445,14 @@ class history_visitor : public nano::block_visitor tree.put ("account", source_account.to_account ()); } tree.put ("amount", amount); + tree.put ("amount_decimal", convert_raw_to_dec (amount)); } } else { tree.put ("account", handler.node.ledger.constants.genesis->account ().to_account ()); tree.put ("amount", nano::dev::constants.genesis_amount.convert_to ()); + tree.put ("amount_decimal", convert_raw_to_dec (nano::dev::constants.genesis_amount.convert_to ())); } } void change_block (nano::change_block const & block_a) @@ -2389,6 +2472,7 @@ class history_visitor : public nano::block_visitor tree.put ("representative", block_a.hashables.representative.to_account ()); tree.put ("link", block_a.hashables.link.to_string ()); tree.put ("balance", block_a.hashables.balance.to_string_dec ()); + tree.put ("balance_decimal", convert_raw_to_dec (block_a.hashables.balance.to_string_dec ())); tree.put ("previous", block_a.hashables.previous.to_string ()); } auto balance (block_a.hashables.balance.number ()); @@ -2422,6 +2506,7 @@ class history_visitor : public nano::block_visitor } tree.put ("account", block_a.hashables.link.to_account ()); tree.put ("amount", (previous_balance - balance).convert_to ()); + tree.put ("amount_decimal", convert_raw_to_dec ((previous_balance - balance).convert_to ())); } else { @@ -2461,6 +2546,7 @@ class history_visitor : public nano::block_visitor tree.put ("account", source_account.to_account ()); } tree.put ("amount", (balance - previous_balance).convert_to ()); + tree.put ("amount_decimal", convert_raw_to_dec ((balance - previous_balance).convert_to ())); } } } @@ -2683,7 +2769,9 @@ void nano::json_handler::ledger () continue; } response_a.put ("pending", account_pending.convert_to ()); + response_a.put ("pending_decimal", convert_raw_to_dec (account_pending.convert_to ())); response_a.put ("receivable", account_pending.convert_to ()); + response_a.put ("receivable_decimal", convert_raw_to_dec (account_pending.convert_to ())); } response_a.put ("frontier", info.head.to_string ()); response_a.put ("open_block", info.open_block.to_string ()); @@ -2691,6 +2779,7 @@ void nano::json_handler::ledger () std::string balance; nano::uint128_union (info.balance).encode_dec (balance); response_a.put ("balance", balance); + response_a.put ("balance_decimal", convert_raw_to_dec (balance)); response_a.put ("modified_timestamp", std::to_string (info.modified)); response_a.put ("block_count", std::to_string (info.block_count)); if (representative) @@ -2701,6 +2790,7 @@ void nano::json_handler::ledger () { auto account_weight (node.ledger.weight (account)); response_a.put ("weight", account_weight.convert_to ()); + response_a.put ("weight_decimal", convert_raw_to_dec (account_weight.convert_to ())); } accounts.push_back (std::make_pair (account.to_account (), response_a)); } @@ -2736,7 +2826,9 @@ void nano::json_handler::ledger () continue; } response_a.put ("pending", account_pending.convert_to ()); + response_a.put ("pending_decimal", convert_raw_to_dec (account_pending.convert_to ())); response_a.put ("receivable", account_pending.convert_to ()); + response_a.put ("receivable_decimal", convert_raw_to_dec (account_pending.convert_to ())); } response_a.put ("frontier", info.head.to_string ()); response_a.put ("open_block", info.open_block.to_string ()); @@ -2744,6 +2836,7 @@ void nano::json_handler::ledger () std::string balance; (i->first).encode_dec (balance); response_a.put ("balance", balance); + response_a.put ("balance_decimal", convert_raw_to_dec (balance)); response_a.put ("modified_timestamp", std::to_string (info.modified)); response_a.put ("block_count", std::to_string (info.block_count)); if (representative) @@ -2754,6 +2847,7 @@ void nano::json_handler::ledger () { auto account_weight (node.ledger.weight (account)); response_a.put ("weight", account_weight.convert_to ()); + response_a.put ("weight_decimal", convert_raw_to_dec (account_weight.convert_to ())); } accounts.push_back (std::make_pair (account.to_account (), response_a)); } @@ -2800,7 +2894,7 @@ void nano::json_handler::nano_to_raw () auto amount (amount_impl ()); if (!ec) { - auto result (amount.number () * nano::BAN_ratio); + auto result (amount.number () * nano::MBAN_ratio); if (result > amount.number ()) { response_l.put ("amount", result.convert_to ()); @@ -2813,12 +2907,21 @@ void nano::json_handler::nano_to_raw () response_errors (); } +void nano::json_handler::raw_to_dec () { + auto amount (amount_impl ()); + if (!ec) + { + response_l.put ("amount_decimal", convert_raw_to_dec (amount.number ().convert_to ())); + } + response_errors (); +} + void nano::json_handler::raw_to_nano () { auto amount (amount_impl ()); if (!ec) { - auto result (amount.number () / nano::BAN_ratio); + auto result (amount.number () / nano::MBAN_ratio); response_l.put ("amount", result.convert_to ()); } response_errors (); @@ -2982,6 +3085,7 @@ void nano::json_handler::pending () { boost::property_tree::ptree pending_tree; pending_tree.put ("amount", info.amount.number ().convert_to ()); + pending_tree.put ("amount_decimal", convert_raw_to_dec (info.amount.number ().convert_to())); if (source) { pending_tree.put ("source", info.source.to_account ()); @@ -3430,6 +3534,51 @@ void nano::json_handler::representatives () response_errors (); } +void nano::json_handler::representatives_decimal_millions () +{ + auto count (count_optional_impl ()); + if (!ec) + { + bool const sorting = request.get ("sorting", false); + boost::property_tree::ptree representatives; + auto rep_amounts = node.ledger.cache.rep_weights.get_rep_amounts (); + if (!sorting) // Simple + { + std::map ordered (rep_amounts.begin (), rep_amounts.end ()); + for (auto & rep_amount : rep_amounts) + { + auto const & account (rep_amount.first); + auto const & amount (rep_amount.second); + representatives.put (account.to_account (), convert_raw_to_dec (amount.convert_to ())); + + if (representatives.size () > count) + { + break; + } + } + } + else // Sorting + { + std::vector> representation; + + for (auto & rep_amount : rep_amounts) + { + auto const & account (rep_amount.first); + auto const & amount (rep_amount.second); + representation.emplace_back (amount, account.to_account ()); + } + std::sort (representation.begin (), representation.end ()); + std::reverse (representation.begin (), representation.end ()); + for (auto i (representation.begin ()), n (representation.end ()); i != n && representatives.size () < count; ++i) + { + representatives.put (i->second, (i->first).convert_to ()); + } + } + response_l.add_child ("representatives", representatives); + } + response_errors (); +} + void nano::json_handler::representatives_online () { auto const accounts_node = request.get_child_optional ("accounts"); @@ -3477,6 +3626,7 @@ void nano::json_handler::representatives_online () boost::property_tree::ptree weight_node; auto account_weight (node.ledger.weight (i)); weight_node.put ("weight", account_weight.convert_to ()); + weight_node.put ("weight_decimal", convert_raw_to_dec (account_weight.convert_to ())); representatives.add_child (i.to_account (), weight_node); } else @@ -4339,8 +4489,11 @@ void nano::json_handler::wallet_info () uint32_t deterministic_index (wallet->store.deterministic_index_get (transaction)); response_l.put ("balance", balance.convert_to ()); + response_l.put ("balance_decimal", convert_raw_to_dec (balance.convert_to ())); response_l.put ("pending", pending.convert_to ()); + response_l.put ("pending_decimal", convert_raw_to_dec (pending.convert_to ())); response_l.put ("receivable", pending.convert_to ()); + response_l.put ("receivable_decimal", convert_raw_to_dec (pending.convert_to ())); response_l.put ("accounts_count", std::to_string (count)); response_l.put ("accounts_block_count", std::to_string (block_count)); response_l.put ("accounts_cemented_block_count", std::to_string (cemented_block_count)); @@ -4370,8 +4523,11 @@ void nano::json_handler::wallet_balances () boost::property_tree::ptree entry; nano::uint128_t pending = node.ledger.account_pending (block_transaction, account); entry.put ("balance", balance.convert_to ()); + entry.put ("balance_decimal", convert_raw_to_dec (balance.convert_to ())); entry.put ("pending", pending.convert_to ()); + entry.put ("pending_decimal", convert_raw_to_dec (pending.convert_to ())); entry.put ("receivable", pending.convert_to ()); + entry.put ("receivable_decimal", convert_raw_to_dec (pending.convert_to ())); balances.push_back (std::make_pair (account.to_account (), entry)); } } @@ -4631,6 +4787,7 @@ void nano::json_handler::wallet_ledger () std::string balance; nano::uint128_union (info.balance).encode_dec (balance); entry.put ("balance", balance); + entry.put ("balance_decimal", convert_raw_to_dec (balance)); entry.put ("modified_timestamp", std::to_string (info.modified)); entry.put ("block_count", std::to_string (info.block_count)); if (representative) @@ -4641,12 +4798,15 @@ void nano::json_handler::wallet_ledger () { auto account_weight (node.ledger.weight (account)); entry.put ("weight", account_weight.convert_to ()); + entry.put ("weight_decimal", convert_raw_to_dec (account_weight.convert_to ())); } if (pending) { auto account_pending (node.ledger.account_pending (block_transaction, account)); entry.put ("pending", account_pending.convert_to ()); + entry.put ("pending_decimal", convert_raw_to_dec (account_pending.convert_to ())); entry.put ("receivable", account_pending.convert_to ()); + entry.put ("receivable_decimal", convert_raw_to_dec (account_pending.convert_to ())); } accounts.push_back (std::make_pair (account.to_account (), entry)); } @@ -4709,6 +4869,7 @@ void nano::json_handler::wallet_pending () { boost::property_tree::ptree pending_tree; pending_tree.put ("amount", info.amount.number ().convert_to ()); + pending_tree.put ("amount_decimal", convert_raw_to_dec (info.amount.number ().convert_to ())); if (source) { pending_tree.put ("source", info.source.to_account ()); @@ -5234,6 +5395,7 @@ ipc_json_handler_no_arg_func_map create_ipc_json_handler_no_arg_func_map () no_arg_funcs.emplace ("receivable_exists", &nano::json_handler::pending_exists); no_arg_funcs.emplace ("process", &nano::json_handler::process); no_arg_funcs.emplace ("pruned_exists", &nano::json_handler::pruned_exists); + no_arg_funcs.emplace ("raw_to_dec", &nano::json_handler::raw_to_dec); no_arg_funcs.emplace ("receive", &nano::json_handler::receive); no_arg_funcs.emplace ("receive_minimum", &nano::json_handler::receive_minimum); no_arg_funcs.emplace ("receive_minimum_set", &nano::json_handler::receive_minimum_set); diff --git a/nano/node/json_handler.hpp b/nano/node/json_handler.hpp index ceae8c44c3..334734cc98 100644 --- a/nano/node/json_handler.hpp +++ b/nano/node/json_handler.hpp @@ -66,6 +66,7 @@ class json_handler : public std::enable_shared_from_this void confirmation_height_currently_processing (); void database_txn_tracker (); void delegators (); + void delegators_decimal (); void delegators_count (); void deterministic_key (); void epoch_upgrade (); @@ -88,10 +89,12 @@ class json_handler : public std::enable_shared_from_this void pending_exists (); void process (); void pruned_exists (); + void raw_to_dec (); void receive (); void receive_minimum (); void receive_minimum_set (); void representatives (); + void representatives_decimal (); void representatives_online (); void republish (); void search_pending (); diff --git a/nano/node/node.cpp b/nano/node/node.cpp index 7c9ca7e45d..74e3602196 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -1,6 +1,7 @@ #include #include #include +#include #include #include #include @@ -157,6 +158,7 @@ nano::node::node (boost::asio::io_context & io_ctx_a, boost::filesystem::path co block_a->serialize_json (block_text); event.add ("block", block_text); event.add ("amount", amount_a.to_string_dec ()); + event.add ("amount_decimal", convert_raw_to_dec (amount_a.to_string_dec ())); if (is_state_send_a) { event.add ("is_send", is_state_send_a); @@ -641,7 +643,6 @@ void nano::node::start () { port_mapping.start (); } - wallets.start (); if (config.frontiers_confirmation != nano::frontiers_confirmation_mode::disabled) { workers.push_task ([this_l = shared ()] () { diff --git a/nano/node/websocket.cpp b/nano/node/websocket.cpp index 34ec7ac6db..989ea2fdae 100644 --- a/nano/node/websocket.cpp +++ b/nano/node/websocket.cpp @@ -3,6 +3,7 @@ #include #include #include +#include #include #include #include @@ -713,6 +714,7 @@ nano::websocket::message nano::websocket::message_builder::block_confirmed (std: boost::property_tree::ptree message_node_l; message_node_l.add ("account", account_a.to_account ()); message_node_l.add ("amount", amount_a.to_string_dec ()); + message_node_l.add ("amount_decimal", convert_raw_to_dec (amount_a.to_string_dec ())); message_node_l.add ("hash", block_a->hash ().to_string ()); std::string confirmation_type = "unknown"; @@ -738,6 +740,7 @@ nano::websocket::message nano::websocket::message_builder::block_confirmed (std: election_node_l.add ("duration", election_status_a.election_duration.count ()); election_node_l.add ("time", election_status_a.election_end.count ()); election_node_l.add ("tally", election_status_a.tally.to_string_dec ()); + election_node_l.add ("tally_decimal", convert_raw_to_dec (election_status_a.tally.to_string_dec ())); election_node_l.add ("final", election_status_a.final_tally.to_string_dec ()); election_node_l.add ("blocks", std::to_string (election_status_a.block_count)); election_node_l.add ("voters", std::to_string (election_status_a.voter_count)); @@ -752,6 +755,7 @@ nano::websocket::message nano::websocket::message_builder::block_confirmed (std: entry.put ("timestamp", vote_l.timestamp); entry.put ("hash", vote_l.hash.to_string ()); entry.put ("weight", vote_l.weight.convert_to ()); + entry.put ("weight", convert_raw_to_dec (vote_l.weight.convert_to ())); election_votes_l.push_back (std::make_pair ("", entry)); } election_node_l.add_child ("votes", election_votes_l); From 14bd4c1d9d3889661a5a25738739bb4b1013ebf2 Mon Sep 17 00:00:00 2001 From: renesq Date: Mon, 6 Dec 2021 15:16:22 +0100 Subject: [PATCH 329/346] merge later nano commit --- nano/node/node.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/nano/node/node.cpp b/nano/node/node.cpp index 74e3602196..ff4545a5b1 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -643,6 +643,7 @@ void nano::node::start () { port_mapping.start (); } + wallets.start (); if (config.frontiers_confirmation != nano::frontiers_confirmation_mode::disabled) { workers.push_task ([this_l = shared ()] () { From 0f4798ef146ba4c483b0908463aff98421afc1c7 Mon Sep 17 00:00:00 2001 From: dsiganos Date: Tue, 7 Dec 2021 01:46:58 +0200 Subject: [PATCH 330/346] Remove short election expiration time for dev network (#3585) It makes it difficult/impossible to access election objects in unit tests and it increases complexity for no obvious benefit. This change could potentially fix a lot of unit test race conditions. Fixes #3584 and probably many other unit tests. --- nano/node/election.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nano/node/election.cpp b/nano/node/election.cpp index 61e8731e8b..0ec923e166 100644 --- a/nano/node/election.cpp +++ b/nano/node/election.cpp @@ -193,7 +193,7 @@ bool nano::election::transition_time (nano::confirmation_solicitor & solicitor_a debug_assert (false); break; } - auto const optimistic_expiration_time = node.network_params.network.is_dev_network () ? 500 : 60 * 1000; + auto const optimistic_expiration_time = 60 * 1000; auto const expire_time = std::chrono::milliseconds (optimistic () ? optimistic_expiration_time : 5 * 60 * 1000); if (!confirmed () && expire_time < std::chrono::steady_clock::now () - election_start) { From 7ce0d73c91c4e93e49e619f816d845fb749e2e7d Mon Sep 17 00:00:00 2001 From: coranos Date: Mon, 6 Dec 2021 19:23:34 -0500 Subject: [PATCH 331/346] Remove short election expiration time for dev network (#3585) (#33) It makes it difficult/impossible to access election objects in unit tests and it increases complexity for no obvious benefit. This change could potentially fix a lot of unit test race conditions. Fixes #3584 and probably many other unit tests. Co-authored-by: dsiganos --- nano/node/election.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nano/node/election.cpp b/nano/node/election.cpp index 61e8731e8b..0ec923e166 100644 --- a/nano/node/election.cpp +++ b/nano/node/election.cpp @@ -193,7 +193,7 @@ bool nano::election::transition_time (nano::confirmation_solicitor & solicitor_a debug_assert (false); break; } - auto const optimistic_expiration_time = node.network_params.network.is_dev_network () ? 500 : 60 * 1000; + auto const optimistic_expiration_time = 60 * 1000; auto const expire_time = std::chrono::milliseconds (optimistic () ? optimistic_expiration_time : 5 * 60 * 1000); if (!confirmed () && expire_time < std::chrono::steady_clock::now () - election_start) { From 6ebef321ffe2e81de350b579e43369c4615cd7a7 Mon Sep 17 00:00:00 2001 From: coranos Date: Tue, 7 Dec 2021 00:33:00 +0000 Subject: [PATCH 332/346] reformatting --- nano/lib/blocks.cpp | 2 +- nano/lib/convert.cpp | 12 +++++++----- nano/lib/convert.hpp | 2 +- nano/node/json_handler.cpp | 11 ++++++----- nano/node/node.cpp | 2 +- nano/node/websocket.cpp | 2 +- 6 files changed, 17 insertions(+), 14 deletions(-) diff --git a/nano/lib/blocks.cpp b/nano/lib/blocks.cpp index 8f15ad9a4f..224e07c7d0 100644 --- a/nano/lib/blocks.cpp +++ b/nano/lib/blocks.cpp @@ -1,9 +1,9 @@ #include #include +#include #include #include #include -#include #include #include diff --git a/nano/lib/convert.cpp b/nano/lib/convert.cpp index a2d2c71192..ca6030fca3 100644 --- a/nano/lib/convert.cpp +++ b/nano/lib/convert.cpp @@ -1,6 +1,6 @@ #include -std::string convert_raw_to_dec(std::string amount_raw, nano::uint128_t ratio) +std::string convert_raw_to_dec (std::string amount_raw, nano::uint128_t ratio) { std::string amount_in_dec = amount_raw; //initialize variable int amount_length = amount_raw.length (); //count digits of input @@ -17,18 +17,20 @@ std::string convert_raw_to_dec(std::string amount_raw, nano::uint128_t ratio) } else // if amount is at least one whole unit of the desired output { - amount_in_dec.insert(amount_in_dec.end() - (divider_length - 1), '.'); // add a dot according to the desired divider + amount_in_dec.insert (amount_in_dec.end () - (divider_length - 1), '.'); // add a dot according to the desired divider } int unnecessarytrailingzeroscounter = 0; - while(amount_in_dec[amount_in_dec.length () - 1 - unnecessarytrailingzeroscounter] == '0') { + while (amount_in_dec[amount_in_dec.length () - 1 - unnecessarytrailingzeroscounter] == '0') + { unnecessarytrailingzeroscounter++; // count trailing zeros } // if there's no trailing decimals at all because we solely have a whole unit, then lower the counter to keep one 0 after the dot - if (unnecessarytrailingzeroscounter == (divider_length - 1)) { + if (unnecessarytrailingzeroscounter == (divider_length - 1)) + { unnecessarytrailingzeroscounter--; } - amount_in_dec.erase(amount_in_dec.length () - unnecessarytrailingzeroscounter, amount_in_dec.length ()); // remove unnecessary trailing zeros. first parameter is the pos after which the cutoff begins, second parameter is supposed to be the number of characters to be truncated but if it's chosen too high it will just stop at the end + amount_in_dec.erase (amount_in_dec.length () - unnecessarytrailingzeroscounter, amount_in_dec.length ()); // remove unnecessary trailing zeros. first parameter is the pos after which the cutoff begins, second parameter is supposed to be the number of characters to be truncated but if it's chosen too high it will just stop at the end return amount_in_dec; } \ No newline at end of file diff --git a/nano/lib/convert.hpp b/nano/lib/convert.hpp index c1e9f4a191..a6eb76ac65 100644 --- a/nano/lib/convert.hpp +++ b/nano/lib/convert.hpp @@ -1,3 +1,3 @@ #include -std::string convert_raw_to_dec(std::string amount_raw, nano::uint128_t ratio = nano::BAN_ratio); // using 10^29 by default if not specifically set to other ratio \ No newline at end of file +std::string convert_raw_to_dec (std::string amount_raw, nano::uint128_t ratio = nano::BAN_ratio); // using 10^29 by default if not specifically set to other ratio \ No newline at end of file diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index 2d56091b42..0930c1f432 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -1,7 +1,7 @@ #include +#include #include #include -#include #include #include #include @@ -1981,7 +1981,7 @@ void nano::json_handler::confirmation_history () election.put ("duration", status.election_duration.count ()); election.put ("time", status.election_end.count ()); election.put ("tally", status.tally.to_string_dec ()); - election.put ("tally_decimal", convert_raw_to_dec (status.tally.to_string_dec ())); + election.put ("tally_decimal", convert_raw_to_dec (status.tally.to_string_dec ())); election.add ("final", status.final_tally.to_string_dec ()); election.put ("blocks", std::to_string (status.block_count)); election.put ("voters", std::to_string (status.voter_count)); @@ -2216,7 +2216,7 @@ void nano::json_handler::delegators_decimal () std::string balance; nano::uint128_union (info.balance).encode_dec (balance); nano::account const & delegator (i->first); - delegators.put (delegator.to_account (), convert_raw_to_dec (balance)); + delegators.put (delegator.to_account (), convert_raw_to_dec (balance)); } } } @@ -2907,7 +2907,8 @@ void nano::json_handler::nano_to_raw () response_errors (); } -void nano::json_handler::raw_to_dec () { +void nano::json_handler::raw_to_dec () +{ auto amount (amount_impl ()); if (!ec) { @@ -3085,7 +3086,7 @@ void nano::json_handler::pending () { boost::property_tree::ptree pending_tree; pending_tree.put ("amount", info.amount.number ().convert_to ()); - pending_tree.put ("amount_decimal", convert_raw_to_dec (info.amount.number ().convert_to())); + pending_tree.put ("amount_decimal", convert_raw_to_dec (info.amount.number ().convert_to ())); if (source) { pending_tree.put ("source", info.source.to_account ()); diff --git a/nano/node/node.cpp b/nano/node/node.cpp index ff4545a5b1..ef1305fc0b 100644 --- a/nano/node/node.cpp +++ b/nano/node/node.cpp @@ -1,7 +1,7 @@ +#include #include #include #include -#include #include #include #include diff --git a/nano/node/websocket.cpp b/nano/node/websocket.cpp index 989ea2fdae..8793da3821 100644 --- a/nano/node/websocket.cpp +++ b/nano/node/websocket.cpp @@ -1,9 +1,9 @@ #include #include #include +#include #include #include -#include #include #include #include From 10a87d0d1714f173436ea4b366d12e24ac259ea3 Mon Sep 17 00:00:00 2001 From: coranos Date: Mon, 6 Dec 2021 18:44:50 -0600 Subject: [PATCH 333/346] adding representatives_decimal_millions to hpp, was in cpp only. --- nano/node/json_handler.hpp | 1 + 1 file changed, 1 insertion(+) diff --git a/nano/node/json_handler.hpp b/nano/node/json_handler.hpp index 334734cc98..ed09e151fd 100644 --- a/nano/node/json_handler.hpp +++ b/nano/node/json_handler.hpp @@ -95,6 +95,7 @@ class json_handler : public std::enable_shared_from_this void receive_minimum_set (); void representatives (); void representatives_decimal (); + void representatives_decimal_millions (); void representatives_online (); void republish (); void search_pending (); From 3cfc72a666d0a4b6ad6feaf572cee9998f3cae27 Mon Sep 17 00:00:00 2001 From: coranos Date: Mon, 6 Dec 2021 19:09:26 -0600 Subject: [PATCH 334/346] removing representatives_decimal --- nano/node/json_handler.cpp | 4 ++-- nano/node/json_handler.hpp | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/nano/node/json_handler.cpp b/nano/node/json_handler.cpp index 0930c1f432..1be6aed9fd 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -135,9 +135,9 @@ void nano::json_handler::process_request (bool unsafe_a) { raw_to_dec (); } - else if (action == "representatives_decimal") + else if (action == "representatives_decimal_millions") { - representatives_decimal (); + representatives_decimal_millions (); } else if (action == "delegators_decimal") { diff --git a/nano/node/json_handler.hpp b/nano/node/json_handler.hpp index ed09e151fd..3c09fedf04 100644 --- a/nano/node/json_handler.hpp +++ b/nano/node/json_handler.hpp @@ -94,7 +94,6 @@ class json_handler : public std::enable_shared_from_this void receive_minimum (); void receive_minimum_set (); void representatives (); - void representatives_decimal (); void representatives_decimal_millions (); void representatives_online (); void republish (); From 1310e1a9eeb058368a6fc17c0b091b4e0c72b7bf Mon Sep 17 00:00:00 2001 From: Thiago Silva <82097354+thsfs@users.noreply.github.com> Date: Tue, 7 Dec 2021 11:46:03 -0300 Subject: [PATCH 335/346] Initializes receive and completion times to always hold a valid value (#3587) --- nano/node/socket.cpp | 12 ++++++------ nano/node/socket.hpp | 4 ++-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/nano/node/socket.cpp b/nano/node/socket.cpp index 599284b03d..d251c5fe49 100644 --- a/nano/node/socket.cpp +++ b/nano/node/socket.cpp @@ -20,8 +20,8 @@ nano::socket::socket (nano::node & node_a) : tcp_socket{ node_a.io_ctx }, node{ node_a }, next_deadline{ std::numeric_limits::max () }, - last_completion_time{ 0 }, - last_receive_time{ 0 }, + last_completion_time_or_init{ nano::seconds_since_epoch () }, + last_receive_time_or_init{ nano::seconds_since_epoch () }, io_timeout{ node_a.config.tcp_io_timeout }, silent_connection_tolerance_time{ node_a.network_params.network.silent_connection_tolerance_time } { @@ -124,12 +124,12 @@ void nano::socket::start_timer (std::chrono::seconds deadline_a) void nano::socket::stop_timer () { - last_completion_time = nano::seconds_since_epoch (); + last_completion_time_or_init = nano::seconds_since_epoch (); } void nano::socket::update_last_receive_time () { - last_receive_time = nano::seconds_since_epoch (); + last_receive_time_or_init = nano::seconds_since_epoch (); } void nano::socket::checkup () @@ -140,12 +140,12 @@ void nano::socket::checkup () { uint64_t now (nano::seconds_since_epoch ()); auto condition_to_disconnect{ false }; - if (this_l->is_realtime_connection () && now - this_l->last_receive_time > this_l->silent_connection_tolerance_time.count ()) + if (this_l->is_realtime_connection () && (now - this_l->last_receive_time_or_init) > this_l->silent_connection_tolerance_time.count ()) { this_l->node.stats.inc (nano::stat::type::tcp, nano::stat::detail::tcp_silent_connection_drop, nano::stat::dir::in); condition_to_disconnect = true; } - if (this_l->next_deadline != std::numeric_limits::max () && now - this_l->last_completion_time > this_l->next_deadline) + if (this_l->next_deadline != std::numeric_limits::max () && (now - this_l->last_completion_time_or_init) > this_l->next_deadline) { this_l->node.stats.inc (nano::stat::type::tcp, nano::stat::detail::tcp_io_timeout_drop, nano::stat::dir::in); condition_to_disconnect = true; diff --git a/nano/node/socket.hpp b/nano/node/socket.hpp index cda8c2bc03..0a6cc975ab 100644 --- a/nano/node/socket.hpp +++ b/nano/node/socket.hpp @@ -115,8 +115,8 @@ class socket : public std::enable_shared_from_this boost::asio::ip::tcp::endpoint remote; std::atomic next_deadline; - std::atomic last_completion_time; - std::atomic last_receive_time; + std::atomic last_completion_time_or_init; + std::atomic last_receive_time_or_init; std::atomic timed_out{ false }; std::atomic io_timeout; std::chrono::seconds silent_connection_tolerance_time; From 0176d6c7a28103c5227fdff8bf577c349483ff3f Mon Sep 17 00:00:00 2001 From: Dimitrios Siganos Date: Tue, 7 Dec 2021 14:29:41 +0200 Subject: [PATCH 336/346] Double max_peers_per_ip and max_peers_per_subnet (5 -> 10 and 20 -> 40) We are getting complaints that nodes are hitting this limit. We do not think it is really a problem but we are increasing this limit to see if the warnings stop. These complaints could be diverting focus away from the real problems. max_peers_per_ip was 5 and now it is 10 max_peers_per_subnet was 20 and now it is 40 --- nano/lib/config.hpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nano/lib/config.hpp b/nano/lib/config.hpp index e6eb1c50d7..6499151b1f 100644 --- a/nano/lib/config.hpp +++ b/nano/lib/config.hpp @@ -159,7 +159,7 @@ class network_constants silent_connection_tolerance_time = std::chrono::seconds (120); syn_cookie_cutoff = std::chrono::seconds (5); bootstrap_interval = std::chrono::seconds (15 * 60); - max_peers_per_ip = is_dev_network () ? 10 : 5; + max_peers_per_ip = is_dev_network () ? 20 : 10; max_peers_per_subnetwork = max_peers_per_ip * 4; ipv6_subnetwork_prefix_for_limiting = 64; // Equivalent to network prefix /64. peer_dump_interval = is_dev_network () ? std::chrono::seconds (1) : std::chrono::seconds (5 * 60); From ee25252e8d05600a6d4e93456b29180e51dac5be Mon Sep 17 00:00:00 2001 From: James Coxon <175479+jamescoxon@users.noreply.github.com> Date: Tue, 7 Dec 2021 15:30:22 +0000 Subject: [PATCH 337/346] Include election.confirmed outcome in Node log (#3582) Noted by @RickiNano on beta-testing that not clear outcome of election (confirmed or dropped) by reviewing logs. Added true/false to log string. Co-authored-by: RickiNano --- nano/node/active_transactions.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nano/node/active_transactions.cpp b/nano/node/active_transactions.cpp index d0653f87e6..38391e4fb1 100644 --- a/nano/node/active_transactions.cpp +++ b/nano/node/active_transactions.cpp @@ -382,7 +382,7 @@ void nano::active_transactions::cleanup_election (nano::unique_lock node.network.publish_filter.clear (block); } } - node.logger.try_log (boost::str (boost::format ("Election erased for root %1%") % election.qualified_root.to_string ())); + node.logger.try_log (boost::str (boost::format ("Election erased for root %1%, confirmed: %2$b") % election.qualified_root.to_string () % election.confirmed ())); } std::vector> nano::active_transactions::list_active (std::size_t max_a) From bd531f76f1b5198f8d2fcb3f40842faac48c5228 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Tue, 7 Dec 2021 20:52:30 +0000 Subject: [PATCH 338/346] Specifying macos toolchain explicitly to 10.15 rather than tracking latest. (#3591) --- .github/workflows/beta_artifacts.yml | 2 +- .github/workflows/live_artifacts.yml | 2 +- .github/workflows/test_network_artifacts.yml | 2 +- .github/workflows/tests.yml | 8 ++++---- 4 files changed, 7 insertions(+), 7 deletions(-) diff --git a/.github/workflows/beta_artifacts.yml b/.github/workflows/beta_artifacts.yml index 73025532a1..81bda27494 100644 --- a/.github/workflows/beta_artifacts.yml +++ b/.github/workflows/beta_artifacts.yml @@ -16,7 +16,7 @@ env: jobs: osx_job: - runs-on: macos-latest + runs-on: macOS-10.15 timeout-minutes: 90 env: BOOST_ROOT: /tmp/boost diff --git a/.github/workflows/live_artifacts.yml b/.github/workflows/live_artifacts.yml index f87b98c03c..bc852f2c92 100644 --- a/.github/workflows/live_artifacts.yml +++ b/.github/workflows/live_artifacts.yml @@ -15,7 +15,7 @@ env: jobs: osx_job: - runs-on: macos-latest + runs-on: macOS-10.15 timeout-minutes: 90 env: BOOST_ROOT: /tmp/boost diff --git a/.github/workflows/test_network_artifacts.yml b/.github/workflows/test_network_artifacts.yml index fca13da3f5..991d90c4be 100644 --- a/.github/workflows/test_network_artifacts.yml +++ b/.github/workflows/test_network_artifacts.yml @@ -16,7 +16,7 @@ env: jobs: osx_job: - runs-on: macos-latest + runs-on: macOS-10.15 timeout-minutes: 90 env: BOOST_ROOT: /tmp/boost diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 5111350767..b0902cc164 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -13,13 +13,13 @@ jobs: fail-fast: false matrix: TEST_USE_ROCKSDB: [0, 1] - RELEASE: + RELEASE: - ${{ startsWith(github.ref, 'refs/tags/') }} env: BOOST_ROOT: /tmp/boost TEST_USE_ROCKSDB: ${{ matrix.TEST_USE_ROCKSDB }} RELEASE: ${{ matrix.RELEASE }} - runs-on: macos-latest + runs-on: macOS-10.15 if: github.event_name == 'push' || github.event.pull_request.head.repo.full_name != github.repository steps: - uses: actions/checkout@5a4ac9002d0be2fb38bd78e4b4dbde5606d7042f @@ -46,7 +46,7 @@ jobs: matrix: TEST_USE_ROCKSDB: [0, 1] COMPILER: [gcc, clang-6] - RELEASE: + RELEASE: - ${{ startsWith(github.ref, 'refs/tags/') }} runs-on: ubuntu-20.04 env: @@ -76,7 +76,7 @@ jobs: fail-fast: false matrix: TEST_USE_ROCKSDB: [0, 1] - RELEASE: + RELEASE: - ${{ startsWith(github.ref, 'refs/tags/') }} exclude: - RELEASE: true From b781a5a1a0ba1d8338cd994af244062ee608eefd Mon Sep 17 00:00:00 2001 From: clemahieu Date: Tue, 7 Dec 2021 21:40:33 +0000 Subject: [PATCH 339/346] Check and track request underflows in bootstrap/realtime message processing. (#3590) --- nano/lib/stats.hpp | 1 + nano/node/bootstrap/bootstrap_server.cpp | 9 ++++++++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/nano/lib/stats.hpp b/nano/lib/stats.hpp index 3eed7d4014..4e4e9a3a19 100644 --- a/nano/lib/stats.hpp +++ b/nano/lib/stats.hpp @@ -303,6 +303,7 @@ class stat final frontier_confirmation_failed, frontier_confirmation_successful, error_socket_close, + request_underflow, // vote specific vote_valid, diff --git a/nano/node/bootstrap/bootstrap_server.cpp b/nano/node/bootstrap/bootstrap_server.cpp index a4993cd6d7..35a5d233ea 100644 --- a/nano/node/bootstrap/bootstrap_server.cpp +++ b/nano/node/bootstrap/bootstrap_server.cpp @@ -550,7 +550,14 @@ void nano::bootstrap_server::add_request (std::unique_ptr message void nano::bootstrap_server::finish_request () { nano::unique_lock lock (mutex); - requests.pop (); + if (!requests.empty ()) + { + requests.pop (); + } + else + { + node->stats.inc (nano::stat::type::bootstrap, nano::stat::detail::request_underflow); + } while (!requests.empty ()) { From 703699eedf4d9735f6645094820e2a054c6e7bba Mon Sep 17 00:00:00 2001 From: clemahieu Date: Tue, 7 Dec 2021 21:50:45 +0000 Subject: [PATCH 340/346] Adding detail string for request_underflow. (#3593) --- nano/lib/stats.cpp | 3 +++ 1 file changed, 3 insertions(+) diff --git a/nano/lib/stats.cpp b/nano/lib/stats.cpp index 3325ba0d8b..a2ede29b73 100644 --- a/nano/lib/stats.cpp +++ b/nano/lib/stats.cpp @@ -616,6 +616,9 @@ std::string nano::stat::detail_to_string (uint32_t key) case nano::stat::detail::error_socket_close: res = "error_socket_close"; break; + case nano::stat::detail::request_underflow: + res = "request_underflow"; + break; case nano::stat::detail::change: res = "change"; break; From 8ab71708bd454f4b015c6e9aa560746dca989554 Mon Sep 17 00:00:00 2001 From: Zach Hyatt Date: Tue, 7 Dec 2021 17:02:45 -0800 Subject: [PATCH 341/346] V23.0RC2 (#3595) --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index e1833805b2..f6f8b95f14 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -48,7 +48,7 @@ endif() set(CPACK_PACKAGE_VERSION_MAJOR "23") set(CPACK_PACKAGE_VERSION_MINOR "0") -set(CPACK_PACKAGE_VERSION_PATCH "1") +set(CPACK_PACKAGE_VERSION_PATCH "2") set(CPACK_PACKAGE_VERSION_PRE_RELEASE "0") set(CPACK_PACKAGE_VENDOR "Nano Currency") From 705748232ca4c4e75e574831ee43c2c9303fa876 Mon Sep 17 00:00:00 2001 From: Zach Hyatt Date: Tue, 21 Dec 2021 09:51:30 -0600 Subject: [PATCH 342/346] Update images for README and QT wallet to be new symbol (#3619) --- Nano.icns | Bin 156163 -> 33493 bytes Nano.ico | Bin 7646 -> 5496 bytes images/logo.svg | 10 +++++++++- logo.png | Bin 11416 -> 15387 bytes 4 files changed, 9 insertions(+), 1 deletion(-) diff --git a/Nano.icns b/Nano.icns index 0c48d6ac8a4a4180f85050ba4a07a22f4fea92c8..e1aa7a79ac634ea89a41a390a3c89fd208844812 100644 GIT binary patch literal 33493 zcmeEug&!3mT1!5(sA_)T3#9?2XpaI`uW(pcAAdoi`2ox9! z0^KzUTnB+(a)Lmc#vqVz8VGdHIji}JDDWcGLie$yiVBDoxQBw!P>4XNz#R(k3qqj; z-His^ffP}w{=L^gVfoVrfF#@o1o_kEIdHwZeR%iZzgN^el>dyF2mYru7?g+lpZmLh zIrOFPfeWUy!ZQFN>>XW&J;mUEwGamG?;dl&VShDovlD~ss;I-HonBbL_}MwxIpN}1Fc?hq zg}J4$hK$^w?!Y%OxV4*`voHsThldBd2M@c`3o8yTAt50SPHqlv?ngk2N3LFuZYG|O z99|I+R5&EMVrTG!vxiQWw+{7l2b)ye+l9a!Q#oSdS6P4T}y{SSbD z_xMkTr;avm;@p3_{Ex@~vzP9F-v8G;|NZoT_E39aV*#M@FUYw5O!D8){;U1n`h?YO zJT2^XWo#TQ99{2L!^O$XE6VYIeDy!ON;}y*z0h3aj{g@0{7qheJq74X97~krUs@H%TI|q>0f7*p$1;*yo+#Vd7+G_&_5H(^ zK1vJ(Qc}>+_?&H~q9C>2E=@ZAY8V*=n^l$|r8pSIPap&QN|Inlp;4V5Kft1Ywe3hr zA38!G8sG5AVqx#B-6QeqhsXRaYrFG4$o7jBOQ);c^owt^NFi6t-^#JL>YMB91Crw* zX@07zsy=I`i?#WleuA{b2Wc_=f}(i6%f_O3J%!|P8luTE2*};XI1iII4>WTy8QhQU zDH`6N^tqq=+K8$35|cAUw;(j^>TR#RHRkHsf!wn${Ap!6SdUt;$dv_)@;}$cHPRdEV=ecy; zcU^@k%AjO&5Q`fv>qzQ55GiuXGb=`3x3Pb?=om%v@n0B+jYERD;@=c?@S(PME>n#Z z4qedV263kSwyRpP1?9zSZL(OYisayTA7LNl9j=x8F*TnT?#Wag=l(%R1PC+KX5Sdf z`|H!*vJ0czrZy#t=k6x1GY?2ukHz!WkmPvFlR6TESpM2zO{@U_KOH+%!Mu=l(!6ix z-b8UnCJ^WBzzTtmUQl3Hoc`^(Uf7{QT)+H*apEsE=Mm)Jn+dO$fHZqU{9~erU(r{K zt=*S4B7=$sxz{GP;X2kpD;pDE-0Af-xW*JXOl zi!}toXT0l%l;|QKaSktTiwz&xum)JhV&u5%2Pp@H%8S!dUxcIK{D=79i-^GH6yemq z4u_FXMkRQ~?8U0Pudi=%z{YZ)ah{QXd+ZC18zAajFeC*}{1?2L2rEAyjJ8{s^_7Oa z%rn1>N~i5NC*Yf_rqLyEx3(hU6$JlJaL- zs&Ogq1TpQ@7p@{w>bEa0&XOD2nE$l*hX{fIcnJ4*Z%!b`0~Yvi)uid)@wSocu>e3-8w3I~)3@O3sS3iiR`DJmsM>;wD07~@~0en;&;iJ{Hu;g~e248}GiOFo0% zap)lSo|A-`08VzpC=67BP_YP~#F8`FzoiPWjxfZ?s9nO1{rbM}`l0ofzen%XjDooD zse!)2>abUUH|QS;gn)dH1HI&Z$ya!Is83rghIia@18czwF+=(Pv~Wz&9hm*Jq1^I4J3#=)E@sG2}33rW$q zXd)VQus9w(*A_nUzXP%>N8*Cg3gVOO4~Mr8!WI0T32!wnTxlf-B`{?J{>WFDG*sQ= z2R6dM-~GdvmW`uqj$n(x_Ws3aWKT%{6*@LpE#*&31cW;RF|u^R!efT|5WhL+<@z=X zw6BBtKs-g_QTRS>4(q?%Wln&y>Fj-|bRbw^*TjHE_Yi!&8jK=$O%)_xP2Fr*IPovS z(j{T*hYl>ezMd%KkZd|pkV#PhYa3#pjIu;|LHiO}6qE z{~~l7ju2Cu`}XMe=ZSJi@ZnlC@i`q)d(l5<1Uz00(nuEgVBOnnk**mjB;f3OoPc-z z*mQ*M56ulwf=%8pWab|Ym0g8k1UjPZf}j;>wZ(nq5&y_R1n-<0&2SQ!ZGeFs)PI0R zbcX$3IHC*6TV}|n!wD=*I>BKN-mYk{{b%+ACIYu>d(%aJ#5bf4Q#vFBcA@dlh9Mvy zLJ=bewRu%_ajc11CGg z9OQ;l@a9i@0t{fnUn7I%g?~VBqlcm9VH14%r@bIBAwjsdHq9TQl7|gIWDvOi_D}ns zAYeklx(}Nye=uwSK(r2);rP=Yh6ha8lb`Zb{?C%ur2vTT!My*WdKVZB6^8fzo$x

16{G?2~HMhLQD+C__+BW zf5ak)g?F3Z=*_*>zGa&BaMSfVfKdsEO6+XD2V0;6be%q`YGW{X-AdhZHHzM1Dx37| zL261}VPj4o$bxUDdhaWHO>G>F{RhzZW|2~77-)`~qUY>=@l-gDDi*^^! z%1>67&$M)J@Gi$KUD_xOG#^7Q!+;9CT2XpTulhy;8}0sb9x<_gbW&NpZfhmB>O?KvemIVN3OR#=)B^v7>#~ij|&d&=o8I zb@u&>qk`u?&1KzD#)Ph7@8k=%kiGo17t*df4DxS$B9d_kIVnJ!5PyhslBuwXZJD2? zebAV(B+MW+rwmVEQnB%=lW%$NZCyD%5zTC6&V@oMbQ?ct1OwUD&{?TJ)B5A2U4r}c z*nsk$#W{@w0JTxBk!APNvqdTCrrR?a<-N0HK+fhQem^^X9N3&APz--KBI4?38kBg3 zXYsp+#_?&hjznA0e9qK#>OOd%z3e_16#;9!%?;T?YCY7TiEHxWn2@Ll;j7n1i|cyB zL^fp?_b}F$WdaG}btAKUfC|H=dI_r_X1r zib4GuAm2Me3e2}v1H0Xdl2{dYiW0mUh-Ok3>phf6dI_}|f8T36)vdj;GBCTJIgi0e zxUL4y9~NtD``p&r{9rTbSl#QsyH)e;ME40Y1nn)qw{xXFlGd2fj2Ylqktges_fS}^ z=gGrK@IGKyv*po9pTaqo9t(X5*+Rh!wQyN25T1dkN$-mbS~0r7M;-+&UM|GYU!qMO zNsw0}y^kNCs>Er9wYcK8>ffV&V%@L85-Ef36cX4MYuidhjqMH{r@HpjYnf{zk<>|+F$O_r+lt0%XQv(IVecr%KQ-Tt}SjHLUW0v``BEV{1W zud-uXe`$mXoWE?62JQ0TR>?y-p#l<61-G>l7U)gLzTbv#C%j|&&27kaf2G_&B& ztLh_cZ#Xy>;@*5qxbMi&|$wqR?8qP%~GkvSVKKX=OlvaZ>3&szV#3t8^7t zK4nst82ddImtWKS&pe}`(!jXm5~}I#-A(f}<6)fpN|0vy{UeK)r)Q6L_|g4_hfdV+ zr7#ST=Sx|i@~AsQU#wj2g?*Yoq+j%9JAIH`WPUHmx+j!1Tc~|D%y`t0xPi~hU38w8 zg2|Jz7_3@lTiws!V9g3^X;z>9$<%oJMr^{~>XB0&#k#Bh$*}n3gp52{_l-E#aM%0V zD2HD`7g%RAI;GA2RS?m=ZlA9TbbW6?C17hv3~iRx$KeO{FCRdOm7AYTK3(Z93$)DY zBU3@^xz}R5s|+yBM^imowYLv@`~$LvmQ%_3Y5`f2B)2-_lf-<}q)X<=n4D+N0B9{U z&v^~DlBnUIa9uOjs0|6`))hs=RI)dt$scM*UQE)#l=tb9OoHd`QM(PQsVzTV)OmX1 zKCJYfAF~o^eG`d_eoJDkCc}o^?yKB{+h;p9FtZ5LgUcAJ0V>mWWX!w=V+R$rlQmk_ zOpg|54b&<^ceGd;i0M4khG7z%JN+Gi*?Fb-KG=_*Kp**ZSYU=C&GOeb;!{3+s?@op zO61c?)~oI)(@ddqL?yC~H??wy3uVv8IgV%i-m*OG#ph*5kCh1D78;XauWqU++V!$r zA>6=o>Cv!lDi>BNOE8=P=3n>Jj03!#yWMgUA#@|A%rW}n#O;Ph(Gu6Z{UA`(N20)r zH4+g(2xz57MJZ~*h!+EHM85?kf}6f=l7wNlVU>KiSw85A45IFQ5Q%VtLh!#E>5R?n z41aviID0htRbk=S_DogK7TvhrK7XSHOcGvwr5iT#F@+V^^XI zu0)bT&t1E}m}b7T&eumCY&^GlqDcX=8O1qZl}W=&<0~F%i{|VcazRy=O*77tHjgG` zI*(<1Im#Q-uOedjh;(mSL$bE2p$n^VH-9IgMi}a$+_sk>co@)zTZuGjI_;c_T&@*c zQ4E6~|0AL`q!vSJhju(eh5ZNxq~-}e5y`qFXrpzN`?)+#dgR~yfU?0wrsO_Y>~7xz zbe}j)NX*&RE|!-|=N>9-hs8uSVb0vLXXsf&94E0uaSAIT!*p+IiTVk> z9+vG$3d8}aWhB-wKs=YbBTL--uDM01G4h=HUnf-Ep@Y>Jy%;PWbTd=I&!Sv?Z^k}_ zIQhVc&Y{|l)~P`;biLx`_gh}}^$l-43^PBfoT||f*VW76@z`XPlSGtwl-J2$WpOl7 z!jspgPN2lsyt4(;&LJzWzw?-UG^q=?x(wfXN4SMsPzC}75gQv+{i4>1GvcSnh)$oG zqrb>}A^p@u5Boq!b$LzrzOPL83d%F(PGYi8BLVP{xH~*E*jtQ=1y%2Fd`(i^-e$mZ zp!ikMMX{LC=+pwPz;W`g?Ai$wT zQ1L@mH08dC-5VvU?Xs^}#MG1PPQi#t`a?BHTyt~M)$FCMomPMC0z65D=2AS4acxmBhyo%XKWMg-U|rgcofc&M|syCgbMQx3tXRm zit`FDlykZaGiZnrpScW6?VmWAg`S<&V-atE=1;PC<>)@aP~QN}UI8`UnlLvPDY%>a zWn_zSEM4NyqrbtqF9Y#@3|N00og3T%;MOOHeY(L90y#`$d4U14aE}%XDy6x)t{!$n z%ry8t>9T4Q8*%6f9+vTsP&jnwp zqx_UF7osayj#B_Vu8rvD$u307KF~xqWLpXXEw}5g1MOzSo~^Dkec|l9sD9WMra9kW z{L+2J&$;R~q?j#8fuhjpQI`sP$H1@d&-=0=%X5oI6o+88Yg~>Kr7~k>KvwBvl(k56j>o6H09ltXwKzsq~et(JO!2?*w z6_?0*KLLlIzgH!FRsf0o92;BgvEZ-F*o1{CzSr6(zOHVRnZ@8%Xi0mP2whpN#HU$H zQcj2%ZlLub*3Aiaf2y8WzUrkCGKXN8Xb==()nX;{zFVuKQ~mbMw@3B3GM9Y6(}_K0tKLLn==KP2jYu`! z`pjuGbB+O=T$EA0au$i;B?V!|Wct%~L3B(a`5DT+C{grJ#E7jvEgbk(%thBO6t1L8 z=0ev^)xe!6?WExczN_@1SG|t$mi;(@sHd$7SqODtV%CP2zXhm*>y9dB1zDd5gPf*u zh<)+QP#5urbaw#hz^IDmtkYp015xuTnjd$t9n%V=nmZT$HELn+;G#<5?h1sl;E33RS9AJ0fkd-nojqF=`E#{o%#A zT}SKAS3%Sqxv*j|cb@CEJYfj8;gLqPpZ&8C6*=Ge_tsXFfqp965+S1j<<*%h6`EK( z?XeGIWzg}pjaIk32^G))(97~z({CY(9vj5PaOM5{iv}E}^CrF#p3cf@tcMG2-hQ<= zW-5T($Hjm9g}KABh}*G;GR}^y>m;sccX_N;SK4~USX7n$Yki#ADC-%rVlV!KhA<#2 z;=jEw{IGMsBa=_w`EBD5!+cR5ED2@;G5Ka*3y-2 zfuOt?WFQ~yN6{Hd3hxuu9YwB?QLmg%_?X?=n`wI8I?7huD+6@{82Cm35F8R++S+~$ zfIhwwg0(#!^^2vg*~1=0J>h7fYpjmz(Gllt3L`FoC3C+4{P$OQ21w@a>P%hXfri3- zv5b_#+-QwACX5^R`tMCs)##=~UH~dd^Bv&3kBSaoDh0ZXEr@XsmoI&{7$F^&;Xt4T zHwJ8sGF=T{7Ax?|yD6s22Y!`9tt|W0?byMuM$4HJJ#oIAxW4I>Hx^-V-^w(B^;=Ei z*21fIp~n~io^K?dc{LJ3Yf#V`8VBFRc4~os8x-cTISSpE3&SDS$Lo9pQ=BEUr@)@a z=(oRLE&;ud`|*m_p?Xi^N22qMh)qD$@2>U}-Se|GGz)%r>l}UL&1msp_iNy26-Xxf zX#@%8&H>by%4}_OHUg$JfnO`1=HHUz5R1}o;nGgdT1xa%9NfWN89*7MR)DM4>xED3 z45^#oYA*^(hg5XYcGco>R4+3#>mxJR2V4D#)`*5c5w2TSl5=Y51_0$-rY+)~adyta z`&eAov;-a~JBOW+Qif>trO^j(wU0M+7MMN6Ea?oW^EW2o>GbVNKN=+dfyFDx9g`GA z<#gv*oV%sayW%8uCTKA5!bnQw7%Q(x$h<=u@9;}h81#-OY#FK&!D6Z z|ESo*P;l#%>*@)Gb9ZcSb~@XKChi%wgErOGPR`B}@$bfQ4q9o(91UfO#J`uEWM%p- z?T5R)p9oAy4CxObNA}txUIj3&`;O)Wv;q1Yg&aVmVSH&(Eh0g{qRF+5jlzjho8U7( zfFqzSL8CK?ijXQ$Z!q}GJ#v?5NajMb zSbmECd4np5VBgBjpe6exS6Boj9pJcjyoqJ)uZKN>{EYE?>hV&M1jmwJMRO%tkl~%` z&Su}tk`3LbRkqN_@z}n=MwgF1ZJqn@C4}K~cTLJR_zRmv_{C~94Og~qPt!xmdq{$c z+cyj`N9147B#l}aDM8MhQ)p1xuYx4=eqY|_5do_0eZY+zo_Ab-%mlD&QOMy=?6bEG z=#J0#h*2r_aWnDkaZmk`){nCfUhaz*31n|`7_7Vw3cj6amb*IKWUA<3@*7UNUB5I6 z+8+^6=4im`$%W2`Z8KL;TJiv_H8tDpQla+(I*>BuB%ij(ii6}t+s=?mTO1mPDRcf# zPlvBAXGDkY-~;kSVC>_J1z;*b!!~m&1LQJ%2~p5~<9w|@(_+%O*;7L~F(6dX1c>W< zor%`F8)k%on#C7_wl_yT2%J&uQ=>12RmQaX_|CB8FK;7ot0{8A7X2o-UR`poLj0TG zeYL|WYGCeKD9$^qR(oVQ|@3}>j`ihybIr~}68)0dnZnZMM; zma(0%mQncjcLvsa8;!<^qw|eZ=U^)vU3snPyWx&QoR1Ls;7`Hb#jzb;?YUW+WIIg8 zIg0T3M*zKd5@uYoSWQSsE42qE!JK4#BSVH>5LetDK;TTy5jo(n zX4|BB+)jQ+*Q>2z%%B?wj^tmCXf+09F;raju8&$dj=!1_^*uT$o{VVYCX?%Zwhud~ z*GD>fGP1k|)E$MwKJ_QQn4x8Xqtb`lEk{Z_HjS=AAF#uM2uQqcdJZEGZ|%GCx=>$vrmGN-zNw~#KLda8!s zjWua>Zjx}QWuLHY04jT(0HB>cKgpf)lY6_s1E69lhvz#poKqcA%8NDfLn4wG)k|v; zkHvmCmaZ7ggrN9@p}1kQEnD(EerEDxuZ`wto?V}bvd(o0KT&M4+tGS8jVlX*p6GCn z9@z;+1N{Qv$F;w|=tcKMPP|-`jNs0~NKgY@>mFZKLorXqx#CTNytW^P3@>~r8s{X= zyZJTm7fuHHF2;A_zUKO#Ke}Inc|pnd`xWv*SS507Qp0m1i^xo2L*YW{>WsF$QrYK@ z``RM4fVjtJste2?iaR%jhwmwU&PBT+n!ZqC-&M1(r&axc;{J9nQ3^mqq|Wo5WO+(^ zcTM@>x93_pl6GqY7KvZ$o+6`f#jei{q_5%6f1vK*# zQXx=3xAB?jDjhICtZpU5e#B;MJSJolKzVN)bsPJmHrWi$F>cfC)wp4^uq!}l16d6k zk7+Qo^q&A{?{IB@evQ|+7M+4pnY2Yo_uFzNy=ynkm6GB!NgE`lI>is?!YyP`?}@wl zXr6U>Z^dW$gv7W*>)E2HkCR0g&kBE4HF9i>6h2aQXV9`aTJVqDSsX0N`!yEYak_gs zb|_LeH==Moo_7pJz2zF8iMcN0TMb z7{B`!Gfvs~_zjFu;qHL{-r}d#OhS;y{d>N~tdDd`zv0gu-b zMvA@tsY;XG%-NYj{?)L)a_ZJYMLM~u6_h;EU$IVs9C)$q=$wNN< zz6a04^`KL~7`VxTDdDXgV9BlB6V?#+d0bW3vE=UT z1xh+zHjd#+4VEt;2ON+=E-q888dQ9OYJX{N2?uv4sV{Lk*b$QWeBFRYaVHe@$exDR zofXhsQx_2hPrsgyc)!B5oRO^zs1DdKW4gMI3f;=ZW)68WGI5HwyI$1J(@#3N6~`Le z^Z8^!r@UF5>P}XKX=~BwL)DkmDR5v-?MfPUBr|oY}0F8JKW2M`d}GY_Z!H`~Vr>NYL<4%p3 zX()fj0f70%@7IES=_D@s2OhU~AN~85+;uM<-HE#(0`uiy#FN!s#oZN!mQ_ODZQ1iQ^VrsIyTr(FFB5**(L^2~Q&)5ZVWo)wg zmC%{u{Al*tx8lZ8_DdIpneXNk-^pnb;Ig!Q5-TguA_6L2H?giD6%^h-EmX3nbaxM} zN5}icC5%H~AorchU`rK$x7X(b8fbguKJrO*wl#_>q{6Xvu#r)Q3c!TLz{A^_(C6UZltx z20bUpyB9dP$!R~2L{-J{#fkphYKH1um(guRKTa`w?rh*T>rh89T7qT6{OZKwhLUU5 zg{D|Mt$>)g&`KO>5+dtXdDIJdVuVB=zPPz^PD$Rr3v66XYw^9f-*Ey`c1qW`wW8A| z*kNA##XTIFCasNm?|e*+cjo3ZXJ=*7QqHTLiigiZ3ISeqo&Nj!(O+fq(9|X*aO+kH zJWq~IGrc18k(kq$Mv!J^z##Bp_tt^H!9P!^C4Vo!dBH@MQciTy{2|=6a>mi@n3(bwSCAPGBN+?35k3+X_`^v@u=n1M01}4e~K=D(c;(hqfPXdjWV)|&@DRm zWF>gPz)2ibN=N0v2Q=uf9+?nnAPvxX7#Mjw{k1q@P&SZgSsF8hg+3*8v}71|cqqyo zNWq1lrA_q;vyB>ih2Lz{WM6#$NLgj2&s((RJ)m`MAz88p)+n~W3Ed~1Uls{ z0Xx2PaX`zG^&|9O|ARRiU;(XBKQ|Zn!qTwnJb~}xZWhkjiTwC>&cE$pjiUIErB?~( z4$(`O@@Ovb4_xbU^1s$|B{OouYur%3ISE2LGXb>+#zygPnocvZr;}{iSGq(y4pVj! zMw4JJMe&N_(NyuwDU;xClD>rr{z;3p>9kiWmxkEL(rb#WGW3eusx&S0s?o;*yEppa z+DyRFwe4s$_AMQun;oETQ)v)c7Wi7QnVr-mxRCgunq}WdkgFPR3m3i@;%cDrh+SsE z$Hgbp@48c11V`?xyS0PrOV9gZm+!;bOhjX%e*8|AZQ=O?CXl`aV}JDCyO|JLaTF&F zScJ?B%A8EQpHLwOGOg(VD_@va%w^`A1b>d)x^{e~Wv7-vh(o#k-Sshv^l!DU6J)j! z5Mx#Vye;hJjQ3T6UFs>Tf2tz@rnY%;|LO_5a5prWVRU_;qJ)|y6MMDT^r!D2!^!FS zP&z4-VB;-ahhv!11iv1myMSl&?U3_Yd2q_{MmP3$J2SKDC3aZ4Cb2>c)LaaZIL{V( z%8gl}GKG5NDB*ZtYkdHhmp2Q869;IBW+%BjK)?*ez>N&$A!>=F8*8-;cgR)%!@B|{ zK$6o>3O&i>O%vs|fH6_S$+Jg&=YwCc4StObW*W8D08-M{g@EzJtlm0BbvQ!0A^?MG zxKkmSK_gaKjQArOxBjk2j(tsgrD_&=+V0V;Ru8X+|Di&*SZHY&!y@GYAk)`+mjQDQ zs}hNcu`&d(+R}YCZAg}rPK{~FU|$x9l*V9A(02ZtWtwq}jEAxLrV!EFch3i?_VWhGK?WfbgXxj?I(&Ok^3rR2RD!Yr#sC&*^A1jh%8?Cjx{|QBofKtNQ+k z2kc|{*ny9^!w+iYxwub&(3X=2=JkAL-nk^u}QE*49~h3nb>gAnX*1Y z2Q&Z8dz%jdqB-*>!2!<o%o6*lV0*;r(hBkPMYVU`u!wa6c0iEDVjjl16vdqkS}Q}RkE@SE+ii|n=D1B zP+}}$538&ijVQHv->Hh7rGMj8sdVJ8WS033QRA%xB_f@GK8b*Yvnut{)! z-luMeE3X(j_9mH=Lmb(p5O5~RkVgs_zg@t^XYl1JW^0wZ%@2H1C+jK69vJi#BCS-3 zM92lm=A8kM9_M6Nk_0(owpM-kGA|BTa=}u{Drt+xBcsX*bTX?m zh{iogIP3h#Dway7k7P5luhFEliBMgciAoSIc_>PxrteD~_EWF=&3<=nBA^U)Cenl9 z#z6K1rc6fyD1}R)lg`z%#?Qx=unV&1j8D)r%GV89_>@29Z;%v$%SkXABq(g2>7yyHkFFklV?FN;YZy2g?vSO8G$nuL zB2sa<_q^^4~uRhz&OiN~P zQ-P9H;8#ya@#(D?7iZ(`guQ(|K8Hi~XXyFz#^u^{+4e-;%ytq2p?c7ECghj1XB^oo_;aLCrCrvngF5s zok&5Lf)6AM``PRUJEtTYD1zeJTJyf(1>a*Nr}kk^cCXX3XT1U=w z{zI@LC;D_cui7jAwN9{gMaUNhuFG4&E{H_!+ei5kpLh>)uriX7;VCDlfHm?COnee^ zzLvlO*y)tI0!Eqo=AtjsQ)M|zMGxa~fDCj9F#aYcJRT0#dOrK1kF&GAL#x9~-FChP zrMk7FdZWY8X197Kb)3?ugj?B}JhH0upodO();P)7*OTUG$TF`}D_oH}3N3&xJxTXu z&sk}Hf3@IdLt{He0&Lu)3fRlk!O%PY00Zpe>P zn;=r>Eh5Nu(3ZqK4+8VO#DY--P^zvJ!a!Eu_Z5D|vWd4kD9B1t6n2sNkba zMj&_faadj?Zek;qiDqpzYhkpVn)m(SZ!SG1XM3i$QXf5Xe?_4m6vLRhNw9U5~vTXtRaR7u~BYb~QP=SD?6$Q0@@%u04+mYR= zQjT2jf`8M6efG|BSxJlto`KW7+Csi@Rop2J!CJZWpl73pkMIB(@a}uOK!kD+EJ;D9 zn_>6nD_i}&rOUg3Zm`_Z(fP}ODtwb*z!(oYdF}q$w)qx=Vw}AB^{o(^#%r4>d^(&7 ziH65=pNHz>qLQm8-5>Vc$r=p5Xv4Ai!X{{2UlD~PuL2edtDGG z+mQ|&4OV$X%s{FL0!?WG$^1KY2Fjw7b#H~1DXj&}Wc>5CjS=^B<@fl_a{`4qWyTu@ z$n~=Zi}2T-WYRd}fN*ynlZaDn%P*LWrPU<2Aj4sJqYQ-MWsGxyQ(~Jqp$!JUg>-3k zOqzJP^E9-*58(z9N^owRCfx!bU*WZ&X`<*ljudisCT!7>bx5o6PxZ28z5@>(i>X~M zpZ1qLDJGU%nZmGqFk2O{mncKHPI0GqEEhRN28sk#ckI5`RNDTrjP(vn>0Bv0AOUBb zhd60xL3hF)shcUt#rb8&Lnj}=#_Xh{4y@exv81VR5G_hv&!~hny;HAZm(t=TU2F&r ze4r-aaUp_95+}+uD2jAg3n-bO(~LBE%uV$!e!T=BqorJY-~pE z-OAo$`#>X|i5b61MM0D!65W#ZM3yka*v(5C_pzVwOb^|JztlV+FF_t4xxK~>Rzl~y zd_Nicpex{9l89pQ0o?RJNDVC47eMf74e)ms!*{<8EUxDoMwYK-?A#fv=pLbK%&?P`aFq`eO_{yMV{h14XR$W_`(Hn`|{Or?dLLK5?+$6;$LUE`8 z9HaId3PmGi0h7#_>2+(Kg(hVG|==cY6`hA76z>bjxK%_>E-L7tx<9-+9h-oCEwJrL6 zu=0E*vU9*wteDI{?kUnN{63&Bi@*wSPJo)bjzGX+&Iy}LDTB6V0OE_Y)id58$^a#^ z@e#ow4>@{OTY<-3C}*e6lC=@5e;^jNS?el+66_AJ_JUs<4ab7w6#V2Hv;?7%`a3ZL4Z-vcTc8iCl}f#Kx5 zWB)?!)Fzi=KfCxcZ?jIpi{GQ2;l?T**5s&X@G6G<{3eSLh9@{`c<=hgyBFFjXXp6} zd4;3z;(pD5!XysK>L(L_l}JJu!E+Zm| zcvO`_i{?!hW?H1WdMA#VSy@?Kc56c36QmEEv{yKsC_}!#0^Ask2IX&GL?C_>=Y20a zyvFHhHhbM43Hp zapa#UrlmzpsDKLA$^gP?_mkJvtlmsgvOHzgVV!bQal4u5$aWrNX}m3Y!xXh)VNhiE z_9;8zfI1+vx$Bm+w$lg{Scd`oyB41|(P=E=w=`pBC1yB=9ND1P{_|v$ARxJKV_Jjt z4fNcbq*oIn(~%B(DVAa_1W-3^kXs`uXw>%y`zTxIz^fsb?+Yh9Q9IT$yf`fs-z%$G z;{hE+20?qLg)6v%N3Vr=?e7%vwt`7*#OLA}Ef79Od63618o@8?(zSpirYV#DbvCKZ z{3dG-v?vE*xLK=?2OkkbiKV27hz&?NRSjGcKFoizfW3OTwx+jD2OXCfcUicdcU`zD z(K^&EB!7$j`_0Tqf#f*kV=v6%QcYv(iVj`jyMp~*%(0Cvl!ZXuwo!4@5DJ;tkDi&{ zo<{zBzMD6v0&0so8aQ}*qSn?~76{+QDh)bpr(3(C1;1aSptj~vX_$zc)Si{|1cebJ zdAR8`$!J=ptM1`mlwa=go#EUNq!ju6jA;C_Mx*Cw7S8OhG+;S6a{6V&bm-3aIkaMm zfx7tljowa#kt2U0U6hC4TR&n@3HLrFrgR|JjZePOS++b!Tjz_B%%gWYES-kQ^vmo^ z)pQ3m<2jV{3CXtDUxlIVL% zXz{nw8HVqLwfnXo9erC^K7vVzt}VpN$I}=d@f16&thGm~x!)`Z4Ob5Pz!_Gi_~O3p zxz?!|=4Z9Mplh^xNM|rbOsJja{od8&eA!4Q@u`!5HPIGveD1D~*dSZfB33ymSV8-Z3LyUjh;{s1 z2s_5zxANGiJe1JiJ{i;pYkBHol>S5oClChVA-R9Q41I^uah#G&kXHkgilM3^1UgZi zz@&F2otA*i>v`At)ZkC06YNe|#`veuN*W+!)5-Pn4}S`$20-d`cQwqwCy1N~D6;C7 z(@FWKauYr9@}Hu}o_N4pLeAe@{_szM6<|VP{8QKXuT}bI%6ODK@xRKyfmykL5IijG zb&l#&JdB#q_6;rm6j_Ld3gSk5ER-?83F1aRGQYlFn@mg|oCG>D2|MJ3F=b=MFIJZz z%Q!u8IPsq-e(V{QDGMXHvQN!BK61fXBtJ&(d*|NU#D*^dQLsQB^~f!uAa|CUl$iq~ z@ydkXdlZ5%f)m9GJk_VEF~7hiN9oS+Mh;DLj-NLIA*QFBS;=4%lYYr`;QWv^vG7*k~->)2Vn@J*B=^ z=CY5AMoMRrPgP;z4j8KvtMOneeO{JJ%!rx!^bJiT0MEW&iW$(NtPa08zDd1XL%Sc{ zIpqSUc{LZ4-Py`g{!N2l7SC_o0B703= zdUDXbWc|pT+JWVX#Wv&gsstR1m2{{!k@NONB%&@~f&8w23W!wfxODDA={VU~{fvV0 zv`MGmbEedkA4H^SSdG38Nssgw$Wt`8M8AJ%(qbW8j5P%cFoWFg6FgA09t)5dwKjV8 z!<>{c#9oiG`BtR1kgy{g6N97+>e=|su+k|`lziHLHa#&X8sU8x2&di2(}(~(RX}K$ zH1zuF@|QPTh}2utx4|lBGWfmZ+u-wsM?0s{7P@t%fW;r53NTucMQy3N3o`-9O?KQ* zAenJy8_J>uBvM-uk@xgpF?D?Sp~*!<8||vi_w3~8>*#Y3kl+7Fr{Z=)uH))suH%WO zmkewfkgv#slFaSal-CbjZZt2t%Z$~`-qPONdizUmMCx#0Sr32gx!5V^3oeGEr+`~c z0Uum;K35|DRSS!700GvD*Gkq(n_v&VqORB^H0mEa85Sjw85x&4YWI-Ic^ymz!akcL zw$MhLa`4wp(P{r=UMYdmodql9L3=_0u1@2vD^I6~Bw`(&jlDb_dhNi^vtT5|b9qmV znA(tYpzY$X09Nh#kDL62rtp; zXZ2q|V8C~`aBap>KZ)^%f3l9`-DOEIU5wF9EqTsDQ{GR!2SfEARUg$8;}6!_deW>@ z>??oa2=}1qdD!M|^1i-fe?%*g+2k`(&^(Y9H{#>otO1#Ysz1@-;{WI|DZpu^nj66S z>zcW}bACd?x_+b7iu6zH{d+kV4Z`^N+i4v#$EN0zxT_tO&ve?Kpw2#!^Xf>@T z)Hptnrcsdxb9h^-lyteTh*XjT2Fb+!_ISgV5gjPnH1P>(y zh>cUuHq^0mb7s{#KdK6i{7-GIjY{BPuIutbFSXFw%IdPt#?CFrt1qnf%;&R9&Nph^ zkNp%RFL(kfB?PN^Cn`mYzwiUr3B|n9t9yZ?I2=Cjrf3mv(yFd3{D|isDx~Z~cY(G; zbnTPxnF#ejaK5~WV;oVkIVL~#Kbsy_R=*x zTbyZO{(rUim2pvR;k&~S(jg!n5>nD2IWUw+gS0fLpmaAwN|&^xiXa^-4Fgir-7$o8 zHxe^0)D?QL3H&e z63OJNnUmf!GOp|NgT-TPZM1F;o+{UFa(N@HdiP<8wnstN?Ykd3-SrCj+7`W7H86bS z88M~z=+{bkBcXOU7*o>mz0G8ED^D%@%s7ov^Mkeb%TY$wX$GASF-MGjH4lA5G?;@L zK~jPYRcMT#>6kqZXcPca!8Zz{J<~9pMI+ZuL6T=wXa@-QUR=($J9N}$@CN9TO?2x3 zF@504xZa_?a@8Gr?W+h-gkGnz4)57-B5)iG(nT!fTNc8&Lu}3E^O>H2YQ@!+-r<^R+9O z?lntn7^!vg?7gahJX|SXvI*f4?5K5S%|RM|^42rr#G_>Z@&?5FyODrzfh3Mx1E(~= zX0ol?Ld}L(f$0N0o?f4fm*^C?AC{QLT{ep7kj?FmKs;|f%X#|bKY!#C>E`*Z1A4mi zCmX(WDjAA{93&l(XvauOx~tJ`16KPCVztHyZX~%hQEOhfb;;Ci1w}k)-#dSUFg@hU zrS4~Ivhd2u7U0^tI{5O7kDSk5Cul*kWIEM~laU-qH}qSVr#-yZSA6C)r^=^6&33#d zkHFU|!2U(vAG=V~Vo_@3^60`Ik_T)_?X^VRyj z!1D(b6M4a+f&Y>|CsK>Znf)UK-LthU+7>ADXP+ECu6P*z^r|k(7rh%ZT8OEaMCuUSfyIY$W^IS& z$O~x(8513?O$?mpo~dairdRwk6+l}5jLt~uK@dhzKGXF=uTSGGX4YxAg7+fZtxP@y z4}Db><4Ek42f`R-lF6-#Neij@RsP|{OJV#Mp%USR0Z)&ZA9doB#*`&yI@=^X!0@og zX?}qAKatDsQ^vZbsiyh23s4+yg+4FZ5YYhI-NJN zoKZ)=!d@DE+0A8tu5FhX^S&@;+0X#+;g9c_^?1};y3aJg<0gqa@aFb%rJU2WXfxW4 zrsn%6OCKS^fXP)Wg?a3fC?wjf?_>a#AnYtkucIb`IShM~C`rjP!RY>J&{(C^%C~7I z!;|2j7``&Q&;!5k|oZW*=1mCL-0WGv|QyH{8vi@y%cOIT`E-*N^*ljU1;fod15;5|E7 zf?^2*FB{-#JFk)BFIH2iL%2|ahE|4icH%j{jjYu>lprt0Lxp&V>xKtgXTaeWX)@?B zL@np4POl9xYpCb{0Nr}$S8}r7Yk{dS2c`o54u&E}!($Ys7WUpgzS1Wf<_ORojxNK+ zb59lhpH0EYUz$aXT<&yHDALaGKJQ67p3~ybq4XLUVXdJzy08iL+P0o0&B9IZ;A;a~ z^jG>ojnDg$4Cl@h&FUTQ_auDw+7Yr3O<4t~GBM?)*%d_QYn|>yjgovFh$tH>x z#Gez!q=T@7qvk^sDWcpXF$(0e4Puh+oIA!eoKeV(u7#TAQOn2$ifRW&M|drU`YLPt zcF|&IDSF6Tm&c^OWwlQA?`o;^fz7QWibW5hxup6j(vfA(iZ^e+ z(FL~I3ReHTm3pqxwCCaw1#90U)%ZNrZi`&oSZ=(@DmoE1w$~6_rVbdC6o;?-HWj$8 zY&69o)|ivSU~=1j1mvTH&z9Y90&wV!4#N^P6Wro!SKOy0k5W~ru{dlku)jY=e1*`gdt~ zEk!zKFNkV!m`Sal9D06a0pBVBZvx3w=4Yx9Skf3Dx>JX(jDg;``FfD|h@R5nLpJaB z{_XxTzF77-u-?qx79$xQD&5ijkQzQ4X6fXlV z=l=L+=Z2pj+$=8UXwwICQTwx5cy=zfR1C>8lHUc8cD=MAdcX-bJI2aSNG&4=qu5GkHiN~t_X|ICB6SXk`W#1 z|DQsVfHR$x#p|)`5i?$e5ZL>7tLJuY${Z3|Cq_yjvS%owv)LrvDh#@rIhCn@v^*ZV*?Lq zho%Nb-S|MM?Y(bg$hE&*PCwmw->o7L@0Q;qK-dX0(j0v3u>W|kb4HsRz#)yLQt6Y@ zqu)rkyO!bOenj`&a%<8e<#ZhWLYd0Du;}3KHJDlJ`RNz|T9YQ>NknlD#x@ZYJx^GC zbr308!>zccA>uh*+(q}~zNEGVMy36B;!I=s?-y-(w6@(RZohvCeDtaz$8wTdkWyyi z17Wy`Ctxv}z2X2*cAX46qyJWupp$s$*td7-olJ&bt)L+?vvV-_T05`E`$@C4_tx=7 z;13Mfhj3|&^jPXFyeIt+Gs)z_*JM}i!;Ym_HH>z1-2u9H)R6CsFZjRoJ_R{s7+Dtf zbJng;(xoOP<^G?C(vOjN9?z% zO>Hyd5gSK|;%P#v`(FEw-e>+KzXHItejJglfh2ig)hWgF%v%Nb<^`l>i7tyGDyLGp z=%xy^@`)L5FE&YqX~aUD#iai9i?QAAR19wo*CUD-!r#x#$8(RH?oTDQ23Z=lp3a8- zkbvNC^^ceA1N|=`e$fV9tEeL4G0`|-gCphh!I#n|46Q$`#*ALZYKYhSIYN|sY1v!Ql78-?E7s#OJUx+__tqag zd>Ec(q`Mi{3m14AJPUPx5I4<;ILOpf) zfyC>yS*?5Pisf5%F-UX>wV@C=jxxv56F`@A^OFacU6*U4^_Sqp8{1*jZ7++@O*SzD zI6T~sa3*3`z$;lUqUqe4V0=wTN7fXKw0vvn1QHYconOX^DB?F0e2=9B8d}w}5}j@v zUnhK(eR{(XlT)kCff?^t@-rFxkJqETnk|D??+X?C^G0gBwU^2@t}9_kilEE8S|6fD ze?Wo+pf^xdir=n$IeS7a2XkCw*m}araI@V~nb+T&m!4knZE#1YD_`48?xlf_PzQIY!76@nr|j)mJH=D;a>zQzAwVQvbb{@#zh%0S&^) zz*;SWh<0r!BM1ofuz&$41jQCGUElFB?oA5MezE;f2L24=VO-rD;j&QtplkK!YL2M) z$HhQQ?G8#;H7T!WZQ$Ozp>U1a1Mi=T?_!7zf);2+AY+y=qlE16)lfl7TMLFU_CA3o2e zMHcUGq6KevCl6Qdx`IH-lf=g)zc7Gh6Zn{-^VAdI zo|;83BNd34p40lB&I_z(u*bQgCf|B+=+&Q0Pno-UttW9;i&C@YqN}*>HCXlTDtsrX z#q@cCm-(3zc?{`brVkFkk%?%K?#|29_+1ABA?whEA(~rhl zG6y1Dfeywr!mdVA2w!o3zF;c@OK#J}z&{!xHNM^o#k>6}NCbrFZjYAij0##HUIRTAx;)43cy|XJ>L$7xPF{T@)LV< z4n47a^WhJ}3dA^)l)=`S674$7lfGY838-ZP>9CtURSK6dKzhCO)t{WJFtz!nype=t z58w;Xoe-5e?B(b@7q6?%2)32*`G`7KVmuTNaEbIsVyj}B=f??uD38>ZA~#4o@-2OG zv*6N+V~uCiWXrR7fLXi68mjwWI0pF?T4V>CIUdSAQ zl%QTZbTDm(t4?`K`z8?9_%ES+|)Qkh$%f zsK%2%rZt91nz~o_tz?8Izs7J8a(t(;CZBV`pP{m98^bb(nZv!XxX>Ntq=UFAsABoM z%8R=L0Yjk_a>*)rrqJJ!ge*50dznHD5pP6_@tP2{ugo7|o~LrS+_FU!uA_)_QfD%q zESHq+Ry(i=Yvr|eDFjEPc@(6*H37w!X=Tl;JGa?l|M~q{B1kco7UJMw)2#$^_h9@9 zpInA0Hj~uH8HpKp9HYLiryRJkUQ}&1G~opi)0nfb8}NjueJNw5dR^aladrIu7ThRe zFM8FpMl?0|+RH8Y;v=t%dl_~<7ZCGq%?fa)(FB<>&hH>@2s9l<|s8X!i4|u$EnL^tPR>K-dPus?YFMMstSoX*_ zKx_bgAsmjos=(Oa#_M0uGuWX78*?UXy2ydi>u87RZWYFIS9)5d_$24wG=Hcx5Cc&XaEERq%iWsAJT7hmhm?>>3cdP`* zMT<1)WYMi5*WW`wpKJZrq*_~_rf?oL2ivDY>A1`NzCvu*ZRaYyV*J2aN2X4b;>gx}b};P&p->2k_PrQN zH*;7e?zk5R0%+5_BHDcJZnM=`MvXCPeLB5?_frRier_yXI6i6daNXPhBPYbI7uO=V!nf|h z)2E7-`p{ezUNoiz`nya{QQ|8ZJ>cI^(o6YpM9VOBz0+3jnKGF$neuB)@W{NLp`GAU z3Sh99wG=Kk7<|pn0E_soU5hSr1QFJ5dF1jZu4RilXaDGh+7}kVCdew)~BVDKRAaZ&9?Z7s)>*1(zufeWBD*_u@Fl7JGe0cqs)e(nd+alW)2 zf!xqL9w#-e-(tU{JZ0)rmwogH*eDyX~sLJe+xIp0t8*4y*5Wb71t0>#vWnYPr-&<9j=aC&Td^0+4ulThBd zPApJE^(ixP4FVFKgdFtEZ|fo_a)~_~dT%L`-W)m>8b_6Cdr+Z@b#qh_%mQqCa-ozX zbFWt|ZjXV8qLie6NSHs~=Qn>-YYebmf(jo-5hMsnnFuEFk!;=}Ag^$~S1S>qHCTF& zB7nHV9^%kjB)SzJ^x9N*_fJLp8H^Y_EME?Li}B_A9Y*Q#WazRkt-u zMJ`Xc>^(en1)e}>i8W>9%~3!gG!1**z@&zaL9vUVx2<%PT%@hHvE{!y86BXV=bwZL zzYBSGG+jX z$zG8d8_WJ!eSi$R9`Q7N3yYEpfDlWN_K*ez0L98Y21YJC7m~DfD$F*3!x+`0i+X5P=*QBP2K}8avq~3DiVn~IM2bGb`iYWM8o>NZ zGp)-fzofi+lAnKeM?1a^Hq7t>lyS;6J5+Ms0@P|D1s=ol(eu%PrZhl#5C7zsS%!g4 zcPwvQ6z>$=nyWxvZ@9B?kmnmSB@y`gT#^E_I+tJdkj0C75&pex^5MBWKw2-?d;b^! z&%Fd)3Z`_B-EEOFHHqDm=@YZ4fj_i~-j6t=_cWk5?lum76D^6PV+UeBm-8Q!EDay1NofJf}jzk7cV6UwDTbcuu+4d{F>pAK$ zoc-=~UA;RNgJ@84Iv^lDcTk+;STi&(G%HkR-mG!;`M9vUE~XsDPE?Sm`rJ%zZAppo z_<_t)_eSy@Bkk-sZf)}hLA*BFoCSYeyK*}bqwJDvgaUv*q9u5)K@T`e6ChflZ|I!_ zO2N#nzMPKbbNusgvXTn1x9nt0N?!QXEI`IuGS+G$0SeNO?0n#FQhM2zJx*i|L?`hWvx3O-j8tokl@ z`Bfp(8pY8&P^B@XmbH|AV9d52M8Nz6KbY6hz%i3JQQ#kuB2f}2puF5lUKr|4y7Vin z9EElH0^Xj4% z*x13AwG_%nUXLfKZhTcTZwsDU1UJ_ytG~T#yKtK+9WVziDK|5)-7egymgrixkrTZ- zQU>C96gB>GfLQJLqqsZn9Vfw;$4m)!L!?~Fdk}y_gGEiF0-3+l+X}?fmeySW4rCyd z7pc3SEC4v1=kN4_ua$w`X4EA|OtHGjb4SwmGA6VKa{!>fFutc2)h6kjEGf9jg<*0a z8>psSF}M^gtsNYobxeI%8_U>OlcYdj^ zFRj0ZGIuVs?~Wi?MiLx(8*7t2B=pXbfcGn}U3tFBbolvi;^q08%uuZvr33Ovc!3$L zeT!icj4I`8+nU7G$@x!ra7za0X59&9wsa;TmnzPrwj3#aP`L80e~tjenZHgDfB+jg zy?q{~?OZpuL-^~P`?LzK|6VG4ls4KO+3uS7(Phs-BwyP{>Bd(qGC+?OiWP`1A9=_M zknea`5^{NYifh}WuTK*pg^2O96P7PNy2>E%vK zO9pM=hD=NIdt*g!IaMCrk09e0I{nF(x$7#qMO1?H9?jKXfusXmYRl^LuHO5ZkEY-h zvoY^Uy)!gdG^}KnSZMES65$C7;AX#-VNTN43;*fsPSRvRlPF^lvXmUw5dqBwtZY+I z7Uz%&m1{0VC zIJITOoAu-@bRUPYI?dhhsDzH{Kmmn{FF3#!eltqU*~J5v?o@)o5P+yl|82hX;H_i( z&x(rWeE3JoY|Qxf^7*sJJQ%?O0qBJO;s+7n5?Q-9yF%`2r(izSLj|r(yJc;)L_0Oi zI;Kyk*eljYWB=|%2}V1^e`Q3l?pu*#YS&GhI*m!c9%4lx zU64|knR83{5pCB_KCpk|1u?r_%Rxq+FdtDhyt;C*=E>e2=E1mU`;M>e|FbX}0`y{~ z9pl_?Pbgbn6SZZ(96m#VjZqaeskViK>ZMoKEy{p&`T80WLyn_#u1Ro2LZm`rjtTk( z(Tot#GerP2Sy!*xWO>FrCG2NushVQDIcsOAlr#SJmWkYyY*TQJzE|;NoHjlo%6!Tw+5)f*vDZE} zBgc8W4Hwr-vu~A8#OFDWr4Hp-Nhlfb;u`FxYPESXZ&JHpTci<6DeH8@Ut8YIY%WgX z0H5+f;i{;ChgUsv;=1AfQZV!!?`de$k53(XUzR$c^i+UenRGzS1fYi(L6Fxn{e$(i zLHf>`{?!#+zfkN@MUgl}afodZiJTW!b?$rsH{ z&nXE{?hyXz4%(HVlRTI&X-heQrC&sk!G;g?t@8%ai%FO3LL~{!JzLSU9 z)u~1_wNhC^*on1S&VOq9UngEkAM93toDVm1?IFV^RMUjGU0bqFolVeb_UL7kNtjgOTt0>iMJbXIRij-=C+Z z@UySLrCvBrEj&qQ|4 zJ8`$s5z&Or(ay7)kLtj2Fs(d@1m>X<)^xfjbszXx684=x0K5bF-baF#+3mn8fMgaD zwe8Wh9OiM850J?3WR(v_~i4SSzmmNGHvWXD+RQAr7=RLq$)hEHW zRakU-S!E(nHC$Yk+5rd~%zlm`;3MVd;4vPvQ^{2eZ5h>RE%_kpn16?1B>S1NxquUz zIVYzfG^-F_u%0jd?%E%}9A(yiCQU!Gu<48~aQa}T6upe>6& z#x;U%p1x#^eS4qDoD-;J81`&&0NWM9`sLs(5~|rzA@qH&o@jDLCM@JrW^SQ%&b?cm zHWS}23(Rv5dH3k|)>!^bdC`Kgpl03OTC1vezli`D7w6F8^HXrby>^VDz}oGWw7FeR zu5Cer#NNzhAYOXuh5lOkD1;ulRV{Axe9qx>r7A--%0!zo+n><7=_HV%9%*varEO5X z+VV=dC_7%56`vHpqS@$^*VC4)VEf8KZrjQUUJlht8e^PUHni^YrlF?Ouyh~_Mb(XQ zcS&vl>O6MhdeW{)K}t;jPFV>{cAw*3fS52f!s;;|6uJk1i4<^A^A?-wD!jV9|OW0pfL-`(x4kLmA;TUx6yrw1Ulq z6Pw>nf}gLx!b-lh$PUv!!PhIcWd7unMCM})^VEXJs!pr`RXivn9cGw~O`27SI}Tz> z5Wfo#y7k^mkX*W}HQ&;mWJx|qImyZ4kmlIEnMyX|4@LpBP$m6pCa{v{gam*}*}4li zu-FJR0IJey6kS-@V>aM8JUT0S)P?AgoifDlgPMcvAXoSc0x8>#T;r@V9@3NR1yhJ~Vxstrju;n^WvJUxU z8&R^yQs@ib9imMfqSUn!8DRGyBE>(_(kzWyp}k&jczxadBAasBUu6^MTnd1io+%IR zW7wcE-o8-?SvZnZzY3{YcmA4Fg#B}tU-b(7z?z_~MiyWTZYk^4VtoCQs16V>NP()* z2eK^6Uwmz!hjV%TL`fcr+9|63E=4J{#sdfk>D2ehEWj}v4+y&_Iqz=01nB;`J0`^G&-ds%ZFvrO>7i+7iR6hcBY+yFdg9Ine%SqnWeWMQze4nUnLRJP=2kCbH8EZ2zBddKMXUqU4cWKd@$KoZ~-tRJ< zvSv#5(d7Wrjwx>_R;8;GQl84AA$ z&kXUCR}%V~0ywcziWI!M=k-sG1G@cM+U8TL$JGrFuFHu+ zNr;b6i-Phapa^VDnQs~opjPLY7BrM|ZYG z0X!=4#^iz30>FZIT_tQh{3y;PfB0Uf4(W|`U9U(s>r6^o4qLdqns#cK&xTSaYIJCg zOK0j@mSkI@SGGEp8?t^PH2DMQ%%2=}eI*nEK6@>%7I5>YsafT7fHF4#z-=vflDPtC ziAq@GIr!91XdaVtE(Jxc2e8ro!wjHhHKr!Iy>on&E|VIAS+zXTiSKcNXG#vFHkC6Z72|%+Ag@ z$?!cuNn5WEUJA4^3=i1`6qABc60IKtpUhs-)pN3d=;~(*U|+06ZV;YL3@s<4Er&Q} z`}%F-`n83gcIqRICk)#r1}8;g%T^8BX5=@n+~!v}h9N&OZYEDRR$c-Kt6)4|JT-6EXP|8{USo+^FvQb5xNH8IRi_ zztOyf1!Pj0_)VlL?lj(EmL>qT9#koMl8wA67%#&pPAY2gb#^@L(OA4LWE@rkn>CxO z*SYP-R9ZQSe${5Q^&WB^+gM2(+9mLHI||}F`qhB(dXfOl0$Qj{5v<|&Xm_0PW;Fih zY$mGV%hc$K*wQewGjh8>5u#!p9#%L2IOUkRc*7s2tq@%)GN-F7s^yxsW*Le@yp{;v zLE6bQ9MjU$mE~H(&>xvsiqt8tXl2%xIQEQC@Gut5M{T_}1TWGB80@~6o(XF9TgFFE z&A|gYn3ltM?c5LR0er6S_ts>mV4bbGg!d2W>-(&SGISSeS33JCu#b2B*;{L8P3xT* z?Yys{XJQ`B& zZHjs5n8k|%Wf#f|)mJeyg2g!ksQ0Y;k-6l#c3$0r{<@a?FYEcGrh?Nos(=aUbeL@- zh&DmZxfjAKDh`M?YL?Vtu4fK@3L?aHsGl>-O@iuQCFRci4} zZ@0uO8hPF)UdIKss8*65HP*lxkWCqV7_|W(6l6!!6&t15h z^mK3}PO;|GPG)HAm2O*<;KUjHtLMuWs*BX>GIl}PC3cLJ$KaaXMA9+Z3Sr}Jq z%cYt8#qVv@OVT?jFLbje<$QLFLcsBC&Kd94PqaLA)!PlsLW;LrQ``S)|( z9+%W4NkRX_h3Zm~)9v4n0HfO$sMxyi6nO4CWASEawxc!IYhkAy60k9)TDbo;L?pD4TpYt{Qv_DY3C$W zZSOPTB-XeAtS}Yj>}jC4ce~-=D2nE#E`9BLeq6u2@`o+XEv?J3lgGVq<`u3^IQVpN zu@nzI3+|y`_slUMTRo}FORss`!Ju&QyKV#Sa%`VQ&lAVjIt73!X3V*dmPNH8*vJRW zPU6b1OQfDItP7dJzW`K4k>dSfGww{f7FbV_?i6g-Io%CC9Sv;HPAsiolDmU91u3%q zQ!*#DGxHsCW&B4jf6iLky|d{sBR;2NqnH43Z?9UpA&3hz=m-;eJ7`|#+lFHi*YF^m zaLh2j;=@z*VM$4kI4iRg*R+qzIZiVxiFnAEm}OotCf>N?4VPPD3F!nYUupCkF;fvw zjF{U}AzLB%q@?6q>H#Os6Mw}X-(7c`fNTqlPap_LE4cd&`5{Ffe3%_OnWxpa`ILKJ zZ13~EJlC3u@1<{kSdTXOjz;~^{LOY*3r_W}`3&`|U?`B|zTS3u#x3ziOECXl-q!&o zD`F@J4TJa@>5_He8+Fw%5Ez>=5UK@iF9myb>X5&eAAouLK&t&P@a|GG8MxBQOzL9% z=Q80D6r8Z$p#!`O_$wJJU>f7=`TTz`^KlYD`C|O!cQ*xr6@V+UA7XFt|6aZU9`gSm z`Tr;O|1zH?j6C?)2P2dif9*2;nRzQtYl~0ua%91}`@g^3v|`!tEB_Rbot8wn4n!b_R?}hZ4b|VjEpRMR9vHx& zXP87y#aF4En7}T&dt@)gW&DTBD`yA8FzoLT-O`{jM>J&Dp50bx zyyIB3;LUOo^fHCJEx1V^M7dg$&OjQ-wtYUdNq_G})ITEwlzloV%{p(=K~3zzWyO%< zs_48D9h=90hk=Rbb%5Xx$lQKZds4T&yi6tjV7PF(8zRfB_k{#VRWK@-&+%OzR0X39bwjeV_}WKb5w_7rd}-b z@f#B*c>Z@ep}+}Gi=Z3xEMC;FfRUe+U_hzbWL{zH6HJ#Ljz#vE`Dw*de0AQ@u`UufS}F{Z{dYEo zAAWxly-UivfR%;_2MET8ZqL^Dt6(-VkzOD;l`8w5x@`CJ- zhDsN)Ib;b9-wfe1{~a%M4yPmic2)e+_dq(%wsiL)PN3OHXh`pa8zS3Nw;#nY627m> zGIwSJSok@)Q>jOPi$1@fJzd}Ga-f#2|F4IEm&M4QDa^w&G#}x?3qmRV3Bkx((s9QB z>~vP1vC9UraKY4h2#H$u5p_F2?D$U8gW#I?U>D%siLnx$TM5~FC@nTXd+Wa!73jBC z&G64EwN6AW5F*3(uHs9?9KcIBLLmvS_#^&ZB5k&%bXwn2 zcv1STA6+BS+!=%ZP6SRM+bHn)%b<(Rts$LTX~nD})53qPv2`3<^pONwoe971k6<{_ zvWC~9X+LFLUDO9d;q2F6+m`PM9ZeMH)I0J)|C@m=l8CBHsm{%mfg_(!6H3Y;NzwtK z9J0+kxZascv2z=B{(tu-!|kBFNl&f+>3hqsS6JE}8V*`f6+%lw1m?P` z2NJXYHEGqLKr08=L-?^x2z-iP4DGN(O{p~iV)D@^w>Sw@fe$An2LGL#pa;03lj7^* z=T`|$7dICS137SHA*W&r=u-N_`#>3jit(>=x)26^bwaZLc?Gs;SC^M>rsbh3eUE`l);-?I#eb=sZYRVVixZI&-kHOL6k=RYB@XPz6V;n?)Xzno0&KH zJUi*6Al^LhW$Kn^pXqf>zETt26IJ?ecehsIbnw6q%&&1_`W#CY`u%4oA=Faqu7{7v z^P0`A>0gkTJ>K*#>kliwDDL9HwSL^)VCg}WGUk-bVCr^BzvZ-o14F6ip5ZyJ|4A=;`lp-$vnj9aH~SA%_kET z95tqe4O6~IA2&wmTY=-LOnorliJ4f80 zH3+eA8<)s)t)pLrl;w9%Lx;aBG4+JJ=HSNZaDVswmI>M({k=e>BtXIab@ODE5wi-B zJVb;3uhZESLc8a$f3VkhS|XM2QwT<>(0>%&=0QF7z0EOu%&i2HbS-oGERq+{VjPcn z-fVm(6t5jg;K>9P&`dnMcelmzoPydrTNd7)v=^6wSB{B|`G~b~_Q^f&>XGz6Xb=U39Sh_2k@pgZ%I>S!>?gl6x2JM_NEjmQa%cuq!v4P*3X-Eq3DRQ|M6(4XMdh4=bS*i5Dmt2gLH%45F zdido0brO7ZV8Z=@w#6Mj(}Nn=;6+_AZxJegWhIcF?ox4&&)1l%FZteRRb(Jdp>yGO z+Xk+mx_i;~{RyJtE>|p}XMguj-YSOQZb0}p)&zx4uBN}13|u2#R|~&CAlNMHB9XpO z5-o!3GnVfR|6Gv|<_A+(Sw6Fgo>s-}?G5YVL2ZbFFtQpN^6x?wsI{`~|0%uAE+#xj zJzpr_=DAISlm;GH-NZh>=P&Iz!;kFx*+q59aJ0RX^xMLq4+MNEDX7br%bExOFY@fW Aga7~l literal 156163 zcmdqIV~{4n*WmlKrfqwsZQHhO+qP|M+O}=mm^Pl)v~Bm!``)_||A^fWH}=E*u#r)9 z>O^GbiBom5^5ie8ERF4)0iZ@;md1=s007iMq=K9{JPZyD004lOln_z+Ck6iNfco+8 zTxsdJ^G|>{D~SsMYG?6I|FuY!6cJSM0J+q(c2HTy=dbg=-r2TcgC-UDnHGQ%d2%yP zc{$&JFW!8xw$d<^@JCQF%z#pL)3Pi_&bs%{!mXkrlmaC@MN|+W6@uER<)sRBD~DUX zlGF*7gv2x%DQ@G$cF!}<8-LcA%~NV9jn7`L$#bsv>}#Lj@z(u!P8Zbch_#GYogsMT5(W)S}v8R+bFhUNF=xx5a>(HU1eB2VIi zkgOPj$dLIb^-L={8P(^JasCIPxfo?fd)>hi>eL6KFl-J*Gf!`XkNhWED7{p)0DJo@ zs~GqqThIoliS3lWkl*7*XEw3|HJ*-3)BL(JNSM^lb1QLGT|Z8%2$<5W{8N%56vCjC zh)@LjybgS34oJavy*K4o-E)VoJwer}7*Rel4no$)3%hMkZJbAxtUV-}FgFXBzVxh`3dqnb-C8F`=kO z_N1AHP7r>~OY56l+@{4Y-@<|#xJs|C8XBJ}T(pL)6(^G@E(t?R?Z?!h} zG)fgOeo%#P=Y#&M4kh&=uPDq$;F@st^bqGi!j8Lsu)=mi>l zzit*cd$#j9bA60$MSACsPN0T`!6O`Q%t+PLLM2$16%a?6&n>jz<%$*`QN-9I3yCh+ z73$j|kYAS^2aSq93t8>?+S_5J%h)Nj_PH%P*PYC+I~(m{3dW41Ww%*5A+lLMMpMA8 zJACKkcB>}z0j&kn!pqwZiubf*3&ReNGB-pOA`cA-2HEUa@Oay^edVVyoiS3Wm+wI~ zaI^GHfWTs?Y>aJx>KjtOA#=PQY~oIL<1x%bJtGZi+9cMh&f@yA`bBNt*)@BEgV3a ztUSMB?8~a+@42+k88D5jQj0P{NCE?6tfr8bEeRxQ}3Yw6d%IwB}@Ai!@FsF z;Jn=U$<{X_Qay_gekhCvWVabF#JC3;6-thH zfT?6&S7YaD6X>d&b!^H6BPehjC=Vs2P0XhJ-WNxtxAP|Q_37oZ2{~&G9f}tNy~8XW z=&UfL8ifOY{7M+e)7FU0)LLC3UHt3X&mBj=O5j;Dq}O-wQf<%c{Zu9?XTO?72C_IZ z{gdY!1F4>ocPGtr&mk?>CFk_TrVHWk$Uh#<9y?6Zs|R`rfz+k-TS0lW4NIhJ?uGeTUPy(T~{qR+y9viH|(Dc zk0v(!B=6t5da-5WaFiTG^|#=*2lbL8hNK?hwwt#w)AC<-#+MZ?yvfVTfUQ>l74 zIcL#ImYh(0ktH<~lrKx$77Ghq?e__jD5-Ve&F0eT<7mvbq+ohU+#1)E#bQbP=35QI zw3}%J3!zW@(Q17qOmW#n4-u|gp03l*97CLCs>7S~iX-iAwQ}rb zCCa`}{qXshA`kZYiDYc5NzXVIXZ4x`Ziu7x7I!(hbld2I6bwNRz;KLT6#-4o=_8J zCxP$YKqCqy44AEK`r)t&w$xQ>W1=$f!o>|^bKXF#?rXZ{h=D@2J(=L^V!t#!#diN2 zwfg${%?@7I1BMb z)&bgo*$O~XR8FK;$RNnln1LMtK+X8yq&NZpss;RaiZjG#IQ38Y&lCq$>iMRhfQ1^(m0orrr^JuEw~pK&WOHQy1l2$ijx_yyzOAlRNM zh4my8%fIbD1Rcrz9t*7R+yfbRQGv4}ZMA6WD{6WkEKz<~aF)lXD)c5K;6!iCTX$n4 zzxS&UA+Nj$>HWkmB`Ip~18PM~Ce}&`@vRoGB8QQ%LK6$l#~I*47{xN6B#^*OP@4?` z)i*r$u#SV-_0Q}sEO*-s{a>fP?w?tARRiS?nDCsm9k!#1%&_BwV|7!&!HD7#FoDN7%#W46 zk8#Dl^ac$q8z~yE-x6{um!;fwSn_7ucfmoWOHJeQ8m{Npxb(nlar$uMD9qEzNYvm9 z!-Y5=HzocGnY_>O?xeZJM%2f=tSs|CZ3XW|3&XH^>o(Q4lAz0xjlMO|s+i!jwR+C-E6b$=p&T73Nc^=MQ9#f?O;VR9GNlW7@wc^^siS?S5r8Hf`tFH8*Yez`jEST8W&zwaBo5%jmv{n2iyA}w9|$ElQNs^| zWA1ES)c`4VO;OY-_>(2Xtpj)6aBSQI5D zQ0Z<6`DbWaWoRV3s3Z*9E;yz213Emcl>a(Mi^M$wp&^%DQrun;fN^T9mYQUCKwij+ zI?ltvDxF`X5VRaXl{U=ff8EoUXI^uzBc_2M=Df-slh5>yk-9t7(BcGa zbSgy*|3R_B%Nk>|{i*T`E%M2LLd%XTo(1CquBv1nCSwH&)`kt~I+LC9;Ii2%V0jY1 zq*87+Kg?{S-8g6$pfMacyJpFbEuybSDeihpGjt&g${M~MMqK3M@!E}@d-Sgj{W+1d zs_?Ynn0jNi2go@XIMJb$mac7El6>dHPAom{z|Jh!#2YqDt zF2f%7g6jPtQ6u5Pnb>Z-)7{??9s@_DC39}jd5wlj@k06Kl~N+d+&4!#raOpF;-l=% z*iBhne&B-VcV4M@YTn9wt7&6OEpJVM1epT*xe=`% zG2qkw!<IKQq8KNwWzR;mT^QMi`}>ScFqt&{y8Q(SK@pq8S>k{yM13MsVzlSmp|+ zaAAR1CQFyWL->6drZP~5YoTKm9r$K z8Xgfl1k%DMOtx33Gq-d8wZ6vLLezCYLM%5B5Ba^Q^x>N9C#b94jAnN{K9zF6A#5Wg zG97S}uDDRn2ZAvcrFw$flzAxv3Ym^?kcH#0S%Qy{)i5PCER2MLLNT4v5EPpr-mLyz z&!gfz%L!3{>O}q&R`MfXHM*Fzi=g{TBFoWSTqLWU7}_WCQEUAkMxI9GVfa~7ymajL zW#R=p=I0iyX~zU^FWg?kwK}*P%|krmfhR-fdFsAAbjjjS-4F3=yAvG+pxM?Ub`hV+ zgB}HE2bp0FC@vjS4;Hu(+>9~t`#n=}89}$ux`K)dxb?zNmRipS+uMEScv4&jAAjY( z5Su@?yp0P&n4(7}HudDuhxc>zE{-Hp%OK5ZM}=uEa0^-Qg*3OV12M0FMxq1kfh3Jg;Ta*@YHf%H-zGLv}ul|S?` zR70;bDi%Bcj0A<)6uvB98Ux{7@R_?(BRjKp53}-7pM%GVmIY!3FEON)Q8gOPHU^Sb z5FRu6hT2it@x2g*_V#{N)RFkx;J@t`)JgmX3qjvQ!57O>L%}_UmEepbn{DF4gu|C? z01?BoX*c9zG!NTb>zHEq?ltC0CJ1`RWu}j?5<-wG99k9T>6Om^(I4@$Aj(d<%z2d~ zzj~d*0odkJRxzRqq0ppeKLRkQD8>BnkT4jvG_i72Nfxas)wP~~k*=e-P;~ie zt{EW@NVA4wIGtdOsLY&w8Ja>?0;uA?nnj6X2tem7MndqomvAAS}H2y%3 z9p{F)Rk<;~zEHJ{#Ay74>P8tGU89twbOgkx3;k?;L3~2UOdU>f+zi2?_H>!hIW_KmcHw za>hPa|8*AP`WHjfvZB|XIVZ|CDD6Kv6UKgZ`_5p8>Srs=eGq8hQa{bZGvKjo!$~B; zzv>K*o-R4psCS&NMB<>p#McC8G{Fv`b*xIZ^55EvsvbF=P^U6M8YI&f`JQ0T3y1DW zCapJ8pie-h9Z6P^$&dD|2ESY7>?SUMzfHe$65M4&DR)VdXCysw{qg0`IP|2mT=xTK zOVP`zpmNdiF)Yiw7bXA|lS>SnYAk^aaFybkyvUVI`?G8HbrhDg8tpqu)ine$lnUMy z7fvBrUMQf|;O6%Q84Uc@(Nt~kB>DTj*QV^tUGRy7W_pE~DcfjDQ?%G=fJI(vhpEg{+uC0PQIOtGO7ESG;j5%A)#$oOi;jAc564z*Z`np+S%$SY07nfVk(sZ} z<)m7O=Ue?A1}J-F_o?4=blJ+t8oL1_%bs-cQ!t(otK-7SL#Fki37#FZ=JXrkD4wiB zVV}LzSb1uMRs59qGN<8s$RrBSKRNI*WH*imM_0s(Wr(s{b$0*7HJDI&nQ;U5Z010N7}2LD@o|}@mAQEwQSDN z;fEif7aanLAtrU6$z9g!9x}x}1a<5ks$rM*8O`|nQZkRdpXtIbhb{Hd#D&+^7=87-#7$&FX$m2DIJ z;2s*?bMvbAkDo<3Pv@+HgZ zDD5qzQ&5&f>Ly%8lt?Uih-_s@OQJ_YLIUFv%IC;b-m%s9{jA~p9Xq$1!}PO|Zo8}1 z7jM^`o>itMba%Q{&X}w^)I>QW$6OxTntDxymZFn=iumhl1IF<)JKD!q7aP7MlxMAH zjnMls+VnM+T!Cl@Jcv&+c20k7MW@}AUvCXh{!G9Z!1A+F!6 zcPR`3%_H=93{66t$|vXjSl<3hi{D~b@7%7iDH-=xlhkos*{#hlSc zl<#e|VLc}maRygCJ>$=fF1kBF?Pc|71-QB;s7?hF!+@euV}#FBhyPxd9e7lot^88s z5VV+-**N-IlVcG&Xmp24 z;Zuranui@ZUl?B*Tc&P*cMMmSbeiyd>3=h~wwcd|93>))&S#Bhl4voad8mG>^b$j@ z`8}FgJtUs`zSrY(d+2ah(15E2?n<@jsS48Ra#AIJg>LV+v&;3z=7XzxKZY--Lu4jM zuUA*W8bdBQyo5ck9H*y__#L!053;CyP$mM!nqP%93e?bez_||6+1uQ&^TW@yjIoM1 zrj+0vA&;|aP3ZR$-DRdyqOGsidN$0bRANp`L!K2GKO5Q{^3HfH7ZJK`) zM-n17U4kXAW{dKc(9baI5(Ej3;YL)lt~4psA#=VcoghPjVV_2dyg}xyEBKU~IVI+% zA{Spml2n%NXL;+a!nY1rprObHv?oK3pm&(^7@M2=?3x}&EQ9kjko(ea(m8Z}qJ1?% z1tWr03IC4WUxT(>AEF*K)pGJu1yJ;EsSt zppp@o=ePB=#Ez2A?W*p!YB_e)c?(;BMai6kWWg|A54qB4nuU+s|G%dpu}qv`80?|jtP zL&JvyX|YZP4i1POsMUi=jEz+xOS*n{=55|wBYAvuO9E+dcyg8gcatxdt%{D~lL9T$ zN4{uyjE|BENw;ZAsb-b5JMmaS&*S55u`Vpt1;>0Ai}usxs3cbK;lO}{OO@3D!{_aU zgSdbVR!^3Gyq@=aT%HNBv;o_3`He$BK6Kq*roKdL+RhdZ<~VL9j^?3fB`GQ%<)M2_ zVkcY-<=V2ab|$a+?@QpqdcOswIZIM>%K0p`186pYy#N0{QH&k<4XHN&{8&Dn9q|vb z{Rfw0WCj3euKrgp2l8Je4)EVxPRFU-?7y`C*m|VN|DRkAGFxT2=Vk74$=&Roj)ta- zMbpr7k%mQ7ScZfVhc$8zE01(k10~slrI6m=m&~)UkSy(Eris)DHgm21=b8eNP9+Vf zw!!<=#q>qW=IndUfaoOMW=4nmo;x35dsABu@G}?qn)AgSVjuu20f7DqLJ|O;06_V_ zN;faV97#Q!%s{{QJgCP;y%Am#RY z#R^fnhVQ$`nBwDOmNkc5d2I<2k||LgjJgwQgA1g$`*t?3wvadLr%RpIy5m1A+f#gg zYSs23?mO$E8eqSto<=Tg;uPLLHQyy`6DLAn8gBn}{>6J*lkWmxYFWlJ(rz+^f#Z0#?LnI#h~7noMOs)fmR#cNKTvOy zhR%+iN$Tr4iuKjTpL^+#fHHn@{eIIiARNGEd;eu-I$PJeLgu%OLfTjWuaHi$L`sgG zOS|k>H0^jVO75Ktstbzi>>vQqbnC z_-Bv|6K@dTx5(=ERzA=Rx6Of)`UeAE5xAZv?xde<)!RvH&uF1V^TEj}%E3q=-K)vv zFwtpPSJ~DL7W=;aEf`}V2uFe#y?E<(yp;PI{&zvV^-5CrNd64vk6ds8!qrSvT;BGPMGu^drGGE*`#>W&E9$y{kj}Zc zQTP2kH{T(%Kuj5VMDW^VCW?&#l)CMl{qyh869lC0F#iu$khinX$sWRTcXh}P`_ss{ z6m564{E#B(f&D)d9ffHyNVT6y z=r(yCZ&8(R{d~;dpm?4t{3LZHu%!Fz%ed<&#b|KIwXF}-t2?5O@sJ?uR%ySVSlTn`eu17Qu)zGcV zbRYY^qWc$?Sh+*;Jog<>HE9T17OJN}N<|@4S&%n;A?@y*;~S24D4rL$&FM}yTQo*P zyE@T8bR&kYX*h9FRCocz$o>t?3 z8F#@L|kP}M$T39odR_kQ=ZLa8TN+RXVb~@<1OAFqXdprV2+fvS?Q{UY_5XQ}dA`8-*m%G5qLDbgU7|Pim|?jEnO#G*SzIVz|2n zKS$f50m~Q#+nTZp{M;BJ5qX zLDI95(9qCz@lM3L^>_dpNj0c>RltvawTT68LxITlrzf|p2jXWrvu@aKVMZv1FSD|c ze-RmMHhQt7vq@h8T>^zh%0?~y6dlgr`K#aS`%)###HbMDgsg!}UK}-~5zd^vswPm8 zYrIOhtlp!UHBe1MVA5qm4&>h*uRu2E`?5*1=rl|+sD~W5ZM=jMVV!mB4Ed1{$@*L2 zB4<2!Nv>-Rz~;|WpxnuxXx`KiNg%Lq%G4{7J9t}<9}-)cYyt36m~O=)XEx7qlVm1~ zv~v)$9_)Vv@D}H6(+zo{KvGLouaJ^~nfUCS8_k|Fx=07iY}>(%_LRnM08%nVQb^o? zDiZ)}c0C5%z<(||#@be9u>z|Rro{~eOYuG~pTn99Ksc1FVz?3AbQQ=OXLv7AG*Evc zOrfy(V&AQclBE=3f~O%vt0kxX#=r%zxq)x0B%+3o%g<8nRsNd=eq9C~(>k+;aq2sX z=MitE&q`OnSttaG7<+kg9gMX9kTAGnD`6C2)`Xv3{7F$fFW#!dD%}g|68Z1_CuG%K z-`OCue9F*81Ad048h(42K$fjbU$o7`_{QnM*YZ79{wecqm`w*o%G_zl3U-s`h>L5Z#BddfR*@U%)qAaO^;uSXEPZnL!&aMxfQp(4(v>*@9Sy|3mu4GwS##wv zgaxe+w7KHOMUB=bF3pz1+?^1kc6l*1N};kedr=yE-lZ zBJaX7aMmm%O4#GvKQ2q>w0qri0rqto$NvC~&vT0Cc*0M!GA({ z-t9e3rWJODb@x&-6|s?I_w}$jnOUbKS0Ln!`%as_GqcM4`RmD8K`wL$_4-le-ariL z4C66C!o>I|K;7zr^K}_j8m~^r(dgV-$3UbmE&5Th`3pqqQMuVN>-p~+GBMi)9QtV( z8yO07vLB`~jy(KO{txkN<1n+7(EaS@HdeVk8%J>=>c~o;A0NsFj_`)~EY}iXoheAg%vkI)p@Wqv$hlO6 ze`ebC8_$b_$q{p-cGBM|Xf%^d$?d1G;5a1W)J-+a{yNKY-tvl;9KrvG>UB=YKN12& zK;;tK(F^InE#}g@vQXaGF-)AIhtZ*xT>S7-f=+iGaZiRsh|=3Q2tA_@)NE}F?nmEv zlcyS^jT!NuEJ=zhRf!)Lux8L=P|t#_1pe}tBw835QJBS8$0fkADKE|ME1W$O9Q1Mv z`jh`l|n z4GL0|=;HIN$7=o&pte)TqvgC8a~W%*Xsp5CL~4UJwBZZ6M|w41@qTe#Ogw552^W$? zT91H%Mkhe@h&k8`SB4a-ez1-`SxS@M!6*DHi!63>W9U9IRx=0#_s9}0iusTYg(A{! zy)hJ*-43s&PX8Kl6zmG$RZsSr?2d-?Ap#t`!w~@AR)7$G=oXans`GsC@``MU`d5V zGj9o7!_tqo$e|g3JvE(<>OflA~WDYQLomKn~cBh)&11XW=HS6-`* zQ^yB=3v08VHuBCsX5nO9tV01PczA*gCl`b%sAh|)>}%6?C`Q23FH8a%d5sEsDY>L; z%(Jo-3He;MB!7>UnXm0FXJ6`(^{zME-nZ;8zTBPT)<5%#{@SRWzC*P)5PKYJTEVi5 zhFD9O8WU%ZQ7%Re_ovZvlbxnc(CVpCYp0FBXZtYwyx*dtp1RyvuuL;EcXT7yUm7Sl z`;jstQKPe`j^g(1xtq57sL_E|Biw@4?c(aKxhzT{5B30UEk!bf~-h-xL!{0=^%7x5QDc1JhT<5ng z8fQlqF5`K6(fpr|C2ZUT(HHcAizPHRU+pAa6A3n+W7Ei6_O-l2-zXHa-(1p*q%MfJ z^YrQ_Tit$>_EePzeKwc*M63oyvjn-EndzE|B@}c@d^&y?y~@BZPIZ^B0IN8#MA{tS zwms)}XXoesD)pc6%B%ysTmqKF3gGp{d9ciZuN`C#r&RY@oTw+_^W$samOOVROr1U* z&;9A_nhhI|rD%S)45*!8p88SudHQanllemRFUfwu(yi>dPy&5^%Z4d3hO`Y z!l(`y>^@;;ez)4Cw^D2%x02j9X_*KLSnzu%9cWcC^Gow;;|BaaCqm8DUv-q1Ro)sY ztJ6PZs4IKsJ!CQ!pf6GlK2Shlrzc%-1j1LV$mWT6k3}&0SXajJvxaR zoozGIZIv59NvSk^6OFWo=ikKm`fj;R`!9LSv1RwZV)(dTja2mwm#qpZ-A#;cQ$J08!61#I{86^>{fnxX>8foD zOK|Af71~&9HhgVHSjy5IE3YGO_B61Zh=1AAj<|tnrsq~57YCZM`J}}i>b9)c6|mvX zG+>KU5qapd%J%eRHx4yO#b;RO5GHslIHXMr`^Dblc z5JOhI<92Ht4Hs+(atZKK4ZF8JxW?Kk+(i$R(ft`8dQWsSECQ}o%2=g~=%`HSMskWc z?~9z5ST{SE`Aozd>bB&~Orc>|zSqUs(|#y)O(IW_v8=7~P|DwboDFn(K5eDJ>d%T= zrM0+TkVCY93p5c#6Ap{Ac)nr>tLyMQiPV!8B2{{QPp2)hgUa?Zd)R%s~a=omM_vg=@r#Ua@ zRG>jNoBaEhjSiXHboWfDX`R`m(>#OlX^+POkvS;z6or3C?p6&kA5NdXvt6mTwgD1t zRekojSx19cjl3s>D)#bp!EYK&*vbruw?ijm6Fq?j56h`WuxZ7RXVKa{rm9IZ_5VQc ziyVAdc(lpwTMqnN;lU%BIPRt4gbt@J*4dnHz7 z%E{oji5(DzU|K6>h)~(`X)7sKJtlwXii&}I!Gn}p(g)O*glQs)r6p|@WpG_YDlGca z^StBG9(N8vqIOTdTY;J}nlh_Fz@vf0^wox6R?ZGogmlb}pi7 z_283z<7LRTG68Jj+`PAFHrnpa1Q=^xX#eW*4)^2hVFhjP=T3 zSlgji=fpUSAHSo^)l0(%ME;OIl601sA+Ou%n>%0pb*FV_e$JFvO+h;S9IP9J`oXkD zyEX}MK}v@%fz}Q%%L1?kB#UyJvV-yg3{Ux7teeQ9{;j>OckO5J#LZ-#)&+Bm;r3}5 z#Dc;*w40>sm2HcYBWvISvP3*3Q7($s1t#vW*>fme`xl4>n^wfcl1v%R+HBD&V4tLT zan}n!B~7Wp1O~HEb~DL_d9pW1>pNTf*60>5l8fl3?H65T&FMrhQFL}OW1F=*8y^|a z+$J5SC4vye-bvQfn=g`=G6Z^0cmF5=hqjc~e=$JZd4o5WugU$T{Z$nHvT3LkX^07t zZXg#VnF4=!%fD{aYNF)sqgS~JfdoYoiQ_=wz-S3r5>0_fet6a;QiuH93ZKke z>C?PaL}uk;)AypUL4GD{)Rf*QZY)Mb(`@Z7ZMKi?!p`Pj>FH%JEITKtiS%Nvm!3z? zsHNzN4@Z@ZQ{Vc``y1q2n&MAda|zcUWU1Nm3bMzm*X%aKeL*ka^lO1GgUD~ocT&q4 zLW-4(59l*MY`qZ3SxV6U0cs--fglXbyFF@Y{Y^8{E9LOp6O<9QCRb(DN`mRd9xIc$ zR}vJ&`!OlV=HGah=^%$w&VArCXoC@(3+gXa?SE90r2DR3J+^KT2q7rqc?SaDt4ZYj zw88a5)gVSEsGX0XA@&cp(Bs!Ce>bpp}|ITU&TuuO`BWCOg;2Cn+)Urf~-?ril zmj*YlrQ3M>8V5CnrytDx2@C4nk@|N9cMj+LGa4T?_SYUp-JdeddqgjEIy+U`0M9ns zo8)D6bbF8OAQLX56t2Y5jPAiF{zjI1cy4jbar(Tar8kL`laoT^=>=sVAw?EyhI@yI~#e z8V9h2_Rh2uw3+>0lh(iLz47+Ep2dwB+Aq$V9w1x_nl_ezi~#=f9*@TtqF2Fm?w%%2 z&$Y@5lC0kEriCM=uC%Wl=<&eldVBda3`FPz-4J>GJm{)1Dg?ye96BC%`{T^5)Sr?E zX70|A{FXK#PhRd z!pvb~fxMLGWgVs+tvK)3SMSI1uqrd$1D?A5)L|Nt$#MPBa^=4q(cNj1?3#@yp5k>O zl5vFJu&lI}Xa}qk5z^yh2&s7e?=#{F>YW9Rw88q(IFWXP($k#Nh01o>1m$dH`wvN& zShOwmSyX%Xvry5rUu>>z&3b)Wum3KMMX~=i?Ocny?eVRidu~X|6X=t%%x%9coER0w zJGQ>Mmsa`!=(^>07i@IXW$$LI(NG!w)>q;wW(oH`P&YUK{3C}T&?S_|WqV51>X*%J z>NLBfpMCW*uqJeB3|*NcNqRBn-RT|D6EF1GQQW`mbwzSI2F$~GF?WC7c>Q?XTaQmg z{7XOaKw(IP_jv?Rwn2`$$pH1->`=}=&Q(&YUytKSdn4eeDWv+6rA_>@gI2qA_hK4f z`?Ze?{QdL0zJH2!J#itBNpnlwE1yFAtLLoAVYZR>%y;wb0hU?r501Q1Beqp>` z@}OSE`LmF6Q5Be#*>g0mwDx^Qd>z{R`NZ~_+f(CJ0mHppAItLtM`LO5+%dV~^~0J! z^R(B_tHStQ0QfuV7+4cC>v4EF-eP16s8#^S0%ueZ#5m*ROc)KB-VW*tW+IGUY8**p=B z#xRkf&($EI=`r(rDs#AAZF3W28jpW)BI5NCydQ-39%t=3GcFs36J20QRS0&CX_)); zdg@;#oa49^K{9nPgg^hu)BKA&*#G0A;m#Pg?2UFC<8uBme`@lu#+iS@t0-u8y_x$i z`OM7LFJmS`LUF<$iCCkSZcs+Gj0Pz$SWS-3m5;qn#n)mb!$x~1j3-4?-5+rrFh3TJ ze>h$85f|4mfxMbXEE=c6L*ek(|LlaSvB(nvCFGq*B05iZxiz0n;)tb9)GWYx(kJ+i zAzT5V-H(RH#Oq;rz#;4`X-2ZEMD?Nf^>;~(+TQ<|ZjS7VGrBE`GgF|`6Vvw*=P!M3 z*A(^ne)QR9bFwg_Essq{g5e#LJ5 z*`2+P@2t%7@8=|f6TISpoF~t+U7Rv=u;XvGQ@$cfvd*nW9>dS81a_2#(KgcJ#nyU0 zN-S2`B7-FvhtF-GO?uqsWTrtn_jN^FL6MNDbjYd(^499esEN|LFo+q6` z-H&A_yj-0EKR4gDN!9Y;00AgFuSA)BC9@eVEmSPAPKz()RNz7X{#1C5+N2yPgq;1^ z*=Z{hX#H8dH~V~S^D>a8q8@qTDN^poa^mfuRaIQWtFePYx>KH+uMpwL$;bI?eDR2K zByhu0+pjlWyPbviap)>S+auRbkF4&nPqn>-j7zI1vO(66xMCNi>}N)|0&DTldTTXD zm*;x(Pvk3@q&r5Ix4p;NcqdH6^#uxNk_m`W*lt8<5iouKX>{xl2(#YnKvOTa1LdIKUI=SOf_pO&bCR1|Q5v*UcUOZn zigosI_D&oUI>@qokXVX})!1p*Ku&)T7xge85aD*iphOYa_t{VGH4@j-^IbsmIts}h z3tN?iTINO~(Q6hZ5-tMhlZGS(fKd-JX|4T;<$xegOZ`(U-|}eMFZ;`%$7~|w?q~nt32GRUM1Vgre5R8mp&yNTAQ#)5rtx60;#Xw+@keGE_X_Y)5~JCj5&No4YHLtKZ#UYWf5GlhGb=i zx3Vi;Kq0`!3((F7IXu(9>8}xp_-JteE`atOpmi z@nTZvc&+DA+_feGjqLVGHQ}z7$1eNv+D878MtJJi&GrKQr@761=RWgmd^B^oBawpo zaw+Q;Tab;rkzzHO!#&AqCY0GX9>K3t{2CU489?td&-U>e8);spec~bV)aU>XYK3oZ&j=*A3#?k^xNy_s8_iULD^G| z}b_H{QjE_7dKlhjsMROZ54^ zxuF%FH+ZX!C6&kS<*u`unV*L~S1;VvqSXBh=CM42%HtktT$Oh64+C9NT21wmFDf{&k5ikn zhW53fRNa|T2t+oWwv%=u{}{iE51e~HOI40Z8jojx^{b7o_jrR| zHxdVmvtwjyZCYg;^>_PJfkAemn|ij>kE4J6aktR?YygYM1FjVVS5VlTs`Q z-*+4HhzGm8BbBq6vxsI>o>@Uh)rgZu!d!EEjyFhaj;H+LZDJ41tjlkUd5Xp}ni*q8 z(siP4QmVbJk+QcfT<>5gO95H{+BFTrJR@=e3h8U8>dHNN_>oY+m}Z|qoaad*X)fFh z!=+)YSNMEVmxtlE3_yAxNJ!ZvSWgx6Cv?2{ll*op|JRMEYB5jkZQ3dcHiN?$gml=W zMi7i@@Q-}apbe7u>vu0%b_s74d}+d5&~r#eI1JEfQuUb05*yEUT2L&&NqB^~5O!>9 z!q}+Lzr`j45H!>92&Dsp8`QR%B|MVNF(m&?hd`R28=UONOYv@0IQeJJnjp#MqyaTp zzZVe^;|=(pn>H|^**0lip+02nLW04b;0ao$A->ny<=qFkkTk6JBfvKW>T6BHcko9~ zk~r+G;|)PWq;%<~<4wib2KmM$pdO}p4q6#ZoWMFG{`T7PGvt}m(|Z|^&%ao)X6P}s zV`)zf_7i3|G4&>EVh}%gw63!!nO%0V=b=o4CT)!@fL?+dTrFXoNKqc2l&}rKz&i_} zl@U;V@T2=BDM-f@^3S&>ju93Kc>BokH0({6s6&x$c>e$w0Mh=C=^wgnYe>%v8Zea< z8>5zj)}xe%;c-x%ZbS3XQ@K`Dn8RmuLDmZfq@Vxb4LnEh&vW%n6P-qGtChTC^YjiJ zM7ImuSOvUx=zFdg*=Q%KHVtBsQ7$AnHx(E!_>j%Ne@s0Z$! zcu*p+xqs#H&x3mY;*&YAS*jW+a-&7YOr!3I*w?6)4EFEO%uYlKlzQW`En}@k|9D~9 zycnXkhF6B|@Q1%q9UD3L7;Lnix@QVO^jLe|uIzs*y61jac_laFF-(QSy6%Un_sdEi z^ZGtZZHBrZv{p6H3y^XuSv8A=RnaCLGKj)l0r?;7y=72bLD%m)3=k{?f(Lg(aMxiV zxVvkDI|O$K1b3Il@71e&um1IF z*@(zbB`f<*f7eW_?0;ha+58v%v3ZKkq3?6Uit`dOwLi<4=r9PoyC!enc+oiIe&nB# zoB4J8_cNFii8EacO4%D*1V= z>iwF^UAvnA#R%t?gz3V3xMQ5XaF00di~LxiV;?AaTM8dg@jMc#JWL1;_doFN)q-{X ztY_g`;U_P%x6VzXoX(`w+wkO%5Jy0h$}A4?+l-akWag*pKhq0C9Y$oqY1yx@u4_l7 zm9(v$)y{v6#`mWKCAr+wzw#4Va~BZWL?w;j<@0-$K6Zg0zi_YF$^*-ey!_id2kS5% zsDg&mR*uC9?9f?bb1uu^o^Gsu8x+UN(QAD z-)nHH(et(Cd2&O>pO~#nmPL`R31H?=urCf2b7CLy@)}Y{`pFWt0pPwqDCi zS(!BR)g8m1cf+e2@wpG#qCB{A#MEt@m-ksbb_$wo8{-mk+&`^5f{gjTnx-E#J%i)d}czLs|)(;A?^7bF6G&6Y=`)M!wjD#Vh$W6Z$ph`U1TkL^4+ z=Pb&|VvmO>__fmTt3eR;Cx}gdzTfdZi+<^NRgkA82pfh0~&zS7j~xs7hmeB3ANmZ2lG1ppw7? zZZeXFA*m#?{V+9>Yg2uy;*;&7qU&u9dHc{er9SZ3QSX;|@m=JfgF>Gxv%H|NL1&x^&mz;5Zu0t10NLG@M0doz#Eyk!l# ztSZ7(!a!twyl4u;KzF+RJ)b3s=fZa^)gLH>I?*Tr&B-*U9Iu_~dwZOXbrDOm=nh<^ zv1BO$1PQrFFqO75U#R8(4766T1@W0=B~`2~ z47DE>3NHUIv@==&|L_ICy)%TIQ27Bkk*jYV0055BDQ=^^!Vdte zG$M z0iMreyE(P0Ekc24}c*HEdl^w0e(S2eh?P`1O|)v z0!W3xAb>PKzp5li00aOC34nza0RRCZu%LjTAoRyq5L8YO1O`Fn#J`F_6~2N^{!1<; z%pc(UAF-go!2gH^h6X^zeEkFc{h@91^$+<400adGMEvsi_XPxm{R)Br0Dj?tfS`bY zz}R2m(5nHVeqmt%KuBaj_^)7JXgM|jD%Keg9sm`K3Jivd1qY@4m)PY2v;bLvK;^dg zwjoft&EqYoT*=1%<|IB8~a=THa0r}fc2NH|Hy4$Y(wRaw^pGFyZewo0O;Ys(6?wJ`Txz(4FmuH!2izB zeeF8)2rd1u8M*}l|DB=xWEH`aa5o+NYHHHJRo=oN-9RPH7|YjCU2P9DEiKbE217;` zq3{*stNYn2w@Y)EE>Kbe=(kQa16NhdiT56l;BL)$IMEnex~9ds-pko^AHq*(RC-dO zHYJtlEN}%pKN~qQ+Xs!0TzL)g3nNk^3Ic%W&}TskfO-4*_8k6)8-d^?@ORD~F(2B0 zw^Je6mwvd|DoGW2+4h9-zx#mTAuwkOrV8@bDc(H7n`it#JuKi^!Przm01aq4V7e46wrx>01Q}mTi=9qfY+u`EOv|iqN7O7;x#DMBC51~f2SnuR zHOg@+^{HXp6N}9N1_};6yLDlHq{W|-3dov2EeTrJLQ;c) zQPY!PU%eKfqiYtwpF$vHy8Khbk0B@9^BTYngSe9R2&)I4{nf8mjp<(b)Y5d_I$a13hWh)d6cH z4gYwM9RIBa=aFQMrYw7n@NdpB9X1x-1+ZnCcem?!;c?UNV{I`)bZ=%jQsy1trGtp< znM1xUD7QVkZtfvr>YbarzxIGtRY=d?Ka5T=dJA*)v9dxARqRA>@Mz9F^<#!!>VcDF z);!H^if*CA!BV`%EQajFqT{Ynt)XY&UVSO`u``Ngq0NpOcG$(5r1NSIoZmOvjkw*v zXi<;EOAdVw(<$#DO$D4O+^fXyUYx!ekmOn5i&(U<# z;M{e;%@@4NoV4^VB2R+GweN38U zzY)W2Q7E|UG3xkCy(rixJe8`B_I$T=m`qMFd33yb0afR`usTmko{-3ivMP<_8N{Eo zdj2$DO)@cq5KN*W}|Ilm_a`j+_O36S|1spVx zp~s6hV-d-pi~cRcMvG6yrK@V@{yKCW>eEAkj+d7S!oylH$w8UG@RB8~1$_hYDd|>a5@qH%8B&T~Du)HM{?Xs9!qy#S`%Ejm zzP`SE^`zT`-${=;;3|B+J3@;Jxg#k;XOJt5qrS=>y>F$cMfL-{tXr_eXfF0Rz0hBc zS0X>3hv`gOnBF;Ed;+3N$iOVlCfA?UZT7mLwIpT=obNxgZ{upH?oj>ySr?CySD&Cc z_~pl}%63ERo~BQd&F0+QJ`EY*APT<&lgp2{kpJ}br9yq4q)y(pE=)w!a3!1m;;w-r z8y_Zx0^V?XFvoK<9Rar_Gp`HP(8%k?c9gFNQi5| zYKw#$ZcB%*+}Khr+F^Atq)|8uHkk~B&r&gW(!a^-Tb_7h1SkN(l>QI?)PfGOXAvN4 zNbRQUKN^}Z+99C?dik#se8flD!$^6b`!_r`zD)ButTK59(YYha0%N+ENq`hGf{Dvh z84w-s{oFVs#hZtMZ|X-;J%h-fO=?qgK%yT10zGdSYH0{8Dax1K1c1I{_^#jsU`?*g zQRZC=$%^aDji6Vpf5a5m7B#rseRy1sT0gDQ`|921t}Q7do_!EH7!L@73nkc5WU{i* z^2n0X+xbyH+3*^Z0D5PRB$~?+_m}?1zkV*Nmljgp#)^J9=QNfPEsmBKUQe0NFpH{e z$MtcEs05L&#Aa5XQc}Qtq!#XTzj@}rzS^d__Iq?xws(oq$P~f;O84{q3+E~Da8}>C z6nVnEt-IsQC#JJE{sC8hnf6(LhDV8N%-bpHUe90HT_aIld~{n}EjYJIBt@c?u99}D zjn$-o6W7JPfSah|quWm>FtN8JHBWBrV7t26TAQkWs_&V={d>O{(yBr&IWGr~>DzSU z*TL9>Pjja))$XAf;x;Yx37!sq-!|`MZpI|m!|;hj9x?WWvzUN&qnSQmJ9oL5PVMA> z@U9}oJk-9ZqY(0_&r9hoQmj?$dYyxJM(>Uuw|+X20sN%t1cP>Dy*x~(TU#+cUzz4u z2vHM6)x|(o7aj{^#nja(jo|<>M$BMFApMn(W#(0gF7}E%p&Xk0)kr|92D*ZxA;q|@ zeZ}+Vo8nRoi~TA#bO{5P=4#60L)iwGyF>)s2T_-=@y~o8a9c-y2$ArpQH*N(Omynq z)c1*lNAv7bZI-pe#ZsYVFg zq_wVsEuC8(cp<28fOL+30ye;>^ToT&bD~>W9IrJpF9Wd^=PVL}?=J)krxC{=9@IDs z!Bs^hXQ&$LG0Utl8VhqgHhKSJgn<^#4`>j-W9P-UkuuyQrPPM_9sAj6tyTf)5o}k`{S+&;z<}*91!Z%+uNHNuE!B_ohsd zoKL%C%`4zTkiVxAVUvmaqWr!~Sri~k7+7hK>G~4=+^uU26BkQUxJU0A~7>M4)4)h?H?r1C2$-wyM z!8D47_s)kykOZ1wH8!obQJ^*Yg%A$Vy^%#ZCGTpT^fIaJ)KfMy<PQ79*|9epk0S>=X`O^;TZppt3!+r;iPrH{;#g#s;F}x%(me+zuH!tzZqF6Fh;ah2;a%P`V+FTH7)yvO+J3Qm2>Iha*~g9jB|LN-DKTeweF_s zJ@h{OFmuOV(~?it38(^pQ}^QqSYR5}kyq0q0D_0bWO7eTw$IfUD(#N?*03JoCcim( z|8jNnuFfpL+e{;^CoODHP&>!`(kLb&HN4HC8 zlH8x7v8gaqm5l>>Q=NG)con#;MdK`ex>QNOKuG)}Z-`CQX2I%c z*rgi!Y0S**mp=Qu0eY0Kc>m77NJPNjRs$OnxT8@N8z;;cJf6=to7zK~v-?+*dX0X@ zA{hVT1$POZPY#*UqhWVEMj6#!qDltsf?)q!GOlZGic_|ft!U?hBgehkQa&P`1~rh* zR9yEX3ekO{#|TKv~@K0A<2&5wWpmp?0b@H?ZWsx~CeD`)>`_lkX3rgStS5?9HG6sYM!u{QV9|MT z^TQ~uZD4z7;|@dRxRIL9(_@S$CWsnjG1ENV0E@Mx{ZmoC(r5jJ2xnyGCMciowOZ?Jk zaktgF2Bb8Ae)mXKcG`c-2Ni{&Gm+gtUlDu6eL;Aidq2}tX%Pzp`-8Bw{h%@7&%OWy zU*CIPAxv%h5MQ;J;MfxyR(wjs&A+_p!9f7a7x7&qBT48uV_iil2IE+L2&+v! z8wcWh313c_EL$Z3i2TnSm) zf`I5O1m^+g(s)jo_lqP1i$0%8C(!{M0E#Elt@$WC80TTsM}Qbu2N96-WMFO!+!hm6^nDg$MGt^Zp1LLw zn+}@NghKRE?Ce7kBLSr3s5m{83duB2l>G2jE_5kt@V zNSWc0Es779`<0I#9Of(iUaN=H9U#&z0zj8V7>VMg? z3a3gnnFV!V_84aN@P{JX);g)~!Or~cL@*n?uqW^lC=n9WW;n7p zx|72t8t-8cdxWyah)H4G_fan)70Fg+0pXNR!SFDG>I9xgxm_1pQNd||?}E8B=~)~W z2S_f;?=20n5d{r=fgI)Di4emh>Z}~phSEKnYCjAlpsx-0JzlGCn_K;mg#wdfvw1n^ z-;*M{GNi6u)aX#P>%?&6U%$|U{e4#y_(Rnk@E52SKfxloZcFRqNET^MI%e zdNyY%Z+eD~K*n;0*XvB7)j2wVa*c(!1(fO;p`yl=qpbaYtL$gb=>>*jyy@gr2yI}c z0kkDqnLx%XZWr0Oq<{P+)O?7dT927=w$zQ|QrYmQrR(dA$LRG`;uOW$$1RuZ0b^%^M5+oPj&`PRNJVX=F-qaRV#WE7OCsG@MS+ zCA?5)0`$V>*3GQ{X~u83Yru9C`@PE$H@C*Uvr`i6pAnf1olgA0sJguDmg@|C2k^ha z6`OPR7a?_UP{no`RRQ%LE=xnK&=g>qYa+L+9_rZ zyK0m&YT&8ClVI5Bug`p995|mBb%bn8i|JDI@)S5jCQ(a;vgCmksfX8!UGq(#GXXD# zkLo7!!ZOkg(Nvf_V5Ur+_U0!6=*<{^j#nc+|K-|M5oQ*TwM&z=GB|aSYFHx5TNG7` z>0?N#_C`Av0syN~PAnuQe;1>fJxpw9SNkwc&KbeJ7IC=$SSHk+ZFe~J*=Pz=g%CZ3 z{?}~B3u8fxjIqL8xv(zEZoaVci@UMf30UQfBV%iCb4A%vs%s1_QP4UL;^&Sa4+rl8 zFh~IxPQ}s{;+33blsBhLM=_!8M}#Rr2eYs*q_~xw*y>N`V0F_%8qFEi>Z&wf!6z7Y zSN6y4-Kp+tN>MgJE)vgxEdCfDyPt_NB!%TI*$Q5@gLxpF zL9C>63D#s1#Vnqu^-j<0HU&IH1DUj7iH|r{VM?W=y+q}=-a&PQpD@31j06JU9?7aI zsZJv;S}iOTE^oG%DIj#&vEb2Xlv<8`o6j@rZAPKA-}lCEabUUzzi&r|)gr%FxXbZ^1Ul{~D5ih6^uhFAV_mvtF+p`Y(9M8*jBv*Lem>|H~{t!tWH?P6%}N-i=#RWf1BW zP)Hl#M*~Vh)s1e01Wzk;oYD}lRbS3PCSk!pz#r3_EVieKb3_&K)Nxrqq##0C`%IG` zUkl_UXk13v1l-oc+Z}i!!s}be}xo^(qlyA=l_f z>+cf;2M)Ek+$>2TkJT3ECFYAQcTbH}o+!W}tmrfsQ`@q%`?;m|3OB|^X%=gUm1AeT z5nW1(?3mXn@+wIv@g)CfdH#hU3C&92j5sq@Ib$Vt8zkwnY`=l;^=2-kA%wUREd@eK z3E-5wdzPdg*G)24(-oNfNos%|UOm`@X+Q-*vp`<+es#EOyNYnm!N36X8P2}AxBG?5 zQ@m>L<+VA8$3X1m40%`9bJOm>za%K$-|bAPGh|BAy{^ z>9uS$Tgy!ysnRmNM$p}RFB`mqtO$S$^L;+u#zes2)S1_7_Cs%p!nq?)3Yjgt4VLGm>-K=UUJbp@?2M!tiY9N9%ur}0& zYC6?fYvZ#F+h6i5S=JBE^i6-&C}64{W~7O}Hp2XriE%AI&e2v&uYa}EGnx9rzFk1} zr;7#-0Lw)f$J!iKk!JF2mQnmHTLbAYUx^_3QW!Li-nu=Gst@A^@p{)^w_ov8#?EZ3A9CtP z!9iJEu^7V)kC`}L`@WN6S{(@}S)CdzO7TczjI0_~P|)TwDl&`jzRp2+(NDE~&b@>P z;HAWPR@IX{PWHLgVI3U4YLy+nTKR6b*ov^kok4R)#J4Y9Tz_RA;T*!f;)ssQt78p( zH%oDZD1FVYZeC~PSQ07oiK-6EBvzNL&zuWKD{p>q(+TEms8w5h=EG+HS5h&U#Lc*8 z?fRV80;^*)QPUGYZVg_q^upGtp53}><(SAAoT4G^E8Sp9|dth$3>97890Q-o)^mC_eRoueL zTWK1DlDD3pV>YkjK_nt+X7PE?*I*k+O-2^<^`abb&_%rQgxQ=NbKJ zgt%z=)x*44GoMV$dT06Y#T$I_(1zPF-qCNx7dSg;XOU0ednyD1Y~SytVN>(^P~`mzxD{byGdPV`+{yp&k} zyAbo(8H<4iPCiu^D+YTE9tkz}*1?@=jyme8Tnf~3MvQ-9*RQX)S2s#$SbQXW6{7qM z#RTR-{1JgPVnpI9l!DJWe=H8&-pS^{#LNzbI7xKM&i`mKZcrI zv?G1Of1Du3WU;#>SiDSe$h)k{Omk45Ryd(~0wo9f34X4XZ%&Js+FOoNLx^omT9D97 zz2&Pz5-49Ja}K3Ok~Jz*mhh12I)lHN>?3Cpls*k$!)L&0KQO&Q{3sgYdiVs8tk zU#Y_d483jnp-8?(R5$sXB7?=1M9(1#Mj@BPiA~5tItGp9wOC_RuA0!6 zUDE*)@%zR1TqJ6A=*X%ELTqW_J>L~Rs!mX)IO))>a>epVNfQBE36=)--qXpK&CrGL zYA*g77{CmZl0B#oeJ54t?57t1jrTtrL><@v@S_U9HJ4Q6)%;TTFVC82eAl~sj)kNW z-2ix+f8|j}X&wVf!HmeO-pm=UVOPGK(K(eu^AZV;y4AuIuJqo@DlQ!r9cPe_W}m#O z?EOf|PAX55nf>IPu1k623^sR$n~fd%ZIt^9qjg%i(!LJqGVJSMep!T(`p`svV($E> zxDd(|GfB|F<$m6wXR%mC_AHUB%N{puN}4I@HG3&Yslwg-TI4Gu+cXnz`gN>MFQz=5 zS3WKtXLXI|mzU0jvxJv6mm*g8+rn37)N(8gT?bw;)k)nq`Rzp@Gf-!(j+=xpjVsiVP)csQf2kJSnr)jS;zOb<&|m? z^Jj@SH|J?I-TK^aG&MwHp5n9oo1bEEd_pQm>rq=MwjrWPuIMWb&N8+(fqd#+gZ-7d z_z4eFC$pY74k%8nEb(?gQlIprVPM^EfOJB7L3?N0psj%290Okc&R8hUpu*~BeEy!U z#)&`fo_e;Qe|E;>=A4PsWBsl6IS~3lWdE4qHDflDy#&mlM!faV92Azdjru+t4zxc1 zHcn>dV~iw5F3Vuez`htDqk;b&X7&IJHM<^p&4FR7mTPqE+61qsosHh9e=t=C_fGdK z({XYQQH?JB!TSn6@)XWhZc7ubz~?9{OoL2Q!{( zM6Q;8kQtrLYpOPUzUD28!E*V$#G<7QPy4`bSIqX$?~>VBMwp(oF;RP+FU?)sI_)_Q zlwWZntC!vpvo?e=)D|=;$-F>+GW9WUcKMxu2;Qs!E19mDGz(ItK6unhUUD0vmL+gT z*1zT=I=ry`La@7qCKhAwuyduE zqV%~axH82jcP7sj0-_@G%3GOxgamzHlJaNq*AuN1D)h0an9PVPTjTd=JG)vOq?wPU zF|D&JHBYB02*8YXshIIFsgQgs>Zz|OoAj`>MoH1!SE1tI1NLm@OoP)V9WlSz{iWOD=ok*vCie2=Dn! z+gY>umZ^^}2-QsUblMiLLp&dRtoR6AUFD0_*T1`bXw4`ShVLV{n$xVbV?S@BAOAOW zbLG@YQaGJXRMH8K?xe775?Xej4J;L4`snj-^Wzf-jU}*czO*bTDxk#KygXvDhz65& z#!&&IyR}hn77ThchXcY&YA0Q`(r^2$I-fg24vdRj_gRpwBe@sRJGKbOL|rF;$g*bvS^(p~$HVi4LV@Q^#k)qd zq$zePIu`|^Ii48II-^a>_TzONO2`gt|GM60DDjUE7%$P*YK(f;yk@VnOt0&vqw8Q5 z+SG+ENvZc|3;vSyIG8DkqDzVLY>>yj9evR7?(-iuBLtvN(KxW?WbAd{=3*CByw`Xa zl^m(&;|*3kLDfiRVdIDKvDx&_;tAKMo8$LS@eA?!S;A}k4teYPMf~SNda}=c{h{VEg5IONicS4a?UY`=RJ6OkfSxcU}Po#P@QE$6YnNIC1-8>pcDW!+r z0~g>q1k>L2MM+Xz^`Y2$9ZQWW7r*1MfF&#R>9$b*L29?n#@EB8_tG{h)HLz(^50kOjkila_KD6$*ay>w z39fFjMt(XhgFnu)^9!)0#-25|6r3cR;`E=Vh<`gV7d6M+i#<3`!yv) z6z{x_$KCne7tuQh2esCO0~VcIO=rSE*K%&#(`E4;(S(~Jx*HclggG6j-SGF9T?v2D zP*@YRFVFu80w%~$4E8pQ9cv-j(y~bh3TB;jtubt9e+uE z34!M3j-;VOl<$e5rg2hy|4VUoCng8Mim6H{t*d3svz5?t0U9rZ(#di~uJ7l>YzW_& z)N9b#1Bp+E!`?b%l&XgdmVJm3&yZR_#q=@Tc@?yaRISW%CL$Jk)V*v{;-k#W31W}8 z57(C-m|fsTGTzr3Kv`~c={)e*aeG+7_xgHvz`R!6(9kdgacwk7UkHe0EYQ zt~YXvIog<_?K^jX=hDM_)hZ^o>ih_J|L-7a*6sC*WElkJn^C+Z*|-&ZoYzDkC|47< zNv&Ap(_XtT!C3aG92EF>=Vtgqz;P|9A1^$KNf6l7@JDVe84QgWJ4%P3w+4_Pog4<3OV|2ttW{4GI*jV+3Gg3IdpY9TjwrKD$4%-MzF* zr-me|J{jhq5tAD|YSiCFK1jMaG&j;7Wh_N@k5e(#mZuuNj?NIulCl@L_5*)))MUpU zr&{ft`ggQ)@!7um{8&t-{H64M(PlV;N^{)$LtE=jeBHqIkIzRqoo55|h+O#ZDY-cQ z=?pbQ&AaGV?2ID<9^I~uwPypOh6e-NO;?J)Jo;kGWShDL5NFu$imZ0lS*p{P9Cbcj zka*o@gHV1vM4>un5vtMUT!+;2sn0dU`Vf=4oRf0-C?690w?k|*h;H;rGB$8|iLA59 zJQ1GGQTI=43;l5R@cdoISUP%FgG(S|{m9Vu&j`Hr>0_R|eb_ycnx|)DNfmdWP816( zqo#}E*!_YONl0l=2?PcG8kK9`4Kfw7*WYi9NbJlU+51x@|tMur^b4toI2jOKo_OA3`J?xxY_8CA#{z#OMpiBB9+hs^9Ot zO&nggw5g|Uu_)(Dj}e%yw5xM&*L*sjIvb9^cRP6i6Q_dpW(SB_e-`Ts$_B|4p#7E7 ztR27QHGk*0DdR9p0~>c3{N_-_w+4 z5OsdP6s`BDDDMUxaD8Fc=^Wr;_LL&{B`PvccV}VSi^gPNO|w{)#6>e}1I_Un_F+ge z_0&+=IEpn09@*#L;(^15#wbr$nYP*!Z^+g^%WpRN@XqY=?GLrF8{cm!!FARUF@wyIlmv(`>Z)F{myhrAkCH|>U|H|`=l zQJemV;7^5t22RyLUNwEWYmQSlOpDbV?ZaO^4{Ci+93$QLvyKaQZ}fUUTu&24+_X#9 z9~{{2lyo}k2acZtp*qnRb7$s{uZJxLslHP_xEyoCx`iJGF#C(lZy;Z=ocWIFUrNJn z0j^`IBFo~uRFcDrF8mI zVJg0`E-H=w3~z;LDFFECd3`zlZN%n93^HHNTymln=%wFyHrXurKCe4_Q+}NY?olMN z`6(sMJ*fQK`>b2`KgOsEfJXeIf-^Z2d422(gye*medNg#t9MPzyrvy2oIpw6A!o1P?u0oC5;roFmtptrPzb;rO6dT&S&lqw*8pI|nCh!8tJ0>M8qzcLLUDI?5 zvi@;|yvJTD70WRnO|VBo$w|3vxGKRLItuG0C*n~qG&#l?Ig0j_KJo9Y$ye=py~F?$ zNEB1c6!WXiO*yIwBze|}$?nKShZ>d24m0FS5RavRJuI$^?Wq|(mGQv47)=I225^Ct z*F)0ZO26h9xG{$-b(OkH2TH~8x=`}{T5m~{+{Br>$IOBV@+KPAuV0{zfGIHKloem; zP#UkFmG$-$n1@s5f^p9IG((v3ySR6{zGYG8zUcr)yIt11&+2ctA7iqkdv1<;b}ffZ zP5F#hgw884HHLRl#DlI-&vFOz$QliCd= z7W3$xPP6jK=)xOmu}V%k#HtEU*eoX$3`65`y4>#G_t4Yvl%}@|qo%|zItxEo>*UT8 zhv|`CQ6B=ZJ{*L(Y2wr`6CS|RPWWlYwaoLGiV&D39rNYP`up6$pnd(ow+P} zJ%1+*E~(d2THpFiO(VBCx0At-yGIIW5}dq3ZCAN^M+C8xPE)^#nmH+Uu#fB&EN$?b zb=?{jjU_&ZtG6IQa$P0tYd!on&C;Bwx2~m~RY?Vo zqBby2Lh&PXrS`sR5xU;EQ6);{l(Qx;-Xau3$&W>_O5IC|*uzx(A7hc}Dxu&zz&mxs zqW%3NMma!6YWxY6@?0)2e?a0?x+0m=?_FFY&+6FPoXW|ikztX{PidEUEZ`ZmgiDvK#<~Q^=ea~QQNvPG>r9BO%SBNHd+NF-TkC%dSxZ@$o~@Ht1i+KQ z=r0)+w@_uli^IXBo@$35A)>If3IkHKgG8F<|4Pnl()W>fqPaBv+WvOMZsA^O9d^!a z+T6x7#hWY-?@CZO`|kh_kBX(rhSS<6g-_>Hv=65@gu&f7sbAd|ZJ>#RhaZdXmcXn~ zoA=i%QYX$Hbg4S_-EVS5KK^S$ePYBMhBCn6? zf6Naj@{-9>n2Dm)DO0FlwcH>U!aE$*BBU!y;y?UR4Yk z8#wR>VWQlV?p)-~H2pxT0KjB{t zC!p_V5&Wg*bnzD-tn6D+ZxP9M{Eus+=89B{rI;wu_{#@H+BwKc=X&*3U)lWt3|-$s zp+hohXjICY=-&*rK-wAroxcS4Bsr{;7RC{*?-yS=^3C<@c=8#R2??LCL^kOhqAdJc zHe!vvEa+l0dTw{l_Yhh32~mTo+M~RNMa&h!jFqE9uf)5LW)vm;6j)@41N8k6!d%Ht zgrr>Kh}S_Cj+)k6LR$YNW5?J`v6ARd(bdVK;j9Ilml#iJNAHZXZ$8b^iC97S+ynQA z@upK+NBc;$#?Sga2e*;b6yIlxC3D%Deg!U{P!u3S2WIjvPZsU5;h7dqalyQt422O9 z*=M18L5;kKVqCxK!M@XytodKxwOv2s05q;eGC0-zV*uTly2*6zny6jBqFkpXNhNHh z$0X)rwN3F@l2vGu>};WQiSomD;s|1YInxcMVjLo*oS8Y{&=kr;%J0;D;~w-q;lx1A zGus;}@DCOFRg_52q=2?zY#xrBDG#<_u zvjD67E?kf={`=7v19rTS!2LC{L?qKz#y^Esz&UK^@~#(XRfCU~Z3O8%CI#mVM1mKiRiDvvg>(57aIyfEux86XAg)%kOc*Hm4@ zrH8S9TjyBtzm^0Htha1WlxVS1k4l&re`-`F%F8_yT!jL!2k)j{D5OQMevFbt$xT+( z{W?VP1N7oqe~3oXd^GjNXcY`}xzmO(_NHN6(;fZED*l6BU|(hPK20}iL)isp(Vmim zA|&(t%B_`2>De@8E$O#0((lYTilooP6z>3V02b0wS~uroyfD{5%!LW1VewSS>KjLyPP<6xRQ^ER3!IfR`G=DO>teSM~gld zb_-1LSS7D3`)c2!p09XLW4fh$`8WzV6*#ept^UMY<63iwxi_th>d=B%#P)*f z+}ZO@p_q~WWa)QY1sYbwENIpkMnD7$I#G$)+XBwLw{z-vkT)#5baO6^ouZ)~hza== zYkI+bQ!CYYF#cNTU3Ii^k9DY9juX{p>RqEa3Fjou?-*5FF3}#KCN5? zst;~QWuE;)4eLgKc2E{uq{7slLMz4az4b5&U$3=D)AQ{RAY($wBiAaPdiDy?Yq;47DkA9mWl}`DNjh zIeC6C3mtn#$pb$;g8vt0)HOAEt%IV;G5!ojB!BX@`Fvb5?UGrw-t;Z}bTO^K zoK6Klom|SMtlwWNmnsaUY20>>$SZDp;+BN-+qGfAWYMCJYW5LV^CE4XFln6Ja|j2O zCcQ}wH`Bdb$MI?B_Fp1sCUf!cyK${gD zfzJ@y)Gd;u3YnLkUhL!*zkyT#ryBl5qWr~N-`qCE!*6uh;Q&Sg;Sraeoyh!42h02| zO@$eUnCOu(?~w)+nhp{n(Wi-=&uDYWeogs#k{8gCFf7kkv}=0UuAh+)p`H{_Tob1* zgYKbD>KM4_Hg4&!Oev{HXzn4lj{Tr7yeGr_&L;WWJw_qRNrWFlsV5m}V?5OX1UF~5E1kj$Mb-?<&0snj{Yk2?Rs<0DAqOoC>WfB3lEkeNX9 z^fJ``5@q~qc(AHIkBuy^1D?H>c6X*UXtyN6>;tHa1DFK`Z=D!vAS0)mvW@(%)>5Jt zQkTJJm|Z32Y)WwhAoYWWwFLFHShn%Le`WR(6xB9AwHv6I%g+$dymwhQV}4^LfF#76 zGXaSiVx}5{NhU@5&3sqoPfc{u5B;e)ymN8G>(v#DvzKwx95y*h2e5!=_R{gex>$mO z;*9%SjN?j;Kc(FWl`psw;pAeFJ8;E%yqA-5=6c%ozej)TyIBsN5cdF%-I|8_XZue( z8Ez|c1ZJ)aW=FHQfTYUFhDO zOYyz+!tM3y%dlmw&Q9mf`@#Y>giUNbKvm>GT)*aEIh%@n*>A&dDPXBrq7XyhN<_dr zM7*KQ+f`Ec8zNFkW@qBy4FGlKLUvtye_%I8?KRgr1(cofS*$o}d~fIENc@ zm-*;jcN}iJ`_RV;U0w8K1J21=a;6T>Ds$Wtm=dUuJa@PgG~y7weg`k%&ht-iysl+} zogi-FNT5CB;b+b1kCt+}{4tf!myX8_aSlz}?6vqENRX{>1d31+@%`535AGe>b8L_K z4zDgvmDL0C-~65#o1;?ZR`j=ugZK|6Ur$Y4m}a~fR?S3AJB4J>U>ED!9P+)jkA}x9 zR?j=G?0ywpJaTe;H3k5v&i|7OKqJKN{&z>V(ECHYciXJ&Td1}4=PP{TFEr3yTpZC} zYDX@+v7Kq)?X%~{G!I>$HT@$6l|gWPq$@`X>)h9h)Etl349(X;{M@wao%fKyO(joivG{-92sahx5n2$>J$N?p$#u<4UvPPS5s>gqU+h`Rf zu8ycK+nHWT!H7PbVlZx~A1x{qnS9(TuY!8(FNc&>M;!^JcyV^A_``$`L*B)v(26<# z5opX3ysLizixz|XgqI9CG!w7%m%c&fTZA*3_whlYgU_0MOp~p8N(@@8H1g`6{l)l%c+u<}q?Z)Fgg62CU1UT?QI2YGGx%HY-1*MFh#m~#GXKs)WyR6h{4ZLPeK&rR&}sLSi-At~urtw@Rx3KcyhajSo-QOiT`REaQfj>DOV@O5w)l8lP_}V~J5r6|ddSYB@_KLSI;O z#nVVT$n;%^ROW$;P^y^s=*!ltWfO`mI+jfH3W2ET!Y9!~nVZ-0z0uATQ+kW}OIk6` zI5#WXOSk^4b7-I|5@j>q1oTzTsmMC%VeFjA3EJx8g0<2 z)i*VBbO{=lle)yGjyd(F8^iw7cRzNas?qLsrpmB|7q-l(TmdQPg+$!i#u!_Fo_h%A za!T#HtFMiMd{DcMyx4-7xa{P71|(a~fsXDZiG0~`s?$TFsXf0NvE}jJndzE|N#Yv% zmr7Ul>gAC>j4!Brk5zjuI2iqH5+WpdbOlGRFWz}AX|Zm_X8oSb`!kiRQ^TKVq!6Q6 z`CUOT$m6VxL_;M+^|C8Rs}V7p&1g-;^mdT)hi3So^dKI&xaOBM!8Q&rUp=K4Zt+G8 zc!UH@lvM3m5l9wt=eo|`Y9a=-+-GIOUVYZzN~&!s-$DS3T$(e3Pqu3No4QPiS<*jD zS`X}rNVC}={Mec|TU78;8!zsfJ(Trw01367(AQF!p+b()<0Q2O5C zd0;zpWj2F}_^|5w)Wgec>L3R8=+4&;l*#uiINo+AGr9@t5B!YfRq9lSHF!jA5FT0< zhH5K7caX|+jfYH1^pTSUFZ@Pb=~d}@It3^hjAaxJ-HLOkOl3Im&Qhu_{D+Rb?6Q8F zmabnEy{nM+PzX`l@03jHC8tx&W`3v5NdiBu*Q_=$hu?T^bsKRik7};S(S7`_@P3e9 z_7k^)1WkqKY506IuIUPjzOnAktD0VGCvWDeI>IRUJ`MKoJG_NE24(HO@A`?p?fR@< z%yZy-$#CSo`z$UEW83QC{8|h23Sp2ESEI#aoOLmZrXwDx9w`V+x{j|yD9v?+kw1oQZzSBLKyi3(7yU@5qj3{5_iFCoH zHr2c;;)!Ba9c?v{nQD2>bXlZB~VWrdDj zyrc>46yYh^o{t3zb+$it-9%Y5 z{_=|K9KPf06}fZ%0p+sOvAeTV$51(1JCEb7Uq%vLx18qN`nN)#R6CZ`66xdDlFyj?ib@8L%%D zDbRDbN1LuRz^3&rYBNjUQf}dGzO(+Mb>qQi#vjF~IVIxQ=@J~uOVM|;^rWXv)XWO5 zookM5aq)lU?p3Si{{npmjEUid~MlCxh zD{_^wuphXlG5Vh0%+4=|eR)yq+-<(*E2vo8#xp4UI5A1hv*M1ogzr+dd_E_hToZI> zT{3S`8eCJHEYf$r%i^DfG&cPluyiO@d>2=YE)_?p^vBh2tajhpzUnwGK0gGZV%P*V z4at5L(k`y!frwy4z8J%x?TKUg6FsM3vDMWasc_ zo@|1oaWCFi?#WNi@f}f3D_+nD=`gIQ@l?ww9|pLUwKETgm(%7uc@v6u39uS7-TJd( zcw#fhHF{i|Wu zGl|@!GHN$_88vfzE-B@Aqf@)p(dn1NxbZ=YOZ5c2;t5DJ^u|px$iTZ6YCfj^Y4xGg zqJr!{bqS1aOi~dd>TpNmdK^*$oMSia&eEH$E2=CuUY3y?XXS5+&SLbw82X6f`N**h zEZ&}}Kkz&ERSKT9?@ly35vdHf^X~hk&foOT zH%3XKhi+U_Lpstd$F`)@8g;6QTw5nEy=94pNC1Ye^IFRz}YXs`Hgm=iI7a z^J{NmDSZbQ0()mq~6?nPWF2~ z!+6h2)YdHm1hDK7tBO6#+5m1ky{+#vB#E2_CU#wy%^dejFX8G52X~N2f$xp--*DqO zL}Ff~{6Q^jbrzvvI)f7Boc9=U9mv;JA#_Fb&8Ce`z^7iXvzCB9fsH1$;|A34Ps@9k z?pN1Aj`!qC86&&f4o!FUEiQ-8xq9_4>+X7Bfm=4mpms}RgIjrP*H={TS~O2>=zoyy z6J1#j8~9wVn-LOZXGibpj1T>@8u z!TB4cmC_Nz5pUk8A11xo)K{V@0Jw9TNf_`9MZdAqb%z}{T1Spq3;pgbDzv10JD%l2 zE2w^`ul!w+1|bUs)a~WKnhP=|3Jt!9;rM)qLJ$Q!J5|~vjWcSBG&we(sAAR7cTbDD zt(@$7Sc{|F*~U?q!7`FKSh^1TSkNa*KbslXL@F9~^`$I3J*v9NHz!38PalgkekT%_ z4z^S6>@Va+f9Sdc4jQGnORCZ~tSH!x&(wdWjT8_uVr#~S&?Ql0d3`HZ689Jxz=-5_9QBdtjUHY-}J@U?71 zug27qe%gl?D{3BB>0tr=MO2sik2{4rX$#D25giUpRW;`!0c5vPdrkTeU7>dqA(gWi z>oDt?P1v%>@P1vd&Cih+xD#qave#b7JBmM!8Z^GAGgGhg9C(8Ae7<26@B~G%Cpc#H z>}~}#pu}oor|(`!(2E~UjUvyq?TtR4l$^XK#ns0Cyq|C1)-5Q6&XHc|A=n{MsrI`Ng4dXX_|biKy`j zT%T*^h8qr~v_1Cfz4<(9k&<0_@QD?V-z%}>D8hEs1xz&Z>}MUofAU$>;M|i~IkyQu zRHtvn_e^KkfnU5oStD1X-K%V5y;HrbEpz_0a*okLHaU9Ejb<%^j+Ce_Bti z?S7(5&)~pf*XIKhi*&VpH@zx&car%_nm-7Grmy43_FbtLOzxpf)D%eT2_K-G;_F^x zdzUENSC=tXC)8Ox{BOqM<@Sc zT%^7KG}$8ktecswIW`kA`BswAOD7gpq1RJZxz>>?^6~Y9(;K0`RJ=vZ%Ar*${c z@88sSq&l;36UZ(b3CGpf{ys1Gj#EN{Lr3h4^aE1KdoC zoh2*@I}cuOfw8~(34;nf5cSeBCvEK5dh4{&=o`-M!!_}`G;_j}+>&zRd$MvM*WCnLdCE?D?{%k?n8^}+UQ&6cbd3D5_%GUvO9q* zYlzoFAi&!a*qglJfXE7goRX}FQpskR$Df8YaGuN`f&&*5W4)r!DSxzobT6B>AnHRM zzkoEs+8I~q;FS~n{nz)zf$zQbt7?6Ik+~pYT#tBO7k4v9FHSX$n%xX!1h?$o$MHFS z7SCky=P|7S;NPB!4cT}X6)N;e(+a>TD|kus`!@;I76D|a%267 zCy(;_rUTB`FMe-`1Jj#I?&an5(JT+}K7&4IIVw|}zE_5i4S7S?yghM)81lO0BQ+Kw z<$~5CPk&%3IQIMD<57tANKR`r-sLkxXJm0DcSW9LdkM@Nw5Zye;cje*iw{7z1(O-(^Z{Dk5(mb64uAH-7}fO;)I4xco%f zF8dpbru%q*_owrK+SK!1Y>alWq%|tA$!p&Bsm2ZTp?igbQ@#;S2dC>QhYok)ZqIt4F>+I z@+j7PT(ltJi6l2Z!`tu0xKLZtpAs`ek-O`w14P85WM_Z3<2T>``%#~d<3H(r;lxV9 zG&Ofy@j~c`*?b1o_0oqAJAia={POo4t>7XNvd1ri-$HVp;(wD&XTWOQdl}g=`84mt zUC^JIuzYa00+&xxp>#q|-AR7>+>}mN;WA^wQ}RQ25`$BIH{=T5-i;1pTj@!sOv{JA z0mHu^IDDZNMQhW;=xCg$5gAh~TW&A@+{QhA3+j(kOjnQo?m$wqiEw_L z|78-atL}!%ae+nXb-ZF;_*pFJNB4X@1G{_mYH5p^eiO9Ye=^Cz@Ax}~P)b(rvC*f7 z5Bh#;FR8$HRg^*6dq0yKZ^%XU2sDGsi70N|50GVuxV}x;##rC+#TlD;o?)cie?@hW z$lIjAvP3ef-ige^;VR(#ZGo$4&YsXxg#S)Z@-bQ-m>_n;=WGHtw;U zcYpuTT|84Q3L&T2!L4`nY`PQSMBch)V6^4S8u4U%F3x%-!54@8TT;pU57zRf0{fX8 zj3W>S`0pz(f_dx_!k;F~>WA5l{{C2bP=#7|PXsNWo5QwOjXO_!H zt>P~f>w(VS#kn8JFj6Bp^p)}eDc&zQ|K5MneZF(cWEHod^s5OZi*0x{Lf*dE_|oMh z`eBti<>iwvjo$;ILZ(lDB_}_*HkMDg>xs2~muP^b{m<=5_Y<-sTG9h=!xXxgk8#>w z*u+QYd5Sz~C3}tv3q%S@i$i%Vd`0h$)IslyR z3RmVHy@Z@QdsrhauPCR9kGybd9}(j(EbPle@6s#8GKQwTx;MqDaCB+t>M+EpFqy_~ zJu91qD)afKZuy@1QYvJMK{Z?P2{RSd*TJZ}P+7|6JeEgwA8EYwr%l%e_+>_8v9JxV z&|y}(-Dh+54SQ!vNA>;AixR0F?pQ;v#G`5#FP&8;+YS$lvvK=xy=8n!hcooSyVlfb zjAzU_<>_gs_eKJJw3Nol98bk&tC{0E4KW@)v4r@%#|^sRT&13bZ|}ABwc|%BL!1W+ z1Q7$2TT5Xp_PJ;dS980pGeJyGq|nNxK(+S!SyD z;Mn{*6kB%Q7pu~JbrpPhP2$(riVz6Ta@i% ze#bo3AE)t!-&SWn8bL)aU#sKKK^c=D4AoQ4iR3s%Dw!s?5LZk4{POCnz0*fsY2hTH zw*EYdYJNx!kQ`Gx^*UVLMjDk3&V^(gvP0wO_X)_oj}ynkFOR50C^`GX3cDT2TcpJ_ zhE5s{WDBoyjGuTh{ z;u3dhp6ommUre7Xxw?Kg=S{SnlL_;X_GkFqXe_IzkjXm*7o!iKx`(dELI*cT-|)2l zV#};2x&IJ4==Wx)|3%K_uu@-N5&?s;#Nk*|VMevSkf)K0hxsI}$rD|`cd6%LUFvlO zxwp}a>kbsJ$zCFRs*zNOQFP|hfWBD8%e=e-ygU8f)(FeR2J%6_S|qJN2`MR5LWAyk z-o*8JRM)Mz-h6>^Dux*EM`WW8UM)T0p|~k}#Gd9;mi+*VI5^?gZDk+8J`35eNPZ8! zGj>`4R3D)-40D<2nH>l>Sy--*THyXyrZLv8pDuqRzqa+1%mF_Y-}kcVvA;H z4ri@xD%7M>Bj#9M{;CpJIY)9KScROlFA}D0Iz&_cNQE!|R2=+$_gsG(dw}BFwx#i0 zUkUm4q(`@GQ}K1?o;x17z`Y8J0Ab6l>+^@R@(!-@Xb3r_X> z%XhwkIf~(Cc3+3(6cMH*>o*v${F!A=8w?4*6X=bHg9VLa`MhlO;XRhc&~b3(4|0x3K`K1u zcBZd^ZrJhTt+4dv(>9&{B{>T{)N2$~`0Mn04{IO3Kt2*Pn8*8L`{AO7wj6dLDA>pI z!*UDPI9{%6tWd^psP=wWSKCv&ZMu1o+KeiENM zH&|0rQ(UIOByO}#NGSTTQ zTZxcLPnCLAF*sa=3wAygZ(8ZWlHk?uPGPdoiUpN;L-)SQ==Wv8j{ZdX+DtYP&0g1u zgEM@{l8>LxI>K-HS)QSkQA=8Q%nl0=Yoh^*412` zzU2jKXU~CU5>`hnAQ&AiR=S4X{36Fz%=hek%i`$6N8SFxtWJcZ5)XO9J+)EV9fEWX zC{C~xT_;JJuoQkbV5om3r#;8Y^^k9ha&gY6nxpgCCA0pf^28gU3!LhDSz7w!lSRJB0AH2|N_f~U>WgSm9`GeuHTci zF@}@VYL7a)EqvSlP1UxhXEk*huaOp`b=~SZMtH5Me}La4mHu$=YHPc%lqn8a6ZF4G z5*E&LqP57`?Ryt4G^>JZO)cDMV_NDhWp{9*b~7!dNbVcD$VLv?t)UL@(qSAK|K_h_ zCMwosO_`*~c<-s{E#R3CwVt2<6%MUz?q#DmN3V6}gxdFbTiO3~jq zQBROML69Ic-J1``uYjqUM;u^>N#tKkwMt z^J6w{au2i?{;~Frd5t$5bCqe29g?LBOCQ*pJ-8b{F6Y+LSCy`8%Y`2hErUb8mKI?h zN_N^P+YjIpR}VoCf-_Y1Yni)RHU{fIs6;VUga@_EJUh7XcqTk?Ak46KlzD1c(u|hf znx@5q;@}d~iFrdXCm0bhEdk>N|INKX48Xg-bNuJKH?5Zph=hSaWZo#gE)+NTVs7}7 z9|MxXFeoq#ivPbE6#q}CKNyhA|KX${3>E9Y7ZMBulEHvvFd!KWNCpFv!GL5iAQ=ou z1_P4$_iA+vNCpFv!GL5iAQ=ou1_P48fMhTr84O4U1CqgjWH2BZ3`hn8lEHvvFd!KW zNCpFv!GL5iAQ=ou1_P48fMhTr84O4U1CqgjWH2BZ3`hn8lEHvvFd!KWNCpFv!GL5i zAQ=ou1_P48fMhTr84O4U1CqgjWH2BZ3`hn8lEHvvFd!KWNCpFv!GL5iAQ=ou1_P48 zfMhTr84O4U1CqgjWH2BZ3`hn8lEHvvFd!KWNCpFv!GL5iAQ=ou1_P48fMhTr84O4U z1CqgjWH2BZ3`hn8lEHvvFd!KWNCv~R!LWQVKqHJ7{J-^r|2vQjHw1!n_DV%c9Do3j zbO@AQ<@r|#^o7c!00@rQGO(o>48eJ~1I!D-A&_iu0ILQX2*JW>@dhB#UB0t6 zaQnfOKwk(xHZJ=*Z~^S|-o)~Q+=AW`JGwqa(0zg2mTnk7oK)jd?mOtOlKBF;rGywb zs(ZzB^9uy);WBu!g*OE94lHhm(HnB(*#Q8cMg1XIJXc_r5|}0813=`#qcZrBvzPvm z8@HPPV3r#EEO8eAjNb>dtih~$0D>MO zBme@v!9WaZbej?PuV%jB-+#&}zLo(~C0{Fm%1Mg~iAaN2NQelFO2Z*H#Dw{U#DGA^ z4R28)ej!0HMO2VqP&5}zF#ykmML^}$3=~C#1cZbo)c{aAZ) zZzM&8M8rVlu%upj3q$1;y}v+i$o#!R0u(_KJPOHzCvrkU0)lTqeWZl=`GutZW(k5P zlHiF9m?A6-W~qsZ2n&Ov-cS}578d<`)oWoP5m8A{I$4R=5E*d^DX>}<2?=S4ti&r3 z(O2T~Umy@UZ(+zQP&z5_+X$(F#fS*-3yP@yHA)0DN)$9oTo62ZgDC)Lu*fS=I$bdl zF*#5OSy2&DWl%a3RRd5YHCcoIMY@2XC@|GOCsG3``01_4bAb z|IPCE_VM)xv%KL!f&TwK3=a(SkNNwV0C-S92v~M>$X7^EP+%BX?bo272uN74zkfh* zP#oCmzWN2g;h=PZaCo3!99WF+7jHj!%wM4b;NJcLpix2oJ^=xLjRN3-K0(1?JB;%V z0Ly^j1i}LXfl@1pV3~_svzse_ zTOF{tF}u0=H)VBhW%+L{$dzT}*2-V$kn;5FD@@G zF03r9ErI5(fd5}wUKs_Yn_k=i|A4kHuPtvZE`ulY3meNzNYJpkrMcPF6)u zwXrgbT>P80xxBNzFbt;bE$wVCZGtCDTWh<^09f|Y<|<@*Wn}@Zc5iig4zjp9zqGQx zy8Raizr6X^rW>G5+w+rPF$;^cE6byQjapfoUHxm+(kgOu>0ipyHgb0bY;{LVn`^6} z5VNbBD~q6XJqJioq|rmI5Wy>F``4spK)Cn3v5JOzr5gfU8P-jt-+)BWiP3f5N$CMctijv!f9S4->bBm zjH=L-i+SfhTXR)!I;U#);E}eZTJH1NniKwNhrCZo?tNEYa}r5ssD^I5-=H63xNiT= zxo(&{h=FusNTnDrz<2@13ou^rf4UdwWQs-6PoBpp-HER6GQ8mX-@>q;{_Nmz<2@1 z3;w_Hf;^Up_dBElw130vYbzgmnah@CBUY=4h!@+!>~|Zd`2b|IHih1>zSRs@Vy9o# zDQbiI`t^UQZ>Ho!f1$R*^i};JG`58t?9hLbft9R-z$3u_WJZ z<^v*xNv3y~4u~9$g#5}qVVjvIhmmK;gkJlneQW_HCe8>wo3TxqU%V25Y>%io9>pn$ zOR}S2-wm4rE6P+0!LvAwD%u&ptCJlmY<(odL-qH$%|jJ zjU{kA0!-?2I16|ko&Uh1nP{%ZdiIiMRcv%p`b~J++=g#0mGEXcW|tpw2~3%-L3|)h z6x=9CZvF3j9h_=YWFnQx{W!5tL zmlTE5BM&O?I2*xhIfvKUqWjS&IUCWy@}&QdoQ_{l>-FYxMbNk-bJHjrf!~ zNuFXVjs7r1EdRN`j@4ndV^;Z5Mm94Q<%ykfVHE!qG6pa4(*DD+7^@XkPe2ltKuhI9 zn2xiE5c-74MC2@W8cxM)9Y$WnLx775$)8x+YQn+IH}xqWq;)?lE9)JANhmFKmu0Rd zKS>{5P36q|eC;7j0fQN2O+_Xp=d~xQSuOK^d;;_)qfMf`^zX=!>=_)a#{6+t@`wkt z&eN&gkC&(pcn=&!YGw!T+8qRVNZrQI;H~lCIX?OG07uyT8NC$Gndx(0>%G1i2VD&l zIhfPsh}GewO6t*a`==mZeECPxkyihCy3)i=thv4*>L9|!>oBsn861il+|WW-M7p^c zXAC_|DkS2HzTQ2USWjW${)pZ9U`wVXl6Fhcd`8 z!H!wH$PSazl7??%iQ*k=!$dIzMfJKD#r!w1F9kPab_-_)6RTEQdIhiST7)~7kUw^> zXZ7#j?sdY&eepd*lIL%iUXAZV&p!^FN9s6b4bH;4$F5QB?FsHFLT`J%DvsUxkel5k=`PKw~z!Aa*A?};PaCrrzDNqKkumeYyf+0IVC^>&{K z`WUf~2;af$t>6=w&;FsF>rEX8`ti>5ef4x$Wi1SOg1FKbQAJ)Imwa5Ekw-OYvPUQV zu=GP9EPjMLJ$jxb&~rA|KJK77C2K?Rc)_NPV5mt<$dvM6H~5tg+QF|$Osd+8&ukNB1^Ol43U3m_*6736qQk@z#rjMgsi}Ugo;Ym}LLH_+##Zvdkwh+-pA8 z=kQWh5;?=S0upTB8TSvm6a6s|vpGC>;lDx%x1>^Hq=39%bv9CNFvX$V)j;yQ9v$Owm z_OCi$Y-(SWj0$Z#SYK-~x-5!bA3cPpuWi+aB^Bx4pQDZ2(VrN4KCJbNHJ9Mt~>a|5N&4P`(gKz#3A`-pB?Oc-#EYO$x9 z`);;N8J`~@o+W;z4rKidM9rny&)1dn)CWhv6l+Y&Xh zGT}M8wryT*VK#57mv}cet6O|^KdfcxxFC0T$6*(%bAx^K*XlYq7IT9-rV4@krYF%>%IBEKk`Y9iBEn07YICQIq=1ep|0-C9l9 z{t@pNrgL< zNnwNlU!$nCS>c+SDkZLTqniN7hqEyB=l+Ji%d1ld)J4f~3=-(+*RLIfKp{I9fE41f zm;oNtpMH`@aQeLKjvgz``R)RuzP*pzUbQTSZxAIO4v-K{#?m5Q_ORex+{c@!Nfn%_ zs1@{B7aJc=x>(ltJQf3}*hg$qn<`(p#y|cy&n$ZP>1b5=kCYrwG!+|JK#EI!&DOaY zL&g(^arYL0Nt~h~k@hYzHWs#RsP`7HX*Vsxcz&5}b_QkURCs(<>r~)HCkB}xA~^&F z+)|v^**<}t#y9--uyL6me3GejeSTtLVw6Tkkt0Kernr~;-ubCU!~y|tIlV(0`Df=( z+qh>Bx7|_WyW3Q=Tr(Fow?c1LLtoYYCkU!wC?41X&N~m?nX)YJp!X}L8cf5;Tb4Zn zWZVlw%5@kVQuQ9BP`(_Y{xo&>IdI%Z$h12*e4y#dQ&buIVrW=_2_Nc-ktY zLv!6H7el4*k^aym7=Fc8@p)D1ZQGqYCk}pR+dUfS>{{OBa|9pd&nnKV=>r)o<{Igr zkR}zmUNF$qEQ89V7JG6GqneOHg3j~W{r$Vb58P3CC-4Pyw{jXmI@ZvF_1X3wUZb1) z*)SE)iH8Z&V0EA4;oPJD3RBg{H18h*DKM^!Is3ABQTJoBgEmgXm5ZN%o8G()BABj# zcV)>C+h%5v!s{d~`LZ23d^B2sjet@3LhQR8!{oxBKtAULrr;5qS^7AnHbx$7`XW6F zkAq-*@49}_u=yYVF8}ngTVs2}%-bPQTSJ8O)8s6L*M;z`l0NSQDv@@I&t9O+xO@9B zsWbAwzEcd@(@_gr*A<7IqdO=wlkP{V66qspR&qDJt&@I{eSXOH?B>lZVV?j+DLCbR*{p7UQTc*LhBJTNQ ztIsPgq_B#jw~H)zhWnyTI2G~McW`NIa*9snsvLmvh15Bi^V;bOEgl`DIQPw#5e}{n zvyV-q@&u2z0?p-Vck7iNpI*;93)@st7?wsI-@SXalL9l;yR~Ja*CB#6DRX5xN1W`q z2C_}TTY^~s>Dm*-1du>S$Be|CM&+rqsf|UCrFZq_=CL6c?Xud%ye$w`hl5 z3YINUe4@o|M5EE!HZvn9@w=a1d5^xhwf3K`MdR^4ApE}WYOkxXy2ug z*;c#IbLj3jYJ^U;t-C2|?eqk7QNT-to@+n#v)C4T#@fz**lkPP4o-%MG2{Pf15P_X zF8LftqME9b<0l0lI-1)y`FlRJE4v;WJ=?zF)H%CUDKZ)t;lQx*b(jhBiHVj{0XOABMOnvO`d(23crL=Jw%XANgo_?;IT zUQA^xt9e?=@8k6nIUK>DLtU9p27kJJt%mlxJ9};SDvv3PbIoKijr(A1_0AlA8r$Lk z1-#O@`PQA|043xwaQvHE_zNUtzl`}mEkx0WKBwVq+2}l^Nce5dL1KT8-=vCT!(91~ zwa@vPco~+@xEDohd7J}~=L5>9l$o)sQJ>vyoAwQe91WfUPSa3Vb2cuq*;^kYqYRtU znX9H2ww~Fu6WaDRAioWkM?UJGYAxfkUE#9Vsq~WM=P166+uu85FpKMf+8C+? zN0FXLmr7!dOB;*pD&@}XVK%#ilxV}1eL#rv5Mi~-*=T2}#KL$`6`LTB<(=7e@em8j z@@#)x>Ly&$V)$0$$;W5*pK|XVZv5oY?#9b_<;_P(Cxo_ml%(x4-WdD}VhJtRVV5EP z_lt~Zg1I^@&Y3EyivTE%;17lQ2gu;oq%ea}LSVn`LiXH7Ddup^H1}2`choVei-h*> zFN>Mr%ohqcxG!Ypx5CLQlXAZ`l02EHRcet}7S8V=+S=2VwL189U*CPg(YjD|L%D#ysAnI+BZPdhf^_v_mMM}$UU_F`sI#-Z=`{t#<^NANpk5$yjMC^j3soFHivOx^)J;AlNdMGRK&&Fx zkG4SvS07gCGXBS5wb4)IpvHM(RQtb1$Q*b=ZW&H{2SJAtq8=4s?4>+vUMgS6?E2k7 zK#UTX&$VF=^=E6P|DmhlDZ!J@MPEo3B;V*6KMxi(@9}=KS?Nw_B;ppp&VyD8Q(O87 z*tP=4Y#G)HxEaDkndgB`Hlm`WZi3M$_bMl=U_8-!MiREje^ncV;{CW^FnhIrfCy+f zQZWZZsl)4sN8GXgj)^nnUekf$xE|ahk3aun1LCO@?H-9VA0S)bV67FBwc>g+$CQGP zvsj)fOGjB($gcdhY0$j>GZ<-?^?)`$?Eo3|=Ao`)>f6VsNL?BT9drq<4y?g`#T0ZF_~n49bGIB|9Zh%O7i&~^p1V2XHhb14=-9R zQL7?2+?w4ult}i>T)N0sFft=bbh;AYLCA1i{~s2r;Ycvo=wuJJ%@Y zRwWN$`^@jWjNDl}-7NM;F!&{xRAcscBx0_SLcE^)nf4ky_)U}$ImWYBP@KZd zriGHleamdBTfh}TW{*+HYJA0b>C4!I8FS*FgYwP8MR6_qC#I)+G~1I8kpg93vp+xm z7nm3C;v@^}UhPk6m;&duZ1*@uC5Hn$d8(m90;)f*X!QhzsT#&7ozKD+7HQjwN|9lE z3VR#-I1>N0QPUJ!At=e1cgOQe*&MlL8>}l}H8Z9M-5{F~N6>hAv*nD$=jtIv)JXi`q_J2ns}3+Oet zJLK~w;eVc_^M;67#w3jp)9tfD{WFS%hZC>5ob_^dML6H`z;<-=rxrBKnciF)1xOLa zHHU|hoze=b%|5g-t6`l={k-DyH(*iM`Kd)%r4XBt0z1DDHz~{*HfsG{w179%^_DX% zSeQp^&ujDb2`8z2Xt&}GVn{Xo#>xm7pCCXXMc=tKUUx(ug6%t*^BCyb7&}hhI1US% zv^Zb2Z}kx`I}q#XIpt1z6!f3gnMc1*(ciay-Y4hpncbEPc4WxsIr_E3FN7%fCwVC^ z8e!(AO)HXE)ntXb5BR}RMF{bIX83|scq|cme^ez)`Ch9Y&TPV*qexm3{ldB#!&Q<- z@Kqy9mfQ2Wcj&+9n7I0@nAN$llKjYS0dJJ3*LB6mtOtAPl%8?FEy}9OO4gRor5_1- zrg@z$3?2%GK|iyUzfbKZ@^K=Qb_cpw+Tt2Ke^sw7n{}qab~HQoqOu*x#7c&6MTK-| zI=HrA>a5zt`?}TF!T&0o;SnD9*dH8!&fE7#4H!14vG&C6QA)|@ZO(hryW1GAPrScl zi3LUv;g+vh@$$`mOxv3Go$vJ12szZmDy{ixH#sR#tfi5rsOtmW^TPcKrI*{N^5Z-)OqATF!PU!u- z=uvSMQ+A@nn~(^!v^p|Afy81>f`bB0e$c#ND)d4t!neI|{K)oo^a8*vHG3$fsC~7T zowraM@En`7)!|iBT06ATBS(hrZ%>^cD>iinbd+?RO6jp|yBm5fh}s^GmfBPtWrW}O z@pPnFl_}w3O)19Nlq25gQ79BbK%xhZ82CXSX%y{*ZEQqW2$OP>*8?mX;(3Wb3GVI? zC&SWzc%Hf(G_C6ty@ljy_llTjAW*!XoeFNh2Lw@ z7ZpqrhKaaZQhGz0@RtOIu%L1jd_wnluJ>0KfAh9cT}VDeC-Fe6x3uZ%Z!((XE=Wmr zVW&ohL7(pEARpU-drm-eR;k=4+YR@C=pu^KP{pipl&ZPb-uN3<^@O&p?u8lo)j4~a zqXKhqRKJDlihw~`o=2RbolW!f-Bv@Vk~=3$=YV@G*=kDa`Tc(!>00DWb0=F&^RBYG zgb`{=zNCM9K8TMx>95gG{U%XtLI-Z#s(HM@-XO(dG}&6X3NWD}h+)9;zQ;`8 z`AE#b>%O*r!TTm5l^@}Lq{&1zVH_!B+-;6Mv z;MOyfvR*bJ$GUIN+7SQ`lmNORA7QaAEhzX_--US@dD+JccD-hIeU8>7Rx5Hg=h6*( zJt~s@ekdDy8)jzP^*3nv=xwRf~K&s0jvW`f&^{&Q)R1NyFq+)i-%vBWty+@@>kF78;YP6n}`NjDZ#vU_rZ7U!Myp81vJ zXkF(d*)!Y7kxQ>t#N<}&_Z$q(8-%w);x^aq|Asill{cb_JXy|KT86R1sabeTyKQ$H z-G--F2h^nN??Uptx5>b`QGC89J~=h4kS!_s$E5yKH5POgZp}%#rBH4)dH}1C<{|Bws_-A7+(Nc0U^^^RK_kWs0EHjTYqW`K9 zD>2_;w(ez}UukNT%OiRX;}6@ozr$i+V(lJRG;>!|6>3Z4tgpn10AlQI4;s&Bh8$=T zLz`A`hPt14ivO`pKOyA(gr|>}In>v^v*r2kJ`Q|>ZtMf?VHCHLJ?ba&M}#hmX1km- z51&AaRZ7F;z_~S?(lygO_wZ1L3t63Or7PI~py{gPn)<)~m>>uOBGM8{gM_po3_4@u?pl6A8mAWwDK;#_569W}brqjAashcC^o zE3gFgvz2~QQ2lW46@9Ow2vFe5@s8!t{N91{=$;f*-{bkN5MqGET3b9n&{}SJzM<7u zx9KqRRq$P&RcE-3BFSQ{yp7Jv_i8{}a*x^N_)R(a9U z!Fq`-B631FrsEc+p=uvGmINFo?PMXwoNR?nCvYT36K}K_SIf38K0bLZU=31ss_+6< zJ5s{V?4MD^@+NofrcWgQSN7HtB^6vu{?c zVSugvG!J^45aPCX0<<kT|%0 zA_de7gEE=KjVLgc(jE=u7*D7acE;N*^d!7<@um5xX&t!ZH0`kE3NH^-nQagwSx>ol zhgtpQj`tjC6y-rqdVr}$*#m>wzDy8?|AwIJdmtw1izrUO^b|?3lCp;LgwD;_OEDWQ zG?Jc8DL(!6Bitr$ah^(|&Ur-(9X9U^6Ol*FPIc371=k8?57d7ZCzE0LPmH^9qSeS5 zmA2PptbDp*!^8>DF0@2J_5X@!(M8pv#(L=0st35WZ22VK3^G;{{WDqtVwp_9@GJA+ z!J#gIe>m(ZCc5kDze$eV zym*L3l&r!T%&}kzTxAIgSwsMiPp_VSFrt3cfdkWfqcl_2B|X#eXx&*NXLGtln{0@WAI68I@S^(p5If;3aJHaV))k@ z20MuxDdL57;)uV909bS(w548oD<+zyGzbvV>leak$v zSH}&KV^cMVxUq~hlF|bK=%|upc&ki@Son5(h>JDaSD+=k1s#Jh1K>BRm= zQ9iLS#K1uNtL_{6ieH%TtESW)YaPDCs)WDx_Zpoh_Nq$fNK=u$_vL$`l{BJ}peR=4 z1qRTbc=!fP^<6N5Dat_3(aXeQJmqBM=~=9Nf*W1te_cj&`n0&9o~~2lFezSz378ar zA^Q^IMpmJt+mv{`yUA7htl^jD)cn6*pwR^;A5v?mk$Q*$FdUJ`rhNbK|GO*thvlc} zr<51JmGOt|;%%4e`<}Up8aM8vZioNYc;`0hGRroR*7%?;--sH|!)sKS^VallBLK!j zCya>!)MCv_c8m8H^Q-jl+xddO^sfUT@~FeqZZ$#sK~_4hYy8S_Jk{#%O~ z-E*6O!};z7RZ}OPQya_d%E3to7+%F<@Wh-95dT8tf1%P}oY3v^UY0i;sQtibqCfq9 z0UT3PnvNPU{O#hGiQfzVi8uMxHHqlb(K|kW{)u)h@FKXu#=2@*hkHc!xnfLLta_ME zg#*L)`!6PZ$fB@!xlu|8a?+=H4=~avZBih%poX-+W*s00csNhG?J+3GO{T%x0#OVR z;p(q-oI9ES{IgpuV67@^gcI+~0dB#*69rnneK3zybOa|Z=tLxW&+K~sMkJ@~T!V@H z-MGx)_j5Rn&+56c=pIoz?p0kUGLDs{n|^jdm){AmxDy6Vtqrs>9kTJv1DXa*uLo62Vr6!f;J#jF%5r}5$RAWxx8R6rpZ+2T#_16W5R^-KG zh|$Py$;gv@@3^-%7|)|zHNa>-b23JSLe}0fH@Xn07&c87FMg!H#^z6oVNTCty2la^bBI^k1C{Wcc^k|GwkX40?0;-f-wSS<%m>^)2#3jx} zalJ-I{l@~m+DiZ@&OhYhg(S<3HgmgH4e&6D6f>b&39E6X_x`Xv;LhVZWpJ*sq^RZQ zX#AWlI;Eu32UKX|f0n~EdLu*~aBnj@@9AV)6R383ALpwvqd&ri{=WK~OnULq zU)omRZKUD@eZ*d^i@q)uq?qj6P~10qKuWd^+P;m2f&c6~Li}Xy=x#k-(lCq{AUxX5 zoR_m`gGtJczLxfD1TkHO50JRQCat?p#N-TKGqNdF=TozHA#>*Y@}x2*PvQp26}wly)cg8B+OW10Tvc(eLh+OiUPr)DUq zgUjr~Oi zU8;$+tHk|!GSA)S0QbC@Mu4DnW;DF>#s|jo!BMlG&S0xM2Es16l{VspOx16Kt@`OK!21 z-U?=b(_b|(^4yUBQ%(X*p@erpgEE_Ft5JVE!@BgnoTB`r+=)Fs0pf=UXZt+)&TS6d zC3JL{1)?)SZvC<#FX2SRSKhVoxig;dDIrgB?$H3lm&e42$nK0A%Bd&~rjnPKFl*fZ_est8R6qZRz}dkesa zoG)JV90X7?;fCu`0vzad@h>i%BfiwWK{5EB-t<(Z-Iw>`RCo+MQ%h2O^eV2->QZu*XNETPfA_!~}Lj zx9|Gg0D%AA1t54RI_=ITfE;?2*7wXG>k;}4C1o&l6_UI&i@)I|kjbeM^E%bm^=|Ig zCR~a>E!8UUPsdY$t-*NJeKLLVVt8hWI5Wki{alZ?Zlffb zSsYjdkwFf2bwp-sR&_g80(PdhpZcd5)OKp)%A$Py>Y}M<#~WV2b3jhzO-zg{x%Uc2 z`%q4v504lXErzyyVq+~48iHM7z_SRbw=}rk*!=J${B9<5_f8ptlIrANQZWJcu* z2d3d_$i*D`=ZIUQ*Th^tTz_Mc1`neo@$0`5q^1zo6ML~aQ(vdp__vgqxz_T9p=sS_ z)A$#MZP?&q*FuvBbYdwM(c&(gO9VK|T@^)NUY!mJNdaRn7oO;daaycN)%~2^J6b-Y zra#H-Y48#vn@T2U4LQ%S_%B27AJz$!9ra$jXy7t;IwA6}EsC}wo4fX#!DO3|5_)5Rmp>G@ z<}XBbk1a&M~7wWQ)0tlFKe*b zx)U=opgt|^3e8`?hE!HYiSmDfW~<1aIu_M6*swFT_z|W>01E^qJnnoLMf7cLYMw0L zw2-c+-KPQiS#diDDM`gk++uTKzkkCW?W{%RN1!G^CF6>Jev1V(vt*ym_ zV<6z@*P1)p9lpWF%%xJLrHjK0h2D!S%=c;rdiv7x8K~EiV~}(42`o0`pRunHa$wfC za^WUJ})`R?}bKJF^M?} zM{O~sQYnRLeK8U_*s3ME{tgSuMl~EGMfH2k4=IFPuS)L{sc)ditQh}u>h|)oe-@`CS6sLySJOUtEcPNC zJET2eg|Os7Ma*KvzwED%>v+9VXYDxIDn~^C1%|s$9TJTx)vPS~TyM;I#TY`px5rC$ zxuCnKyoP6hdi9PWw9b>noeuR-zZl@Bh2Oi75|v+&s2{Q-$6v*Th3!m)dpfdX1r#nDV!7v=$Qk8&$vMJO0xkG~btiRNeW{7;UeCwENLhbL) ze5QM^c?(vE@aQ@TKSG&fHY zg1k!qr0^2mBhE23M00;~%eU_>*NCMVRvTq``D0P#o|bwD%-kHx>dF&vAHHvo@9)dE&EC59!bd3c zvKz2vFBX84zVFN|-<0WH zS|@rB{YOotK`UwZKIG5|be>RNXf)+UB@t2 z!XsMp>-_~?1lhtFlrHCK4c$sS06o2rCXz&W7p_28Ql?7{g)yBdO@&#=k}RDsrFh;V z4p&+UzTLhu^40AMs`4QH@{Hym+F4-Tvwm>n_`M9!r$(_dV_wuXR8uCAucTFc_L{Kr z1nO?>ej0rzO1LyUcQMmsudg$NlGr`NTk=5njA3$*;^aP`$(#3i6Q*0PvpI^nrL~&S zS6BgeHWD~foSjNCd^bHT-8q+?p!Tf;CFv<{)Zjk&;-uXUxq8t zjhE{Z)fQfGMd`Py0OTtOnmNl>$B(38#dix7!lirm8&xuNjgIu_durQ4wC#IEMQ7(v z#!pTMd5I?!X0NC0t7h{Y4u%rl^m6CI=Ni}2P>0jkM>+{zU@rxFfGQRmeAt=LgbB#G zsQ#+ZI9{)T(ww^?v^1&qfuR9i%l@c2pw+7`0-^za%}KL@}$v~f=$&^a7n+Tn+< zE7QEu>({axh?+ov59C%U)8E+Mni~hfVS|V3YiJ4AI(vE{$*PPo{|mMW`g8|(nU;Kq zsKe~jR^lAzv+gORp_>_Yvjn7ufM2a77(Gt-+$Q*#BnMFTWYF&ZP8DoG%OjL=`QZNT zigjK(^Ptui6>3+pSYnBX`TL$ph)){3_uOLZx|aQ(ug6gEhV5-W1wSy$^oOnlPE95Z z-L+384A;C8b8b#4?vS2d4}3mX9yO&BF)F8Sa~;y2Z#{F=%F|?SW=E(0_;{bP_iOI| zl1BC730?VteljT7g43`R&2O#!^y@C+U#&)Zi8!qsrap{8*d6$Jusm}711-)x1Ml>x zcXR!7$-bA|i40RDdjr_06&1&&zv^$KDib#<2qcz^Fh^NgsyB4559K%hIOQOX7-j7) zv|+_BFFyZM;zP*vW#8?_n6n7fy`bt0y_iD%p!Kn|>$h6ECw*d^nrV+xA2zlzFM;B2 ziwQ44K3kiuB$l`NG)3#yD@9RKKx+j$R?>1>isIWuC`kS0x-!~{lfbgte}Iy`-A(aO z!gcq$LGE&e?1y_=X3?GJ2_bmytN(${@+rC#58Nae+G}wj&@}Ikm6HTDXo9A%lqNzJ%BJI&!WY#L;3a-i`a3ymOL#;)F2eBn}USt z1ynioc0S4#TsxQY=)-SW8Kb4~S%Enq$C|J(NJA{_|Jh|6%x4X%i3p-!8^DI%y#GA) zJ2O?l)am0_Yx^yiGO%#H@tKiU{nf9G^^CigrR{$7-qXt6P814BLVXG@O!)s~@`^-6s5{4djai|za?SHKNo4FNcZh*yOQR%yC!3384}*)K z@Ko%&bb^579w8epTJB{#!{qH5C@x0MnW9WN{C{lee~`(Ub7LpddfCV()cKucwPSR*^OW!o5KV<(re(q?pMHzH zrb338{|a{U)hE2&u3hC4bIg4{sHo9?duDaV|4EXOwJ?!b#(sVW-=`i#hF+Sw>WBJ( zQ5ImWL+}E$Wv{c(w+nG^#p26OK-tsUd4=ooVMCCBYxlX{>GIWD4pJ$DYe?{!C==Yt z%6jiEs8N!#e`jYKCpCoU!kgfHsQD^5qI;2L5`1O2$j2wb?QlSa#49S=|2L~pUjp-K zM{S%A2e&$)A|vALks~V&)Q;IuycXn%+Rv%Pyt7b#mWn5Tj`ntO1P}IcY2Qp=NVL+U zQlU;+N9S210PBkPjLGP>7tfi6P9!BwOP7$; z-2_#Ind=p>=ayU2nP=tm>Oo&#}#W6Q( zK=jn7#l5?35J3ylX@VE71?@>O#qQfQ2!Og|*KhLw-VU1q@zj6FR9>gru5-yJRt1xkXZT?J zij7KxgPh#(JC`J*Mh^!)0T!1{=g({6V*7KmAE8@DsPln2r^xiw$56zdxhC8P9Ngm| z#X}L>GN`-i2@S-R%^`aPlqBNCbH2Z5;Jv&J?}8jP^AQ_R7aD-XsH%ddk0Wz1=9?#X zE-GoNTe#7i8`bnS)V;yF_S<4-m8o7*xU#4AbqD(*2qa`?I+|CA#{SpY#n%f926T4+ zMEeMM7LIHKE%2qD3o7+b*emZ|fWmVaLo)nw>JGMLIQrwc&TsaFK6z{PN{G@adJ6xB z(q}%p6NOipa*x$-+?0KfeEz)ua52i;=cfwl>Nk2TG4k9xJsX)gh9>{+%hQqvkeWZV zZAQq#>TFN9s(J6d$@xTSyq-U_wCQ;0nUX2mOq`j*884QJ-7`_-jsriKZ}Lyji%@&w z`ic~LoEAqNSTOR*rR~n!yGq@MyT1?nl@-D!kOPpto59C851R)DsL%(oK(B1BfT+ay z-|}igbE?^|m_r5=L})#2%Mi!OvzKFQ7w};4*}w{NSGg3-m>Ydt^9NdyXPPkSJC=d0 z83E0w79P!|WHw*@LhcW)?5_=lg)G6hni^wQBF;7xP?OO?L$x=>)|C_TGB-G{V#Rr! zt<=cL2SbLZZvXHGsqFM#&9_#g%gK#R#i7hs{P!a{)X7$QAOW%}-cB!;u0>>5Dj1Xh zHnH%@bF%@wT!{a9*UUsT-h(^pl}7v*&%gcg_a?lYy0RHmR2X7Hd2L;!n`3{C#;|U! zFukup5^-LgpOZ;|uMv{jmB!Za%QA)QF)d{NrjXFtbNlcqMB&wv?#ety<6c8feszbNm>V*dxuwsa2JTA-G^Avl_bI1P|8)w3@+}j!QprC z3igQn8EEa<`2qs5H-&G?Jg9^|c3uA2KK4V2Iw)8`i6Tr5>#dSQXKx1tO+Zx41IYxh z2^B-SCd+OP0(=`lq9Pi5UaK;%JvZOyA$+nMd~F&XvwwrL2}syKQho~M3ja;HVefY~ zIb=`6#-9$h$G94$=5+4GYswcf)b@EDJ1`hx{-xW`X5U;=%UpnSH4&f6E2irg+xu)HY57UX+QlSgZ7-xKY0Dpt=4nYED06jq_Wi!W!Cs~twTjwfa0*n zM4)rTXHIavEn{F|CPHEDyL~gyjfmidt?m3p#vylF*~OHQp^khzVkyvjDsg;X${+R; zD`rQ?-Oqs=M5((bExk3ja^w}*FfFe9yC&OjM}TZ|)XnD`*A6&a^+^8Grr_fCCL|ad z*Jrw@W-pK$?%`b68SM2!V0NolHiwqVU=|J1H>Pie9apQ3P+ortAsW zut;ESppatsr24{(V|)x+al-B^iy8u3YXiQ1lYJ6F^rBMDdaHk8Jeu(&3CRY3JNylr3NjwdXGij)8jpWXF+M`$ z0oGB?YV;t*{?1?shJ9hoBmwP!^^YU@n%WPGuZcX(Y&HobzIk)VN$i!A?sO^&`j#0 zv+x&!@~Ah9c$HXfu3-~@QiVN+e$tbkO(^^ORQGVQ8M+V?(E;E4gbBnQQ(Tpe2#&)`Xd^!;Hh_6LZ8j5$O*}O{s}NF76hMqFoJsF znDEgsyQ-pB+qb26R+4T|+Y^4eRMOv&)`V52XP0OF&HwDt@_P_2@traE2<^e={r*?g z&t8=J8HXNq)(^Ty44L**=zUaf58NY_Jb!%tl=WM7NO|MuS=|tmo@56#+-Kbn`-jz* z9Wn=DpnA?y-a&fj@aJ5(mO`0S>vodEQY^PS z-V-cv_p^Rnccl<+FWEnglP`Gq3g1J0ecrp7zd=8fn5dE`Wckt z^*+&iQb+t1L**}f6&n=hi6;9UGB3^{t>fRcBF{lSZHvdsrU7&NYl%B!9T zf9vB>stE0{YWs+<@<3KHJD4Q%Hvo~gA5e>F_w_a(moCU4o!xt6{q!p?XWH^^&-Se< zZm5AlT;)(ZfBo@SJPzO2ktg9Cv%z(2$j*kiY=!n|Tj8SWUzf>-~Dt+84L@g+AuACbtuO>{D)LRj~^BCK?KS$-1WrF7G08p3~>@JS%5MH z@n?1l3Z}q<+XEBdF^C4-c#$1o;1zf2(`7A1x{W!^y# zh$SowVDXLzJ0N`~5Ci4HZOAwCeth{|vO0A+ z2hk^4o@b50y;$R1^6Ov1s~_1F&Lv5DxSMM!FVZ-S;lOXI#%7y{uww( z9l&_`F)1lB0!ARo&HKCb#R0|5h5Ks(a^3+HeBy^|aa)_R0#iY-rS>%KA5>i%rOQm+ z%Q=5X5}!`k@CZ%70DE&bVIRy~C=;;Pjrl4ri_zp|P(o}YNq8z7^N-Kp93Nkizj{P% z{Ipe?*spKZ*7W)!*0=vfL}9^F(??B@haz8XmVz@KJE_TpD$0R|UYaYFkI9J@{|vs- zbS~|0^TR3cPR2&9shlD*qJFx2kYlqSl~9|Vu?5IB|0oE@?2dPq4bpJ(t3q>;;zGe1*tH5YpZ zf3?YjYtWC*=tQ*^Rj}1-oE1vyHz%Dk^A%p`gWQ%gWkh_eP?c%oU=y!-wY)4RB3vwq{6tS%@50b(sOuB3! zMp2u8!v=5i$80=imx(EIte7yWMZ+u}|6;Qc^-sXmdKz?YVN}ENdPeX?cQLk-$0+hK z)H4bCKv(_g_cL7J?bE^bv_-!Fu4|fBWPdl2k~m2%GeRh@`^b}^pOyJuzl zG^009&i!i4zdC7~ANv=ve|$<-qWJ{(H|xSUZQr~OEw6^?_61&VsmDj;jU4lHuAf)| z$hhPB;^Hp;oe^xbNu|jf`BkAd*uughNn@GCYWoK#MjN~2R=U?dN>Zf`Xw#29r1DRC zzZU(to#c{Fq0Qb+oX{8&p@;7gUx7vaSm{==LcP6?sFcbUPrw6&qUbVpASiwDQ5N9r zg&^6yOVrJQBlfLVp6N81KAxW>&rGYGXumqct}C7%oGnir8tDtiwDDniaEoiy!@YCW z7ULHb!b>NI9N+bdtgWND38(yU{B81&J10XcbT(%jAD>O>awS4LhUr?+iDQ$ZXst6> zafpoqXfX>8Bm73Dtjubi+RR1J|0z9$v!mqCj?0>MATblYa7o}-Pvl0ywH8Wc|LS;a z*O^g`yH{or(;>^q-74y-Rh1+E1h(J2h8W+#X8tT&o`N_3wYj>iUU+0=8ZCe3o7c~w z^$j!aQ&Rz?R5l}=)|H>Nfw7);C$aEmyjV$~iY7T$Csj;XY>ezgBM$D@Lsqk%Dx&$3 zpDn_Pd^*8qu4kj#Df;BfC&olMR#tmJx>&b744%5)uZ{eoJ)H* zAz@T!xJUL&K%h8z0-t9|kM;dcSE>20U!|eeDR2B1nj2C&#cseM_1Iv5Jno>#a0*?a zXUAui$LD%7I*wyFw)Ue26yHsBI3MTt6HBrpN8kUlvYA|ed5q}M!JdZFUdP^1zll`X zN!+f6oZ6mxg@l$NDVK8Io@4^-@LsYIE@Qcg0@yJIfKVkr2mOE|drK{N0`6xMiyxv3 znq10(zC_1#FHB*!x#EUIkg69($~Vwkj}1R^5e;=2Yj%x8=7pSKuX@lg@wnUL?KBL( zi~2^;kwil9gj=5*q`40Cx6r=6{e$~;qfJtRq?F?-p``IcMX@vgrBAN@6bG)o>w^Te zOR7E8!f$(hQ5kG~+EZn1y<*sdG%j(%7&muuje#s+PhxQ>(l`g>#KT^~uDH(6$BDc8 z#030y9@G;^!F|vzi!xGT^M_(XDU$stl*i_R|z9-yTC~;`SNoGih)cQ>4uDGmy5q? zSRZ5FQTV6u3CVmvgB1$1LE_2%Tp$)f=)3N|-6*S5CY2L+SIc@jO+ylJ4NrIE1;;bMv_tS1Rx z_B_*Ff!v9f?Hi{?QA>S97%sZ9h@6D15aHdJ)>TPyyOmuIxQxqSgANt%#>nPK(wXiy zSl9OLYu-95H!uNzzwmFp6IFYZ$%Mm|LBTDsFG}>9D|o^SbHr|V(QRoq=W z*sCJ4M6$(ga*r7>qZIu=fo{eOsTmSxufJv)UcRrOmNq4@k-}s`;_9k#QCyW@4V4sc z5e^Jgf@d35lLO+Bm8L^1rbZ)}7D9CvE-uD}PsLG48vRo*On6Yc?@pQfP=D}HxOUsR z9_4TCfI+L)rk@c->WuX+@Lr``$Iuo!o7%dcN*S%-QUNSopr{rr8=0H^@T&ts5bYo{ z&eG^c>$#egDeRrf!*c^nQ*kWRZe_MYU%u!_QRrI59-!kf3);jquT?s+58wC3L&RJ_H8{;+~SmQ4G#&*Bv0vXoTI^3d#de203lQ1GKH zO=D>w%f2S7M*v7H5QZU<`_e~>j+%2?BP9cAaE5IycWIk ze+kfxl_63olF0RG_zF|5FOI%;N8!1V^gpJA!AnYl2Xl~H~P>wtFToO9JQ z=ef0*c2aUi$nsaHp7%1h$m$X~_;nb4bijuZ;All{J77afOaZ;~#WGLq1B{>88*hiE z&jJX4_~VzZQ!YoOi08dx1akYWf+$Q#TH3$Y24}!~43$2xKg z#%QmceO+UiU#)MI;GtQ3mec^1e8WJ#pQ$<80X?peXZS$r75|Nng({TZ=o9bq7VUZG zS`XQxXzcDyU$PAO%>M@dNaWz8Qbgo&77t2Ss%v&<(s?74yg6Fo&RfRv(Omug=T~PrRhk%QKLE-6 zTF(2(T4Xl1X5oV;B2GhWKZq*&pZ@G_f}k~pO<%G)uJXn9Wf^Mys{18L3$fIK-h5zZ ztS2v6=fK@fv10BE%NOx@^8MwuL*3H5kFWENK+O*o?tD#lk4$#PlKOf^T|H*9&Wcha zsLK7uV;8UY+Q(LCj?XgXb8WGic59w<-ikaUteq(U;A-{m|8dRODYrRQEapKyw)nji zAazt_wM_7RcuHOZ;P?CDC|z;t`0L3{>)3ZiuqaiCZO-Vrd?Q1RyvRr~3C6qfeqk%m z%b-Ena0_*>|DRN4eynllJbhptWA?^PRu))kbwMDLV zr+kj-OYsKzvg8JIdzg$V$P-_ab2HYlv@k(0lC5G2u?^HfNejYnihOU;zcX{?y-X$I zx#CK{A(H*Hm-D@!3JQw0fG?~x^g;^xLPW4f?dx4k)JxJ#z`t1#at;$S<3&~8T2|O& zUGr*7(>fsBoN-Ilc@lZb^XK`*3upFs8HQ~~ue(@HFCWj8}zrCN)i%>A3IfU%Xs zm6|C3zetnABg~ymt>ArzwsPEkw5GtTWiS`t+Nyljjl~c~{M(d>r}RdhU+_buI(I7@ z`uCusG;=QNUmn-Rr?@|2sVq@-`ymd{$`!}%V6Yf2egK@S>=n74HZz2VI4YOgytMXz z`OTkZMFm*DOZz#xw_S90_j~d*6+$_GRvABcU;CA|Ny@c|`mrFZ=HwDsGIh$!Bw%X@ z!@%Pvdw@pg0{V!ZIrAl!e{9}fMOC;&Ab7g`pca%Nd${P%(}l0hbYR2)%T_B5W%@Y(k15VWy7&{W#SXE`s_xAnDFcAn+WRve#iTBY2Qkvo54kd`c| zdO~b^nzJ_2Sn$^X(f+;T@WIv>JwDsvB9I1NDnRL(L*1}?X;t~s#({mYMk}I$WY#+{ zzZnOHJJE<|ypwr{h}ND0Q>T~`eG?D&CK_8Y0M;e5g{fNIzD3-6q5p&6?`wqh+fy|N zK)MoRUYDa_9gogG7S;YB*}Ll(u|0CC(gaZ{FH5RCLhuStd^<`0ARe4_>t5Tw4oUi*WY_oCndMM)05^CS*Yu~oXOFadOxYKHf z(@3*+AvpNf&K^}%an+=ons@c04BzjAbTUyz$@tA5%gae9wSvpt<}zRE14h6nU|jMO zyfpn=-?hk@@*Z?>Y@=D+exsiEV`;HURn%}<`lHi(*lWzq2X`OXmXI=ryvfUcH;H54 zFI!JAKPd`Jwc)Yj)aAT&`ISCEiP&^o%GBh$wm5}y2SzldJOe}!7dqoUtNpq1{=Kj1 z(RcKVTEINIB5#XB6D(C-bhf?;mB%dS0z_)N*n;i`2nk8$(VUoN9nid5NUqS2OJow5Wf)5vJcY(CTMY4BRkJjDlATq+8P~-U#(BF+!;@s@h4!$f*taIVu0a)D^%We zVh}~dYmOtPjrC8XFEp~tZ44x1Q4%K{TP__=gKsw$k}-dB!;ffWTQ2+BD;L0TNmtB> zAC>}y)y6|PN!%8}FKJ#8LcZ|yeIE~jlSW?v`ZR`~xO>ZZSQ(GPwgoi&{Yd8-ZWfmWh*y;PL z@unjl6@7AEjB;bCLl8=%CCj$5rL8^Bq!8rWMzcTuRPh}$8GCZL7aXzOyUU{vteKEe z_OUHKvM?_mBEXT^q&8)2W9)fV_T`J-w`7@=yQ%Cqmp9nXy2=p@egdgAnjAe3SUM1+0;E&ezz)qzT$4Q0gB0u2Q&A1zcy`uL?@u5OZVeo>NmU_ zS}A)_O@>7lOTM6XifL5g)c8}v^UIagg@wLMFw@WVY6Xf{PchVi47^OaaHtO%qFfVoh$h2^%0Hs? zH1gi!-|hH|SgI7-OQFM`V2;Gr4<*!D4onldb{h>j7*YnryhIH1zP>DqmeVAgYiA!X zZxGJ9P1wfv>ATE~{%Y&;8-K%Lw94J?85AC1PsiEP+ z>)|8RAtbWr2xXR~=NIt|z*!FH)Avcb4e6%uDu#+t`d(jEoPwk=PzkyWjBuZ{qZM)R zoE(>T{g_~DZM*_XUR6atp>WtHuiL}RJ%7tWGEZR)#ki)I@yK}2AGeM7f#c;Rv-8}; z%~kto5pmDn7^id*3_b*uJI2fTsL}&5tuUK$JvI+=_fu+qDk9B?vd2eEqcfuu2N|T; z)p9^1ai5%NZzS66PS>Q}x84DmP+#~=TaH6wzlVU`Eh19GAw!^vzi+<@Uuo_STYcrR zx!c$YAUI%U+4-=QkRazKicxW1ar?umm))zi$v5cjs#*`pvX_({DokHm^U-nNgAv=D zweP=KxU=T0gPi*!F;F+mqv+`KG3mBlpr?LUITpOtD>4=Hc^q8cR_(3HHYrNIOE)i= zw%6j4-h?wO;C~q7E*pP2=BVkrd26$G6v5a~*}$iOEJU!eV#Lds4W}tS92gd5kIS|E zx&!_83*{D;^R(xMX^uAL;jU3Y3Msj;APy`o^67kf2+L;XS6&$qJwYhKGVA+6wjK!c>-21 z7|#fXfuCJ~3=0TaGoJwnNbL$q@r5go|EllSx+`_kwsOZjS>d%Tm)FqlOXKpsp#3^y zV;>tE+>@d9jOWhKEc(^nS_ADZY+uFvA?Ww4$h;1R&NL+38;AP+vK6oZ6SjbXbYg4s z^Q3FFHJQ9-^`ULNq4ZM5?2Ur;hOX^oA`#gZh~z)@wr9#Zr95$~s-_e-Z8x~_qO%+F z`9;&)s-nT8t`9L(0YZ`yrfRrJ`=Q1}dqM6>U2e38-yJO-W*PcWRYXfwCN-o!DA4ag z!N$_>0TbXKH_%rSEO{ZwK4^dP^SSC4eTvI=E9?Q3ysS`OEZM%+s%7lm2__4MSi1Eh zm{VU%xFIL)2_%TvV{go)eF&6dds`!7b`&TPiwfd(*`+2&y^j{EW9p~UovZ25&sQ3` z9V~3)RB0&q`V5DGF_sE)m;Yq~dh7D*qI_#i?-kZNQ~`D$ei~kRTfF|q^_ecx*A&XI zT~r9|W#f|vByeG%1(u2-8Ew6Nym@`LL6Y&9?nXM4me{34x?8%tyB3s22?6O+y1UtTfB)^85pk-77g(seNP4Ts0M%!kP_AqS0Q`cKGAx{_=jy&8Qn7=?+Myzs}r zkuJ1~f9*Ux2wq!c4obzF1OAs|t!VdBr?cw0M_?|(>9AkZQw~S~Q}>D<17K=lhY_!L zwGJ9@)YB=jV%Hq;`0KyP1g()^z{B(FVePs=Pp+OWH*Rp3dcrycd%?sXtoGvfrlYPl z)v8JJWU*BG(ccs^6e9>3Def`2qjN~0*(r9o8vCmak~=cBP$E542@pg7DTuQ_$b+@l zi#ze2IlIIcU?_HFv<0H@4;UO#If#V|k-D7bDg1J3RuUOc>Dj`A-LU=BHWVBoS2Z5G z9o21Ye;U7bXvVVWP^yi&hz)|Dr(6&C+x_l}zxmOjGE~e4A5#b#Pt={YcVd}5Inn5d z;}jog5iRGC7u(A$QKo{)-pzTfowsHgT*B!7vVMieRP}h`1RsJoq8w1=M$tNxtLKNa z+W5;Y+dn)!9PaVpGVuXVuMV-~C*?`wu7*fXtR<_wOBf2YM&bu6L-4xFR+CT4XXTWr zEa*N&|n=}y-jx&6lYK?YPy4IL}!@XbPWSm_GbWr&k!D9_A8|KJq9E|CGK z!sQuxgm-tgI8KFgH1O)(rI2s5k~AFtq3FZuzoyP=^^+ZvZ7U8j-I+TmlwNsA9{;zc zYLBl~aLwO$=BGKzuI-!zEy#bSXiN>GJx6)s@!#kEUCcsd=EqeO8x|8>==t}$1TBRe z=@qI0SyDv*?sRpP#?ezUUjES!gXUM(eW7r<586+8>Lso8R&U#Z6NtUZCIdw6B@t3| z9+VmLwT4&xiyG~Cb^pwPp6ky(v;mRK8(`_#X;@Tw@P8}c4_~2ueo|7xfIi(#uli8A ze-4>@IvFupo_>i*2pef3=-$DG?KuhOXX|e+%oBw>)lPk3zN6HQGR8e?LjR+~9N(sY znTFmZ>`7h_ioOyBFhY8>!Sbn_V=%~{b>?ZaT+SGI4TC7hoFABW-Fmi(AQqM-Cw}>x zzSX*ek*fbcaa*M8?P4S?u;EGo&2; zFF%`DU0~G&c?V8@J$6^g!VULHULiKob4PxYJA2Ek9~o*^*SxX3k9vy>b7e|WXnNh5 z?4?M1xnq)Kg0!NKsnqquqhfd&|9nEZ{-KVJXM^8xX|ZI54L{iV3cdue^VCVchjT|3 zI8!PgD=kLVUh%|L!6AZpE{8c&D67SD@R{_5i`^-HI2uplJSo?_@CQ-l9r!p$veqx8 zP9zWv%fcht@rwunT7HVHE{orIZ85fL>AlY+eH(-4d09;2JBf;sh>QM(I&69}$m=RN zEe}Z?O}18SJ0a2){MG>@8RdDQm_FeiUL!GmpN&U_0#j|68Vvw%96(qSAEpucyzh4^ zN#N#(JPs}Wm3UGY*{#I~hVZJ_l2>pv=7+v_pgehMvga7SFJb2oI8C68)kHE03Qp5c zRXy*ZmJOjjiZ}h42AA$a255nLdIB4G7&;SLw9sHUD%Dxuk216O0n7yloZpKiKUXML zcwSgb?iu$n)MLfw{+Q*Gn}#dP^V%ljI~tEkscff@hL-*1g9s5i?Pv3X@b%yhFXlnq zCbe%L`KFBw+2Y+?Qe(HrkVV_Rp+C7l92K`P7K1|@74!hxbRF9h?|$7d+G#n%4c$>P z6#GyqL&q~IKl9^S#EZAmxMa8m%qF|$MUxWT#aI4t0b7s}T}4$lNfLP<)0j@XSWc%4 z;2@3$OJPr@7vz3zj)5+IKrttv_LE`sR@^+Fy<;6AAXQBT>jr%33cJOZXJQjAPnHi9 zAi)!~4@!#IH5lWa@_!wKVIl^d`+7P`p|}8H;glWtC;pigGE2)wpu08}Q%&R60pv7n z?rt<(<~j1EeKl?q6pt_zJiu0XAFRny+>TdI3BUe%{U>{ohs;JANCC-RnfGeY3Y>om z@6|p}dto+sZnM9JG`uzSql_6_KCr?3w#0;x(L2}{#Ew4j<<({sX*(CNpUQ?E&sj zkjcg4;b}yWTXqar(o&(%Vb%hqH2aQmc+86_r~JH%|2$-I4PghD!e^sX^9a%zhs&qa zEIHbATe!QrSYcIQ)71$Bru>> z8s5`9TfzoE z+$N_;wXQlOJo$J5_bGY0WaCBPZF+@Ub85g#@~1Iwvpotv{Vc(~cAip3fRwBaR^7w+KGegDK+ zRb~M2*^$#Hh=VCCP3Do$d@n=Oerq(4c+=(XobxS7ozT!Yc4S_-BSEK?o>qdkgkJh^ zEbOOs;Akf%erdu)!fD?-Ckcx19ZNb2jgE!s;2%v#p`ojObh2%o2@>+c9L;)>8^nsi z08^%y?x+~#f<-1Hq~b%7%5#hWjO|paRTa=DItxQL%)DIn`2ctRfe+LaD2A##=)VTj z3z8I|QCj2)1|<=H4SfXmV@ymaiHtozHVDiF%4~cFmN9Peo#wHFAYTs&&zm&R6b8TtArAG+;RpPm-2^|# zkv`v5 z9t~2eE-nKA6EqGuJxpP>z2IHb--*1!Q`s0!-PbGu)t-DfEKf=JusOIk^5?$=Yrfy_ zs$B()dEw@tj%?w8X26tAW(oJhblB)LHo%r+dYc*HS<)i9{^oX4hA>n1rc{!}a!Quf zz~3^im$2h_+eiIqSOQEQ*e~?Vw&!H_PIBuizNx!1AYzTvppvjt@*7nOZ{k?BIJ$EG za+<3WL7PbLPe88%+5s0+8tN8gaOAyJsi=6RBbN27{c|J|I;azgMhxKc`{oT8iF{+~ zNs9pGDb7<_we%qo1eqP*3SI3$;(N`?*W{LzeTk}&@o_x z{hYYExys4UlFF8gWJM9LB7|NU+z|#nMz!EZt!jL_=Mr^x4@yt@7G>xO+^?&tJa0_* zm*dHeQR`wL%z?ZY$023W-86`$V@x0vKSHRxS)$&O_LLndN_o#rF2nY>z;FJC)!WYe4z@T$zlY7QEJkje#g>&sj`@XMR`sesXRP-7%LkYMSEMr=8= z5uL2h`jth)Q+Lh1Z*w}U@B1cy`$L(%`q0SK4h{No34 zCF=y2ool%+>{Vvto0@yrN1L-q^8@En`P$X z1k2(>@5K!OXRn%*c+1Ur5vzU`az3-M4&_0GIEWZh#wKaatnw9}mB_>4zFKwf5gc!? zP?b~+^@T;|3kx9C0Ot>rboi7f(jKj9@XWRy&@x_k>7Z0CJi91Q5mH z!c=t+FTb6i%7rcqoxyOKty?DRxHC(Z&=T=x?yeyF@tu@5QhFF5HYp8M<&U>oA3A69 zM)_SLU8hSj&5URghqIz=y~Cx$SzQt<07H2`u%aRa=1(nwH)%La)1m%^^6sOOz`}WO z7?VH25_Y|X4l^|!C#i1nrlF_^;pl=BL$kZoHH|({aBQc4KsELLpYiabeeLbE*MC;F z7|@=J9{4L0@Bo)yX(d)kUMFCL!@qS*hYR3I!fXly=ikG)ILPuyLs3B`zEwVwwyfrMmmHl0R`6LzNZ}rs(;5*V40b`04}a^KKDBfe|3M|`DIW4R<60fL+IhEkWnNS6xeFX2+_Pss7oM16Kk_tN9@|w<0NlQeX)=hhQ1hn zA%X1LJQ)rJdA($D>?7kEPz7^3(^nMw(eWx4r7YHNa>@fa$^ZMDeA1NHq5|v7Sja^&4!=Suvt35ztX%~DeCZyG z)0M~bWmwd1>rN`njs#d=8{|=G;4QXkx-bEPZI-NxG(%-0FcaR;Z#n|!djqYcYlyyl z#CMy1TA%Z>oDPrp9Et%Td=M1+Dj|k2?Fs)|raz;WCvC#uCTMh)preEPpT2jsFt_Ii zu_a_q#K+tc0^0?p{uaFx-1|ubwpb4P2pFOz@hMhPG2>=B4OHs-!r=hUW^RX1t_sNGq4HSxh0&_EcD<9zEgAMBeQ+KZ^e75NCxAlf z&~cc+c!gZvNcNoq;A$yUXB717@{gw3H!Rk0Vi%OXwF3=k()b4v+bsL{k(ZFH?}UH~ z%;frf$(af_kAi=g#x`02g0!+Kts?j1TD;pNB0YndS>}%dxaGI^8LxH{Y4lh~ExQ!2 z!a3f}QsNV=H1H1ZcY=+PwDM;Lq`lRn_Ia(DGdfB>-pCOto!|xpD@QrGzLCb0`uLwl zt0Gc*(Q@(v7&z^**fbjGzztO?G+d@Ph}uF?Cf!ds=9k%2u;p`bixH73DQhCo9I#X5 zC7?eaHb6kS17~%4!)h(B#;%f;67`5~Ks2mk5PWDsK1=aGH^KFD1LMm~Ab69%m>1@q zw}NSEb=2=}9~(-GPz7pqru=U*&vdbI7?Q~|3X;{?`(cCjj1rZY_xL#WD=FeK>1CXh z0n6Js<#&FFKwlykuo@sNx3~kFo~O~~7tjxV8pm$py>hT_{^|X~%8cUAqlk_K^IbxP zI!XtlzbOS10T}o+QMUGXY-HYeSwppqL_T`3jno~rTL3NT5IXONi}+WwyA^*#uex|h z;6(znNK%nF8N!olfao+-tZ*bqZHS}F$A9;Ov&nU5w%;N)gA2=XtydlRi0|d+ zS5S<&5V#}B|J5%*d-Kb}`5UcyY;#m?dch%SWQ2f!Kn;!J6V+GV$r6|VBWn*gLMG4A zhV1V`vSg_QS=GY7X$Omix7A7*fF&}}QnwPiSnhGm6KSO?XIlo|F?L*cL8NcR1(|H> zJ=x#sO}n=WMq5>g0E5UUXN=Paecw@325Et|63{OSwp7JQ6EsKSA!4oEa=@@qq2{C% zJliPr_9Q6l#}HpbWC@q#cU2Po7_ry#03QLuqc+P3MWL^-LU4X6**v3TGEr=TYqtt? z#jS$npE5!z?(sYipEr=Hq%vG|zt}IABj;26tl0%c$&k5}mSI1} zD{OyUx|wI6QmKIaU3ZPSsYF%+bZPV|0pX8F@}Lk$i2BpMjuIt^2cV_4^Ln<0Ip2(o4Ne%I z*XB)&3HUP~E=Bm3KLr{(q!PZh-|FeUZT>}90INFbe})VpRIw|QK)0okhU@Z?ebhZ9 z6V(umJW8aix@#zZS0i_y=bkGK6qGM!=r5i{_J?2`XGATDMOF+Xfeh_2me?lo?E*Ky zwh-goH=~1ILZVq2D!5rg0P|!=GX(ZAbfi8UAyliM_>i(XOjSeIc2%H%g?{%4-9DMj z2-1vmd)dEFF2by%hLV$hJL?B5qg{Xf-@RH!OzLyY16H+(_%RX!%awn_{77}EcTzK$ zqqaCN4ZkRBYBXTV01gRW5N3ll1+iSS!bK%b=f=#FO95d2!3kXhr4tn`&;UI+4>HCe zm6d_lPXK+jL?jhg+mi)wZ0^Ar9%xlxo?D;tr>PeNT5`_SVxl+uJZ_y$o9g4@?B1rl z6%kGF%i@C1>Y7g*)6}~IOZzt<|LFiadOngySPas#d;Gx8XtA;pfovxjoB)I#^cR9f z%*OAG`d}4r-bP~6)GGkX0qA}*dYXzvfM^+oHdA>3AwXAh8e2n&w)k*kY8VA~<9)EM z-}}EB5XZNx%0!+#rYfLX8l3Q3)H^^%8aet#rQ04GZaWW>Cz6JxaFYF)AnCaKWD)&I z&S~MhudttpbvJfQ_MEXn^L2LB1zJ|5AmBfyQWxwWdr6021I~MWiC}_@U`)Uupq=7% zAcA9L-V;A}M^`#h{LO?;s`Ho|3FRuu3n|jetB?nQi4j0UXktqxV?=X2g;HK%EjF#S zy~ib-q4-6-9_B@h%;K?$t`VUpm{zM&Q6py~7F(J4E0R22z+*ku2#0kjf z(#%!azwrZB4a9_pcH^9dkO96G+8S4qMAL5slLH0_@r<{N*Z@T12`61DfO)5n#DL^N zfL1CZU^yD+)o_eJrn$XiZ`?2gNp)_s0C_#SFi?9;nSxzw=Q+-)^I)8B!PgF$+wy;C zk>bY;gH+!nAxMz8)WC464QpI{R=^hvA8;~1kO`!DTat(vN(jssgJJIJA&fNwKrK1_ zJrH-GyDZq-@qcf?iECh7^8*G*$EHajMugP=!Y7Xfd<^P+g^dchO+#RGi%7}K6&m** zj4;WbX&IiE&5k<{m3uFr6Q7w>nGJ8ylQ!k+p<9J+E+)xlIxV%eIKn_5ZQxV^m{Y29 z*0*Vl1Di{OW%Wu(ND+~4Nr)>o#Mo-p^iQGX>^vd`dUw;+J33Wtp$v77T3wI|U0D|V z7tm=~c|H>Yad4PpgB3C=C@((~?9D2mxT9eAj79?FnrrHGCJ6AUVe@TF{GZfj_X>q^ zVHPg5*3R8EM*LHDNeI=`04`)B;3IVXI~D~c@68l80Fz$fkGVP(Dg%Hy=SHP77c;Pz z2dVjOBIs*+vEk?N(pSH+0X`q(^jC5Lu`#Zb5xqUg!O3R))0$<)Pg&?hfZ~L1WcG&# zM_{`C!crxjw?3InQZd45C%}4enq9n##_ZFRfKpzXTIB#38(_JLt|;Cc;GXy|y|&yz z15k`rZHNE_;kdAN-1aF3&P#(CL~epeF21&x1c}shJq9CZJQK#gp!6v)nN{y@H`HZ2 zfYx;HGti#15bEcxT*A~G#%$7c_)aDmsTx>zOsJa#b-}0LJ!0pyAg0^By>PZQAo5;6 zE^A1_{MR!p`{NCOd9}FJzCu!%H}G|Ja`T_j3Pi2|Dot;)Vx?K8XR?MJu*5w7M(aye z4`Q?{}# zqB4}g_@9b_r;gh^Ozeb^cND}1MRsnr-U8bGM1-g0MSSI-6JrmuTKJsSkax@a&#W^I zeI*kLIoSHzfR+LXNP{zwrL0Xq@;fj-_kRR13%6Tku~LksT@4&uu{x;X|&Cp-IEbm5V5nTAG)tpo!)8C{%b zV-{Y80!rTM<_Vt_)}5+QVMqcBnO9UoDu3rVOcNRc8FWbM2n(RDEL z*RJeFft+|BJ1dwEX;e>DYdM8jO@H<6h2-Nb4dyx>9HKuO$c#xA%bf-@1(Z`8DNV#F zlikLiF^jO!XVJd` zIbZ=*HQ+tLOLR&%UKfBOVIoLP{KcFtwZCO+wP^l7`_eZ4QR6&44mKO}OSGrcjP%N{xWpf$ zp z5EAHQwb#)u;-+zsizCbPwjN&|yfLbRyWH60hz35X~4NIAA z`<+O}@yd_0;+Ki$5&+ba_qfw{CGCr4bp3j<$=LFwTmj>(@ml@?fvGmf2Ad=+TJNww zuC&=R={N#Exd%y6^OLC>`wKaiP^;o8yx+Gl0PaU^4^Hm*J-h0g7&4C4$kvq9{cqQ3LhS ziysze)4QG?U@9@H@>(}aWF6h6{eQ;<+B+G*^$+Wn49O0!UT!a=YeACXX8b_G0Tb49D=)ey&4hkux_L`F1)GmRF39fnWNjIu>Vod zRrI|FN@k>E^z7s2WiX#4Fz{QLES37sE{dSs)6iCv<@N9lc-ML} z!Q#Z^uxEBgq6$%GBrE&(eW^{onrJ3Axrrohg(in)u7nw_RsOE7 z1*w$6j3fx-zsM?lTd@KO$+^0IdTGA$oBbELSFfF?_S`v;aP{DAZR4XlQU2_R|30Zf zA2+{XHYCXH^=aWYBGV~1H45@$^~ZLX+R>$JEl?!ovs%f;sd?e(QhA#mY`QGuU47P< zGWEVrahdkLT6Z`r4ts{5<)*WCQ?;9UfoVuHBSxlJi7cq`Ka))_Sr^X0+0gUzcXVuq ze1Qct{EM;L{wAPHh{;G;xI6T=dFBA}e)N}vpR53&Z(yjk)iKbt1|ykjj5~HXhhckV z-1=Rq<$YhP6ep#@ZqKY{S;8sgBVkef?c-yr}8ansy#T4{#;8YcOY-o1E@<)#d2HJvQb3uzrJOo;Py|rdsaD z$X>$3|9T9PFHlIX|HyLE4fL;S{PXShxoi%iuK@AGP{e?4Z=OVzE$Ja1GdQ-#y=|Rm z5qiDTx-c@mi4AOTu2d3PZc$T?3c30w)eAqt3CK*jXkfR!8aG|*eNgIe1?IO_sDSkI zoeOo1V2lm^`V~b<+kT`;C3A3KLy3(TqPOQ!<^w(HW2x$|AGkP%fB@8pHB)K}C{ZU% zd7~HBfMVbJWla2Exw`)@G7RrODgmBE37t4CKnbcjx9j)8BRQavp*VyPfYl^k^moOF z$#zB7-=%4c!r+vwyUMh91pbTArz6dIer8bgwpv3jlp^wGmtCKkon~F|K0=jhq4V=% zK>Kf>imDtMI0uk+H3>8L>PDB0RFp$ihTAN9NW25bW0h}#B2r{hZ#L?|Iy2Gr8K-sRffF&Ohq; zTL7G#^`w!Nv=cZnVNk?J4Ot%qH@*D5Bw1DkS99(oGAzz{1F0;JQf2&=pb}9H6U6;* zpGdFrb=bj|v%{ZD#>Mp7+VDmMTJ3321m$;!l(MVKRLBs27BSDT#dq&F9&UcCeI!h) zF%R+V0+dDdel65#Hu?CP0OyQ{`&U53%`CU`qtB!g{h-HK)3N0}?ZvZCY4v!IPCr%l zrtV?I<2)0Z;}c%o_dUd3ro=;?@P;W2${HqXZm#&4nykxTee!Ln@Ew=gIHLQ_5%XbU zF+*)0K28^^6~xLy%V%g|yd>k~lit^cYGs%DDTvwa7oy$(*d1vsR^AGiJHD(E>A9`b ztIm%A0@Ir7FGjwJMtu=~cc6PS!T{g+bD|Y-p%CXv4^&nHFb2H~J-BZk6m1C%7dn_@ zqS{CTn(zE*2$VW(BD9oNKFd^;0i&tT(z-x-U}`W120h{B@T%~+9~XGJh>pF$5)dX|L) z(pWAD{QMg@mG64}ena{nwuEZRjBxXGMy~q8N@NYk@q7!vi$DA%@9&LeV?q8)7=@OA z^0!{!InR-5YW{@%v|N5BS4a0+geCZ`o(hXv1r7iXuaAe^Z`lkv88!d4ulQP`a}mtd zkX6Zhvte{?lRx$tGbtYoSCZv-9YJFTtWa&^G1IhSJS`N#eBBTrZBxm(1!xAB*goXE>4xp`k3uj-E0ZfnF{5 z3*YnqRa{`GOP!BgtxIyV4;BUp{kXz^Mi4_dWH(u@bL&NuEXk5;`Qxt#uXB5JDdJS% z>6#R-fe6OP3d_AMtAL|WpPzm{aS9-fk~hB`Tv8MOUf2pnXcXVg+|S_LPAZvaeFOFT zw6C8|^nlCDsSR~*SXY6rIT6g9*2S%(Bz#EvX2y<$m*d$YXdz-JV2wM^Poe@h zm<&8o;@!fB5|)m}sCou(vwwlm(&*=M;^0d50!9q_G}pu0<-3oWwem~^n#67Ai{K;C0gjVU z;GI>{EBNuQny)upi9}=^a?M+)<+kMjsRBr`cJZz^-}^S`o6nfqxHW>t;}I0VJTlc5 z@?-Vci9t_$Nkk4brhuFKUm{6+rXi$@cIt5om0!{1E9?^@-3|McShm~9IUIXm+2h~a zthT(Y_wG9^o3U@1yOLP2T@Mz2T%a0s(0uk}atUAu{&f7wdB;*6SU^>rK6S;iKaB&*>Q%Ou{I1X9mWOPkpDa zOg}qUQHGdeH1kLxEfNVaXSi}9F~Dm1)}NcJE(&!{fDK*BW7rU0<_R7IPr(@ z`PcqQd}WW?%?}VB1$H6C(}YyLb6Ik8OFjKvKDwcH@p%kz_DZA@QyoNP*cxDxEbRJt z6Js7N4j(~vIsJPJs&Ut7^g*Sfm)O?{KKcj2udaSxRf9}sF&uYMyjFctmX}INrl-b1 zSJ97r(2jRGr??w3C9Ec8MLKJfkaxfxX;nYW;=2)8?nWckeTlS4V1Sp<(?{&0>ce>+ zlpocG=M2WE)*%tmkKTh#%d`gf=F7zf=E14(15~HivQK^FTo1Ji2sEtWymi%WjJF}U zZXcc+u%l_uO4-LKqXachVtFCytrH-Vb&!1f1- zZ%RwAKfj*G$CLm#CU$!a-VZ=AQ03(hFUx$9X>X6$&z0QAfgtWj4qB2<>Z)RZduYmd zdCa#-0VA*y6w#b~^gRD7VNRz+N=IVhOSIlfnrf6_dm0E8$vNO?Kj#JWa9MP{U=-dM z8A{Qu0usbd1q>9W2Avo9>pP%TJ=>Qc+D+J#1#3m-bDyL&l78{W1|H_Z%AAaV>nFvd za6+-GQbEv;_la{f-7AA<`E>|#>ua`O9{bECvM>q`#kb2)F}N|Z{~_WmjDUqJCe#wD zvxEd!r77qJdd=)fI_59ei86mU#B;%~Cl3ly9Cep8+S;`SYMclX8~p#EEVP|om>Ou; z1r5_CFG4<+NT|Q#1B%~Uv|4-fU(P?;;V(znapxC@#R4k?*g7-Z>)8-Zp_fV=&awx> zQ)@@}-qB;%1fsN868iX1$B~|w%?WA7horuj4HYRK);Cq{Szm=Qb5(8fGOW6*_*SW0 zm1qC)p0^J9mPIJ-E1=WZB0_I7d4YJ|iFUo0k#p5#RDAg3OoZ~4f>IiK3Vkqw;!R%U zQPFlo5$h&CmuKOSkvg*hagfb)$*Tl%`C=o9||QDb>1q?4wBfEozBJA?~-5qcUz zV5;$@C{dw?i>Lhn_pFUc~se18)u`ABE@ z+707Xpi5O<-#nuTN}6KxoO$pYZSD?S*eG0OrW0;pz7?y#p6wung(2}Y{rgl*AV{qp zW0`ivyIG9xAbypQ)Xy_?H)BU#>@XBMuf{}~+P?^bbs=gd8V?};`)BLv@@ti!YA@SR z`MuA(MvsWIaq?c%}g zFPjt(h3CZfz3OOq`+PpMe&n`VVkns9CzLx`yivrZUNEm3>TT|aQJ=^jSMdYHIZ za;g{Te3fuT_`1B=n#V~jhIQY=P{XXJ-7i16^ez3v5?}bvZr2xf8YuRr*3KQb#PzbL z-wcPBl51+=oL(#m_S=8pfZV07I18s z&Z5~!r1p&!dRq6nDOPfcs9YfY?`F z^1Zkvc8@DEbJppL&ezMdF?UAD$J2pTe3(SaH&K;p{V!w6F)7B?Lo&hWDYU_TaWal` z&36Yc+UN3X;@SV?N|T$nS|ud6qQqacZ6aG{6&5nDL83$2>PO`w;|s6tM*cy9CH6nj z06=OX$`Y*BJ=eb~?r!3L(J$PYjJ@O}^1%iwBUZ)w*(mJuNGkl+P%)}1B>8)d=tIkf zy9d-Z_^jBR6Ev&3Yb<;E2P_8jKg{cWem_6ALl)p%)n;z}lv{g4komMuK^fQu0>tqc}$M{h2gU$S6etk|=3UdA4!@m>Vmj;cmwChV` ziPM?%4A82VH%D%t*q;yT;$);A)nugcJvyIhOV`ivzMJp-bMb)KSM+54$YSveyd8p# z)bcHHY2xLAA06f(nS;{tlgWSIh&flua{yd$o zgyg#K-z5D={2k}sZfmK!kcw_8kMB4>Dlxa8Y+)fUWJu;~9 z6RVq_Q+sPKhn3g4=INYW)?IPWFIHm(+2UtBIxXeaqVl5>DK;PU{kTp_>Pv&VoV><| zOQ$DQVMQa}FZ??l74MH%(2yBpYBw6bYh1nV(plqwH zh-uY#M~wHN3-0P>MfeLp6nCq0%R#oQk3IwXBm_ZM{r8@K{L6Mpzm&3B@~2thq%0%Y zy&d>{pDkjSALc;x^G5X8rw3PR%324M^8z}#4j38<;*9fwEZPqE^&k4#ERwiG*jNdYxT5H3zLG-H1$8CUl60 z6c&|(ssqJw%1&M&1FOl#=r?X%Su+s>z0epm#5p4tM?6xen30FOrqhzmAF{A=8J{q6z3G z>VQ=scCPXt2eHf4K5xeCc+)6>8#T^)^pSdER-@F!>8 z9&X=t7B{$o31p`i8*cyZ{@&bNckdDp52h%-d@WA)TCHk+MB|gKgcU~*gkA4rHwPhU zmSU3*DJ1$^6)Rdgj*lXJ4mn4Gd(Xyaf>~B;T?5iPH{*BhSXf(NoR`Z~DWRcoDVuN| zt)!v}f+(o=5OMgHmQVBM$lG$dNQk zl?Y|$x6Hf&bG;YV*ja7MQgeSbq`Yp*VlYqTncSeILcvxIK!`N#PwN#7eZa_g`v-n6 z6B9u=yt63Sw9N30^RH%{3;vF69If#wQS~Q>`PM^Y0Lvp>BzO!1dqg^HL8) zn?mIKAsTQ_3C|@y-bDMV!}mO`qwc0-{N9T*^)CywSuBl?l-4zTR&e6^`=4Hxwt_-r zkPlwj5CUE@9u4g7ZwM*{9q0%Q7lqsXE=d{7p|nA@Ye>aPT^Zl~^1GKdP;qm>pw!BD z2oRp#@3~Tl9H({km=22jj^EQMDwVlK14fmq#U82d$=c8PnY-zAy>%Y_{d~7=J~$pC ze19k0t)y{YOQR8G{k5u5-YrsM6KpWAA{&Mh?jx3~^{2(xyq(j*_3q612WiF(S=nEe z7zP!0TuuW9>wyu^AZJIo#)f(Wg!AV2rg|&wU&||+(7Y@lx#84!D09vGX0LF8mKIq> zhBvpj^Tk0o1>`{!I|MHK`gfhu%y_{ibbvmOTDKt#)4k}~IX&gNT=LN{@q@TaTAs|E z3Z`KzMWcHHBi-v?;vU$oz+)qlMC)obz54l;ERxpewgH2tNH%=qb? zDf;mv)?5LA(#OkS&*uIQP>5wCHls1Vn`^(zBk&9^O6<`_A(+GRRwS9%+M$gxk*mhH zvm8T9am4HhC!@~yuqfpPX*50iK0>EbWITPw=l#x;Phfy(-a4%Sr?K2aXppwv7=KE& z1Lr5>c#fu$i%Q_mNt{L`s!giO zLiDy~5SSKjUR74fG{nv=zrA;rM3moJWHxJDZKXrhBxWS)C8<uFHYhQGh{1+~T7wCUQ0wMfdk>Ajb$P~9(;52p97lXRIwB>)EW2Xa7x&)+_&#OnHs^#l@WDTu{+utee`p#_T52hgpA}IG z58xgOvT|1lUwf=VFmDZ)Uoq4@U{Cz2|>axL!QWHLU z?b{(cOeGqd70iahoH62}nFW2G$dH&5WraQy_`^%J^y6;b{tREx`I`TEbAYi`u$JU_ zx)0{l*8NT%hi=$f9_sUO^tR{u@XR}o}iurhXAiiTzbE zk8WF7-)vfv8tU(fNP?_D{Iwsv`^I=?;6XM)b#}osc9x<@?U6EN7zV+fOU5F8Vy2y= zD&s%*0)&dLelpg$NdS{ZCtPm#Q}Y7XJPcslNS*;*o(d8lH%E1DZK?b zK_}G>FZd6P6ns?f4iPYw>6;*%|D)+T9HIXI|J@-XgpirCw`7!gMfS?x6p|6*>~ZHK z6xl0V_LjY!lD+p{*?aGE_j}X#_Xpg)U$5tQJRi^TdcDdogw-i)SB|Bt99;NI`cy2H zzv8dUFMs6Zjv+KU=%YOOlEg`ZrGv|tiN73?^^>k!v&xJEDR4?-zO0n;=ka{qVAU<6Ta3y@EQy0OwJn zdc@dc)MdR{zqf?D!u(MeY;>dQOY+_~4^7WMnjhb^+Y)@w*!xyTtQ=<1Za+yXRM+w; zgK?Q6h9o|^C3^F8FU9YX^{ZxQ%x|Rv$vyY$or;so57{Ho)Dli3ZaZ+QNEYvNf+7@;v)5AYCK%a1n9k&oYuj1>2LMx~>i<7CahTlXyQ zKkn-B-0kn|Tkjrdy_!qv>mpg{ya@35F*1OxsC_=(DKQ`3pik|NZo^T)46JmcB+oDQ zj>LHm_0+8Aw|oiXV|6!`1emMdU~D^ZgHZx!wPu}`VLmFXubbBUnZzSYWKVX~{Y;*O z+G>a}Sky~AGYKc^e5U-kV1j#^_DtHMU`e|j|6;}u`H)8}p?~dJVjba9XsDV>-!q+f zA3bwU++Od5RixW%yP{_50cC(~dl1rE>yD)INBDJ9x^KrPsHMG5~_03(9#2`vd zLu&iW?5M~@c@f@Z(4mvIokZPJOT~g7MnVCq4K;Ayy^UIF{_`KNjP>NCCETW-1oSvp zoa|jVm0z?Qi|WnP=e^dO_V6Cc9WD#(qi*AN?Ed>^2T~_xDo~tM{&a`2(_(F+Ynet0(^oxf&n+rd_*Zag&JDXLX zG%EFdNR3T2FoX-q^Fm+kI^)!~H?Fc4C*khE zH0|Ihww1k{pdi0>eeJEV_cq)gmifzGk&a_i!CN6;E2}OByPv(5)}n|`$0BQyhfX`I z59A#-QZnf4oP}AYr2Cj7S`5R27w5547NL<1GD!4n(01#ix$A53yNhv&Bm;d}>uqOr z(gxkS0Rr2}wRf867s6%gbcDxN%Kt1yh?IN9N-w|APW8^>IUR(tq)z^PS}4@@BxCU> z|Er*%=reL+$>%1x;H4O-*;nS9UW!GqV`=?ZhbKyodRZTq!P!Wj{KfXLw0;1|}VwbnVrpFURzO z#m`FhD9ocm|BIJFM(l(~OrLx-9vwDcvm9z|H{YF{BQ8AAgW(yTh!jpquH)cn%{XeZ zX?~OE`Fm&~&9OM{3F{;*5J)ib_))llYDexwG_8W@Z6el>BQs-}JUxw{@ zHmuPieKxL)TT50b29kM?h-df537urAFRF^q6wD;jXig8s|HhqsP5MtMRG?29OS_bv ztDY3+V^+q)#4I~5=f6W+<_GVrY6_$_gd?nv|RD`!jo! z1N+;|jm?cil-4XHzL!OkzG4Y(>=WEwAd_q%4uK!s(<0uciE-Han?3F^cV_*;uy&>;efI4 z11wC0luhtb64SD)6PBs082c$)q$`T7^Hs~i(TlTVX_b)n;4$0$hsoi;qVn8~dpn+Z zSc#`f(~sw~8p*hYP?{{M#?b|^#;Pm~-9btO+wFTYbII{$Q^v~pOe|46FRF6A6$g%s}wVr}DulBnbZMj$##dsEmh}nF`cl|R{OWku-QySsSa*v$UTN@3= z=pR`mG%H{<7EpK$2oMBsq!^LXQZj^T-=tc3W-O7!)23DDY818Cxnx$`aWGiu>>@%b zF02v#;?#qru~v`~hH9b*k2%vAxkf_e=mnoRSY?>-X0M%fz4DNdlG&phCFP(fgM!cs$k$NuQ19^G}* zOcb~jrO|q8RB(1&?1LPfH6^5_?UN`g9#7pS>h|#F%5^1FMt_E$5NK{&Hrky(5@95S zmmC!RAlThqBkGmDBjY$Gtt5PDaX@7yts|9zv5xETvP3kUY_{Tvm%Yn37PF8FbUkfJ zyp}K7xljnKKEE@JRm{?H^w0hn9P$wKJCdh^d(MPmG~RF9ucxb3END)NT6>+!iwnOp zov`YmbjL*%PFSxS-`V)atp=sqOGC$>DZVUK?~rJZ70E6dtD^Rw_PEY*ExP-#=&k3% z#D~iW<&S91=VBVBZyRaetcv4l=0ID$kGBFaykV0+vJsbKKb-t$B_+jZsOrM2SuD%5 ziryX@6^wc0&0mMds#@!*ynekRRfn7fE{D=!vvMEN5y9%Cnbu=X6T$dLSl=KC7&}(Y z)W;4}(4s)tpRFx;-l*Cn!jy5%xY1S`?`37M^t)B-+@=U!@wrgTbNxaj>#={46e{DT zmhSX!QWM<9uQacP>U&a;#8ABo^>rD?qY!jH_j}UNX63t@O1KES^S!75`9~M(!b!pUiA@;5MDHfDODFU^orv za|7PZpvDNHq(O`4Xt>z(>`7c)euXU&$i7?MICv+(l5suh_0o~UvvA8din{aJWK9)< z=wzG_6E1)frPlmpV6wk`>O9x7mNOjYRnso->_TC6Y?2s`e4<7PA^)WMJla9jyK|e& zQ`N%tdd;9b0x18rTWmF{e}^Z})vS6taBtw@b%y#jemvd2Ht_5GFmM(lZX;%Y9@LLP8jo7F8z~Sm843?J0FhhF-u)j;a14wR9R=~kl)3Xzaqr1n_9kpzUnA4xGq-?c&ZV`vrGlXF6R1~P6u)% zv%%DRmoFl0u19HDhmo~=ZbRQyMqFDk*R3!sS!jkdwynWV{Pm7#i@YB10w>K>(ACI~ zrL}cDHzYOke=h?(c^t?!d@^M!IX-Q#Yf9sE_V|-3dyTjL20qQN z>D0lqy-oaWruv23^QTcBu&dMcdxV(FTA~hiNHB?R#PnyPGx(0fV_O`tc`qwIr}6&z z_|R{yLE6R=t$14Xjt9N2*w4#8+o+bydOKv;pPCs+b*>`TR1;F)ND4KXuIozD|IcmI z%pgt~==>{7d({(*=<5-uz#(sdA{2ZVKq(UE^%lwb7q=x9u#0Blpfg8K^3m0Wr**C+ zN7r0Ag@Jn*5F>h2Gc=RjH|D6QP?ACZ2g_o;3x(mvzJy~NNYT3+2eC1Z)-tJD}y zUp3{mB!VNyn0cE5WpSUA2<4{EzTCY<&r5O1Sa%cTTz^gi|7-pK$EJKp%bJttd;W_Y zp9aZ6)a9W0(uA!_Z|_<5B3!G28ZBitGB2QM;AeEcAG<#}KeI{0_Pi;us)BmW`uVgu zAsD-h>1QDw$g_Q>Z$|0x>l*Ix84|{3rPK!N7bL{A#%6`y87TF+^i=#)u)BGtRN>zv zD_Na$5yEDJ#T6Sh{y&v{f@Hl$kEFU{mYQHD{82ue{w*6#OKbcb$(;8$O+IB+dfnxa zTj}RCkOlfR4tvuN&h?%qULCIOh4ytY+&@Cal{|b-2GQdF$wdbeS;ny1lmCtaUQ95i z?vmI)b@(mUZCo+rF5fYwY$#EO1(n4_toJoyY4-w72BmAL^Var-I9^IABlp-HKI1~^ugj#%}J{Po)* zA`f~ZE5TzG?xU=B#451YA+j#^4s*xs^IwkfOp+MfCa2vXw=@Wh%^_#%V}rCL&YRot zI?YR^Q#vL5X09m{cKPgs`b*|Yl>A@_CiY7PeGO2h`b#nIl)N)1iAVhz#S52rkipJ3 zF_jku5y^L8Dn6qmh50BCCCU4rj>Eqe$6r)})8B^GdHTUm&s<)U+Dwa?l#Ya%e*~q2 zW4|P~{Bw9U3b55YRbG$&sO zv+F*8tD2p9WmbtpOdT>koTR%*pr*_?v4vQsdq1StE^HUSS`uaN!MAjOcdRlmo46FO zl)@nD?%}{Kl7}L(Q?(MAK5$p_zhid&apGfP=ol45meX3tKTnz|Y>vNsR;&@#iNvf4 zM>cwfF>CT0nC36{rjIpWDTctQE->3hA-g$ycw*!0ac#(#OUOGxv0My4-$4|I!29U} zXjw~wFwC;UrmtTPsm#lFBX=)MQutH0uz~NZm$?=bOxF_eRsDn@*tfsmt>?qgXSA7DmON|kwnVGL;JU4Xu(gyc7Az7yP zJ;aN?K0WN2lU|b(IXfp9I+qlQ6bK@%l3qfJ`B#3=SZ4=&G%au!pf+D_VAoW#?ys!! zC4+*WE?55BFIQzVv5DfGvk%9`nIw(eS*S`juwLtZju%aKC|OkO<#uuIRW04GHT@4L z9r?}(C2S6pG~1UKc25RRx?Wae)-_k_C0~SlneKCiU}Cs@X3xh5L3>FGd8|H9hfxKK z=Sw-P5=Whn>Le?)`Hhlj{?Tp^%7NhP&gjNb)h0go{>6y%VT=dEq^Alsrfx0eWt0a} zM3WuzXYc!FOQO^+t9{l%Ke;amvO>;gfZeS51e0M&WFdJe34coeLNYNDbs&ey*}0Uj&NX*$0RKEA@p z|3+g@DTil~Vv91eIZj-sIz%J zn}&%_dPp~q!>|VEI0-Yn)X8d0-Lp+AAzbh+QQ~hI%?RqQGb>^SIuif2;xf*pHE~WN z#_Qda(|A<{R?slmy6L!+;pW@WEWDc9nUr5g{yFe{>%zU9D@#rOXVpXStjsW2VIiV0 zz9@mlYtwJ5ku^R0#H6ZX=-gzIba5MRB)eHzaQuwkQMCWhuxf))QaxtdylrS2Mbe}l zPZ`8RsUZRmU?yFVEon_WO_diX=^nbP7N7Mx|CSe7%R^VM42I5;SAWb8HsEgDgIB2O zat_vlhNtt$ScQw#!*m*q@!e~rb7lMW@#+4-Rn-Nn{qC2B8(XOQgad`A{fj6sO5)s$4#NUsu^D?BF~*h5J!l&Y9NB zL-{BFw5-LtFG-v^o>Zgu;bO!0v%<>vBNJzwnm>2PGBAX1OQx!(oPKMk1pe1^W%BM5 zQ5e*lfU6Fx**R*~Q#BKLl^R%f_J}r=2Iper$>*Xvo+q<+8ECL_$L}n4nbn6>yReSS zyZtp7nl4OT1>EA+ku6BwPWS($__eg=qzLAm} zgV~vGX|F0eB)K$s!z}&oey+Ih>-m5_75#bC1#}hdE%lUfRh^6m#A}x zbgbjsRkBV%S*jzvBONiSmyk()!rgL34<(88VT zn4QMcudp`n=m88lFDWSk+DpKdkG0TRD!oQ*9O8QYj?aRr9LJ-y0ChN!EF5q9<{ITt zchRG{`Spl+{WVyRIISxy9p&*C_iLM$hRBZR6?MU`7af7p%-7>z&aq22u z@0fF$p-$lBT_}=PN#7{s)OC)!^SuT3lB7Ake$}f;IsX4S1-@@8o#0r5xXAQjK37Fz zT$ZzijVnE#Ar^2aY9A>EF^ragASCfnWJD->GZ?fP~3k4F0E zpUMD?%91ukUK7j2!G+`XI!<-f})`1_ha53Pma#f z<^D#N=5vya7)4`xP7jDUxhagFa|_%fgK}M_E6=YHps))Qc`w z5Gk{{iX2?wOqSRzTC9las-35*Q{BT~@URvgUnaWw2*@{)^4#QV$OeP-E{!$I$Q$~V z`)szss)+t&3HlL{hZa0hP$03oiA#frtTI98&>sYeVRabA1BqW^en+_VbNW%43B_1; zBfB{3ndKu=@Y8ZU8rU?z*-Mk{PCpnCzF*0vd}qBhfyMg)3Cq&ws^#}vlmmgl3rFckder# zR*3jW6s1Uh|9~33>squ$&xD`m6O@{COToBaLEElGS)wlXB;n78g_(a~G~+3Jbpm-u z7crq9bBpgV&QJeMQa3ZxEZf=_Vd%yy%xoqX1+}%$?mj{aPM2ep`jpm!hQL1~<(Fr= zxzl)qlDLdeL(r)NWpiYdl3lGu?QrwO|7;HiKD$`k!D2nMfjjaIin+09>9>Y(Xk^7r zb!DrnR^GdytE?NO6-kcW$5d6FcV&MmXGB07?;4h3Eoh3J^!hRS8!;|@qCgi^bN+qj zbF%pw=v$sdVI8c8&Bt%B;-{(bVwZ*7;37~GUT!?AvN)V%HKFQ~R*x6MV$q5DON^x8 z)6|&AurpY4583D_o0M)_*-fmPLYK`X>WDFwEs%B82qOURPJOQ`Um zc@TcavwGb?@z2)u9}Ey+l$mD5{WUkQ?2{D)%`K*Ahna0kGrJR6C)E@$8jZ>?E>v9x19xN_^>%z>PjS4CIhpV0wAO{jAz|7DewO^P^RaA* zx%nCOmPuxt|4~9EhUDGO_fGTh3*9Pv5pA`-JSFaJyoP)t92hpD|LMpok-bFhsj8y5 zqE5NnO(xULVQS)0HR!fV!`ePOyOv{qoH~I~wAwti^rlj3b=q9Z`sA5++t=ZzIAFUp?Kk-%jC^MFoe5EH=5^L8%=9OIp5?r7{<@!0hm*ThM^M!3KIOPHoxj?cc08P&jU;HWhQkKhM2yq z+YcclYn@$VA^nEtC2^^w9}BljFV!_}^bjDaOnUMLG^!t-c}r!1N@Aqw-p8Y`%+!Yu zJEfgG3YJ|1)$J|^Xww34V1-ET3>&cO)A{vk)%?<@zcDs74V~1G7%sKCkF}lV{Wh{@ zvn^$Z$T>{%AVz_wY(+JZewOV)@McjI73cZ{yvVWkV|OZk->-n&u_R=vZuS_HmRp_WfKsu)!*fCa>_SH)3*o z*J|mi$@IQdNZC zJGtN8Sas3meqH@{BbpvmVwNvhlma0D6}wr5gRnRCp}R%_o?iTvB0|OjQF=O^uk6L{ z*C;`CJ{=3mUa4fxNHKOApRK>C!fsIddJ{#!*w%Urt&hjAM>~~TYV#Vn=2e!EvE6ku z?!zP?pRha+1F`(-U>s2QPWJ)elZ%jSX;2|%RE^)kMT}ASSvDhgQgM^<3!UCiqhCuK zhNn!uWlzrL^-Unlx4x2=f&)9p_!kbIO{w)ncE~4SPQ0FS@$c2S0GFly_R**e;I51y z2T`(jbdx~Sk{~W(8eSjGSsvB##XN~FN-C>#kMV z(wl3z(BnQV7t0;6r}^WpZ?}+~{0GZ1*qOM^(J!k45JmdbN?QuNi!Xox0ia2b)SBbq zkHNyIuG*QNSj9$#{)`NeBaYs^eOMb^Q}{b-XiO|)r_7Deb(0YE*QrX&@r1dH#Ta9k8UN{Eo$(B`!hHep^- z(7g^K&>c|_7vftS1EQJq?nDVObBuJ^Ao!u;nc3 zqSNq`h+b}iSJWhs!N*?3d1y4-J0tn?+7UW&g5SKZpk!-m!E{nAAOy2UMm6b^j=)GH-zSm|gy?32F_rV@GD;uH6IT zpg33rRLuHko|kN(nzzMav_o@FkERltp((rtGR*!%cB@e>UWOw~Jxvd5yP5w7V{PCz zd+ihEI)18f0@n3t5fGQ)i%yFQ{;Xy_66iuYhz?|kFU*!!jRhOk<(d!gznUc3xI^wv zb3>z{I0Wa>FA_NfLR(Mx?TTSOIu82s`mgcV*+JPbIx3FTGu_pn)*S1}OzyXZFcv6o zbI_m;=Id}7^`Tp#uGlkxwtXr<(?($ZQ=<-_K62i&66l7K|9}B9}d0l-7srU{$#1J7X z5`67afHv%)z_w_hOWaNn4}r{e3az^J{O{X%%~&^R0P@u*k?Zb&tE0PDY?x)2&9bmz z-kmMfAkNl)cfba{Auvz_@n;iCp0u^f4XcRB!UA>8a0;S!&RceM2)Mu|M-ROW^ zs}%G|R`H(UQDB_>$0~Nrq)V@5%)Nhj6^AgcO^%qp=Gv{LyX@je^++Rj|-G2QHZvebcPvoQb4H1f} zHvjO)l7{2mFxJn9qQ=2D{6=jNfO)mLN)m|LBF^i>Tll761Z?$Ph1-q=B>OYQvoYXs z7>(=+_(vr2b((X$x)_~66HSdC-Qm%<#R5Yf;1??_V&y>eq~3_Y15G2p2p_25tN^HT z8>W>?<%RdF#}-1GUm?hib(x57EY0*6U`kxygD8#Vo1=e_AYmYZ(mM+=Zf>`^UYY`q zh&evgZ(cJtWvdO#H<2Vd6y@puS)vhqPNXlx4y+60Kg zmzsPa7<4J_2+#1Vmr-=9EnDG;=g#{tR5LaqZYwG2Cg|1F0ZP`XUgRAo3;!q{j80uKPKK%Q4X|5X#dd3vx55%XA}U zvm>y@_*H(>B7!(*Nd2IV_yb_I5@wSCFPeb7bTH@HrNgCaG}(knfRrQN|0F5ZyeD}z zBN|0)Q1#S8U)|^lb{c^{i`?*RN&ONph`#wOQA>#R)m_Go>f^ z#Rg5J=xr>HArEi12RI@N_Hxr|-+S?AA>e`!KgpoV(Hmu!uK=*2CnZ4^z2Z-nR#qWZ zDBJdLz6*H$^^Mn?e4eM|O3Rp>dJ?;7TUr}RQP@UsYkK*w7pf?bwfUWIjC1tWl|(q@ zp|T)dew=0-awjm-Nr@c)UaY1%ID!IuQxg$jkW7J6wlvtaHnutwmbD!v`|%z&oI?9= zS%0xFFTJd_%DK-($7+jee&3R#0D2kozWtEIUM2^LdFrNq~oL_2TTdw1WKI;a#@bxFcAvEhp)db zXP>ydW=d(uM})>k6Co<;=uh%Q$(?r#ULD{9j8X+G@hw)PUZziQ-1}pG(|cB7Hwi{j z5Gr*Wq{e8WD0FLFJS5@CpgEDaYsSe#moEOSu0Q8H%+FD7M&Jzr{O9T>)|Fb%3_!+l z!IS_sJOmv0r&yn$D}^{+8M3!PyBhmlzyT$fwT2V3Qo!y19jkysKlT^fR0kUyl&tk( z`TF0jaV-7r*jgb7%s+Ni8BBmp-#Rql1Ko1NX5+(W4*w;P4G34tHOGbvO;3%P{p45g zjp3uZ<=fvWYb=ZUr|ijh(j>D;Aa&&(vAGekh{WIkb6k)K8D+m<>p4KZ zxZ*%0pl)U(#kB}}#A^6P74{C9k8omsR$&C?Kbz$t|KPytB(B`2X4AouP>AKgPAF+2 z1$6~sn}fe1+Qo$)3e!h?Aaw!N1W>|(gmZDoohq7KzWjQhnK5EKT~H z70{srGkAFK=>yJb2&6ziL;0VoE7(^D_xuPFsR`!Jl<2raMk ziEmP(_6x1gAM|`@5SLtNbC3TYW2A(*79OmORf)7yW4(X#lrW8_3-z8qZ%ZN60+?rE z9H%(F$L^f+D>4zh(g+|j@T7IHXS#J|;c9Ur1_q8Ety(1#a`o=;sVdUmolx3T{jU!$ zspb^VB=s+98uB>o?tDeH7%7iM8&8Db53fMQj%>iQ;DP(c`F%256L~cUxo=^77|ggB z>NC&*Ta zPJ@T!UM}L7CAf;03EvELGS+kpL?kJpdcUk#tN`JdK(ddmRp%=u7EY_KqS>#e*NJ)P z@fu7_cgy%j1Bh6K`IE1M)IVd8^IvXi3jj{&FU%b1E-qHm2@L~)_}!kzsg9nG@M>gA zXlpt52@10+;4TapvOj`5qfX{WZos%e_K>G{Hg5_Co1#5IGnTI+HVhXrZ#VP{eSW{NClX_C6TT*0AKnDJ4c&Oz39>8O3OA{f`Bu{ z!szFk`Xsl`L`LE^vu7w{-^_y3C^1(Zv0v((oEh5GNeG;lv;Y#)00Cx2y}PQyPfnC~ z#%#ntKGrgQj9B6J$CperMwJwFF4^r7(AIl~xJHj+I2)Sf=x>!BiMO8HIh`>2=d{xI z*DlLfNO(El`!c2xEmt*hx7AX@%BJ3~**XOZjE%(sGM`hL^cyr8uVEU@AY6Igm?-6E z1ABm&BMleTPd0>%_hrvf4Mh%Ol5HC8@;^vqkHAIUc3k&${-KVwE<+k{WNfp0`ckZP zC>AjiXI=A?GNm&8UTlTHxp@)OS|)#?EMW#?>Avfc!c7#oz@FOy4dhgmkByI4>XkTG z24rF(M5hkPrEpT^i~YvFv^P2xVI~^49$uF$L_Ps*5eN<43~3o47Z(o}7x@QJgFlhn zV54+U?61a1)gJ{tp|;o6b(4LwgKIP&-X0(oczA{aptA%GIap~$y&nNMSPoCk=!r8hC*H5aJ#V+eeLtKHG1+jvUp3nFeY`3jS8XlM zznE9p|9Z1eV$D2#Jz@~<*BZHnN?^Fc(=2QD6am3rF$SD%6(kmpiza-9i8I*R8M=Spi|O7+t-ce9gY<%moN4v@SiYP!@ACgPFAvXDtsJ#02qh zkp_Yw%)Z?spyTo#H74nx-C0`N?NAYqUc)g+O}gfeL>>*sV;7Un!+N%;{8;=_Qlq|>*%Ck!PKXZh z#>5-Y**pc+#FRxA7QJE>PGQV;WSBqR`rp&%0hb*tsWkhZ^hYRWCk*A^Hk;dEy9u~2 z*gWQBA6MAT%%>y+_WXI+CCLCCXtwvI^Ikx+e5y_f%ARS9^=$b87&~8UAqW^=dB)9t zv{gT@UsAG1q!=c|Iiqa@<`tT)+f8>xOiYkzp4s9*Le@_|w@0;_M9TO>B0bwvA->0z|LwR zIy)dfCVbQWwg6wFEwS2cge>_nD_vLu=O$Yi(JdCoEey!2KEQ;>Zw#|ClcW$+v~ zyk1PCy}G0;_}$m^wtugmzW>V5imq#oE)1aIEvT~H)Tt(xg}TtoO}g1WPQe7NGN3C1 z*aK7#8*t|>78dH?=nSki0#WpJNMTp^jJ&tx%9}*U>pZ^7*NvM}G+wMnFS2Mbl-AF3 zmH`H1{bnJb1SC=}V_?wGzIU~mES@s1qQvk2BD=oImfrD*)@ zY&uYzvs=j~+8zn=kN#~jhQ+}~)hC^knp#XaLt;Mb5UT++gBL-wkRN#YVN}0%BA9MO#Vt#vRB|*c#1N04vrcln_izVj)!ob=_#(T zX^2*x;*8qQ(MzBgQnH;^Byevl2|ykpf&JfFg5Ox2k6D519-YlAg{m((O`422C5$5f z8Eeco{@U_Ejotr&5mYZW$MW@f0JKmM0fQP~eXP8aUEM8DZ!H@+@=5YEmSW1r6%)^q zEg##0vk$Tv*WuWz0S?dA8j-TgeuH9*k- zYg22^07APU`qCy2OJXbCREqOD2% zclLZ(_Ic|yYm^F)j`^Er#Rv|RWn*Fnvyr5${ny-nJ7S`fDmVH_CZy3~CyV?4J{tku zH?;Y4J(Od2CMh1(V~^SJ{od7~t>9qkxUQqkMXVBk7=XVJGUo}hd*!cqMz z;K_zYrh{~#OSPf9;j|Gdi1=??+2yUc#9`)1uU@*`S;%&A-oU>IwnKH(zCQ6q|GfMi zIxrBxqZnA$sQ$QiVw>YXiu`bc;C&Q z6JK#V&lf#DBQx;s7rOiwNC=lrKh#jczsdM*2)I1(n^B8(nPjHdn;mA4bXi5QDyFPv zbE8G+!tg2BV#1<_xeHo0hg|~##wsR>Uj#@kA^+?Cmie#bQ;mR?5uXaw68oHD{b-yX z@9YB&U0RAjE#j=KLYPwXcI%nfecsEiPo}UCAE7zxJLGQaH?I}~L_xF4{1%c6V!2ub}6XM3TX1E!(#dd_d9Su`f*m#9BaAeY&q+*`JD2;ywd2;Ra9AgM~Wux{hX|7)+j|U850BO^=Y#259Q>Pz&eXo zOpGFl&>#UFvEwPJcwGw%UBdUTJgFUNJf399uhtEAnyui#zW+!` zDJ^Bqm1tyqJ~B?~mWxbo!*s>nWBPDiULAWssWZ^9^~f=P?pYL$iA4Wz z#0qDA>mzw#wDQK^$vTlt304C1N82N@5!og90dPP64N(XA^4~4oiVwyPpLI(?Q!4Jb zc|QO38(~q_IM}k@2Jf)U6CXOqpl~7m#a2DT=g2ooa{vh;=VdT!S@Eo4Wb{qV7D+D8 zcs76D8Zi=g$J`ZRs3HRHBDGX&f{nFAz?MwxPpZo$(7PYJ7VP)Ce%Bg7eVvz`q=cmad2uo@aE0`CE!19+jBsSHSZz^d4398o$wm zOTQg+{Eu#Ivzu8h77uaphuX+U{`zQ+P%oSc0 z;e9d)B9NW$QEJiJc?0l|HqS%Fdd4VkU=AbZI?%*8=;)KuzdYeSTNuK2xc=Z(!~VHs z6TLlr7g`86XDJ98%IGHouN)*x25H9p8P$@w8#U9=wdV6dYCryc`{m*Fv{`w;V8nMg z-E9Y3pF($t2t+8nS@+Ua=xQgGwr3k1CTw}xr$X+vVe88dwy4Wj5Po)%E`_c>4jA#K zX_QJPObL{z=tP>RL_`vS=pOv9`VN#!b)h2Q|N4>18@1t`s97i6VbRbe`P}1HXK-vo znf5Q96@>(Pw!!HqmC_B?XCh%&g9fkq??_z)RylvBI^m_{Z+{7#bHA?}>lrjNf`VWD z{#pHW1{E?MYDquiDz>7;>Xfy!u|C^$u$2jW7F8|mFTT0k`|{*#5&Fk&__dnnvuV_9 z4aeSX+Xia7f*qPHZ~wioPSR~v&AOe_k6lnAiibJiawsJ3Yca20*%N02KdtkD*!@yo zTVmRe9}dNOyf8GvE6IS48X<~hcbczWm_HC&wS&P#XKHT9Y%tdRMQN?igDF4W;tJvR?7DhQIvo8paau;~-?h4MOVh3FW);nnc zbJIx?Iza9ca+mAMTRN~tnI(9B&httARs6Mvw=6H){JE|Es(GghxbVK)Y`5Yrrc1rp z+U~eu$L4x-E(D!H_x1{DyIFSk0$EJY`_Hq|M1byy)!tVnRWS`z{aPrK>$Ygho27Cp zc`+MyqY~`3I|_yt1|BgO#8mm*7I3B-qt_zUf%$g?aipoa%oX%OU7UI0Jo<3CY{S06 zO~5nG)_d6Xec8HV=64E*O2y)lU~c#~Y%yz%xD@0nU6Xw|T!h*YJ+k+Z*J#IE>|dGy zf{b$VCAtXru{eccrVTnzbpj%<)lJk(HM1+U7=|G{ygK4)@467`_fIG!PJm5e0D#a63}53^fo zwm}EfZ*mDVtYYF6{JzwoK@-_h@gB-t!2*AXgaK0!NWXib zhCzHg7Y_V5N-h|%2i&d{^jX}*#%90K-9VHPP0(254)BVbh*8NF9%}`D7XN#RpBb8s zlX;2TzoJ-=vkWuSov@w!%O?ma?wcsNo$KNKP)VftaSj>UUAk$ z%#6bB(6cHgZOP|Ll_}VL9 ziW+U8jT^AL>l(lkIkaz|xoGlnMZp7Tzph|&ppE(FN$yt#&(qe0PoJO`Cx34o7-FP< zpDMRH0SC7m{Y?d7ccQ7UDZBOUS11RLM$KcU<|s5yq<0qSY#KBq!j39=+TZ_yub`D3 z-v5h4`3h+xBz!^?BCuc1mJmX5m(u-NO5EWcDN6q9jAshHZOj}DiBT7aB0Q$WQfcZr zch?_mUPhu-sfrz$e!RVVwD;jSzbV&XVq}M=&aBdsO-RcPChCN8{&d^$pQ(nEy8H%-MiO|_lQt_x;v$Ly9G_bVGvU4~R z=1cb3_`_z=61nS2_xI7=7o>mf^ZLF}&y7C%_Hn~8$Yt=t+D3CHijs8GWaux!Kl{bw z(uU^Ks$YM)_FEgVp6-%p!oYYAHxE9$@*5jU((7=<_7p@*t8eZcDx5?G4@PqunQ)9o z!~QahSA9FiZKNNaVK~XUqqT11bZ2k!0Zd0wg!Qn?t%5mCcgDVy@=nQ3!JY?SQyI58 zi#a<3a;L3*r?FlC+jM=|JoUrwJ=BV6AzvcTX?t0fy-%*2<^eE-6oF+KHK*HU z1P5x9no1>Z+wu*HB(tE9YC=c4c_vZ71j(tXG@qly*FRLD7VA z-)%QRwukQvG_Y?pMQ6IX$zCIg@|<6tmSwGybluZe zRj!*d$VeGUf-57OwhNimmG2c>@2}&UH97m38riDqUPaq$v;-5b0$BDH^1O8WNg>7J+~)VM!2J zDFGA_6zL-FvJ?XgNHc`}FjPSiG!O!d2GB%N5RkG0La6(&%=i5X-|Xbhym#*0J8$OP z^X~6=-aT*5;oo~TK)W0UBj)78PUbGT-`3nc2Gu4`et7XAC!u{hr%xFui_$&3rZV9& z+*ncE#x7@uh)g~lxZO$Y3n8ab-{e*4-n#!!)K z^-2n;-y2a$iwstuDUlhf`2p<}qg%4VHY)*g|GkP0vvbV&qKnFX5sj*A6>ziJz_&2K z9<9v^d82uFqhyUyzZxyZCo>iq38le(mCxt*2;&W3vXRuRVa7Yx+PiWj6^!Un^Srow z49DJaAh8dQQXgoNp7mSIOa;yrmZ$@x2!0^5%ArBF)Woz7N-yj@=9gH1!J<30W$p2n za#Df4WQ=bSRWdl2x1f;X3OC`p(BxB)?~4s>uD!CYIse|)nfx4@=Q~Fbp5KBo--pC$ zvU2X;VP?A+z{qL8ZaX~KAXoXyUY=T^m{7;u6IR@!xMgoc$TU_`Qup%rh#cZd7ZJe3 zJycSFLv@lV?)A>c;tz8r!BZ67Y`S*AQ;IGXPOTJFFD!h;`ylSfh6{1w4#~@7cD7L0 zw|pCJ@yRxmc_O;9Q8>#Aa<5a-ztEaJ@u={~=i;6%KD}FQGO%8A=2#6r!ESdX+Er#- z@@Io=;8*$|{K>_Op#OM-2V;bvnhh41gLn4mQ0D3?bW?Ej5dWF?|pB+uXx|NfAvh9-oMun=VIl-Akd+1JF7DY&I{-4cMj$`Z1?YF zI}XEf7>>hm9ERgC-2W*PcI`1m<%K{%6aMt4LeK8mrvxxJpRlyHe;232F#=~Na8STO z0S5&f6mU@RzbM$?250h${?*(Qh~58ousi2uRe#n$B^0fr0|M~~U3YP^5fPLT1g1pn zY^~scJhp!w-~;ZsUw&By1Q-XmISZ;El$!;CxZC%`VV(jD2oy#RDPcY{X{txLyHJTj zpC#EDhLVZy2?rBY6PgaZ8c)e65}bnxNP9o-bQdCiP|9zCd%H+vXf#tXSTl$r~7^7vm5~@x^lvZ~o z-3J+Z@8zUgFm-GO+uac;g#^Wf>ftu;$!TsjMY7MpH5YxtZ-Hts+Etj^%Kz-(j!T$> zc#Q?R#Ue5+W~h(+Zf#mjzGL@_7W?O$MUVwQJ;&3~wcM20bEGp@HB{QYT#Cs^pU-WB zb7@hv+YG&8p)y|t!S2mqij}FE@^XKgZF9=KTyu~T=6xz(d;GiloV3weLv3T@ez2#{ z&`NgMS^uZ@u-sKKF;XF&+r5l1UpW(r$oVUvcsaf3W@(12O|bV!JGy6wC98`%h1jA7 zlk^MX#|K(-M9v*{E}pIc4WMr%k(AzwXpUP>*8x?n9UIg-AHWrz%iKGyr5E^Z-qWtt zXEgX3&DRR_@_2p5x*o#bTAWp=J5^$gpK=v@si~+gZy9fZ*+HdDfu~v2Et4u7V`09X zSLAg3Mwo})k24Y`YAUE>(}bSMnU2Yc6<=~!FuKyX-#S14c*LEfQ9{>Mf7%F-dEtzF z-h$4X&mhH$dP2m*e;2pwvkl*j_hWh>9hOlnFzx3|PQ`w5?{8}TQbg@lC*K|7Oqm>z5AEkMGdS~x9UT#R!>5felYUx;cW)|_7aYeO0 zzNu;j-zcKl%XfnuI4O0)sWVrh!7+aOX&v6RkpIT+WK^4&Q+xB=z*q%)3)O9;&Vs%U(#V8dvUNdJfK4Vo<`C8=rLw0Lu0wZCRVMOHedI{qNuDQj(J#Lz|wh;7~ zX*6>>xz{q2aq%P;XO#8Phf<0u$_yUZRIWx)B10_I9^b6HwAyK^AeK6JljQB@HC4*B zGgKmr)wVu7Cn*+teL_F&`J^~TlYa^`HTGz8qPx~ZUoMH;GS8hCf>RO}`#arOUgPK! z4TDNVAR8^!?|h2#UWz|XXR&doo9&|>(6q)<%E(ziuC}yA;779O-Lw0oddBLhcb6Gc zGj(bSAxjUU-rOp?y;XVf%+0|q($wGZ^D!ZppCJ-4Hh#q6w&V5HmTt*=e{v;pXT7~< zz`XWO1VHtFsURX4pa!r|U}ShG4zH~}3g+VG;pICb;|aMG6om`LMtDN7fnh;tJkARe z5QWBs0>cOh9vgWG1Wqd@@*faC^aBzS5gi^rA|NOvEPBwx$xZWOP#n%1kl&tkhoHj) zaJVuN0#}(Bft$dChzR&82oZ|LM$jcBr4D<4o!=ky{Mrq|`8c^*g`)9*0s&ERM{=0YPIWuSPeV(&ddDmL++5i9nzt~Vrw*&y7y00YrOxt~CH~H*)l1_a0<>R%G zhoOSV@?UJE6mkT2;~^GLVZo%Z-ZVTi<^)nDrX%R9XGuaw}rjL=$kZ(m{H?CBb`)~D7I!R+iv`#3Dt!Crx`_k9~k2`eMJmV z0081&;Q#{Q|7`%8Q8k`aQnKR@2_p!1&k3X3s0wZfmr>?W z!>I;ZE;>%`LcGnUl@O)4*e8=XXDU)H=pb)07vW?o*nhyC7-vq9M!NCgY&eG3#LU{v zrJi3uS-49)UP681{+9E)M@kKcbgj8sZ}ySj6%-NwG-B6PPgU(B6Ld@YeDtjKsxp{w z^Wc~Bas4d%u)!e`nkpj3NK6O=EG=g+uGp9*Z=+9bM1Q8ppQghZO9<2dewTE5B;?Fb z0!2(~X7rTAS~O+?O_*8AJ9c^r$73jS^TNk-kIwwBL1m~Mh*GkGx zQS2D=xwpr%^%J}LonTC`!E&@ML#fi-1hD+Soe{N;7Uc9!eel=h;@%#K;+;pra(EZ} zj?as3BcUU63(I!#mdcdPqV8T!45_cTh&`%u~f8p6~&nc@B0{1%n!9}P3} zdh(|MSLBa+{4yX=L{=pE{J2(BPSMZ#qmd84UC=yFL?^l|ZV!|{OMY*^1tJPqEB z6kO%)D=Oc5oG$#C9fPRIUW#iy-pT*LNhR*3vK8v6!|@O4^Pb#ec)FFf5|8m%PtxAFb^QjG z)cW8qx)DF$Ny&P_?RVDfuMS?2s=~WE<`dfEJYm3-Hg3Wwk}tmuIjJWVe-t?Hv`7>+ zku2Z1e!n4e@}5IYlcf#M3vMfFZgSUJC;1B_kAhs&j8F?7g0wDuGj|H&WuJUcR_)~W zq6#g-D01Q~3M5_j&}!E=Hl8*}D^hP9lR)x_%U zlOksx4>!ELQ%!=P2uXf>(}iUCh?J_nabSS`k78|oWAr8+YI0@S`C6Qh&+7KcJ=WT& ztMSVFzS-(l?ay3X)i8ea$-lMn`al8L`r;LDhfNNw?qVkA$q!4x?sYfJbuM4KVKGi+ zZkRFQOKJ-$0+YB;@p+s8wQ%oY=K<<}02| zO_I~SDWLJRkQ2i8F$uZVDR*52Tpi-g#b=C=L-L&bZS8KUpL^}~qG)KHj-)~+0_(6ODPKH_Ky>NH1|xrife%0^q7^rajs0MiQ&)X`PEG^%n)j zF81&0$K;oMT`TwyBo1}7?X*Ddqc12fhS6opf1glVhytZ0QBv)_4Q74#mu#zMisxt( zv(XURhS_$j+~)L_YBAnxf9_B7%=wHx>3)@{^MgufVga3)bWCLfI1lg_qI-yt#uogPo?2RFeM)~|DC*qg}%`Pmh-M{ zjsSuzr>Gtf%pxji!1yt&D*d=s)Fdg+#2|3?wZV-}0JQQ?`s{9a?NltAXJ<#&Y$B&^ zLTSHPis7>TyNpT6CJ-D1Kz|-}O8pIkL3~E<+)C>u05Exm)Cg0el(IZhkQ|3AGC<`XliLm&A2^(M`I%ZKuG;F zxmct}gDM=TUtorNmY={UM~C%sxrg{C=7*mEgad!wHX(W1PPe6u329pjVTBf3RJh@; z{Z{}X7twO1TJhexO^TG!P_prIH5-d}K>Kd{LlXOm0+3dlXXa1$=2VxIOZ9X$^ir8} z;zWkCv3axkT|hIpDp&;&!^6hslm)h-a%0ij14y$)#rvz=2HCnI)9jA~5b;CL5?{LTGV{9|D047&x4+)y zjXWKG3C0V+A?`S?Q%0-Asldkw?t<%&iN{@jz7eHp{P=E! zq2KF77vYUZ&U1n`~n@U|Jqwfan+-((zH)^am`@B$Ec~OhB$~KMW^hx7HBXb zjU|+5<|TbFM~$iIRogc`*g-AXH3l-iJonMT^UQdldfHZYQ2K5!;YUik55I*0V^y;s zs4P;~vS<*Wv>8&4E!RFbyLPN!B*WAui#gk<8rlipAcpDJi%k#?7LgC~LZ0zrp8czY z%-fh|#~0;qnPHIAU2(7s0iJlqEurXzHF-O0l6j9zLHQdps!!>Is?N#7>$>$U=QoOm zKc=#L{)aDimlhAO0(pkxdWhJ!FO&O*m0f|XG@2garuQAQeiBh2dx?;k1?A(P0%4MB zP=ZA%3NSz+ARPoR3Xm3F5C5I|uW61@;9*1C%a6ti$rNP*X}{u;_{^t_I801CW>WdF z=k43b-l4c{2jB12eq{C7N55pP=4$vU+3+|&<Lh6GX-2qcfD zd?IK@qYE>HHEK%s3TFp$Lqoo#Kr}sDnzGngfPJOv8%9y~A7H*n;l1b=FQt6;K0CWFLZN^*#rzkX zgU-ao(s(c5s78Fiy&>azIxqc<04@K{xy0E6s4S3{!2=(tRBYleIvnLvmkqR4s z@v>z-D6pqAn+C)!%657@7moCIFl?9 zInSUwNk~S7lS21=zD%;`Q!wtoVJVHxm^Nq8O=PJ)Yx~Pd+K*nsWQ?D|9J|>g} zxcGpn&*mgyVBaPY0R`}o0RO*Oe+2`;(N7Tl$eDXcu&rqCNctpq-|Ketr;=DVq2pnL z+BjT0y2Wwo(tqL=6p=j@6-%Y(6esAR6e<6p+RB`CwNf{+fGy5E<4-E<#O&nc_f*d&|SjE->v z$+;&0B=12q#^%SdILp_2(I1WMW*R=udy&|>5E)k0h%B>(06*UxniP&+F4H?i)!@vz zD~cPWgVVNd5QbLhkittjC}ZjI@c<^4$!U7w%~E}j0*&=dV(NC%+4sTv+D81A)OKxP zM)^EEJJTqB>{)N=#%jH};o>%^8Xu~JtFnPBDg>==rUyhR4jpo`>vz>xWbK z$+->hi$e&~Fp)~@AX``A-f&~y=*F$PIpw@-y>7_9Tx<%30Ar$Bq=ZRdBr8?KGv()| zG7%*W58Ru)$w2?h-V&>1s`k4Q+z#2|tgpYDY_0P8#R|y#=F=Z$plK66-2Ho*;TitO z_~YDAuEyTxUjc`jW+D+Yg0w*m5eBrgVUxTFf&F`%;J+6mRau=18b+V~rDjo-&j`}g z-UwHj zg!0ts30L`h;d|XcgegAf0^!6qL^Y}8e-j~}xz(q~orVA4VzTD_8zzx~_pUvzBYwA$ zTnf6zvBI--s3KIIVK7pU0qotvPFgO940?j;uQko5F}A+E$Oy4sZ77o`v3U3vRn!-M z$drFcaTnx>Y&&nU!h<|JUex3J3nKTRvwucyX(QZF$^mvtNI;t^e^PJ08N2DmpYqc9 zA{R|^vaTBY`#EJSz5oo+@#VU_I!eB$buX##r)9kHHpj5K9U@l9td4b8@!CGxL|{W9 zgMy<;Ye#)22dBT6B%VbwEyl<*`31yUw9(-s0On9#hoZIEof?JDRAmK&c8xiha?uA~ zF0%atQ>qF4cob%pK9lg~)(<0It63Hsq}uiy{wuAlw4=hCsksl0S*+Wj2yKIN%>Z#5 z?f&gzaUO3X-KtHO#(abMh$nB<3)xg@AYWmDCyZF%_<@`u(`%C1}{I z-9V0XuT9Bo>qB7`VN3&6RP}iUb{^F9)8R)g^hWJ>-lCz;KR;Lk2+}h26U?`Q3))~* z&{lTqL2Rwjn^`~Y0c|DFGhAI(<{mpkm$8)-D9eA$1H@++zw7hrZbA{aM(+9TV;_|= zm~57k;4V-KVLj?4WviOM+@19j+O-MN`a>Smm}~`e8SzY;x0Y$LtzvVhi?wd@4b-ZA z!>2$xmWk^-JQC42=_A`-4J}ehVt2x>wx2`MLQA9a9dkQP|FDrkI3x|N3HhqBOBV## zR|OdgHJbG=*e0}|u;OW$S?%@&eBlI%`yu`W<63=hFZ_&CrTmOjqRJnvFll~5jJBSl zKO;(|FSeT>TjvgFDv3brl|X$rI4p5xI#=vtcZggdZPV3z90ps|^6H&NHow#uAYUmC zx5STJaN}PyVt%J({jd+IVW_=|!Pg^5i~E(0^{2hk)1m`uvOjia$VZ;$oa@7C5O9}D zvK>`|t*MAr{M&bIH97X2#*jzb-r;-M!tZsG5i@&f@X)7oOC}j3f%3mM!}vCF|0G~e zi8}F*YBI)CrZf9nWtTlW=;n=^^$n8@S3tW?G#T+hG0!bNI!Ws2Lh!r*RH=kiK&UEO zaU&>VVj??}uUNVK&7OsbKcGK-ch8wR{13TkOj!QI2OPYI#@aVo(Y*0H)9Vo+#`TAm zhSk?|2e?(Kxm9~KbI>5!KBM7!B-WqKgSXfhXIuTeg`16SK7};hr|xOowyPffN4^aw zPuf!jQD5Y6{%j=xf zEzRArKTw3JhgoP-&o19;!W`%rOb(X$Oh+cy_sj64j)Mh${}uuW;{_bgt)GydT*k;a z*`F02Pk&1e1P=l60I>A^=PwKZkpDgPe?EW#Dvv5C{i&{(azpm_dCEAkbsr_=}o~Joo|a z1K<#>sPIPp@7cev`vky;foriP2*ePh_(oRKduDI`B7w0tU=iyzDtUIi8+C;uddTc@ zpP48&-&-M{@_nK`I+{MzeWi;^0(oA)cBh~fUs|x1$on;!GCtW%kK`@-DJMBgXaYXY z!!Gd3O!vO@)m*Q#*T>X=S0MaKLeHEn!s7s~4_qJa?b?qHS^4@lwUtK-5d8CoMckAr z@ZnQQa?tBHsrZ2pAF<&uzxk{Py8p=ZzvipSzZ3g)0{{Cy5es_wv?=kwbf*7X1RoP$ zf%YwDUX_=W2!p|kCL~>k3f&B2E}=Wcm1G~>W8qH4!r&7)yrknptTRu2!wh!`8^=DfCbpa)#fNa>0zKR=RwMV7+l6-(MSh^#rCo)wVXz zY>f3eFb}Pl=5#YFmMww*>dEbaUCf|OK|;58tgwjgRu@l%^6~Gc=YxdgrgvOV&3oGW z^9Y>ixvMtalitG^Jw`zt!fvazl-Ex}Rylmfcy~6~z1 zzTr*3AX`H=xj;9(TM^Y-8(uy*R(~nM0^08~=~%ruJ8tnoD9;ONy!;@Feo3)I&F152 z#dOA}7<$7UA>wB zKErBJ8{Ibnyw*OtT1G}ErV2F&np<=N-ehRt5MFA&+cU^*uMFAf%<$q02gjtajJH*y zS9D6}ZEg2+pLMmkoIN7P+v(jc@du|_Ht-tnQ?D34XH_Hf>xv#kiUk3zUg| z`l_ymu=#j+`g`K+waeMmr@DdTgY^9%E_H<>K za%&ox?d3KV4N3i{;-lu;??PXFCboxvxQMle`A8}Ibo_||`}y0;n38C?F7u-LL<2gx z!y_o|#)yBrQ};^VZYgjkh7;kFCCX9Twp4m4!DEkZA;(@j>^<_VVPltyVG6A==Oo^U<0t}jJ zfL3G1t%={obyKE|Ci~C61_mT&RV<}OmdmrTJ;nKHT2ptR{e3U#jdFAc%8ea|A4ipL zhrAu#)5QKIHC2SbxZY}g(OeOv%v`)-M-jR?E6UHw1{Z$8BjG|0q9_*L^PS)aB-Hh zWA3w_25v4ok!~g;pO>JIl_7h2;Tevz1XvXa5CTf*oD{4iC!~GSDNQc$_9BAm59l>2 zvnGrWp>RCj!%Gx6%c&{c$-0=%ONTENsHfr9Xfm0oE>K16!}mu=6lUU>GKkJ-R_sm! z?wL6%+ON}DhU?Cq9j2kqQnQ*#U;0gsvBiVo{1n3ofEKRceQ$lH?273Nq{Gth!ltZV zHb+~;_Hn;S!{9(v5Ibh`d&Jnt8etOobnS9z%LaPx@?#-wc2~@3^I{kT1>;{iEW6irJ1uXjL6f0O1M*G{wNOi{F^M<2PjcbbT z$A=t4QDksKSzjUjhF7nys7%L3p$%r_eXNS|wyd)k{;S%&C%jiAR8l>qwB=yb^7bdu z7L!Ns8uK_O{Ew)Hlj3_7ri-A*HkSqtOIy}ih*aXO205L9Jc+${h*-f>@_T^xeAU zwYMzVC z&}(C;)?f^1#W>o@H%v(`q2khj(>IgO!PT*# zKh!_rwJ^uD$OPOzY7@Q^af=viLDC#I!-jUEe`P%wG3H{-d?qg|3GZW}_Z=gh=S+EH zKd^~(!^_3I@E3$yEv9jW^Nlx%ZG1r5N#1>5Z=RHnTE1kjR^N`!ZXw{ORVV5`y2U@^ zRjRf$iVtlSxD@1_E})pRUKO3Lm64ALPbkWpA%UNeK9*E5v~ga0odwjJdyu_71y z)gW_zF{R~~9biVU5ax)+C9V_QpB!(w;Hk4zu<2KsVB&a0c1nTFj>=8ASLJf`D0a{z z+NjjcvY{g>UbWRG(B#77Fs9=;#K;^?hWi68yVbB|q~Y5_SdWkysat8iq zt0#J*>23siA=$Ygq-7)ypndnt^`7&nA6XvXie6_d8QS$mkf zs)Q9m9h)zY8x|69Y%+@poAo(~Scu=JNo_B80Cp1ST>S$yMDZG%%jEf? zhv#jC#4Rp}Aq8=$!Nk63u3?#wWb^l!?f@)*dae*|JLrI(@3_f|tno{vkc+B2 zWz;7*JeShFz5W&S<=wVb!VQiI$@R8c9Mc|SArze#kc}q5481?h$w{9*t#P~zyStfv zWOSQLGr}ixdv#`EkUc*=m~ybUojO_|dL?CaQ`{Hh6%$_(<|bu>cgCZLHAab?!4uqO ze!tz3p}o6wj$>+(QsV5&Xw!PN+)Q>7Hm3EpIYMUP*Ps+}eBK1EJ7uJ{Kk5u~pYM}e zWvTLv`4hZ5=gRiQ7U3UI1<^K~CUw%q>0flG!(>otDsLcpW#+Pq=I(nrNyC=%CZ5!V zip?VVR*(K9JH~&P;PTgx4z}$)T=hD>-dI()?iDZu=pnZLU_*{)!1RS=rC=w#yQDG$ zuTl&|K+GsJC#8fU-$zK|nNyGg*E%64qWq0Z_PJnl_4s081&s_Aq==P6ZMB^jQ4 z$9izD>cX%_seX%@twDLoMf2i%quAs9OHv0DMdQrc<9Jiiel2YR;3r->`5V;1DJS9G z{rxKCnI3f1?ENg7zda%h38l|#1~QmZIvwMQTHW%0WTPj3<}~%t02OI0t8P^f_dVXy z$v2C4+@6Um5zPaoT}D$BR?KwY%^r@R4+rGC%NBn+Xd>-^ze)ieEVzyQ1{G$%&R(lU z5C;z4i)ppmg|0d(^Ix{*_GW9L0fv4t?};DyEx2FTPi58x<+$;USXjD|{6$kgLGffHc}wp~>k_rj>*2;2cKzA)k1*8h%tQ2dvSSG{Cgze55lOs`x-a2`hy-K%i`}h*T}F z%upOPhbgxoAaVh}>^dG79bHf5u#SAI?)J6XcLONlP{WW?$f=Yv;sL0<%5l*zBfEx& zXtHiqowAg6v^v46b7?Wko>;LAH&+Wjz*d*VADCK(pqXk)u82xn{ds! zs%_kZ!G=7(d zH^zW@@N2>Vtv2_)J=>Rvr#qe0R_U`pJt_?HRl{D_Rvz3=r~3p12rVc3eNqdRK!FZR zn#HL(iyLVlyG>RfGdbSGoO$1hn~e?LmE?e#;9R(Q9_@Y;IgB~Q)!X-dy)adwqxt3s z9Akrw_2t^Mx-(n@LO>q&mU6wS2jX)KR4|?bycJ;OQQWwLNbMjT6ZmR0(aL)er zGpc%QHL4a^^L4ZQnUlN#}ZpwI5!Gwn?mia=@jSXQby zADLx!NDFA_iygkvv|8VD%j+DVDqT-d;4w6_o<6htejVORkeZN@l^ys`LuLJQ2v$dx z1bU%J42YF$vrj=v-)^orUjKXtaEYTy)jFrUJ_*yCg+QLocj^9jSszX_OLK>Zo`+8m zs0(!Kh-{oE5c-ziY{*bC`RlC$3etJ^Xvo301X8KC1Mpt|vkqxHFCs_pFrZMarx4Dz zd8COvbPHzw=xLQxi{pcLB}&+;-H7}vPE%w!1fhT60YP>YLvVd@_KpLmo#i;;Cp(XA z=Dy_R_rAX(zTU9j+Gg}dJFvgy4?WS>Z}xF_z%<2cPu`BmEDH4ir2BBD;j3#|)Z>$$ z^NnOjR7+l2g3&(`+#o#_GEwh6=PzEW+BDC-&u4NIo7U@=dm_C~qW*d02E{OKzCSa+ z7;DO`RsAke2&PA=txm*5?8@jrGsgb1wB4(zkr{brCn$-M7B%`Z#XEy9dV8Rv<$dD( z1(37fKdu_jz7x=?s${qR#xAmkFnA~&G(r-X{1pZv%`A8M?H`5i1iu@Uu7!6n-6c`V zVk0%@Oqq88t`-brxxHRy{$y~L?rg_om{2DKpv11{W?62}zz?(_^FqI|p01RDX~VY6 zAM2(o&Td^4^;N@Ru>)gp6N708k+nOl$(!M)+>!2N%{l%Ci8e$YV+(U5Tb%Y0o}IO# zA`kIdWk*Y>Qjy;jdZ_}YX}C98rmCLA zvV)KI-gNHhAOCCPT` z(+Q#DFvgbn$m)pibGdScqp%h|Y35fmCChZc(nIdW$Zgsg&>!>T@012Y=u&1 zjgfYx5ILA+dnT4~*xj1quX1TZ^Wur81ldR4BHlao6mqY}DvALCnA0+kk65UA{|UpI z;##ghBLPkz2C33TlZkkry$SvQ`lI;8A8$OPyIuyW7urre787&$e^JK4rwJxM**#=; zDO<7DKFt+AGASlHQ=oQIA~MXAEcVGWVYI8=(yrYRDDGFu_^Q~#8=}kayju;`t|Pb4 z8v{Tz6!zoTGP19`Qu>8zV2sYDpv zro1>r(}tF!UNX-{b2eLE@B9L`D5^=I7oZr$GO3OXAedH;@h;!tw*1?7+-N4nu+ew( zlYGiYSq!cA`i=+V3IY-%B%AZ$-t zCirxW;kX*rG7UpD%2oOz*jEpSsD00SHXOOB`J0(M+*2UC{Z2=agng_oa!E0sVxj{bP zH$aR2<*EQFE*j&{1E+VxB4m6jQ!3`@Mg|l!45>jy;dIyali}jiO&3-{>OaTBQcj~D zxlu0qxdZxV-*iaL)#4R&h+YZ?k=l%!7k5ov97ls$} z?@MD_YMde`qZ5BP;t3D~T4CjG7x1nso924(YgtjXg}qHTZ1&5qV&nOC8CI7X^=9Ms zIE#J4a!@io>?u2@^&zRUgrgJZ&1c8st%r^uX^i8WpAT~pe|4Gpfpfluw&hSY`w!0} zzUnFVW03ggg8>Zi1g`zQMe0=!x(UL)owYU`Q!9n+GWF1hWQ1QSOJ62ZY`m=8)J(du zDmASSO~t8T;&D4Sllt?NW~Mz8X>wWLAZ&Fv&BgRlkND)XRz{dH6X&m3qgV2DoL4O$ z3(UJoM|;}y7aIHzasrPpe~~AJk$Ob8tm1P|0+Q_WJmU)Ku7t+=u0m%#Z@sCDlfg#1 za=W-UlJ>GW{VCMkeF@P*;LfE=w;*HKam?d=O@UC{ip{6bbG0wde6YGh$~$4B=Zf>C zq*47(NI%R}2GY|=irLdPe`aTk%XN?X2+~vPX}`$=-|$B%qR4OiK7HNca7}*9Q~O1j zr$F#!qdy3cHT<^>#KL}c?vE2h^|0kMH%=}LZw(ee zY~~QqE4ADH~5R8R(PxThctlMaoO$7kK;^DX0SDylQJX1f>{ zN;+y*m-S4Kg4;|9RFK`dPQoe&hEHLDrkzEM451u;dji*Lv^Z8Tc|2EQ7H!rWad-xO zK>%pxzuxaW3quD$A)*(Q8w~5U*OOJIRCMQNFzYtSr`>W{4-3F^Z7khm9~+a|I(6Ha z`|-HZc^zX@OciaGeM^Z>_LLyns2Iw4D9!N4?rLALdQN4S807!)np#2^7b*Fvk zJKkS89v3MRzJ07&b<%1zK^8YIw^3eM~IEoT6mZW?aN;J#YUy++Qu|ZIqA%uegxsqGV^^1AKfja=Eptvu@3oQ>fSP zZVyD1{!@HQAch>4qWFGOxvq@6KR#7PNLlmi`ry%j+mI3mO7GbBGa-ciootg z47a;+(kR!8U5snJQa9D;-uCLwna47h<+{hK43nP+jaeO|anX0<^X_gx{kt~-^ZgpV zOfKwXS?3{$Pu+18BnBwo)jX|u%m=kIk~T@TCBS5+wDsLUvVz}Vt^%?;#n7(W^;mVZ zyq@sPztbru#mB}tC_xTPg4Q>*xbJyygpGkwH)ENs{-n=OuZzay4v?L*LOpR`h5ZAp zCe_&<*`H(OXZ@hk%pP|K?d5p6>q`BrC(kSv#I#qgt=;@9L_KC5vZIKatdwMVx18_d zDODY|&5p+sBY(bw=4~HuR0#rG-sMs$p{a=7gQu4Fr@@%%YCenc{8TrP9@7U0BM^EJ zkB$-}00FRrG_E4#3mVR=@pM|_Pp2O@i%qyUfB~|qnNeTk?TzD1Pv-E6rU?upxitf% zC5>T#N@fqEC3!4W3J$3lp0HEo{I@v*u=r%XB7uqz46qz-DX{01absfw@yy^~wHb2y zkWdFa5YEv1#A6cjXxlE+GtjxPrvyca{DhwC;Xcm|HRblfP5&pLSfue{l=(e{0PB&u-_`9igkI X%~Li@&NQGy3sQWm@&@_ZB>4XU--@F? diff --git a/images/logo.svg b/images/logo.svg index 95d96fb9a9..6808294ea7 100644 --- a/images/logo.svg +++ b/images/logo.svg @@ -1 +1,9 @@ - \ No newline at end of file + + + + + + + + + diff --git a/logo.png b/logo.png index 0cc6f1e020a259aa05224d1cdd84c2582a39b4a6..cbc7ef4308b4d04face7bea6231ecfe751415936 100644 GIT binary patch literal 15387 zcmeIZ1zTLr(l&~RKycR}!7cdU?(Xivof+JMy9I)KaCdhN?hb>y1rPqsv-f`Yd(KZd z=la%MYr48uRdx50mb$AVloh2=kO+~WprBA>q{UUCprCIdbT}dcg4bF^nR`Q~V9&g^0D^p6x2zXvabv^NKtka^hKIRJS*1StN+!3&}P zDQ2M{`xgtyR)9iVL77a<(Z!sMi}@?_R|-KSGBPrLmv0uls^XIW5r^aiD6BvrCtem7 zcXxMYcXnn+7fTja9v&W+uWT%AY)lXiCZMMS$i#!m0Z938CI6#G+#G1;V(kR7c61>7 zN3V&gqbo>&g5sZw{(JnpogizA|E_?R6&6P}* zpBsGez+S)=%m9<2dm-mNfD375>y4pH=>y43r5O3u(Md~;y*0C8uGN)QL@>l7VN?qr z=moxGlgG9K#3`X2?qx)B8-j>Nvb7# zrponLV(|XA2p*dJhz;Yv9G``S5!=u{<%2~2CGd}2AT#ja(vZv_Xt?0q=N>Xyy#Go- z#6SEu^MA$ve|zg-d~(qo&inZEu&fV^5ZH=}Y3~RFMUN7A#jC;UtCi=!tLwD5zf5x% zhes2XiX*_nKN1`bw~s0(UU#w1Uv>-S2);Ox6U6AyzajV&3ck3da~#*ckj)IfCMBu2 zU3MKFE!W;ywPT3wN=>9M%xH?u&ar<#2JnK8qS^59cL_O1=c>E?JLh!*?j*Up*w9(BU(nmF(r=XvL(9qU z^nTAbXh${aV3{kFb56?4OrBGxJb*Q#e@{!#$<9_hoHFV?q(2AyetKA)@z2iq&Lg2?4iC)^9J?TiBzI zAft_$R>y7w#g8Ay14^SF8f`}!Ob0Cp1=_m#%2+f>j*rtgJg*s@B3*l^G?_JZy0Ray z_W^e6sMC(!_IZ_hXo262)V@faw5(BYJ(`)mz70k>%X(&Tf6k8+e2V1-S;>lp-WKUO z+AH<;iag>`Dn*8Tw@V}bUM(e$cvpR_G!6|ky}A!A_q%_fy^{THHE|0~ zH@hl)6&6L(tJEGK5&9RvY57uH%ImxX(|I*SJUXf>aW#n05RB_|wS%MEWT%GeUKQB$ z*YEYN8XFJq621gqM7nBjAcCEa38foeMicRyC6V=1Hs$TAEqkfsX6@}b`{nFxVFvcj zSa2qlAwSrMabN_hC?qZn>Fp0;qIcGIT}vk8j>6(l%=6I*&1TVu&psiVRqNvGs4|mM z!T`{RujaAtb{UAPAl7W=Z}9P~QG@FQx4qy`ZKb+o3v{Q3GtZ0Nb5<8KAUj4E@pI^2 zjso173C=*0qbzre?GUr$*@^k02{uBmGl$EwU{u}LIVIbplZ7u011`OsJ1@6L_RBR< z7p=wZsJc2%SgG+9dd(>Zs_JFxEgvf@D(u>vDSuY!%jDWFVLDZ1hqFJN{yvOz_qg~f!aYS! zilxZs{wBfaHlF+T>X?UTUujo2WLi#7SlZJ)Jxjt_haA0= zW@bFwoUTWqE-tviF1=PD&EeZ_*g(FUza6b8`%x*E`PHsV4bU(>1~1+n{FtuWU=^<9 z%W@uam_8AyEcEiHy-#PwX7J^4?C5^2U0FHao4cZERdrc_n(VW0Lp()1SHK z_)X^D>D1%SaBo)R&#PBx@eF93H;e|{gtqv-63(}|irFkxVJuV`h>OtaP)(c5|2KHJnMDHUmHqct@kLDZ z*8JugFi6pGijmQ~Hs`V%vI}~F^%i9*% z_t6QM1`BZ7`qcRV)&dl(4f?cQhN2Sw9*CP7nHUk)C=*xlXxZ0iqrJ3(n|rAut@<=y zV}fF(sa2njJRJL~;Mn!ZV{Xy*_E7QxyMe2Qd1O3ov-jnXf_b8a%=jaJhv^{O?Y!D6 zS%N1roa?8Sy&^@g&;91lVVt+4;jV_%obP!Fntx-7GTRjw!L0Uu9tn%R}UUb9G zmw_#2+4r>^`S$9J##I#b#&=}hb1I4Xs$Q?V6Ib**+%547b_~+Z0xGGVW> z#GlKqXU_A@DYx0KtkhJcjG^IA{-{J-hg-jgUa5W0oDO#5Xr{a0 zI6vJ)aUM3Zve6U8Eg5DoWqPp|7o*>r!u(#*fxalb$53C4hgLM$$JSwdyr{x%OFHwZ zWr)q3I{<5DoO}`|unU zNj>+ni4~O-SMhN^&{gPRe9kF}YHBOPxa{QKq-KqaC>5`_RJv{X3A2`4FBB9f_;nSs0exyja(`F8PG;)v^d89{&S!8E93v>KRBC{u-I3^yx zx)}@*`YCblBl)TFel;)cR{az)$DJ(Ey(HC49@a7qh1C{aA&pIv=V7o)*7N7b`5b@J zd?i7hc<%CbR`Q-5t0o*SnuAG43V(m0RAvb}SvC2+g#kD4RU7}Lw1NWFfif%%47OH} zMtL1YrYB{cfnVg~K5CCSwrS^OPsx=IO4SVIUJ{@%G1Z;^uhTZYk*aE0)Tk zf`_gyLd@s)2vdgYlqN4Vz6PUG?na$vdy;k9Bwh(~x>4(O=|!LS3w7#B-hKX==lA>K zX=Y>8mOKX{U?t<$t~HO@CuQ*E|>OZAV3)=uMIGcvkF9mfeZow|WN>P!wN z4f6NL-Z`?e*d5GAg9H1|jcpc5+(Co+wz$J)7Gg8joGpe^JgRJ*lc3&=b`UzqmAOXR z^ZHvhGGWSO{sW`7P{s7V#lSqu2No{-)fnK-yN0h@g|0XQuVE=Zt0u=B4kb%z(GRRi#gF)fQ6N8iZYoek8 zAT)$S;qd(cL-M5*Ss`0qqNVoy5|myTzDm9-WvT?3dp;<~=~5{{zNR64ouZI?@|;J( zYiXmzqpZ!{!$j&=ytg72+m$`O4*{S3^-;L1JGRw7ashXm!K=w-8s*>mN)$4NYN$)B z`;rDP!qA3ipYHhNFORkZ3pvO0Y)hr$VmVyCOu@6O9Qt*=J?ZDnRvKUWVNv^hqCH%{JRDJS7oVMDOAw6ZF-CaZ5ZGB*AP*)9k17IW$o&_bb`L{jiho{>)u@bqIB2BoX^;Uqyjh4Y}M`ccxHA}n8#JTj)=LW|= zTVPF`x~!|700HMIuWTmmn$gJby5=r7pY6ORs|+9i4zdZn-YUbLTidbXMQ^?A;A|lI z%HT8V*}ro>xIf*tf-crIkm-;mk+5B63lgRStgQV_NWFl|HCW9QCuP1Fna@&p9Ndwi=GDZWA`j|7ZY&-qEDH0d^KgRqzuHTRW0U}6#I}spUTN<6) z_mzr%bS5)H<~AJAK;5{0Nin`8L~=gGA6(R=6lHXHJ#Qva#(x^rRH3>ieV#v{)gjax zUiTc1RoF7G79r(_>;}a5$LfEP{w%o(YdAYx~ZBO&z_r@q8Dwh)#ebr>c3 zV=lOnDa&u!D4V5ogqU}2^+2)FRx50{B|(#%XaRmluceSb_4y9-fqU38huhIJ+wbAh zzg$5phj^{c(MV8^n}whw@9FLNCptckui{~8%QCli9z9Fgl1=npZyvt(l7xmgeaGg&lNBRyS8u0SA zVN&ixpuU|uK0^Cz4B-ZURtEG9Gu$b=kNL+Src@w4O4Ce@J=e;h7zm@C3SAq15#;9tG$ z{UUKBp&X8P;!i;b4c9Vo9R5DQmR9yWJHKQ3W}XC*Cs^N@4*M+I9QCQmSauUOI^3k&5#)D`Z6@o}S`2m-Gm{F^i^(6vg8&H4JUcTcC8APsn zI*-SxF<0aadQKASh)@`za`jr4;4nz$6KZgbWbXHcoc__#$t>&SV)2$=tK0t$Z#hgj zBLaHZXvSWqX}To++QS=;;25u68!KjYLXJ~#tKDR0O)Dvg8b-ZsRp!aeXw((c_2N=W zn(pXMgi692pQKB#IrlLr~!TC5Q}P_t`Ti3uV6?UiJ%* z0jMulvO=dGMGD~nuT@B+JUOI!fa@T`&}&eNkH306qR_??19aT-n5@4d4l(a3XlHug z)FzwE1Nb*YZ?h4WDy+iqJy%h-CLG@(q4o8;s-Lm;KYDLxn20#w%opl@s zlPm4&CJ|H0VQ9@9F|0e`TL|*r78DI;SMo^6<$6j}N?E*03|bD2KZ^dedUX3W>tM9L ztm>Dk!)tKb$ugoM_fm2Qp|??WZVk zKRjv&?8fL}3BbzFr+eFzG_k8mSXTTd_! zwL4q>Q0jWhOKm!kxiXnGysh=5#{i?X-gcYmzumW)i*My7+!x$xzZUwJqqcp;_Zj>N z!#DTXcgT4v8>_*jpLtF|!069R@82uR5)oL`#xkaWaro>ohr##j<+{^KmWpZ5KU*XG zz$Ufg125Y$v2zoF*kqz%Kk_OyPn%;nMBE7tYNz`vO%7iblw7j&5L!#vyQ=;-m35p(`g+AGWt|w}v1Z6`b zSDsI2D{|Hg^uFQI1|M15XJ4*{8%z3h{mr&|NF(2Y-lqqY(GDBB2f9ulN1eO($=U9c zk1rmUrC#StmC*SnW&k4D$WgeJLF|c}8ylGv3y}HJ)8k>+wSW8*T%VkI7VnG%y;L>J zjbmafXzcCk?rQgtj;?f1dXAXjGxl>tvA(WN8ehz((8 z2B*aP;a=i|YYm8oZ+zYmJaw>CwXv%~E~`U-HO>wTw3lDzJbMRK>R}L#Sp+8Eq`Y3H zh=Ta*+rbnlC8$PKT2o%Yz+-qc|D~ij)Qs{B>W?DsyUIz(cUtn3^I0^0@rd+4>^|jM z`%`1KQ*J)F6HW-EM*xAGsmQjCn`-Rey^@WM&a3dVyL{XAvWnSRcMwezX`UTQ7J`Gn z4DcJ7P#n-#`9&^zrLmn!R9cmag;~rOM67i4O<6a=8g-;nL4gwi^EQ{@bK&`g8&Ed# z)fJtS_>IxViDo9>Fzd&0xGZi9jk2Vm5tHBtC?jdPa&zCAipZk>$E?LEv zUv7Ap-HfgYpy zdl&Ju*X!O+>5O7&24bqPJfaLHZ*MvxG>OX&bgCdCW}2mZ)K(X;p0z?k<>KSmzPaTA zCihVo|B_l&S1y#1@$qv=1IXKat1|mCb_jMSAtnw_{X{=!w&E3$Y84>~w#~!!WUW0_ zq#iFseMuB?N`g1%Y_Cf-+%Zs38HK*pg5g;C+5XpPdmNbb(^yKKh9YCMhjl^|kU}SG zdO+%pV580)zg!zr@Pc7AU&7USJ&O3Z^9>+{jWR5R_~&ZXHfN@JvkTgiL*>!(KA+~S z-S64WmgWmIG=jMDsYZq2SMsyDVyqfnloyU)Rtp-3TfNOiu+T7Ha*WjXk|ua|%)b`3jxce6DgbH2*eh4-7&~Z0wR?|NX}3B@U*mnFL5{ z&;zrDxZnk4Lb;xzh%k@EF&PKyg%_gYQ^yfZ@r)agY)n{fRluy$3!#;fH04@nrLf&l zuzt{+8-}5)y`?b)ffz?i)if_Ap9>)~mVwT1oprC1c?qY>oZgk+Q4+In%q`SY{O0+$ z`zhVpOp)VR&DL|@bsKH8&m=d1O70$!daz5SHYz>{z7P``)zL?xn<5UcTd39c2NsBF z$p}?NE9;=f_o+fBk@m~LO*aj-LlZGwEnPMXl@MIxby$+>&o?XEUkN`FHC`!<{doQH^c8(yhAL z6u^5;&XfwFzx=OvOF6-qinP3_NO1$Z&-ZILy`A38?(}Y75>56yq}erWi*M^&-fOKu z(_~yGYRosW;)#dzZZ_3d7q*7`U5T%~WpY^5pNjooZ7om_h)0+VoKc<^wB~YOG(dAz`SX{N z?mT;Y`4YC+Fy%j|cJ93|jze$k57Pj(B;FxNH^#e@t4piFoWk?naQUx8x(kLkzQZI2 z+m9EtzHg6g#>3r8oQu3U#Zx&#G4vXyM)%n=cKNvIxvdp<@s}07ATrBfsjQVHt1%AXu93(2CY8J4! zyOmxIc`|1LoS~t81&iIm1cynxNK$;oE=Lv-h$)HbWs=`O4f37)X8w0g`Q@cWc3!rX zeyh6%3`u@Y44QHWB+^Af%)1qQ?1#}aQ#mJ6_`QcWeNmt3apRI0VPA=ujj@pV>{vAA zzSL8}$k!NonBcD~4hiFkyjp(^yPx3h?(Oo5*)MPFj*W^6qfFbkvW(q_t6KJytu{O_ zwNN;;wR<>Sf;Hhw6PiXuVfb1&_pte12L~U_(6cnMbzyVXZ;XcHj;pTcgJKun@!-F1lP7gBS|OoO$- zV8u+GX)^zKDl6Lhv&q<+LnpIdlX}%t^Z>M8i+$G*RaFP!wxsZj)aQZMa@E4XYS0YT zD|+AsrnWs^I;zESrM(PDfXMP9vV??z@vU=S(v|E+Jp-`}_Y;cd#P+BB$_dd_jo2>g z5nn_OYt;{#Z9EoSEMFj_8$*>zVxmrP<>kQ6(&J5Kt8_A;!G5gBCPshOW1-udCCT3K z`{UEj;OXsYHIad8F&~n7{SdjB7yT?sqaf!$dqs92Vl1DoiGkE$r03M1l_{PK+9%mI zHzxAKPX?zLIXPh-KOJE!_b*;>11}^Sy7`hsPv5SB+O_Jd@4FUWj$+%!Q7|nSB%Vs{$EMd~oO}P72I0Ub6mxZEsCSG*s?E2XXcGX*tCHMdN@{rYU-o~&C zu@vVaJBe<`Pq-2u2Yhe{)9$cB$~<@pF>*a$B~;Y5+4}*7kFjmfIZ*txiMVn??x>#a z@0Y4kqLIu`%nQQxLptybW~egk%wJf(4!zkK1kgG^P4Yao0#m*cYr`^O%29Wy@GRsb zGk0Sb0#d{(G@Z_LsXNggs;I+s|122tF(y)PsE0C|q2IzgZ#uIk9%OB?--Gt+`2>Tz z0P&*Zy>c#SFdgx6pWhLab`;64H7n}AUlW`Z=P-w&{S5`J*^_L{#ZxTyDN1#{c@ea5 z$|{=DK+~%YBgsi6Y zrXx2N#F6Ex$Tx@8fhc~kv;^RT#n9Sz!$qwce(u8_suX5}I|8OZi8NEtYV0D1X8G6q zl-p%1&lL*mJUqd9Bs)T9a!{S_eYWKKrPVb1-hO= zyU%&}IPYijqPZH_QG>9-zKbH1FYQEs#`#C=7f0ZYCC&-3$1@0%TCDcfcS#rlQ#~1@j0qx(_joe{|ndPt47x+@a8yVWWON!YCXaEE*ZhKpnzn5_V@w1yC@S%wdB_R{BunQ;QRmmW5&MTzWF(lUOp z`Helgw}KmO-FNY~O0-rBZNvFroQwvO&XxI(Jv{D(o}Pr%83OV@3L1(QCyEFKw{gfE(y-GS>hJn^+Gdkw|3qlN^@YdUP zdmsijGhMR5e%I5+3g8O6HMiim=gmvVC{Zc;2q^Kqd1@skus&UUHH@iV z%wxA?R<=7cf3eOU4%aG#8<_zoIIbZghB*+Wh+bZ!5l-$H^P$cZp;YNS_ZIJ4fK7m; z--NUEqa6Hjifj+1aWCtSNNzIf7%$SUZw#T)n3`aUq+GV~VcxVA{_^{7c448zXZKH= z0O2Q(g3$bwaTh1E^msID5`j!Qb&43By3E04{?{sh_B0i(n-j|$R5AmW$CkV=eIWx$ zX%yRTBj^~xYbT<2K-K`9POrs`c07(x$m5cJ{3+v^%XZO}YFQzU^kSy+XgZI8j01}w zOiRKGN(XdU-JSgGz%eY`@P8ZWb!OE1>ZYY1ak3b5f8y8r>q>N*M4X5Jw{XrKt=KVo zoSvdUCBXkIzgqwlWI-YlK2Lm+X+Qp~N$J(Z)F+$nAEk?%vDuxa_=~_>1z~dLCtPBa zg?WVGr7j`Hn%%eUq1-e2ZTV{|9%N`ir5vtvXRp88bjs1H{aSUZvjs9av+kP;VST6w zgF(j-Ujjgnj)_D=8pGv!E05jOb4#cB)l~$d7dzHnx_iT!mBq-9MzWKjbug)==5nE& zt=IjE$RGTN%DUR!x)lYwu#NqCkT-}SlA*LjizWSJp0+(r1f1FI7vig4naSWGjD8XX*jB3n7DvM(tyhAz}n%y7={H zoY^DjwOy+!`a7KFngJ!mQvL%It8-Il_IJXA%2HKwEGQac7v`j$m}nvZ&tsYo6i7CnT zy)=AB5sJ?80g!$4Y{;jHfKSbR!Yq9O@-ed#LHy{^_rb9k>O*L#mSk0jN$|xSbImk! zD+51>BvqjMVBb-Q7V&x&c!NsH&3bnhAy5Vyv#&&6<%qqkrWFF8kulMw=go3l8>iM> zD^ShD(bn3MZqhe~iV#fz6lQ(XUkH5G&U1pm;FFc(u!XE57VmEmSUBzJH_&9EEDQ0Z zuB8XJ6fR3Z6xVUicgbMGxNGP}nJMhbTrRZJI}TgBJNxtXdQCLy?{&|OHjPq=C=UF{Pr}>+ag`wJt^ zN}_kRGZ7pf`AGd}N8ggx!lI52ZmEwP6rIe|Jlu|ct@g?2_1m$BU--=}hC%A2J=GsJ zMHbeWWc)i`kQ9Ytw%Z>qGSYPO<6^LFZy-*HORdCF*RUbvkZ?avQ&iA7XH{oJ3>}dL~|KvO1cDw2OpvQc%4#oF=;ZRRD z&BA-%D393Y3s`ww3@Kpr@}^m1yxBprLH@v|0mFVQ5xyGr%TusKh1QiR#~!n@zPYvV zu+Dl=#@A!ZWeCQc`!}gy0<5@v))OEkv~D>G4@fyUT-+o0swOKfUAMw(cw>NZ|6_`{ z`!%@`)*`=8U*VVJ4Eo3B+7(>)jc=J3UF{jxyZv|9m!_LtY7N$Nr0$&kg?G0nu2=$3 zRz^{RWhU-4O4<7^pYJOwMlzb#i6W`wxP-~C8swhOBl}kNu4fB9uq&PE&g6@d=6=Dp z<)3@esUfyuNd?OMZC^_~(&q)C{M=$d2wvxyZqfX+Kw27UMN%2dxkdvD&z1I1?WW6j zrzD=mx8`lR^;fOnVV63kRqUFcj>l|_a@g$RdFj0IY?GBvQ-=6SVO|IyGUV^?80#c; zw7Zey#}KXPk9eU*2TnaPLh|v&%qybK7ub$)iQ^$odx(9{N=^?;a$VW50kR%}ZEmAs zTs`kh!NAA^DESjR$W)3|G8=Zx6gj{Eo_m9}i;?BkREg8Z8~4 z+_YX6^^An&grHqZ*Llp;JH4=X(AJNypL|PU4#(+@Lb{nH(8ZNi@a``uk6u6W)&&D;pPvejpq7&Lq(RbM>6-e($&P^+Vi< za^+h#Y)Ee~W|wQlWOj1!>^XvS@laSY9CzL29L47S$l0Y;w0DiL^oqNed6V)@Ru9Gp zz{f+)$i>RAXWlvkVWTUD&l%HRaqT99Wjyt|bPS*2mftc-VyslgJuu>;7R(%DYIAmmUTP96T^c#o#ulN#=R=Szg=7#~HwB zjcLz`r`^2sD{lE?Oe-)iZ&D!J^wL|cI5yzRz_{=qetwrd#)E^knuPaZ{Z_@QWeo`4 zb-5SptI@m7qhD_U@AbH^QlwC)n0|^gfgWf$Zqk;SsW9hWu*X=Dnxw2%bYv=Vq5J=NYB)`<_6GeKj?iPE9sq8jsY0)V4|K zeJ9GOar#RB_;o>7MiCyR}%J8^Fh+69(h_ zQh%;*D#aA1)VU?K!tK12L(FA)h&tNv!_IoJSSZ86wm;l57Gww`g~zR4US^1V#5CfQ z8*g(vcl-NC&~eAEzlOWq3aMl)rN~4AKXfb@t}wc=gq+@j1+qX@)lo&!NoOC zOfvW4w$veW_Pyjz0ZZz|G>^p z6I?+>0Bt3c6;ekWkqJ4SaIkas+f@L^DsY6@yR(LEuk{A~Xtoe%k})hb95+gj$L~H6 zek?2BGdm#x`ogDGBj|Dc>L5dJ>#V72!MF1j0|Ns=w7+YAA~;&2Pp_Hu+Qz-G$!YNm z7X+f`!f?n&uFzw3zc5`s2-8F7(4zwQv3&iiT-)Wbhr#t|TA|TFV2jGgVK(HG8q`^# zO;8dLN?bjbow-y+)idPt@s^fa_|i<^X=1dUp7pSm2uC9l?ElU)K!T3N>HUZCh=lwI zK2NQuKF;LXm+fcc>H^>pAu}t^7AGH0o{lVI?z05h$r^(b0Lu!q({c{wmr!RHm5TVK zqSRU!j8t?>2E>?ewiBO<<#}4^Igr`dmb#)9TiFa~*t}qpRKuL9-e>x9{z@W_$;*RV<3R*qWQ|`%mX@tBW9WiS{RJl>Jkbw z1#1*KRH7yua@gUc?9ZeePx3h~I*hrqqB~89D6$gnq3A4S%lxX26Pu4Eqss(fuAXbu zmF8rKpSQBwe3*IezYDTL9XD7hMX~L?lt;{~Mk}2D#ncDvX7+E#hc=X_QSkb7!EIE; zZuur+zXEYIuXBklb*7Hx2oUgR(!J#)9!Z_RO6xzK&im-&#qC-k-Fyh~ZX3|?=k{RJ zv(sJo?7tcQ+>X(DLA+3=v2kwiVje=m*OY6SO(1;PHKuz(Z<+q%N2CJ52jv;@$tqiD zJ`3yF0#xifi~hvzk7`5>F;rM?ZiCMdht2J?Hu3{ib{lX9sYbcxM+dF3hubk zDT{E(3O|tL`8B?cSj%VZ=7l?Isn)P=6731x?aw_(FKjoF#r+2HXAL*^vEk~3Rq@7E zlBLYg3Sh6!4VGX+`M@T@I37_g1g6jAG7K-KTnVtk9afskRYLow`f!9^rl!NK(6C-R%f?h( zJn3O#ls;RH)!>-gIS_oL(C4#|?>}!LAb**u%2)Rb z%;1&Idij@<7SrmtS`UJA*)t`4Q(!&057)zG4N z`bzyLoz!Blx-_aX2Td67orq^A!M{O+q89)-WV|=jSSd=x6PT3>olpAZZcZJ_XnWBS zr3m}QdSoXC4gqppOnOZbfJs1@;a%atA_^9bAQHwc1COcY0|pR9YS9Rv^F;7uqdhS{ zs8`XK*`O_USl**mV6{0tCB-S76Erk*(h-tb7lMEW|F!=tgWRb>D_=b|ux6tCJZNpq{TxZE5+uQ0I3F6+s1 zZEc_DjVITXipGuMZjA(!!0i-s>2*P-2MWyC52CF6-42|t5PGh7(KP4Sxe^ib5&u{u`) zVol89)U!8RsaYf0PRq%U^(d%e;T#TYj`4BBK~G)=()|PDGux>jRQ|%^6GZGxLLaJW zm72jP2J5YhYoRE%L3(y^!dw-^MRyUdaGF6-w@?YrUAs7y4obc^+A*ZQEVm#0RKs(N zS9|YV;OcvW9E%~ZI@U1Ua{XcW4%*i51a|ZhqY#}mn@C$8uBNpyxXhfIGz+eQn}pGh zZ>;|9ZVFD!o7(Q#$o3EY+!v!rj)wrh@4y?_C01a)I`C_dKbgRC&(yi@c?f5-PwHoZ z75=2`%}ikOV7|K(dX2y1YcW9V#oX$UeUp-E}@Ct1Q#@-?w)}@P${8o%5 z;8HVAma6%%Q$|;f;$y+z6n}2?LSCkkd3tKZih@SqA^FMTM1AeLLX6Ax;BFjR!B2)} zT2$AT?rcSVR20Gi+8mLfC))dChyhjudmWXOKO)>?7)PR6E~Sdja(@+Eu3oAvo)VRt znp)O&!XuX3S`6AD)bd7dgPvTETA%t1IZtg8A?df7x8 z5|t$8@F_hBpVT$6ppefAKViDkXaAg>7`X1No~*5n?j;Iyw4IGTby8mqC)q102Z2Ab zexUgSp9X{NYy-P!pzEud^M4~hk$;KqVSNAJYQvZ$$vM!RNm;Khg6uYVJ1mHtdjAO*UL zdwH=+NaA+qb}K`~TuRl;zHX0}v0$g6BR%)x(oQY%VHdM=lXbtM(m6jU5`8TZ{BWkf zm}e}_T&li690~U2(W6e?XL*^#=JDageQiyHoyVTqpm=TW(((Xg48WC3_=vBGygUa- zMn$E*{%SuL6ZLw1fX&Fv^}Rdo8P5(QH|k^s=-ncW9au$(d7gg#^Bs=%&&UXz?HnW0 zVtv~h1r^~JHnAc(d@w8mB_m;zTJF$&EEUz2XarWg;>mKtctWDuzrEbI5L^bX91H$vU+vcY$ZJe(9DtG$X{r0*DEmSK}bn2NukZf0Q#c$~{CbGHUk?Oc&8QNH>3@Zm7b zp)u?KW`4R^s1-Cm|9AUokG336_viEVG?`N7)y2h+v^4M(@E2a8QCGzI&3sgDxmeV6 zCO5aJwRN8DVK$EosnC->O{IPd0_oPbzmuw60qz9AO>zCaR9BEz_p)cl75xUXJhwFe zsEXZYCEM-{)`{#uRTtCh>hFRTC4V$H&0bym(TGW^l|M@BKKKETBTWVDOwL?f95yy_ zc@`rSpUG-sfP_a?a6O7}mlMCnjNQco` z#Jl}TDliJDeHGFp-KdfHNV`X2=F;ydHS@3Q)hB+axY{79hiX9~ztzQyzj${83Sozq zOw4~eTTb{SA4t1fGs7>OT< zKUcGEGxAy8I}E+`X{F6qlV*aXF*WNins&0B)hBCcF)ocHUv zV#%t~+w9XB?~u^aq60+~b*H}w+ll;HIThH7PfJS_`L;e=R<1MT8&+|;?`Qf+Hg@2XPRG{GFLn0~yTr4V*mnaz|SU0+|F zw$#7l#gX$7mSuAmPHSa@$-&-;i7zdcN22^nv|qon_gP_CT8yRQWZok?u1&uJV>r#&?v8<|f=f&XN0oWt@6`SgJ~Z_td^aw;qZa#1 z?ve`^0=DQp%Fmmwn?6<4Z@13yj&Ni^MAb;DS7#h-Sf{c z4=l-MD~GpnA0b8ZW?wpwHBTNpX!>;`oY_URpglgz8gjkWTjhrneQ|`Pk7Jp474nPK z2J7)`fs-m_ke`#eY<)L=xckHqD64onkITpB$BJk5ZcfWlE~cSOzZ=^fFFM7*wf2qu zW3DfL{%*^2ztNq%y|#a_bRC1;STSMYk|7Oko@C#5$B^tU6|>P>CqsmL7u@10TLt4= zBkZHt{zPEKWmS{)C=)?pEWJ5(l9obWOSK=`wsCe#CEs zBZ)kdE=(3ZZq!4W+&G~aXO+qi!5H7VlNq=TYyeybeBPH>Y3x$oqokkz1xx)?gBY|m z+uLgO%7Ge`TE1THqN{K;dz>h?_vFGI%{E7dJ?u}8TRA1lzrzGX^DKWrKO0803D z+k=t0A!`^QFHP8;!TqLPFXh3dl<^P$fYf`bVW&>>V30HLRbc9^fFqmC4=R1@J50*u zdu#hQgQv3vBF-E(STu$&of;jGKV*PFg=kl!bh<)xmyr6}~u^#`YU~=0$3^=aY>Nz^V zEY2frfa=$-Ba54Iy|;jasTgf@D#iYP1#!AVubHu{F~O(+3FvGz`A&gR z!@e6@bApxGa_!bwH1}?S52UuVEVONar$n*L;^?@Fui?<#CtLcTf7Sj9#6gJlF63^|dqY-W*MN zj$RzHwILZbr}txyDHkX&EDK{h11OO0lRNC*sRJcHyYvxu+f9gynYlQ8 zeSHcjBT9$(U8^(<#m0D^Ttf?GstLO_n;ki?otx=n;kRa!5fCux(vFNG(2y+xX zv{ZVN^aMV4da-o2iIIRtw>=YiJl7TK_-LY8-1_Vx)W?-}ZzT3CboTVld0Zr3+Zp@k z-D&f3DTxr{rsnS%WaESJ20&^D%)b1iX{D~&kW+godhy282?q}`!yEKCo4TB*_zvfn zFAy`X!*idalh@d5i*@h>vaXcis(=sp%=}bnO}o^5CgCg0zS2A80Su88L;k6buCQm^SaY_gzhzI+MqNHYB#;5V(^A9sch5-f6u zB-It;k?J+~|2bU^)6g>N3KXo8klV0Ot5q+zrYLzJT;6oo^FR5Zsg)VkxOozff92i1 zowD&6lf28SsYJo5%TC6<*5gSb4P{ z2qZX|NGr`nT0Xv8ZeoOh`c1lazMsvsml3VtQ7-YyvP`uBDyx)gG|_Rbiqqg|us%hj z9vItx7NfK*O{X@GJg%97&W9!Z1Gf{g^7qGq8s6P~xA{eLg8Ex7Wgm6Hp~ZzTR%;7J z{rcKgUG)$oG@H+`M(wFcKm7F1)>fRE>-k(Kyqdnn)QJp~_fM5g?=fqP&tR^*=<5sc zg;phUDnM+$f4^KUcUjNLA%#{gcU>G1ihb+hIUd90<1Zg;UJpR>>ATZvGrjJ@T zXT^S0P9PHs^|}`7iVfZ0j#2-enAAwi=WQg6pM<(^ofZpr+f)UR7|C^$&^P*X3ZXA^ z)yy!D9(CUNu_bwrW6N&FatQb9CSs0QGw}DXho~;+Ea{l7D)_)hq&3D|F00iNmb)va zpE0k>^stqbInzYpR0S9=evjtrOGfh9gPG7@3`*#ShfEW{ycy$jZ{h{~h#VNausNE8 z`(-oDeztRe|D^gja% zYG}7dOjpV>FQi=a2rZMCd0UFNyUUV9dKw9sMg@+ydcF0;(=g)!lhiUP) z(;KN%IRsn#F&m}+R)-vokW@aqV=_5=gW1f?;UAyoNx}})2LEHEUB&q6YI$^X7j6|9Dg5nVs6MCg9D?%F$2d8XAhmjlWYCI02l*m?mGQ1S`K)w9a&=mY zxt)dQ8O_BCOajaKeVNcAIkj|pP`jKK$Hhg2t};-L1mN?R=ZXwW^-U6Y{L-LGNaP^w zV1HE^@I`4X4YW!CS{e$d-Qd#ig|hn=$rj@ORB4g|EbH`j->$F5i?23R#mX^B1Gfw2 z`#*l1w=<#&^4!r3;OGf;@6MWarNY5aCFd1x(M3^X2z$N0h#~gunJl>c!CCCFoYLS# z{~?Cdwn!;!0pB{_43LCdV>Y0YVyyB)sOJ5l(%@H_5HdE3GAXYyLY|%&bE1{vsuyxIR^K*O$uABgQHa?Gf*jm5z0r(={thYC(lqHsPYOcu$zJtT z27)ZPLR-gq&6h_`9K(^g3%(H5fVK9AQEWpe2o%Hg5+1Pk=x)LMm@m1bfh>7<5PdsnGpQ{f zGfUX2OlDdcQ{TWjJ%RZ>lo<`ZRr(_)ft>=xi*o0mN|p6_>3cbgFJA^D`!-QqUnrC?G({t9eD+iWv^~X|i0o%EyeNgiQ+{h3Wb>C6^|hsG`2V?ET|J7)V4k$81>cKHiN} zf4WF+Gi4uJ?KS8ETyz%#8E-N31SXRP_*s=-!%mymZ)IfEu4&f&>cvzFdo-4&N}Wg zIW=5^1k4OMFtL^%2>!#Xw)W+S*ABB zVCr4~YRnIDovsh3I-k|*aA_u@wmTnA)|TgE7t^PuZ}vyqqZxZ_Whae_IryjO*o zSskB)?mR8PHh6KUm%QRDIbk$}M&nps*=#}6f|z|iohmWh#E!DiTnOVF+s}twj77^a zm_D3IkL%mTfXRE``>(vQlYKW>b(tva78(H$&WgZOYXb>}{IYPS9H=XjlVVW)Ii7wM z)xGh)Vc0E=WNIDkd!4Rm*kwSs>-WYDRQ4@wE5}t0pS#GdY#gC+7@_GMn%x0NQF|^( z`W$h;SB1)?IXf9lc6oiN**NfN95G9XciNQ#0G45jU~}zW?7Z%;?3RElFAP!v+}kr@ znoe=rM(cKR$mjY`B-@4u`Rb5{GViP5X;!t_n(30{2t|pTgJTbR4SI0nZ(q7r>YBUv zRluu9lK5i7WT=OOQ`I+r)SWlI-B5jqaqCm+=}j#?BQUaLVN3Lv<7k@e zJH%Y>C}n(|AUQi+Cn{<$V)PCb%h|ckR;K1}>`M}ji%?;aEC-Ml_vcx5f8igC1~A?> zV;^Q>BN~h1>IIi9sb8fYCh?1*g!zcXX*n1%wrfpd7gQyKRLy5o*WTsitBHVuCT?Jz}K>-Pg(WDdQi zI!jTNBO0Gd(bM7U&5zooGWYt$`~j`w2Ln_c;TKCfqy0x&a-y!vTu#4y8E+#m zGS7R;ooA*>?|>Phuq5N$W7awuf^Afsqf%PeEFYVwOE0w*m(!I?guO^yJsgOUF6q@f zhYn>iPL%KKk1_gI!fesR6u*Uxiuz-&YNusmh}f?`T7$AprK9S-Ezqtr=h$X-1!QnJ zAiVRUni@9@hV87|BeY#oU7!P+M^$}g4HjR%5?Rlu+o76H0YNv>7$S=ko4IOFcME8Q z#0h|mU|nD(|H+abAl5jtUPEe)FCk~-s6LL--;Rwac`hWtFtn8lhscfmeVhg9-7mg<|h)q6D+UdcPbQQ zU<{a>6KHnNE6&;i)GGM2E|@Dc9nu~Ove6WLbJyUQf2S$msqNNMM|;}=b@#@;DDI`1 z6g)%STGRSX-)h}P4$D|<-wfL^ZB7z9i4CSj`$6e*0lubq6=4uBf`{qDWRI3Ad8}*4 z)+rBx+1$`)jlRp`*^7b2#x}XVyB|Z78=u`M5Ii<&?ANx*!jhLC-Yjz>e-~~k*)Cy^&b|_u0;yIWese5%=4flDV&o{|z_!p^97bQndxQ*cOlL1o%TRjhKdvYN-? zxxUO8K301ng1)glk_xR&c|WVsAgm&MJLJL$f~*id!EV_~rj( zAJIZ|InH0xjUil_>fYhJ!B4(Q&*cw*I}ok*}B>*L;8h; zzDfvMl9l&n1Q&px-t6RU@kY=sP_;WBAy!r1YdYAXp5w`^@G$`r(y~it3js8QvH!Zk zmrDan+NGhUyEecJu@EHEqP--P5wE4AF zGWn2Lx0;^oD$k7?Il2TO?O%8uXC@(%ITD#46cvtt^O9?wDHQ!{6zqgyqy&`sFLt!K znof@GSPz={f9>?bWk&OooW=QaqtP^>h2bT?K>S2mY%u%!S1xtj`afkiKn!^LN~R66 zAy7rDwRR&Wt%V3Bp@3(Cj$wTMTB(t?{JzQY>`UR%l&-2(+NG|w^*>3)Jir%y6KDLi$1ofv}qf2-!Bp6oI zAc<8^9mZp!l2z63Ix(WXXIo?fKLSR~OkS(uy^N&G`&@!@$tFz`E)bXb>jVS|} z9$?*++`w13|EM4qxDIm;_vhp1mm@nCXKJ5b_V*#@`|%_>wOqCml5Y70$wH_vPfDS_ zcgIofwJOvVhH`RpVWfhc>h15c7DB0JRkVf!@1}{y88na=WaO$_FS!p0I9^(2tv4`~ z=Py5O?Zvw}@v#zM{;^NgZAf>OMeAF>jC#>^m+ijoSbBQADE=KwPyhG%sPDsIyc@Lb z4nB?d3R{$_zJ_qv+RAT!A-|8fG?xu7$6rwA^)`Vz)4Z{#?0hVVPVQnxT&H97QnT^F zJoXDOE5h-fS2;ElLukFjvM2%26fgQq*>$+*wY1Pn1GXXY3k^fIoac)<0H68G!T#xq zZQ#PMGxONw8G;9gz*leXwk6z~I@^?=s&UMVc1EU1^lvS&XFpeEZeJ47kf7p*AwLr- zq6lEe1zabfJgiWq@?6Dno=`TsxrsyA_yZ{ZI$u(V?YuR^4^SZ-m zC38w`9_SaLQM37HqXfCtr8$E;Pp*SYVx8vR(!Fl`5#@hU)}fUOw(@MP z;sQ7ESS7pbV#7T9(|%(te^f8Kq>Ltc5|)G`3*bRKt4an_*`EzPa{sHd(7NBGzG#n=ET`KT@LLx{d7^(|dXS zNkJwung4)$rqa+)7C5K|r?>hW&XC7-yHdR~&F?cBxcydPXVNnW1&^~VLv%fuUjZ{A zd;^Pq=91_}f&?ya=*{}CgXlH3qv-e!9hW@_i0Faf3`Ps7DEeXBy$y=48wCZ0 z;O6yHq`(*Vsj1>GuPYB%S`fpI9Ff}RP%&E4B*#=XOj}8H_Wk_G;LpPD_bN?j~~I2)8H5Xov&kM`Z|DjqB*8_wO@eU(u=A*vMXM z10-?%qxt<$Tb!+@B&t#SB;G}k5}Iqb5UeES&}wT~xE-)Fm%|e3R{xlrL~44IO||To z?3DILTP<=Y*G90%E~hOh#BP2QryRO@UDdpe;4(9(#TgvHqO&5aZLVjlByIVkR+<42 zH6lzM9sg?k>|^(?{y@!1otE6oO$se13}XyOWY|VKd>a1R^JLgxP|@Mzrl9zEICm0(I?MU#8J5k-=VXb5fC5Tb zZ4{W2MZ1O0he^!+z5^Cz)V;Y^W{5U(R+Z5iQ!cCeim@H7hcf=Q%p9?CNG4zko(ysv z7pmjn+9WzdQvK>e!SOv;;3yM)fXm}*m_dIhy^-EsZ3 z8HYE|3Q}n==+jP1Olc4UC8;&R1oz4-#@QkYt{APz3JQqm>y1B#I~>r$Mh%5y4Z{ym z#s(1?o)$OIS{2M2R(yTJEz&pW3P}C^*K%^|z4Nz#fUbFFL3dYIE*YOvJj}~M6>FXc zy_Ve}ae00Z0K(#tR43EwyDlb4+GAe6Mo0xrdApVD?wB52UsP9=_Z>It(X_sJCifY5 zsz}e&X9bLc#N$)qbHnz_QZUdr0@ zRh7bp_Ur9__ZeU4A7Ur<5A+2G_P}K6ZwwIIU2V|OZ7gMo!~0=7Lk@Bj-cpE-qNZpQ zyFW6;MQ0fB?q2wfJZg8Fj7`h@XMija4gr-bA)0>{n71kMF877%HJ_ShUs|Pelug&tKT@MKIK zABVW`@F514U@=qKpSq8=WiR@M?NV{oSTLxb!VIF;F^cNwjRO^;iZyUfF|pP6m71qe z^u?GjiwJM5uSL=whk#C;8o44?bns?QabK>_|%rT_3WJ#f0x61HPKFPh3c z_601*exjJpCc>uyti-Kpa@D9v2`!LH{adP152QY$U7#|Z*FcKfsD+_#>#IWiq$S0xO&L&^)jKkFKxcYh~)M( z8)@7BOtwF(SW6>V5k;LbI`LMK6nWU8g}x>aNPMN3wmf%KtYP)m`WN~Iy{)Ls#805^ z?|DB&x#ah)Kn%%E*l_xZkGJ<=D=P9&+B4^3=1_kXSlnSt3)%LLzSj>%o%*L>{a?nv z^C`1*ztkPht0ONDCE~lJdNEgMRXuh9-KzX(i)3;8p0+q~vCd5Ce|(X*>MR%FFi!U((Qc{B4Lqi_2PnTx(O0cdDbBHtWHArj&wZ z+?W}DAf3!0q|=>R_ygX#AwI8hO{eGBvJlZbA{! z%gr)#|HKf_>{^#9Lqf(*Y&QDry$Zk5XO{lF5a_0A!=5LTZR|WVS#^>P5(7@}K)*B3 zXw5PNQf#@YQ>jzE{3}xbO_Uq@Q2zn;yte?x(55|{T6LBBBDP>bcZ!*JLwWTqn;+vt z5l_(%I*@rOF67HjPuN6Ii(4SVQjFh)q|%CD7ma$ydrYL+aVzL_>fQZ>ZRYK3N6(%` z9ZY@Zkud;;ilp(>vdmQKj3>-92GG#a>69->whYUq1{l&C$u%Y&c$K90fD{B`#Tn*$v zl!6WB*tYWo=Ei>w=2#q7P$rd(T$BG;CI8zdw++AYw35+<_`m#?#;|-8e-I65v4?v8 z+fB*(;g04H;%diUuGGYT{Fwif|DXE&zwmJ$=-(^N9dQuZ{q8D;k&#rCs1`H+@n7JQ B#OnY6 From 04e7c589df24f6b3a918206eff58c293d14c8b4c Mon Sep 17 00:00:00 2001 From: Thiago Silva <82097354+thsfs@users.noreply.github.com> Date: Tue, 21 Dec 2021 17:10:34 -0300 Subject: [PATCH 343/346] Applies the silent check to incoming messages server-side only (#3623) --- nano/core_test/bootstrap.cpp | 48 +++++----- nano/core_test/network.cpp | 6 +- nano/core_test/socket.cpp | 87 ++++++++++++------- nano/lib/config.hpp | 2 + nano/node/bootstrap/bootstrap_connections.cpp | 2 +- nano/node/socket.cpp | 15 ++-- nano/node/socket.hpp | 30 ++++++- nano/node/transport/tcp.cpp | 2 +- 8 files changed, 124 insertions(+), 68 deletions(-) diff --git a/nano/core_test/bootstrap.cpp b/nano/core_test/bootstrap.cpp index 1beb10835a..0e37ac66ea 100644 --- a/nano/core_test/bootstrap.cpp +++ b/nano/core_test/bootstrap.cpp @@ -11,7 +11,7 @@ using namespace std::chrono_literals; TEST (bulk_pull, no_address) { nano::system system (1); - auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); + auto connection (std::make_shared (std::make_shared (*system.nodes[0], nano::socket::endpoint_type_t::server), system.nodes[0])); auto req = std::make_unique (nano::dev::network_params.network); req->start = 1; req->end = 2; @@ -24,7 +24,7 @@ TEST (bulk_pull, no_address) TEST (bulk_pull, genesis_to_end) { nano::system system (1); - auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); + auto connection (std::make_shared (std::make_shared (*system.nodes[0], nano::socket::endpoint_type_t::server), system.nodes[0])); auto req = std::make_unique (nano::dev::network_params.network); req->start = nano::dev::genesis_key.pub; req->end.clear (); @@ -38,7 +38,7 @@ TEST (bulk_pull, genesis_to_end) TEST (bulk_pull, no_end) { nano::system system (1); - auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); + auto connection (std::make_shared (std::make_shared (*system.nodes[0], nano::socket::endpoint_type_t::server), system.nodes[0])); auto req = std::make_unique (nano::dev::network_params.network); req->start = nano::dev::genesis_key.pub; req->end = 1; @@ -63,7 +63,7 @@ TEST (bulk_pull, end_not_owned) open.signature = nano::sign_message (key2.prv, key2.pub, open.hash ()); system.nodes[0]->work_generate_blocking (open); ASSERT_EQ (nano::process_result::progress, system.nodes[0]->process (open).code); - auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); + auto connection (std::make_shared (std::make_shared (*system.nodes[0], nano::socket::endpoint_type_t::server), system.nodes[0])); auto req = std::make_unique (nano::dev::network_params.network); req->start = key2.pub; req->end = nano::dev::genesis->hash (); @@ -75,7 +75,7 @@ TEST (bulk_pull, end_not_owned) TEST (bulk_pull, none) { nano::system system (1); - auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); + auto connection (std::make_shared (std::make_shared (*system.nodes[0], nano::socket::endpoint_type_t::server), system.nodes[0])); auto req = std::make_unique (nano::dev::network_params.network); req->start = nano::dev::genesis_key.pub; req->end = nano::dev::genesis->hash (); @@ -88,7 +88,7 @@ TEST (bulk_pull, none) TEST (bulk_pull, get_next_on_open) { nano::system system (1); - auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); + auto connection (std::make_shared (std::make_shared (*system.nodes[0], nano::socket::endpoint_type_t::server), system.nodes[0])); auto req = std::make_unique (nano::dev::network_params.network); req->start = nano::dev::genesis_key.pub; req->end.clear (); @@ -104,7 +104,7 @@ TEST (bulk_pull, get_next_on_open) TEST (bulk_pull, by_block) { nano::system system (1); - auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); + auto connection (std::make_shared (std::make_shared (*system.nodes[0], nano::socket::endpoint_type_t::server), system.nodes[0])); auto req = std::make_unique (nano::dev::network_params.network); req->start = nano::dev::genesis->hash (); req->end.clear (); @@ -121,7 +121,7 @@ TEST (bulk_pull, by_block) TEST (bulk_pull, by_block_single) { nano::system system (1); - auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); + auto connection (std::make_shared (std::make_shared (*system.nodes[0], nano::socket::endpoint_type_t::server), system.nodes[0])); auto req = std::make_unique (nano::dev::network_params.network); req->start = nano::dev::genesis->hash (); req->end = nano::dev::genesis->hash (); @@ -145,7 +145,7 @@ TEST (bulk_pull, count_limit) auto receive1 (std::make_shared (send1->hash (), send1->hash (), nano::dev::genesis_key.prv, nano::dev::genesis_key.pub, *system.work.generate (send1->hash ()))); ASSERT_EQ (nano::process_result::progress, node0->process (*receive1).code); - auto connection (std::make_shared (std::make_shared (*node0), node0)); + auto connection (std::make_shared (std::make_shared (*node0, nano::socket::endpoint_type_t::server), node0)); auto req = std::make_unique (nano::dev::network_params.network); req->start = receive1->hash (); req->set_count_present (true); @@ -1418,7 +1418,7 @@ TEST (frontier_req_response, DISABLED_destruction) TEST (frontier_req, begin) { nano::system system (1); - auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); + auto connection (std::make_shared (std::make_shared (*system.nodes[0], nano::socket::endpoint_type_t::server), system.nodes[0])); auto req = std::make_unique (nano::dev::network_params.network); req->start.clear (); req->age = std::numeric_limitsage)>::max (); @@ -1432,7 +1432,7 @@ TEST (frontier_req, begin) TEST (frontier_req, end) { nano::system system (1); - auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); + auto connection (std::make_shared (std::make_shared (*system.nodes[0], nano::socket::endpoint_type_t::server), system.nodes[0])); auto req = std::make_unique (nano::dev::network_params.network); req->start = nano::dev::genesis_key.pub.number () + 1; req->age = std::numeric_limitsage)>::max (); @@ -1474,7 +1474,7 @@ TEST (frontier_req, count) node1->work_generate_blocking (*receive1); ASSERT_EQ (nano::process_result::progress, node1->process (*receive1).code); - auto connection (std::make_shared (std::make_shared (*node1), node1)); + auto connection (std::make_shared (std::make_shared (*node1, nano::socket::endpoint_type_t::server), node1)); auto req = std::make_unique (nano::dev::network_params.network); req->start.clear (); req->age = std::numeric_limitsage)>::max (); @@ -1488,7 +1488,7 @@ TEST (frontier_req, count) TEST (frontier_req, time_bound) { nano::system system (1); - auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); + auto connection (std::make_shared (std::make_shared (*system.nodes[0], nano::socket::endpoint_type_t::server), system.nodes[0])); auto req = std::make_unique (nano::dev::network_params.network); req->start.clear (); req->age = 1; @@ -1502,7 +1502,7 @@ TEST (frontier_req, time_bound) req2->start.clear (); req2->age = 1; req2->count = std::numeric_limitscount)>::max (); - auto connection2 (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); + auto connection2 (std::make_shared (std::make_shared (*system.nodes[0], nano::socket::endpoint_type_t::server), system.nodes[0])); connection2->requests.push (std::unique_ptr{}); auto request2 (std::make_shared (connection, std::move (req2))); ASSERT_TRUE (request2->current.is_zero ()); @@ -1511,7 +1511,7 @@ TEST (frontier_req, time_bound) TEST (frontier_req, time_cutoff) { nano::system system (1); - auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); + auto connection (std::make_shared (std::make_shared (*system.nodes[0], nano::socket::endpoint_type_t::server), system.nodes[0])); auto req = std::make_unique (nano::dev::network_params.network); req->start.clear (); req->age = 3; @@ -1526,7 +1526,7 @@ TEST (frontier_req, time_cutoff) req2->start.clear (); req2->age = 3; req2->count = std::numeric_limitscount)>::max (); - auto connection2 (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); + auto connection2 (std::make_shared (std::make_shared (*system.nodes[0], nano::socket::endpoint_type_t::server), system.nodes[0])); connection2->requests.push (std::unique_ptr{}); auto request2 (std::make_shared (connection, std::move (req2))); ASSERT_TRUE (request2->frontier.is_zero ()); @@ -1599,7 +1599,7 @@ TEST (frontier_req, confirmed_frontier) ASSERT_EQ (nano::process_result::progress, node1->process (*receive2).code); // Request for all accounts (confirmed only) - auto connection (std::make_shared (std::make_shared (*node1), node1)); + auto connection (std::make_shared (std::make_shared (*node1, nano::socket::endpoint_type_t::server), node1)); auto req = std::make_unique (nano::dev::network_params.network); req->start.clear (); req->age = std::numeric_limitsage)>::max (); @@ -1613,7 +1613,7 @@ TEST (frontier_req, confirmed_frontier) ASSERT_EQ (nano::dev::genesis->hash (), request->frontier); // Request starting with account before genesis (confirmed only) - auto connection2 (std::make_shared (std::make_shared (*node1), node1)); + auto connection2 (std::make_shared (std::make_shared (*node1, nano::socket::endpoint_type_t::server), node1)); auto req2 = std::make_unique (nano::dev::network_params.network); req2->start = key_before_genesis.pub; req2->age = std::numeric_limitsage)>::max (); @@ -1627,7 +1627,7 @@ TEST (frontier_req, confirmed_frontier) ASSERT_EQ (nano::dev::genesis->hash (), request2->frontier); // Request starting with account after genesis (confirmed only) - auto connection3 (std::make_shared (std::make_shared (*node1), node1)); + auto connection3 (std::make_shared (std::make_shared (*node1, nano::socket::endpoint_type_t::server), node1)); auto req3 = std::make_unique (nano::dev::network_params.network); req3->start = key_after_genesis.pub; req3->age = std::numeric_limitsage)>::max (); @@ -1641,7 +1641,7 @@ TEST (frontier_req, confirmed_frontier) ASSERT_TRUE (request3->frontier.is_zero ()); // Request for all accounts (unconfirmed blocks) - auto connection4 (std::make_shared (std::make_shared (*node1), node1)); + auto connection4 (std::make_shared (std::make_shared (*node1, nano::socket::endpoint_type_t::server), node1)); auto req4 = std::make_unique (nano::dev::network_params.network); req4->start.clear (); req4->age = std::numeric_limitsage)>::max (); @@ -1653,7 +1653,7 @@ TEST (frontier_req, confirmed_frontier) ASSERT_EQ (receive1->hash (), request4->frontier); // Request starting with account after genesis (unconfirmed blocks) - auto connection5 (std::make_shared (std::make_shared (*node1), node1)); + auto connection5 (std::make_shared (std::make_shared (*node1, nano::socket::endpoint_type_t::server), node1)); auto req5 = std::make_unique (nano::dev::network_params.network); req5->start = key_after_genesis.pub; req5->age = std::numeric_limitsage)>::max (); @@ -1667,7 +1667,7 @@ TEST (frontier_req, confirmed_frontier) // Confirm account before genesis (confirmed only) nano::blocks_confirm (*node1, { send1, receive1 }, true); ASSERT_TIMELY (5s, node1->block_confirmed (send1->hash ()) && node1->block_confirmed (receive1->hash ())); - auto connection6 (std::make_shared (std::make_shared (*node1), node1)); + auto connection6 (std::make_shared (std::make_shared (*node1, nano::socket::endpoint_type_t::server), node1)); auto req6 = std::make_unique (nano::dev::network_params.network); req6->start = key_before_genesis.pub; req6->age = std::numeric_limitsage)>::max (); @@ -1683,7 +1683,7 @@ TEST (frontier_req, confirmed_frontier) // Confirm account after genesis (confirmed only) nano::blocks_confirm (*node1, { send2, receive2 }, true); ASSERT_TIMELY (5s, node1->block_confirmed (send2->hash ()) && node1->block_confirmed (receive2->hash ())); - auto connection7 (std::make_shared (std::make_shared (*node1), node1)); + auto connection7 (std::make_shared (std::make_shared (*node1, nano::socket::endpoint_type_t::server), node1)); auto req7 = std::make_unique (nano::dev::network_params.network); req7->start = key_after_genesis.pub; req7->age = std::numeric_limitsage)>::max (); @@ -1858,7 +1858,7 @@ TEST (bulk_pull_account, basics) auto send2 (system.wallet (0)->send_action (nano::dev::genesis->account (), key1.pub, 10)); auto send3 (system.wallet (0)->send_action (nano::dev::genesis->account (), key1.pub, 2)); ASSERT_TIMELY (5s, system.nodes[0]->balance (key1.pub) == 25); - auto connection (std::make_shared (std::make_shared (*system.nodes[0]), system.nodes[0])); + auto connection (std::make_shared (std::make_shared (*system.nodes[0], nano::socket::endpoint_type_t::server), system.nodes[0])); { auto req = std::make_unique (nano::dev::network_params.network); diff --git a/nano/core_test/network.cpp b/nano/core_test/network.cpp index a5bd86da24..a6940eb74f 100644 --- a/nano/core_test/network.cpp +++ b/nano/core_test/network.cpp @@ -781,7 +781,7 @@ TEST (message_buffer_manager, stats) TEST (tcp_listener, tcp_node_id_handshake) { nano::system system (1); - auto socket (std::make_shared (*system.nodes[0])); + auto socket (std::make_shared (*system.nodes[0])); auto bootstrap_endpoint (system.nodes[0]->bootstrap.endpoint ()); auto cookie (system.nodes[0]->network.syn_cookies.assign (nano::transport::map_tcp_to_endpoint (bootstrap_endpoint))); nano::node_id_handshake node_id_handshake{ nano::dev::network_params.network, cookie, boost::none }; @@ -814,7 +814,7 @@ TEST (tcp_listener, tcp_listener_timeout_empty) { nano::system system (1); auto node0 (system.nodes[0]); - auto socket (std::make_shared (*node0)); + auto socket (std::make_shared (*node0)); std::atomic connected (false); socket->async_connect (node0->bootstrap.endpoint (), [&connected] (boost::system::error_code const & ec) { ASSERT_FALSE (ec); @@ -837,7 +837,7 @@ TEST (tcp_listener, tcp_listener_timeout_node_id_handshake) { nano::system system (1); auto node0 (system.nodes[0]); - auto socket (std::make_shared (*node0)); + auto socket (std::make_shared (*node0)); auto cookie (node0->network.syn_cookies.assign (nano::transport::map_tcp_to_endpoint (node0->bootstrap.endpoint ()))); nano::node_id_handshake node_id_handshake{ nano::dev::network_params.network, cookie, boost::none }; auto channel = std::make_shared (*node0, socket); diff --git a/nano/core_test/socket.cpp b/nano/core_test/socket.cpp index 32d921dd01..23c0043a75 100644 --- a/nano/core_test/socket.cpp +++ b/nano/core_test/socket.cpp @@ -46,13 +46,13 @@ TEST (socket, max_connections) // start 3 clients, 2 will persist but 1 will be dropped - auto client1 = std::make_shared (*node); + auto client1 = std::make_shared (*node); client1->async_connect (dst_endpoint, connect_handler); - auto client2 = std::make_shared (*node); + auto client2 = std::make_shared (*node); client2->async_connect (dst_endpoint, connect_handler); - auto client3 = std::make_shared (*node); + auto client3 = std::make_shared (*node); client3->async_connect (dst_endpoint, connect_handler); auto get_tcp_accept_failures = [&node] () { @@ -71,10 +71,10 @@ TEST (socket, max_connections) server_sockets[0].reset (); - auto client4 = std::make_shared (*node); + auto client4 = std::make_shared (*node); client4->async_connect (dst_endpoint, connect_handler); - auto client5 = std::make_shared (*node); + auto client5 = std::make_shared (*node); client5->async_connect (dst_endpoint, connect_handler); ASSERT_TIMELY (5s, get_tcp_accept_failures () == 2); @@ -88,13 +88,13 @@ TEST (socket, max_connections) server_sockets[2].reset (); ASSERT_EQ (server_sockets.size (), 3); - auto client6 = std::make_shared (*node); + auto client6 = std::make_shared (*node); client6->async_connect (dst_endpoint, connect_handler); - auto client7 = std::make_shared (*node); + auto client7 = std::make_shared (*node); client7->async_connect (dst_endpoint, connect_handler); - auto client8 = std::make_shared (*node); + auto client8 = std::make_shared (*node); client8->async_connect (dst_endpoint, connect_handler); ASSERT_TIMELY (5s, get_tcp_accept_failures () == 3); @@ -146,7 +146,7 @@ TEST (socket, max_connections_per_ip) for (auto idx = 0; idx < max_ip_connections + 1; ++idx) { - auto client = std::make_shared (*node); + auto client = std::make_shared (*node); client->async_connect (dst_endpoint, connect_handler); client_list.push_back (client); } @@ -201,13 +201,13 @@ TEST (socket, count_subnetwork_connections) auto address5 = boost::asio::ip::make_address ("a41d:b7b3::"); // out of the network prefix auto address6 = boost::asio::ip::make_address ("a41d:b7b3::1"); // out of the network prefix - auto connection0 = std::make_shared (*node); - auto connection1 = std::make_shared (*node); - auto connection2 = std::make_shared (*node); - auto connection3 = std::make_shared (*node); - auto connection4 = std::make_shared (*node); - auto connection5 = std::make_shared (*node); - auto connection6 = std::make_shared (*node); + auto connection0 = std::make_shared (*node); + auto connection1 = std::make_shared (*node); + auto connection2 = std::make_shared (*node); + auto connection3 = std::make_shared (*node); + auto connection4 = std::make_shared (*node); + auto connection5 = std::make_shared (*node); + auto connection6 = std::make_shared (*node); nano::address_socket_mmap connections_per_address; connections_per_address.emplace (address0, connection0); @@ -268,7 +268,7 @@ TEST (socket, max_connections_per_subnetwork) for (auto idx = 0; idx < max_subnetwork_connections + 1; ++idx) { - auto client = std::make_shared (*node); + auto client = std::make_shared (*node); client->async_connect (dst_endpoint, connect_handler); client_list.push_back (client); } @@ -331,7 +331,7 @@ TEST (socket, disabled_max_peers_per_ip) for (auto idx = 0; idx < max_ip_connections + 1; ++idx) { - auto client = std::make_shared (*node); + auto client = std::make_shared (*node); client->async_connect (dst_endpoint, connect_handler); client_list.push_back (client); } @@ -354,26 +354,55 @@ TEST (socket, disabled_max_peers_per_ip) TEST (socket, disconnection_of_silent_connections) { nano::system system; - auto node = system.add_node (); - auto socket = std::make_shared (*node); - // Classify the socket type as real-time as the disconnections are done only for this connection type. - socket->type_set (nano::socket::type_t::realtime); + + nano::node_config config; + // Increasing the timer timeout, so we don't let the connection to timeout due to the timer checker. + config.tcp_io_timeout = std::chrono::seconds::max (); + config.network_params.network.socket_dev_idle_timeout = std::chrono::seconds::max (); // Silent connections are connections open by external peers that don't contribute with any data. - socket->set_silent_connection_tolerance_time (std::chrono::seconds{ 5 }); - auto bootstrap_endpoint = node->bootstrap.endpoint (); + config.network_params.network.silent_connection_tolerance_time = std::chrono::seconds{ 5 }; + + auto node = system.add_node (config); + + auto server_port = nano::get_available_port (); + boost::asio::ip::tcp::endpoint listen_endpoint{ boost::asio::ip::address_v6::any (), server_port }; + boost::asio::ip::tcp::endpoint dst_endpoint{ boost::asio::ip::address_v6::loopback (), server_port }; + + // start a server listening socket + auto server_socket = std::make_shared (*node, listen_endpoint, 1); + boost::system::error_code ec; + server_socket->start (ec); + ASSERT_FALSE (ec); + + // on a connection, a server data socket is created. The shared pointer guarantees the object's lifecycle until the end of this test. + std::shared_ptr server_data_socket; + server_socket->on_connection ([&server_data_socket] (std::shared_ptr const & new_connection, boost::system::error_code const & ec_a) { + server_data_socket = new_connection; + return true; + }); + + // Instantiates a client to simulate an incoming connection. + auto client_socket = std::make_shared (*node); std::atomic connected{ false }; // Opening a connection that will be closed because it remains silent during the tolerance time. - socket->async_connect (bootstrap_endpoint, [socket, &connected] (boost::system::error_code const & ec) { - ASSERT_FALSE (ec); + client_socket->async_connect (dst_endpoint, [client_socket, &connected] (boost::system::error_code const & ec_a) { + ASSERT_FALSE (ec_a); connected = true; }); ASSERT_TIMELY (4s, connected); // Checking the connection was closed. - ASSERT_TIMELY (10s, socket->is_closed ()); + ASSERT_TIMELY (10s, server_data_socket != nullptr); + ASSERT_TIMELY (10s, server_data_socket->is_closed ()); + auto get_tcp_io_timeout_drops = [&node] () { + return node->stats.count (nano::stat::type::tcp, nano::stat::detail::tcp_io_timeout_drop, nano::stat::dir::in); + }; auto get_tcp_silent_connection_drops = [&node] () { return node->stats.count (nano::stat::type::tcp, nano::stat::detail::tcp_silent_connection_drop, nano::stat::dir::in); }; + // Just to ensure the disconnection wasn't due to the timer timeout. + ASSERT_EQ (0, get_tcp_io_timeout_drops ()); + // Asserts the silent checker worked. ASSERT_EQ (1, get_tcp_silent_connection_drops ()); node->stop (); @@ -405,7 +434,7 @@ TEST (socket, drop_policy) return true; }); - auto client = std::make_shared (*node); + auto client = std::make_shared (*node); nano::transport::channel_tcp channel{ *node, client }; nano::util::counted_completion write_completion (static_cast (total_message_count)); @@ -519,7 +548,7 @@ TEST (socket, concurrent_writes) std::vector> clients; for (unsigned i = 0; i < client_count; i++) { - auto client = std::make_shared (*node); + auto client = std::make_shared (*node); clients.push_back (client); client->async_connect (boost::asio::ip::tcp::endpoint (boost::asio::ip::address_v4::loopback (), 25000), [&connection_count_completion] (boost::system::error_code const & ec_a) { diff --git a/nano/lib/config.hpp b/nano/lib/config.hpp index 6499151b1f..422688dbaa 100644 --- a/nano/lib/config.hpp +++ b/nano/lib/config.hpp @@ -155,6 +155,7 @@ class network_constants : 47000; request_interval_ms = is_dev_network () ? 20 : 500; cleanup_period = is_dev_network () ? std::chrono::seconds (1) : std::chrono::seconds (60); + socket_dev_idle_timeout = std::chrono::seconds (2); idle_timeout = is_dev_network () ? cleanup_period * 15 : cleanup_period * 2; silent_connection_tolerance_time = std::chrono::seconds (120); syn_cookie_cutoff = std::chrono::seconds (5); @@ -189,6 +190,7 @@ class network_constants return cleanup_period * 5; } /** Default maximum idle time for a socket before it's automatically closed */ + std::chrono::seconds socket_dev_idle_timeout; std::chrono::seconds idle_timeout; std::chrono::seconds silent_connection_tolerance_time; std::chrono::seconds syn_cookie_cutoff; diff --git a/nano/node/bootstrap/bootstrap_connections.cpp b/nano/node/bootstrap/bootstrap_connections.cpp index 1d445b13a3..cc67f17ec6 100644 --- a/nano/node/bootstrap/bootstrap_connections.cpp +++ b/nano/node/bootstrap/bootstrap_connections.cpp @@ -144,7 +144,7 @@ std::shared_ptr nano::bootstrap_connections::find_connec void nano::bootstrap_connections::connect_client (nano::tcp_endpoint const & endpoint_a, bool push_front) { ++connections_count; - auto socket (std::make_shared (node)); + auto socket (std::make_shared (node)); auto this_l (shared_from_this ()); socket->async_connect (endpoint_a, [this_l, socket, endpoint_a, push_front] (boost::system::error_code const & ec) { diff --git a/nano/node/socket.cpp b/nano/node/socket.cpp index d251c5fe49..64495f6c85 100644 --- a/nano/node/socket.cpp +++ b/nano/node/socket.cpp @@ -15,10 +15,11 @@ #include #include -nano::socket::socket (nano::node & node_a) : +nano::socket::socket (nano::node & node_a, endpoint_type_t endpoint_type_a) : strand{ node_a.io_ctx.get_executor () }, tcp_socket{ node_a.io_ctx }, node{ node_a }, + endpoint_type_m{ endpoint_type_a }, next_deadline{ std::numeric_limits::max () }, last_completion_time_or_init{ nano::seconds_since_epoch () }, last_receive_time_or_init{ nano::seconds_since_epoch () }, @@ -34,6 +35,7 @@ nano::socket::~socket () void nano::socket::async_connect (nano::tcp_endpoint const & endpoint_a, std::function callback_a) { + debug_assert (endpoint_type () == endpoint_type_t::client); checkup (); auto this_l (shared_from_this ()); start_timer (); @@ -140,14 +142,15 @@ void nano::socket::checkup () { uint64_t now (nano::seconds_since_epoch ()); auto condition_to_disconnect{ false }; - if (this_l->is_realtime_connection () && (now - this_l->last_receive_time_or_init) > this_l->silent_connection_tolerance_time.count ()) + if (this_l->endpoint_type () == endpoint_type_t::server && (now - this_l->last_receive_time_or_init) > this_l->silent_connection_tolerance_time.count ()) { this_l->node.stats.inc (nano::stat::type::tcp, nano::stat::detail::tcp_silent_connection_drop, nano::stat::dir::in); condition_to_disconnect = true; } if (this_l->next_deadline != std::numeric_limits::max () && (now - this_l->last_completion_time_or_init) > this_l->next_deadline) { - this_l->node.stats.inc (nano::stat::type::tcp, nano::stat::detail::tcp_io_timeout_drop, nano::stat::dir::in); + this_l->node.stats.inc (nano::stat::type::tcp, nano::stat::detail::tcp_io_timeout_drop, + this_l->endpoint_type () == endpoint_type_t::server ? nano::stat::dir::in : nano::stat::dir::out); condition_to_disconnect = true; } if (condition_to_disconnect) @@ -229,7 +232,7 @@ nano::tcp_endpoint nano::socket::local_endpoint () const } nano::server_socket::server_socket (nano::node & node_a, boost::asio::ip::tcp::endpoint local_a, std::size_t max_connections_a) : - socket{ node_a }, + socket{ node_a, endpoint_type_t::server }, acceptor{ node_a.io_ctx }, local{ local_a }, max_inbound_connections{ max_connections_a } @@ -342,7 +345,7 @@ void nano::server_socket::on_connection (std::function (this_l->node); + auto new_connection = std::make_shared (this_l->node, endpoint_type_t::server); this_l->acceptor.async_accept (new_connection->tcp_socket, new_connection->remote, boost::asio::bind_executor (this_l->strand, [this_l, new_connection, callback_a] (boost::system::error_code const & ec_a) { @@ -388,7 +391,7 @@ void nano::server_socket::on_connection (std::functioncheckup (); - new_connection->start_timer (this_l->node.network_params.network.is_dev_network () ? std::chrono::seconds (2) : this_l->node.network_params.network.idle_timeout); + new_connection->start_timer (this_l->node.network_params.network.is_dev_network () ? this_l->node.network_params.network.socket_dev_idle_timeout : this_l->node.network_params.network.idle_timeout); this_l->node.stats.inc (nano::stat::type::tcp, nano::stat::detail::tcp_accept_success, nano::stat::dir::in); this_l->connections_per_address.emplace (new_connection->remote.address (), new_connection); if (callback_a (new_connection, ec_a)) diff --git a/nano/node/socket.hpp b/nano/node/socket.hpp index 0a6cc975ab..94e42ca238 100644 --- a/nano/node/socket.hpp +++ b/nano/node/socket.hpp @@ -52,13 +52,17 @@ class socket : public std::enable_shared_from_this realtime, realtime_response_server // special type for tcp channel response server }; + enum class endpoint_type_t + { + server, + client + }; /** * Constructor * @param node Owning node - * @param io_timeout If tcp async operation is not completed within the timeout, the socket is closed. If not set, the tcp_io_timeout config option is used. - * @param concurrency write concurrency + * @param endpoint_type_a The endpoint's type: either server or client */ - explicit socket (nano::node & node); + explicit socket (nano::node & node, endpoint_type_t endpoint_type_a); virtual ~socket (); void async_connect (boost::asio::ip::tcp::endpoint const &, std::function); void async_read (std::shared_ptr> const &, std::size_t, std::function); @@ -89,6 +93,10 @@ class socket : public std::enable_shared_from_this { type_m = type_a; } + endpoint_type_t endpoint_type () const + { + return endpoint_type_m; + } bool is_realtime_connection () { return type () == nano::socket::type_t::realtime || type () == nano::socket::type_t::realtime_response_server; @@ -133,6 +141,7 @@ class socket : public std::enable_shared_from_this private: type_t type_m{ type_t::undefined }; + endpoint_type_t endpoint_type_m; public: static std::size_t constexpr queue_size_max = 128; @@ -157,7 +166,6 @@ class server_socket final : public socket * @param node_a Owning node * @param local_a Address and port to listen on * @param max_connections_a Maximum number of concurrent connections - * @param concurrency_a Write concurrency for new connections */ explicit server_socket (nano::node & node_a, boost::asio::ip::tcp::endpoint local_a, std::size_t max_connections_a); /**Start accepting new connections */ @@ -183,4 +191,18 @@ class server_socket final : public socket bool limit_reached_for_incoming_ip_connections (std::shared_ptr const & new_connection); bool limit_reached_for_incoming_subnetwork_connections (std::shared_ptr const & new_connection); }; + +/** Socket class for TCP clients */ +class client_socket final : public socket +{ +public: + /** + * Constructor + * @param node_a Owning node + */ + explicit client_socket (nano::node & node_a) : + socket{ node_a, endpoint_type_t::client } + { + } +}; } diff --git a/nano/node/transport/tcp.cpp b/nano/node/transport/tcp.cpp index d5bfffef08..c0d6259a23 100644 --- a/nano/node/transport/tcp.cpp +++ b/nano/node/transport/tcp.cpp @@ -549,7 +549,7 @@ void nano::transport::tcp_channels::start_tcp (nano::endpoint const & endpoint_a node.network.tcp_channels.udp_fallback (endpoint_a); return; } - auto socket = std::make_shared (node); + auto socket = std::make_shared (node); std::weak_ptr socket_w (socket); auto channel (std::make_shared (node, socket_w)); std::weak_ptr node_w (node.shared ()); From fb06408a7e325f6acaf8ffb1d015d4ec2d14a591 Mon Sep 17 00:00:00 2001 From: clemahieu Date: Mon, 17 Jan 2022 16:24:12 +0000 Subject: [PATCH 344/346] Setting version for release. (#3671) --- CMakeLists.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index f6f8b95f14..2ddaf80878 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -48,7 +48,7 @@ endif() set(CPACK_PACKAGE_VERSION_MAJOR "23") set(CPACK_PACKAGE_VERSION_MINOR "0") -set(CPACK_PACKAGE_VERSION_PATCH "2") +set(CPACK_PACKAGE_VERSION_PATCH "0") set(CPACK_PACKAGE_VERSION_PRE_RELEASE "0") set(CPACK_PACKAGE_VENDOR "Nano Currency") From a7a44f9e8a23672f66e15804e79560f004995859 Mon Sep 17 00:00:00 2001 From: Zach Hyatt Date: Mon, 17 Jan 2022 11:05:02 -0600 Subject: [PATCH 345/346] Update live rep weights file for V23 (#3670) --- rep_weights_live.bin | Bin 6208 -> 6208 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/rep_weights_live.bin b/rep_weights_live.bin index f9ea5db42853222888492bc570e7089fada225a3..fdcdb3fbca1edc36d2d01da3e8e3d65e294c3f35 100644 GIT binary patch delta 2503 zcmYk7c|4TcAIFJgooDPj^URFwJY`8D+_o!Awo4*QWUofqUCVWaT*7>_b*)i~xGEBf zX;Va|WT{*+DNE5%l&<)l{`) z*fO0)5j9QwPtRiD!%G*f9@*KD)@)zz&1s4S7LrPQ*I#C>gV~Sc0GjiC9j1EzVR_ktmp zpGvCe^i2)l98@Ibh#C3l09zEt8kcoKva{l;yX*;*^7L__Y{apKvIw_?-6K_>S|k?h z8lM1*-w~^>3jAtzu&>hdVePf6ACE#Z^2%M#c{S`XNuq?@neS@$gGR)Puf?i`$HiHD zN3pSRWkDcNb44A)5zYzeF+0Yng8QuIVH|mdrMe51Sy1sca=47Wx)=Zx@ukSnYQmN1T;%Rl4%+A(dc$lt8e?OrFak(c|F zSB&u0$(Gh@`#j?>0~J5n#gv}#yyJ>Xc8-$h$DZZcE4!N7C zB>iB$fd1pF>(hT;h}v)oD1tbaVwOSQYjl2V%)M^md!0{#g}O+Js(-LwR=kx+44qAQ z7z_@`i?5k=8$L-l*%9Ro~=M&fMDJgH`Q>82>2w<2?yiPk!$DM{xao_IFm zbMcB}xf3{u;MmEyD{OZ|9fSUc6Gl#|B485Ue!g{Y(tItJG*+*33@hnjoE$N(8#p5UvrM=Sx)j%~Z>6?bxzfDk5_ zs5+?DTiL$oc6Y=^ZTv2XueDhT|8mZmXHM zAWRC>i@Krlr*~qn#4qy_dtMLt4;c4W0T*RCEW7X8^N4)__{>P+z z)1X|HX@&alT0t-_f?K%%CBvHZuDmdlwns*fW7{PCcDYDn)T;62g9LTVlbCrPshpir zTC$q{C_v5z0(sn{U+}pdm~0!&^kKOB)I$a8$4R?ybI#2Y#?$=o401;qSR&@ot@gB| zYE-Bu22L#S5G*S=RI>1$K}iiA2Rre6`9#t814c^Q5;VdZ++}gk#1c`Nj&?B2P4T9#@&} z`wc2E95Y;M`(&Kjx^6Nxem~oo4wi@+lr*f8O&=77Skpd44!Hme1u@75k*T&|`*e-M zRK?a~z>vT(!t>Ln51d__*-B&`Yy&5 z&C#2lZF&5r1=tvs6kV0nDgKo!UT*jNhK4ibqGQrL%8onRE&lP}-YJ*mA9Fw;rv9p= zU9k1HV+I$Mm6zf%pok+@urvQ*b-2!!#puA-TplLU=;xou@b)NiX!YNnclVb98SP4w z>j|E{bm83R&%*usu7bcuiE+jMPI~X^zx#(pikyGI60pcrF&h^Ld)_sHp|Lm33?4Wj zP9wqXG}}*EYHQ`gAx%?u(1`X_NwC~DzK6t0ejH_&rq&6`h$*h$jkcE0FZx^caf*U6 z`Y}=a3haiO1Z-#K^|BWJMmrA}N1g&<{ViR~$U#H%-#k)$dD^ZCD|AaZC!Qsi-;>q?4rI00wJU2s(+^r`D0Vs zAMSLQF%jAF+WpWJM`O%GdG%)<>u25ITG-3eZ^oxrw(ySg09TSKtTBJRZ~u0_ri=%m zB&CK)`h=2grhV({UfC6SxgLf_DIAk{KT}(m_15c3sdw!HA9@XcvJI|fUmgYFiFMkV zi-Cc_Mbj3)%;i%E$JXa~`$Y4v2!JI@Pp%9UZ(JYzZGJmkcAb6-4ycxt_kr{4yD#i4 zi1$3L(+ob6xCP1Imq<}`(LVKl@UGj@RF@c5hK{`6NSWNgt|k7IU~LtzbFZ0Hs_lIC z*0tOAwmc-S_IeeOxg)znoyYcH@CSx8U1+h(bzo%imq0}*l~xl~m4D{1y7jVpz^Ee` z8f0lC(c0#!ThX}xqHwG3VHWgDJCk&1u|XQHVxOrxaTGKn9~lA&87e7#xMG>JH0sMu z)zFGcgk+RiB>e2zi8TEhaeF^2eZ~spB9$vc6Ek(&Cw{jb2v=^ delta 2503 zcmYk7c{r4NAI8TTgL%fTqUIS(wvLIKVv?yis3Utv5wfot%W>jOCRq|{_$E;z`$?En zmL%dRN|F|YFgUgd?J{ZJ-}~SDT-Wo@=emFQeP7@2@422chm$O))nv`j(fvHG0?l5}a>ZoYhfjf(6WU?q^(Fc(`we|op&`tc!+fOYcnT5D? z!TngVsV%%fN;hjZ^O*+5eJr9;Y1~vh;ij_B_K0Ve5RMgu)+Fe)ud0pTe(m6VYYJ$H zUATRUm0LUg#eteom z1qX|bV27Cdo6kx$Yr$iV5B1M$^_~YdVopEwpVS9fuNdWc2SvEd0v9p8!>ZDERn46k zpKNWW)FOc=Od%82NP`c@$pcN1H@LArK?=Y`!84-ngV!uCs@Mrk#>|byfrZ$(;AV~K zLz#E8T-uuatO@jrP)Xd6kFPtaj(a87y>&jx0Z&mJyB9i^^#v1-`cC!iK6mI2&_roj z2sivz&r!T@cqL)>BTqI|035{X*3@(9T4yvOAFYn6g;YSRD3#=%hIy0sw;$WL%Z>9y z2<*h{v5K219nt}>oPPu#AC-{s1&SDsl?Yt?-o>zHHzr?JiF;25o)nH1DH}5ATFn(^ z&%9Es7KDI{bl2_8M`iQ>*_nSZ%zVZ$8+eH27dUxGgxkAsJx4B&R4oFgIF98mPyK4V z5Td4S`BGQSV;l+*yRx3_q8D;?uTN+1HU1t3c&&up;zNdV_#Z7JMO1XSOjMa;puRe^un|?1< zzxj9+xDr$uzUqPDBXk=l({;zbXTX?*I>}}+^yJ;FmFHG?WJ%&aV4*og5tHXlh-9-> zE}=~15oLBX=Ot!0|#Nxci>5+lBPFrdN))T zt&sgAdFz$)vAin|3!O}vKxBQ27HNRs~h=?+WjM@v|fcSU`ped_ob&b!8U=n4aHgsD^iv~ zLHEr&$hJBmW_wV)CE=ZKR-N`u0vG9ys}(RP52Xy{{QLgq z+%W+%^79}c4RzOF678$9jrLEkg+jz!8yEgujnaP+qa6es)X(XA#ER}hiRCWC z{8AgYDxk^Wm_wRrLYSkCqAF20H^bf(>`;c?+YdKR`Ago-bx73nvkl2YGFuwaBd+GF z`oBLJts7?BU|AF=9s2xrDB}asCE6;?T7v->WvJMpf+&5}#oKQ>Et^BqGqr$?+9efAyG+m8l%vh)Ds?ltreJ_6UzJIG;W*0#7!P^BcpHV~-gCjbrU)CZ|#hqb1q zpuEmMuU$L_cCu8`;lQ*}x|(p*hqoLSfdF<2I7U%r-lF!?dR z6*%%#qGQUOd#YB?@9}PMUtSYaH0(LzH`=uFz52WfC2knF$Xwwp(RXj=m`3T-*!Zlav4*Ny{IQA6^>iidc2 z_mV{dgeq#vP``>i8eg2yvS=id3GiIek(5;E?sVj*y-BlP9R&^0Q;ABdovytw9KBYx zq`N05`ZUm#XwZsYiZYH7<1#eLck0HsUy&WDza9z8O6sPL*@Xv|miU54idUdTlb)}& ze^te=qqFCzD34N|<>;RHTV|L4(`N%Gf01lBOpxsO=Ue@?fw3x6tB5}hN`Z%5C9C0# z2VQQtD>f`m6RN>ZnFfW5xS3?g9r`W5^1kEd1~*^Hi`dAVh_TwfBC$5H<9nPH18`xqTDxC)k{Rp`kuFl|F2(wtxWqb&Ko*` From 86207b8d28542c78a8ac4d1d353997c5173a8589 Mon Sep 17 00:00:00 2001 From: renesq <35303112+renesq@users.noreply.github.com> Date: Thu, 27 Jan 2022 16:12:04 +0100 Subject: [PATCH 346/346] Adding timestamp import export capabilities on CLI --- nano/node/cli.cpp | 193 +++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 191 insertions(+), 2 deletions(-) diff --git a/nano/node/cli.cpp b/nano/node/cli.cpp index 1f25083a90..9f2709347a 100644 --- a/nano/node/cli.cpp +++ b/nano/node/cli.cpp @@ -75,6 +75,9 @@ void nano::add_node_options (boost::program_options::options_description & descr ("wallet_remove", "Remove from ") ("wallet_representative_get", "Prints default representative for ") ("wallet_representative_set", "Set as default representative for ") + ("timestamps_import", "Imports a CSV file, overwriting the timestamps recorded in the database (warning: high resource usage).") + ("timestamps_export", "Writes a CSV file with the local timestamp recorded for each hash with timestamp in the database.") + ("timestamps_update_frontiers", "Updates the 'modified' timestamp of each account chain with the stamps of each frontier") ("all", "Only valid with --final_vote_clear") ("account", boost::program_options::value (), "Defines for other commands") ("root", boost::program_options::value (), "Defines for other commands") @@ -1307,9 +1310,195 @@ std::error_code nano::handle_node_options (boost::program_options::variables_map ec = nano::error_cli::invalid_arguments; } } - else + else if (vm.count ("timestamps_import") == 1) + { + if (vm.count ("file") == 1) + { + auto inactive_node = nano::default_inactive_node(data_path, vm); + std::string filename (vm["file"].as ()); + std::ifstream stream; + stream.open (filename.c_str ()); + if (!stream.fail ()) + { + std::cout << "Importing timestamps from " << filename << std::endl; + std::cout << "This may take a while..." << std::endl; + + boost::filesystem::path data_path = vm.count ("data_path") ? boost::filesystem::path (vm["data_path"].as ()) : nano::working_path (); + auto transaction (inactive_node->node->store.tx_begin_read ()); + std::vector> pairs; + pairs.reserve (inactive_node->node->store.block.count(transaction)); + + std::cout << "Reading file..." << std::endl; + std::stringstream contents; + contents << stream.rdbuf (); + std::string line, hash, timestamp; + try + { + while (std::getline (contents, line, '\n')) + { + std::istringstream liness (line); + if (std::getline (liness, hash, ',') && std::getline (liness, timestamp, ',')) + { + pairs.push_back (std::make_pair (nano::block_hash (hash), std::stoull (timestamp))); + } + else + { + std::cerr << "Failure while reading the file, in line " << pairs.size () + 1 << std::endl; + ec = nano::error_cli::generic; + break; + } + } + } + catch (const std::invalid_argument & ex) + { + std::cerr << "Failure while reading the file, timestamp is invalid in line " << pairs.size () + 1 << std::endl; + ec = nano::error_cli::generic; + } + catch (const std::out_of_range & ex) + { + std::cerr << "Failure while reading the file, timestamp is invalid in line " << pairs.size () + 1 << std::endl; + ec = nano::error_cli::generic; + } + catch (...) + { + std::cerr << "Unknown error while reading the file, in line " << pairs.size () + 1 << std::endl; + ec = nano::error_cli::generic; + } + + stream.close (); + if (!ec) + { + std::cout << "Upgrading database..." << std::endl; + + auto block_count (pairs.size ()); + size_t count{ 0 }; + size_t step (std::max (10, std::pow (10.0f, std::floor (std::log10 (block_count / 10.0))))); + auto transaction (inactive_node->node->store.tx_begin_write ()); + for (auto i (pairs.begin ()), n (pairs.end ()); i != n; ++i, ++count) + { + auto block (inactive_node->node->store.block.get(transaction, i->first)); + if (block) + { + auto sideband_with_stamp = block->sideband (); + sideband_with_stamp.timestamp = i->second; + block->sideband_set (sideband_with_stamp); + inactive_node->node->store.block.put (transaction, i->first, *block); + + if (count > 0 && count % step == 0 || count == block_count) + { + std::cout << count << "/" << block_count << std::endl; + } + } + else + { + std::cerr << "Skipping hash not in database: " << i->first.to_string () << std::endl; + } + } + std::cout << "Completed importing timestamps" << std::endl; + } + } + else + { + std::cerr << "Unable to open \n"; + ec = nano::error_cli::invalid_arguments; + } + } + else + { + std::cerr << "timestamps_import requires one option\n"; + ec = nano::error_cli::invalid_arguments; + } + } + else if (vm.count ("timestamps_export") == 1) + { + auto inactive_node = nano::default_inactive_node(data_path, vm); + + boost::filesystem::path data_path = vm.count ("data_path") ? boost::filesystem::path (vm["data_path"].as ()) : nano::working_path (); + auto timestamps_path = data_path / "timestamps.csv"; + + std::cout << "Exporting timestamps in " << data_path << std::endl; + std::cout << "This may take a while..." << std::endl; + + auto transaction (inactive_node->node->store.tx_begin_read ()); + auto accounts (inactive_node->node->store.account.count (transaction)); + if (accounts > 0) + { + size_t count{ 0 }; + size_t step (std::max (10, std::pow (10.0f, std::floor (std::log10 (accounts / 10.0))))); + std::vector> pairs; + pairs.reserve (inactive_node->node->store.block.count (transaction)); + + std::cout << "Reading database..." << std::endl; + + for (auto i (inactive_node->node->store.account.begin (transaction)), n (inactive_node->node->store.account.end ()); i != n; ++i, ++count) + { + auto hash (i->second.head); + auto block (inactive_node->node->store.block.get (transaction, hash)); + while (block != nullptr) + { + if (block->sideband ().timestamp != 0) + { + pairs.push_back (std::make_pair (hash, block->sideband ().timestamp)); + } + hash = block->previous (); + block = inactive_node->node->store.block.get (transaction, hash); + } + if (count > 0 && count % step == 0 || count == accounts) + { + std::cout << count << "/" << accounts << std::endl; + } + } + if (pairs.empty ()) + { + std::cout << "No timestamps found in the database" << std::endl; + } + else + { + try + { + boost::filesystem::ofstream stream{ timestamps_path }; + std::cout << "Writing to file..." << std::endl; + for (auto & pair : pairs) + { + stream << pair.first.to_string () << "," << pair.second << std::endl; + } + std::cout << "Completed exporting timestamps, the file can be found in " << timestamps_path << std::endl; + } + catch (const boost::filesystem::filesystem_error & ex) + { + std::cerr << "Timestamps export failed during a file operation: " << ex.what () << std::endl; + } + catch (...) + { + std::cerr << "Timestamps export failed (unknown reason)" << std::endl; + } + } + } + else + { + std::cout << "Empty database" << std::endl; + } + } + else if (vm.count ("timestamps_update_frontiers") == 1) { - ec = nano::error_cli::unknown_command; + auto inactive_node = nano::default_inactive_node(data_path, vm); + + boost::filesystem::path data_path = vm.count ("data_path") ? boost::filesystem::path (vm["data_path"].as ()) : nano::working_path (); + + std::cout << "Updating account information..." << std::endl; + + auto transaction (inactive_node->node->store.tx_begin_write ()); + + for (auto i (inactive_node->node->store.account.begin (transaction)), n (inactive_node->node->store.account.end ()); i != n; ++i) + { + auto block (inactive_node->node->store.block.get (transaction, i->second.head)); + i->second.modified = block->sideband ().timestamp; + inactive_node->node->store.account.put (transaction, i->first, i->second); + } + } + else + { + ec = nano::error_cli::unknown_command; } return ec;