mirror of
https://github.com/ElementsProject/elements.git
synced 2026-08-17 13:07:54 +02:00
Finish removing 'recheckpeginblockinterval'; move MainchainRPCCheck
- Finish removing all references to 'recheckpeginblockinterval', including documentation and tests. - Remove periodic calls to MainchainRPCCheck; use it only at startup (and refactor accordingly to simplify logic.) - Move MainchainRPCCheck from validation.h/cpp (public) to an internal helper function of init.cpp. - Comment out definition of 'revalidation queue' type in txdb, to suppress "unused variable" warning. (Leave it visible to avoid future reuse.)
This commit is contained in:
parent
313f73d5b2
commit
d5042b41c8
4 changed files with 81 additions and 85 deletions
|
|
@ -5735,63 +5735,3 @@ void ChainstateManager::MaybeRebalanceCaches()
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
// ELEMENTS:
|
||||
/* This function checks that the RPC connection to the parent chain node
|
||||
* can be attained, and is returning back reasonable answers.
|
||||
*/
|
||||
bool MainchainRPCCheck(const bool init)
|
||||
{
|
||||
// Check for working and valid rpc
|
||||
if (gArgs.GetBoolArg("-validatepegin", Params().GetConsensus().has_parent_chain)) {
|
||||
// During init try until a non-RPC_IN_WARMUP result
|
||||
while (true) {
|
||||
try {
|
||||
// The first thing we have to check is the version of the node.
|
||||
UniValue params(UniValue::VARR);
|
||||
UniValue reply = CallMainChainRPC("getnetworkinfo", params);
|
||||
UniValue error = reply["error"];
|
||||
if (!error.isNull()) {
|
||||
// On the first call, it's possible to node is still in
|
||||
// warmup; in that case, just wait and retry.
|
||||
// If this is not the initial call, just report failure.
|
||||
if (init && error["code"].get_int() == RPC_IN_WARMUP) {
|
||||
UninterruptibleSleep(std::chrono::milliseconds{1000});
|
||||
continue;
|
||||
}
|
||||
else {
|
||||
LogPrintf("ERROR: Mainchain daemon RPC check returned 'error' response.\n");
|
||||
return false;
|
||||
}
|
||||
}
|
||||
UniValue result = reply["result"];
|
||||
if (!result.isObject() || !result.get_obj()["version"].isNum() ||
|
||||
result.get_obj()["version"].get_int() < MIN_MAINCHAIN_NODE_VERSION) {
|
||||
LogPrintf("ERROR: Parent chain daemon too old; need Bitcoin Core version 0.16.3 or newer.\n");
|
||||
return false;
|
||||
}
|
||||
|
||||
// Then check the genesis block to correspond to parent chain.
|
||||
params.push_back(UniValue(0));
|
||||
reply = CallMainChainRPC("getblockhash", params);
|
||||
error = reply["error"];
|
||||
if (!error.isNull()) {
|
||||
LogPrintf("ERROR: Mainchain daemon RPC check returned 'error' response.\n");
|
||||
return false;
|
||||
}
|
||||
result = reply["result"];
|
||||
if (!result.isStr() || result.get_str() != Params().ParentGenesisBlockHash().GetHex()) {
|
||||
LogPrintf("ERROR: Invalid parent genesis block hash response via RPC. Contacting wrong parent daemon?\n");
|
||||
return false;
|
||||
}
|
||||
} catch (const std::runtime_error& re) {
|
||||
LogPrintf("ERROR: Failure connecting to mainchain daemon RPC: %s\n", std::string(re.what()));
|
||||
return false;
|
||||
}
|
||||
// Success
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue