aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorfurszy <matiasfurszyfer@protonmail.com>2022-10-14 20:59:48 -0300
committerfurszy <matiasfurszyfer@protonmail.com>2023-04-30 19:26:11 +0100
commitb922f6b5262884f42d7483f1e9af35650bdb53a7 (patch)
tree716dd07d17507e93d84e5dff303b885e439dec1f
parentce50acc54fa313a92d48ed03e46ce8aabcf267e5 (diff)
rpc: scanblocks, add "completed" flag to the result obj
To tell the user whether the process was aborted or not. Plus, as the process can be aborted prior to the end range, have also changed the "to_height" result value to return the last scanned block instead of the end range block.
-rw-r--r--src/rpc/blockchain.cpp11
-rwxr-xr-xtest/functional/rpc_scanblocks.py1
2 files changed, 7 insertions, 5 deletions
diff --git a/src/rpc/blockchain.cpp b/src/rpc/blockchain.cpp
index 301cfbfb25..9d8e0ceb61 100644
--- a/src/rpc/blockchain.cpp
+++ b/src/rpc/blockchain.cpp
@@ -2321,6 +2321,7 @@ static RPCHelpMan scanblocks()
{RPCResult::Type::ARR, "relevant_blocks", "Blocks that may have matched a scanobject.", {
{RPCResult::Type::STR_HEX, "blockhash", "A relevant blockhash"},
}},
+ {RPCResult::Type::BOOL, "completed", "true if the scan process was not aborted"}
}},
RPCResult{"when action=='status' and a scan is currently in progress", RPCResult::Type::OBJ, "", "", {
{RPCResult::Type::NUM, "progress", "Approximate percent complete"},
@@ -2358,8 +2359,7 @@ static RPCHelpMan scanblocks()
// set the abort flag
g_scanfilter_should_abort_scan = true;
return true;
- }
- else if (request.params[0].get_str() == "start") {
+ } else if (request.params[0].get_str() == "start") {
BlockFiltersScanReserver reserver;
if (!reserver.reserve()) {
throw JSONRPCError(RPC_INVALID_PARAMETER, "Scan already in progress, use action \"abort\" or \"status\"");
@@ -2424,12 +2424,13 @@ static RPCHelpMan scanblocks()
g_scanfilter_should_abort_scan = false;
g_scanfilter_progress = 0;
g_scanfilter_progress_height = start_block_height;
+ bool completed = true;
const CBlockIndex* end_range = nullptr;
do {
node.rpc_interruption_point(); // allow a clean shutdown
if (g_scanfilter_should_abort_scan) {
- LogPrintf("scanblocks RPC aborted at height %d.\n", end_range->nHeight);
+ completed = false;
break;
}
@@ -2453,7 +2454,6 @@ static RPCHelpMan scanblocks()
}
blocks.push_back(filter.GetBlockHash().GetHex());
- LogPrint(BCLog::RPC, "scanblocks: found match in %s\n", filter.GetBlockHash().GetHex());
}
}
}
@@ -2472,8 +2472,9 @@ static RPCHelpMan scanblocks()
} while (start_index != stop_block);
ret.pushKV("from_height", start_block_height);
- ret.pushKV("to_height", stop_block->nHeight);
+ ret.pushKV("to_height", start_index->nHeight); // start_index is always the last scanned block here
ret.pushKV("relevant_blocks", blocks);
+ ret.pushKV("completed", completed);
}
else {
throw JSONRPCError(RPC_INVALID_PARAMETER, strprintf("Invalid action '%s'", request.params[0].get_str()));
diff --git a/test/functional/rpc_scanblocks.py b/test/functional/rpc_scanblocks.py
index 126e95362b..51157a3b7e 100755
--- a/test/functional/rpc_scanblocks.py
+++ b/test/functional/rpc_scanblocks.py
@@ -48,6 +48,7 @@ class ScanblocksTest(BitcoinTestFramework):
assert blockhash in out['relevant_blocks']
assert_equal(height, out['to_height'])
assert_equal(0, out['from_height'])
+ assert_equal(True, out['completed'])
# mine another block
blockhash_new = self.generate(node, 1)[0]