Merge pull request #5728

6560bfa rpc: get_block_template add optional extra_nonce (jtgrassie)
This commit is contained in:
luigi1111 2019-08-19 17:33:08 -05:00
commit 56b98c7003
No known key found for this signature in database
GPG key ID: F4ACA0183641E010
2 changed files with 27 additions and 1 deletions

View file

@ -1329,6 +1329,20 @@ namespace cryptonote
return false; return false;
} }
if(req.reserve_size && !req.extra_nonce.empty())
{
error_resp.code = CORE_RPC_ERROR_CODE_WRONG_PARAM;
error_resp.message = "Cannot specify both a reserve_size and an extra_nonce";
return false;
}
if(req.extra_nonce.size() > 510)
{
error_resp.code = CORE_RPC_ERROR_CODE_TOO_BIG_RESERVE_SIZE;
error_resp.message = "Too big extra_nonce size, maximum 510 hex chars";
return false;
}
cryptonote::address_parse_info info; cryptonote::address_parse_info info;
if(!req.wallet_address.size() || !cryptonote::get_account_address_from_str(info, nettype(), req.wallet_address)) if(!req.wallet_address.size() || !cryptonote::get_account_address_from_str(info, nettype(), req.wallet_address))
@ -1346,7 +1360,17 @@ namespace cryptonote
block b; block b;
cryptonote::blobdata blob_reserve; cryptonote::blobdata blob_reserve;
blob_reserve.resize(req.reserve_size, 0); if(!req.extra_nonce.empty())
{
if(!string_tools::parse_hexstr_to_binbuff(req.extra_nonce, blob_reserve))
{
error_resp.code = CORE_RPC_ERROR_CODE_WRONG_PARAM;
error_resp.message = "Parameter extra_nonce should be a hex string";
return false;
}
}
else
blob_reserve.resize(req.reserve_size, 0);
cryptonote::difficulty_type wdiff; cryptonote::difficulty_type wdiff;
crypto::hash prev_block; crypto::hash prev_block;
if (!req.prev_block.empty()) if (!req.prev_block.empty())

View file

@ -924,11 +924,13 @@ namespace cryptonote
uint64_t reserve_size; //max 255 bytes uint64_t reserve_size; //max 255 bytes
std::string wallet_address; std::string wallet_address;
std::string prev_block; std::string prev_block;
std::string extra_nonce;
BEGIN_KV_SERIALIZE_MAP() BEGIN_KV_SERIALIZE_MAP()
KV_SERIALIZE(reserve_size) KV_SERIALIZE(reserve_size)
KV_SERIALIZE(wallet_address) KV_SERIALIZE(wallet_address)
KV_SERIALIZE(prev_block) KV_SERIALIZE(prev_block)
KV_SERIALIZE(extra_nonce)
END_KV_SERIALIZE_MAP() END_KV_SERIALIZE_MAP()
}; };
typedef epee::misc_utils::struct_init<request_t> request; typedef epee::misc_utils::struct_init<request_t> request;