Daemon RPC: high_height_ok req boolean field /getblocks.bin
Behavior before: when start_height > chain tip, response fails Behavior after: when req.high_height_ok is true && req.start_height > chain tip, server rerturns a successful response that includes chain height
This commit is contained in:
parent
cc73fe7116
commit
356829a198
|
@ -702,12 +702,20 @@ namespace cryptonote
|
||||||
if (get_blocks)
|
if (get_blocks)
|
||||||
{
|
{
|
||||||
// quick check for noop
|
// quick check for noop
|
||||||
if (!req.block_ids.empty())
|
if (req.start_height > 0 || !req.block_ids.empty())
|
||||||
{
|
{
|
||||||
uint64_t last_block_height;
|
uint64_t last_block_height;
|
||||||
crypto::hash last_block_hash;
|
crypto::hash last_block_hash;
|
||||||
m_core.get_blockchain_top(last_block_height, last_block_hash);
|
m_core.get_blockchain_top(last_block_height, last_block_hash);
|
||||||
if (last_block_hash == req.block_ids.front())
|
|
||||||
|
if (!req.high_height_ok && req.start_height > last_block_height)
|
||||||
|
{
|
||||||
|
res.status = "Failed";
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (req.start_height > last_block_height ||
|
||||||
|
(!req.block_ids.empty() && last_block_hash == req.block_ids.front()))
|
||||||
{
|
{
|
||||||
res.start_height = 0;
|
res.start_height = 0;
|
||||||
res.current_height = last_block_height + 1;
|
res.current_height = last_block_height + 1;
|
||||||
|
|
|
@ -88,7 +88,7 @@ namespace cryptonote
|
||||||
// advance which version they will stop working with
|
// advance which version they will stop working with
|
||||||
// Don't go over 32767 for any of these
|
// Don't go over 32767 for any of these
|
||||||
#define CORE_RPC_VERSION_MAJOR 3
|
#define CORE_RPC_VERSION_MAJOR 3
|
||||||
#define CORE_RPC_VERSION_MINOR 14
|
#define CORE_RPC_VERSION_MINOR 15
|
||||||
#define MAKE_CORE_RPC_VERSION(major,minor) (((major)<<16)|(minor))
|
#define MAKE_CORE_RPC_VERSION(major,minor) (((major)<<16)|(minor))
|
||||||
#define CORE_RPC_VERSION MAKE_CORE_RPC_VERSION(CORE_RPC_VERSION_MAJOR, CORE_RPC_VERSION_MINOR)
|
#define CORE_RPC_VERSION MAKE_CORE_RPC_VERSION(CORE_RPC_VERSION_MAJOR, CORE_RPC_VERSION_MINOR)
|
||||||
|
|
||||||
|
@ -176,6 +176,7 @@ namespace cryptonote
|
||||||
uint64_t start_height;
|
uint64_t start_height;
|
||||||
bool prune;
|
bool prune;
|
||||||
bool no_miner_tx;
|
bool no_miner_tx;
|
||||||
|
bool high_height_ok;
|
||||||
uint64_t pool_info_since;
|
uint64_t pool_info_since;
|
||||||
BEGIN_KV_SERIALIZE_MAP()
|
BEGIN_KV_SERIALIZE_MAP()
|
||||||
KV_SERIALIZE_PARENT(rpc_access_request_base)
|
KV_SERIALIZE_PARENT(rpc_access_request_base)
|
||||||
|
@ -184,6 +185,7 @@ namespace cryptonote
|
||||||
KV_SERIALIZE(start_height)
|
KV_SERIALIZE(start_height)
|
||||||
KV_SERIALIZE(prune)
|
KV_SERIALIZE(prune)
|
||||||
KV_SERIALIZE_OPT(no_miner_tx, false)
|
KV_SERIALIZE_OPT(no_miner_tx, false)
|
||||||
|
KV_SERIALIZE_OPT(high_height_ok, false) // default false maintains backwards compatibility for clients that relied on failure on high height
|
||||||
KV_SERIALIZE_OPT(pool_info_since, (uint64_t)0)
|
KV_SERIALIZE_OPT(pool_info_since, (uint64_t)0)
|
||||||
END_KV_SERIALIZE_MAP()
|
END_KV_SERIALIZE_MAP()
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue