mirror of
https://github.com/monero-project/monero.git
synced 2025-08-16 09:30:24 -04:00
Update ZMQ fee estimate and add ZMQ output distribution
This commit is contained in:
parent
2287fb9fb4
commit
6097472a19
13 changed files with 260 additions and 88 deletions
|
@ -724,12 +724,53 @@ namespace rpc
|
|||
res.status = Message::STATUS_OK;
|
||||
}
|
||||
|
||||
void DaemonHandler::handle(const GetPerKBFeeEstimate::Request& req, GetPerKBFeeEstimate::Response& res)
|
||||
void DaemonHandler::handle(const GetFeeEstimate::Request& req, GetFeeEstimate::Response& res)
|
||||
{
|
||||
res.estimated_fee_per_kb = m_core.get_blockchain_storage().get_dynamic_base_fee_estimate(req.num_grace_blocks);
|
||||
res.hard_fork_version = m_core.get_blockchain_storage().get_current_hard_fork_version();
|
||||
res.estimated_base_fee = m_core.get_blockchain_storage().get_dynamic_base_fee_estimate(req.num_grace_blocks);
|
||||
|
||||
if (res.hard_fork_version < HF_VERSION_PER_BYTE_FEE)
|
||||
{
|
||||
res.size_scale = 1024; // per KiB fee
|
||||
res.fee_mask = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
res.size_scale = 1; // per byte fee
|
||||
res.fee_mask = Blockchain::get_fee_quantization_mask();
|
||||
}
|
||||
res.status = Message::STATUS_OK;
|
||||
}
|
||||
|
||||
void DaemonHandler::handle(const GetOutputDistribution::Request& req, GetOutputDistribution::Response& res)
|
||||
{
|
||||
try
|
||||
{
|
||||
res.distributions.reserve(req.amounts.size());
|
||||
|
||||
const uint64_t req_to_height = req.to_height ? req.to_height : (m_core.get_current_blockchain_height() - 1);
|
||||
for (std::uint64_t amount : req.amounts)
|
||||
{
|
||||
auto data = get_output_distribution(m_core, amount, req.from_height, req_to_height, req.cumulative);
|
||||
if (!data)
|
||||
{
|
||||
res.distributions.clear();
|
||||
res.status = Message::STATUS_FAILED;
|
||||
res.error_details = "Failed to get output distribution";
|
||||
return;
|
||||
}
|
||||
res.distributions.push_back(output_distribution{std::move(*data), amount, req.cumulative});
|
||||
}
|
||||
res.status = Message::STATUS_OK;
|
||||
}
|
||||
catch (const std::exception& e)
|
||||
{
|
||||
res.distributions.clear();
|
||||
res.status = Message::STATUS_FAILED;
|
||||
res.error_details = e.what();
|
||||
}
|
||||
}
|
||||
|
||||
bool DaemonHandler::getBlockHeaderByHash(const crypto::hash& hash_in, cryptonote::rpc::BlockHeaderResponse& header)
|
||||
{
|
||||
block b;
|
||||
|
@ -804,7 +845,8 @@ namespace rpc
|
|||
REQ_RESP_TYPES_MACRO(request_type, GetOutputHistogram, req_json, resp_message, handle);
|
||||
REQ_RESP_TYPES_MACRO(request_type, GetOutputKeys, req_json, resp_message, handle);
|
||||
REQ_RESP_TYPES_MACRO(request_type, GetRPCVersion, req_json, resp_message, handle);
|
||||
REQ_RESP_TYPES_MACRO(request_type, GetPerKBFeeEstimate, req_json, resp_message, handle);
|
||||
REQ_RESP_TYPES_MACRO(request_type, GetFeeEstimate, req_json, resp_message, handle);
|
||||
REQ_RESP_TYPES_MACRO(request_type, GetOutputDistribution, req_json, resp_message, handle);
|
||||
|
||||
// if none of the request types matches
|
||||
if (resp_message == NULL)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue