From 8f8430c86fe35749c225131fa52d771c3b245ca0 Mon Sep 17 00:00:00 2001 From: Shryder Date: Tue, 3 Aug 2021 03:20:25 +0100 Subject: [PATCH] Implement "accounts_representatives" RPC (#3409) --- 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 2760bc3e34..127d93c4dc 100644 --- a/nano/node/json_handler.cpp +++ b/nano/node/json_handler.cpp @@ -903,6 +903,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) { @@ -5158,6 +5178,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 3bde45eda3..a2ed34c2a2 100644 --- a/nano/rpc_test/rpc.cpp +++ b/nano/rpc_test/rpc.cpp @@ -2969,6 +2969,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;