Default include only confirmed data for RPC supporting it (#3276)

This commit is contained in:
Sergey Kroshnin 2021-05-12 15:37:30 +03:00 committed by GitHub
commit 16bd1d5f7c
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 30 additions and 20 deletions

View file

@ -514,7 +514,7 @@ void nano::json_handler::account_balance ()
auto account (account_impl ());
if (!ec)
{
const bool include_only_confirmed = request.get<bool> ("include_only_confirmed", false);
const bool include_only_confirmed = request.get<bool> ("include_only_confirmed", true);
auto balance (node.balance_pending (account, include_only_confirmed));
response_l.put ("balance", balance.first.convert_to<std::string> ());
response_l.put ("pending", balance.second.convert_to<std::string> ());
@ -945,7 +945,7 @@ void nano::json_handler::accounts_pending ()
auto threshold (threshold_optional_impl ());
const bool source = request.get<bool> ("source", false);
const bool include_active = request.get<bool> ("include_active", false);
const bool include_only_confirmed = request.get<bool> ("include_only_confirmed", false);
const bool include_only_confirmed = request.get<bool> ("include_only_confirmed", true);
const bool sorting = request.get<bool> ("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;
@ -2860,7 +2860,7 @@ void nano::json_handler::pending ()
const bool source = request.get<bool> ("source", false);
const bool min_version = request.get<bool> ("min_version", false);
const bool include_active = request.get<bool> ("include_active", false);
const bool include_only_confirmed = request.get<bool> ("include_only_confirmed", false);
const bool include_only_confirmed = request.get<bool> ("include_only_confirmed", true);
const bool sorting = request.get<bool> ("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;
@ -2959,7 +2959,7 @@ void nano::json_handler::pending_exists ()
{
auto hash (hash_impl ());
const bool include_active = request.get<bool> ("include_active", false);
const bool include_only_confirmed = request.get<bool> ("include_only_confirmed", false);
const bool include_only_confirmed = request.get<bool> ("include_only_confirmed", true);
if (!ec)
{
auto transaction (node.store.tx_begin_read ());
@ -4564,7 +4564,7 @@ void nano::json_handler::wallet_pending ()
const bool source = request.get<bool> ("source", false);
const bool min_version = request.get<bool> ("min_version", false);
const bool include_active = request.get<bool> ("include_active", false);
const bool include_only_confirmed = request.get<bool> ("include_only_confirmed", false);
const bool include_only_confirmed = request.get<bool> ("include_only_confirmed", true);
if (!ec)
{
boost::property_tree::ptree pending;

View file

@ -211,18 +211,8 @@ TEST (rpc, account_balance)
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<std::string> ("balance"));
ASSERT_EQ ("340282366920938463463374607431768211454", balance_text);
std::string pending_text (response.json.get<std::string> ("pending"));
ASSERT_EQ ("1", pending_text);
}
// The send and pending should be unconfirmed
request.put ("include_only_confirmed", true);
{
test_response response (request, rpc.config.port, system.io_ctx);
ASSERT_TIMELY (5s, response.status != 0);
@ -232,6 +222,17 @@ TEST (rpc, account_balance)
std::string pending_text (response.json.get<std::string> ("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<std::string> ("balance"));
ASSERT_EQ ("340282366920938463463374607431768211454", balance_text);
std::string pending_text (response.json.get<std::string> ("pending"));
ASSERT_EQ ("1", pending_text);
}
}
TEST (rpc, account_block_count)
@ -2307,12 +2308,15 @@ TEST (rpc, pending)
ASSERT_EQ (size, response.json.get_child ("blocks").size ());
};
request.put ("include_only_confirmed", "true");
check_block_response_count (1);
scoped_thread_name_io.reset ();
reset_confirmation_height (system.nodes.front ()->store, block1->account ());
scoped_thread_name_io.renew ();
check_block_response_count (0);
request.put ("include_only_confirmed", "false");
scoped_thread_name_io.renew ();
check_block_response_count (1);
request.put ("include_only_confirmed", "true");
// Sorting with a smaller count than total should give absolute sorted amounts
scoped_thread_name_io.reset ();
@ -4055,12 +4059,14 @@ TEST (rpc, accounts_pending)
ASSERT_EQ (sources[block1->hash ()], nano::dev_genesis_key.pub);
}
request.put ("include_only_confirmed", "true");
check_block_response_count (system, rpc, request, 1);
scoped_thread_name_io.reset ();
reset_confirmation_height (system.nodes.front ()->store, block1->account ());
scoped_thread_name_io.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);
}
TEST (rpc, blocks)
@ -4227,12 +4233,14 @@ TEST (rpc, pending_exists)
request.put ("hash", block1->hash ().to_string ());
pending_exists ("1");
request.put ("include_only_confirmed", "true");
pending_exists ("1");
scoped_thread_name_io.reset ();
reset_confirmation_height (node->store, block1->account ());
scoped_thread_name_io.renew ();
pending_exists ("0");
request.put ("include_only_confirmed", "false");
scoped_thread_name_io.renew ();
pending_exists ("1");
}
TEST (rpc, wallet_pending)
@ -4246,7 +4254,7 @@ TEST (rpc, wallet_pending)
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)
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)
{
system0.poll ();
++iterations;
@ -4341,7 +4349,6 @@ TEST (rpc, wallet_pending)
ASSERT_EQ (amounts[block1->hash ()], 100);
ASSERT_EQ (sources[block1->hash ()], nano::dev_genesis_key.pub);
request.put ("include_only_confirmed", "true");
check_block_response_count (system0, rpc, request, 1);
scoped_thread_name_io.reset ();
reset_confirmation_height (system0.nodes.front ()->store, block1->account ());
@ -4356,6 +4363,9 @@ TEST (rpc, wallet_pending)
ASSERT_EQ (200, response.status);
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);
}
TEST (rpc, receive_minimum)