mirror of
https://github.com/monero-project/monero.git
synced 2024-12-13 20:06:32 +02:00
Merge pull request #3561
353e9c0
Core RPC: optionally add POW hash to block_header_response (stoffu)
This commit is contained in:
commit
737712c0c6
@ -74,6 +74,7 @@ namespace {
|
|||||||
<< "depth: " << boost::lexical_cast<std::string>(header.depth) << std::endl
|
<< "depth: " << boost::lexical_cast<std::string>(header.depth) << std::endl
|
||||||
<< "hash: " << header.hash << std::endl
|
<< "hash: " << header.hash << std::endl
|
||||||
<< "difficulty: " << boost::lexical_cast<std::string>(header.difficulty) << std::endl
|
<< "difficulty: " << boost::lexical_cast<std::string>(header.difficulty) << std::endl
|
||||||
|
<< "POW hash: " << header.pow_hash << std::endl
|
||||||
<< "reward: " << boost::lexical_cast<std::string>(header.reward);
|
<< "reward: " << boost::lexical_cast<std::string>(header.reward);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -654,6 +655,7 @@ bool t_rpc_command_executor::print_block_by_hash(crypto::hash block_hash) {
|
|||||||
epee::json_rpc::error error_resp;
|
epee::json_rpc::error error_resp;
|
||||||
|
|
||||||
req.hash = epee::string_tools::pod_to_hex(block_hash);
|
req.hash = epee::string_tools::pod_to_hex(block_hash);
|
||||||
|
req.fill_pow_hash = true;
|
||||||
|
|
||||||
std::string fail_message = "Unsuccessful";
|
std::string fail_message = "Unsuccessful";
|
||||||
|
|
||||||
@ -685,6 +687,7 @@ bool t_rpc_command_executor::print_block_by_height(uint64_t height) {
|
|||||||
epee::json_rpc::error error_resp;
|
epee::json_rpc::error error_resp;
|
||||||
|
|
||||||
req.height = height;
|
req.height = height;
|
||||||
|
req.fill_pow_hash = true;
|
||||||
|
|
||||||
std::string fail_message = "Unsuccessful";
|
std::string fail_message = "Unsuccessful";
|
||||||
|
|
||||||
|
@ -1219,7 +1219,7 @@ namespace cryptonote
|
|||||||
return reward;
|
return reward;
|
||||||
}
|
}
|
||||||
//------------------------------------------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------------------------------------------
|
||||||
bool core_rpc_server::fill_block_header_response(const block& blk, bool orphan_status, uint64_t height, const crypto::hash& hash, block_header_response& response)
|
bool core_rpc_server::fill_block_header_response(const block& blk, bool orphan_status, uint64_t height, const crypto::hash& hash, block_header_response& response, bool fill_pow_hash)
|
||||||
{
|
{
|
||||||
PERF_TIMER(fill_block_header_response);
|
PERF_TIMER(fill_block_header_response);
|
||||||
response.major_version = blk.major_version;
|
response.major_version = blk.major_version;
|
||||||
@ -1235,6 +1235,7 @@ namespace cryptonote
|
|||||||
response.reward = get_block_reward(blk);
|
response.reward = get_block_reward(blk);
|
||||||
response.block_size = m_core.get_blockchain_storage().get_db().get_block_size(height);
|
response.block_size = m_core.get_blockchain_storage().get_db().get_block_size(height);
|
||||||
response.num_txes = blk.tx_hashes.size();
|
response.num_txes = blk.tx_hashes.size();
|
||||||
|
response.pow_hash = fill_pow_hash ? string_tools::pod_to_hex(get_block_longhash(blk, height)) : "";
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
//------------------------------------------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------------------------------------------
|
||||||
@ -1324,7 +1325,7 @@ namespace cryptonote
|
|||||||
error_resp.message = "Internal error: can't get last block.";
|
error_resp.message = "Internal error: can't get last block.";
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
bool response_filled = fill_block_header_response(last_block, false, last_block_height, last_block_hash, res.block_header);
|
bool response_filled = fill_block_header_response(last_block, false, last_block_height, last_block_hash, res.block_header, req.fill_pow_hash);
|
||||||
if (!response_filled)
|
if (!response_filled)
|
||||||
{
|
{
|
||||||
error_resp.code = CORE_RPC_ERROR_CODE_INTERNAL_ERROR;
|
error_resp.code = CORE_RPC_ERROR_CODE_INTERNAL_ERROR;
|
||||||
@ -1365,7 +1366,7 @@ namespace cryptonote
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
uint64_t block_height = boost::get<txin_gen>(blk.miner_tx.vin.front()).height;
|
uint64_t block_height = boost::get<txin_gen>(blk.miner_tx.vin.front()).height;
|
||||||
bool response_filled = fill_block_header_response(blk, orphan, block_height, block_hash, res.block_header);
|
bool response_filled = fill_block_header_response(blk, orphan, block_height, block_hash, res.block_header, req.fill_pow_hash);
|
||||||
if (!response_filled)
|
if (!response_filled)
|
||||||
{
|
{
|
||||||
error_resp.code = CORE_RPC_ERROR_CODE_INTERNAL_ERROR;
|
error_resp.code = CORE_RPC_ERROR_CODE_INTERNAL_ERROR;
|
||||||
@ -1414,7 +1415,7 @@ namespace cryptonote
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
res.headers.push_back(block_header_response());
|
res.headers.push_back(block_header_response());
|
||||||
bool response_filled = fill_block_header_response(blk, false, block_height, block_hash, res.headers.back());
|
bool response_filled = fill_block_header_response(blk, false, block_height, block_hash, res.headers.back(), req.fill_pow_hash);
|
||||||
if (!response_filled)
|
if (!response_filled)
|
||||||
{
|
{
|
||||||
error_resp.code = CORE_RPC_ERROR_CODE_INTERNAL_ERROR;
|
error_resp.code = CORE_RPC_ERROR_CODE_INTERNAL_ERROR;
|
||||||
@ -1447,7 +1448,7 @@ namespace cryptonote
|
|||||||
error_resp.message = "Internal error: can't get block by height. Height = " + std::to_string(req.height) + '.';
|
error_resp.message = "Internal error: can't get block by height. Height = " + std::to_string(req.height) + '.';
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
bool response_filled = fill_block_header_response(blk, false, req.height, block_hash, res.block_header);
|
bool response_filled = fill_block_header_response(blk, false, req.height, block_hash, res.block_header, req.fill_pow_hash);
|
||||||
if (!response_filled)
|
if (!response_filled)
|
||||||
{
|
{
|
||||||
error_resp.code = CORE_RPC_ERROR_CODE_INTERNAL_ERROR;
|
error_resp.code = CORE_RPC_ERROR_CODE_INTERNAL_ERROR;
|
||||||
@ -1501,7 +1502,7 @@ namespace cryptonote
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
uint64_t block_height = boost::get<txin_gen>(blk.miner_tx.vin.front()).height;
|
uint64_t block_height = boost::get<txin_gen>(blk.miner_tx.vin.front()).height;
|
||||||
bool response_filled = fill_block_header_response(blk, orphan, block_height, block_hash, res.block_header);
|
bool response_filled = fill_block_header_response(blk, orphan, block_height, block_hash, res.block_header, req.fill_pow_hash);
|
||||||
if (!response_filled)
|
if (!response_filled)
|
||||||
{
|
{
|
||||||
error_resp.code = CORE_RPC_ERROR_CODE_INTERNAL_ERROR;
|
error_resp.code = CORE_RPC_ERROR_CODE_INTERNAL_ERROR;
|
||||||
|
@ -224,7 +224,7 @@ private:
|
|||||||
|
|
||||||
//utils
|
//utils
|
||||||
uint64_t get_block_reward(const block& blk);
|
uint64_t get_block_reward(const block& blk);
|
||||||
bool fill_block_header_response(const block& blk, bool orphan_status, uint64_t height, const crypto::hash& hash, block_header_response& response);
|
bool fill_block_header_response(const block& blk, bool orphan_status, uint64_t height, const crypto::hash& hash, block_header_response& response, bool fill_pow_hash);
|
||||||
enum invoke_http_mode { JON, BIN, JON_RPC };
|
enum invoke_http_mode { JON, BIN, JON_RPC };
|
||||||
template <typename COMMAND_TYPE>
|
template <typename COMMAND_TYPE>
|
||||||
bool use_bootstrap_daemon_if_necessary(const invoke_http_mode &mode, const std::string &command_name, const typename COMMAND_TYPE::request& req, typename COMMAND_TYPE::response& res, bool &r);
|
bool use_bootstrap_daemon_if_necessary(const invoke_http_mode &mode, const std::string &command_name, const typename COMMAND_TYPE::request& req, typename COMMAND_TYPE::response& res, bool &r);
|
||||||
|
@ -49,7 +49,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 1
|
#define CORE_RPC_VERSION_MAJOR 1
|
||||||
#define CORE_RPC_VERSION_MINOR 19
|
#define CORE_RPC_VERSION_MINOR 20
|
||||||
#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)
|
||||||
|
|
||||||
@ -1165,6 +1165,7 @@ namespace cryptonote
|
|||||||
uint64_t reward;
|
uint64_t reward;
|
||||||
uint64_t block_size;
|
uint64_t block_size;
|
||||||
uint64_t num_txes;
|
uint64_t num_txes;
|
||||||
|
std::string pow_hash;
|
||||||
|
|
||||||
BEGIN_KV_SERIALIZE_MAP()
|
BEGIN_KV_SERIALIZE_MAP()
|
||||||
KV_SERIALIZE(major_version)
|
KV_SERIALIZE(major_version)
|
||||||
@ -1180,6 +1181,7 @@ namespace cryptonote
|
|||||||
KV_SERIALIZE(reward)
|
KV_SERIALIZE(reward)
|
||||||
KV_SERIALIZE(block_size)
|
KV_SERIALIZE(block_size)
|
||||||
KV_SERIALIZE(num_txes)
|
KV_SERIALIZE(num_txes)
|
||||||
|
KV_SERIALIZE(pow_hash)
|
||||||
END_KV_SERIALIZE_MAP()
|
END_KV_SERIALIZE_MAP()
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1187,7 +1189,10 @@ namespace cryptonote
|
|||||||
{
|
{
|
||||||
struct request
|
struct request
|
||||||
{
|
{
|
||||||
|
bool fill_pow_hash;
|
||||||
|
|
||||||
BEGIN_KV_SERIALIZE_MAP()
|
BEGIN_KV_SERIALIZE_MAP()
|
||||||
|
KV_SERIALIZE_OPT(fill_pow_hash, false);
|
||||||
END_KV_SERIALIZE_MAP()
|
END_KV_SERIALIZE_MAP()
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1211,9 +1216,11 @@ namespace cryptonote
|
|||||||
struct request
|
struct request
|
||||||
{
|
{
|
||||||
std::string hash;
|
std::string hash;
|
||||||
|
bool fill_pow_hash;
|
||||||
|
|
||||||
BEGIN_KV_SERIALIZE_MAP()
|
BEGIN_KV_SERIALIZE_MAP()
|
||||||
KV_SERIALIZE(hash)
|
KV_SERIALIZE(hash)
|
||||||
|
KV_SERIALIZE_OPT(fill_pow_hash, false);
|
||||||
END_KV_SERIALIZE_MAP()
|
END_KV_SERIALIZE_MAP()
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1237,9 +1244,11 @@ namespace cryptonote
|
|||||||
struct request
|
struct request
|
||||||
{
|
{
|
||||||
uint64_t height;
|
uint64_t height;
|
||||||
|
bool fill_pow_hash;
|
||||||
|
|
||||||
BEGIN_KV_SERIALIZE_MAP()
|
BEGIN_KV_SERIALIZE_MAP()
|
||||||
KV_SERIALIZE(height)
|
KV_SERIALIZE(height)
|
||||||
|
KV_SERIALIZE_OPT(fill_pow_hash, false);
|
||||||
END_KV_SERIALIZE_MAP()
|
END_KV_SERIALIZE_MAP()
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1264,10 +1273,12 @@ namespace cryptonote
|
|||||||
{
|
{
|
||||||
std::string hash;
|
std::string hash;
|
||||||
uint64_t height;
|
uint64_t height;
|
||||||
|
bool fill_pow_hash;
|
||||||
|
|
||||||
BEGIN_KV_SERIALIZE_MAP()
|
BEGIN_KV_SERIALIZE_MAP()
|
||||||
KV_SERIALIZE(hash)
|
KV_SERIALIZE(hash)
|
||||||
KV_SERIALIZE(height)
|
KV_SERIALIZE(height)
|
||||||
|
KV_SERIALIZE_OPT(fill_pow_hash, false);
|
||||||
END_KV_SERIALIZE_MAP()
|
END_KV_SERIALIZE_MAP()
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1620,10 +1631,12 @@ namespace cryptonote
|
|||||||
{
|
{
|
||||||
uint64_t start_height;
|
uint64_t start_height;
|
||||||
uint64_t end_height;
|
uint64_t end_height;
|
||||||
|
bool fill_pow_hash;
|
||||||
|
|
||||||
BEGIN_KV_SERIALIZE_MAP()
|
BEGIN_KV_SERIALIZE_MAP()
|
||||||
KV_SERIALIZE(start_height)
|
KV_SERIALIZE(start_height)
|
||||||
KV_SERIALIZE(end_height)
|
KV_SERIALIZE(end_height)
|
||||||
|
KV_SERIALIZE_OPT(fill_pow_hash, false);
|
||||||
END_KV_SERIALIZE_MAP()
|
END_KV_SERIALIZE_MAP()
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user