mirror of
https://github.com/monero-project/monero.git
synced 2024-12-23 20:19:34 +00:00
Merge pull request #1938
bff90264
Add expected total reward to RPC "getblocktemplate". Only works from V5 fork onward - returns 0 before that block. (assylias)
This commit is contained in:
commit
acbe0b4849
10 changed files with 19 additions and 12 deletions
|
@ -122,13 +122,15 @@ namespace cryptonote
|
||||||
block bl = AUTO_VAL_INIT(bl);
|
block bl = AUTO_VAL_INIT(bl);
|
||||||
difficulty_type di = AUTO_VAL_INIT(di);
|
difficulty_type di = AUTO_VAL_INIT(di);
|
||||||
uint64_t height = AUTO_VAL_INIT(height);
|
uint64_t height = AUTO_VAL_INIT(height);
|
||||||
|
uint64_t expected_reward; //only used for RPC calls - could possibly be useful here too?
|
||||||
|
|
||||||
cryptonote::blobdata extra_nonce;
|
cryptonote::blobdata extra_nonce;
|
||||||
if(m_extra_messages.size() && m_config.current_extra_message_index < m_extra_messages.size())
|
if(m_extra_messages.size() && m_config.current_extra_message_index < m_extra_messages.size())
|
||||||
{
|
{
|
||||||
extra_nonce = m_extra_messages[m_config.current_extra_message_index];
|
extra_nonce = m_extra_messages[m_config.current_extra_message_index];
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!m_phandler->get_block_template(bl, m_mine_address, di, height, extra_nonce))
|
if(!m_phandler->get_block_template(bl, m_mine_address, di, height, expected_reward, extra_nonce))
|
||||||
{
|
{
|
||||||
LOG_ERROR("Failed to get_block_template(), stopping mining");
|
LOG_ERROR("Failed to get_block_template(), stopping mining");
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -51,7 +51,7 @@ namespace cryptonote
|
||||||
struct i_miner_handler
|
struct i_miner_handler
|
||||||
{
|
{
|
||||||
virtual bool handle_block_found(block& b) = 0;
|
virtual bool handle_block_found(block& b) = 0;
|
||||||
virtual bool get_block_template(block& b, const account_public_address& adr, difficulty_type& diffic, uint64_t& height, const blobdata& ex_nonce) = 0;
|
virtual bool get_block_template(block& b, const account_public_address& adr, difficulty_type& diffic, uint64_t& height, uint64_t& expected_reward, const blobdata& ex_nonce) = 0;
|
||||||
protected:
|
protected:
|
||||||
~i_miner_handler(){};
|
~i_miner_handler(){};
|
||||||
};
|
};
|
||||||
|
|
|
@ -1072,7 +1072,7 @@ uint64_t Blockchain::get_current_cumulative_blocksize_limit() const
|
||||||
// in a lot of places. That flag is not referenced in any of the code
|
// in a lot of places. That flag is not referenced in any of the code
|
||||||
// nor any of the makefiles, howeve. Need to look into whether or not it's
|
// nor any of the makefiles, howeve. Need to look into whether or not it's
|
||||||
// necessary at all.
|
// necessary at all.
|
||||||
bool Blockchain::create_block_template(block& b, const account_public_address& miner_address, difficulty_type& diffic, uint64_t& height, const blobdata& ex_nonce)
|
bool Blockchain::create_block_template(block& b, const account_public_address& miner_address, difficulty_type& diffic, uint64_t& height, uint64_t& expected_reward, const blobdata& ex_nonce)
|
||||||
{
|
{
|
||||||
LOG_PRINT_L3("Blockchain::" << __func__);
|
LOG_PRINT_L3("Blockchain::" << __func__);
|
||||||
size_t median_size;
|
size_t median_size;
|
||||||
|
@ -1096,7 +1096,7 @@ bool Blockchain::create_block_template(block& b, const account_public_address& m
|
||||||
|
|
||||||
size_t txs_size;
|
size_t txs_size;
|
||||||
uint64_t fee;
|
uint64_t fee;
|
||||||
if (!m_tx_pool.fill_block_template(b, median_size, already_generated_coins, txs_size, fee, m_hardfork->get_current_version()))
|
if (!m_tx_pool.fill_block_template(b, median_size, already_generated_coins, txs_size, fee, expected_reward, m_hardfork->get_current_version()))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
@ -323,11 +323,12 @@ namespace cryptonote
|
||||||
* @param miner_address address new coins for the block will go to
|
* @param miner_address address new coins for the block will go to
|
||||||
* @param di return-by-reference tells the miner what the difficulty target is
|
* @param di return-by-reference tells the miner what the difficulty target is
|
||||||
* @param height return-by-reference tells the miner what height it's mining against
|
* @param height return-by-reference tells the miner what height it's mining against
|
||||||
|
* @param expected_reward return-by-reference the total reward awarded to the miner finding this block, including transaction fees
|
||||||
* @param ex_nonce extra data to be added to the miner transaction's extra
|
* @param ex_nonce extra data to be added to the miner transaction's extra
|
||||||
*
|
*
|
||||||
* @return true if block template filled in successfully, else false
|
* @return true if block template filled in successfully, else false
|
||||||
*/
|
*/
|
||||||
bool create_block_template(block& b, const account_public_address& miner_address, difficulty_type& di, uint64_t& height, const blobdata& ex_nonce);
|
bool create_block_template(block& b, const account_public_address& miner_address, difficulty_type& di, uint64_t& height, uint64_t& expected_reward, const blobdata& ex_nonce);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief checks if a block is known about with a given hash
|
* @brief checks if a block is known about with a given hash
|
||||||
|
|
|
@ -827,9 +827,9 @@ namespace cryptonote
|
||||||
m_mempool.set_relayed(txs);
|
m_mempool.set_relayed(txs);
|
||||||
}
|
}
|
||||||
//-----------------------------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------------------------
|
||||||
bool core::get_block_template(block& b, const account_public_address& adr, difficulty_type& diffic, uint64_t& height, const blobdata& ex_nonce)
|
bool core::get_block_template(block& b, const account_public_address& adr, difficulty_type& diffic, uint64_t& height, uint64_t& expected_reward, const blobdata& ex_nonce)
|
||||||
{
|
{
|
||||||
return m_blockchain_storage.create_block_template(b, adr, diffic, height, ex_nonce);
|
return m_blockchain_storage.create_block_template(b, adr, diffic, height, expected_reward, ex_nonce);
|
||||||
}
|
}
|
||||||
//-----------------------------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------------------------
|
||||||
bool core::find_blockchain_supplement(const std::list<crypto::hash>& qblock_ids, NOTIFY_RESPONSE_CHAIN_ENTRY::request& resp) const
|
bool core::find_blockchain_supplement(const std::list<crypto::hash>& qblock_ids, NOTIFY_RESPONSE_CHAIN_ENTRY::request& resp) const
|
||||||
|
|
|
@ -180,7 +180,7 @@ namespace cryptonote
|
||||||
*
|
*
|
||||||
* @note see Blockchain::create_block_template
|
* @note see Blockchain::create_block_template
|
||||||
*/
|
*/
|
||||||
virtual bool get_block_template(block& b, const account_public_address& adr, difficulty_type& diffic, uint64_t& height, const blobdata& ex_nonce);
|
virtual bool get_block_template(block& b, const account_public_address& adr, difficulty_type& diffic, uint64_t& height, uint64_t& expected_reward, const blobdata& ex_nonce);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief called when a transaction is relayed
|
* @brief called when a transaction is relayed
|
||||||
|
|
|
@ -613,7 +613,7 @@ namespace cryptonote
|
||||||
}
|
}
|
||||||
//---------------------------------------------------------------------------------
|
//---------------------------------------------------------------------------------
|
||||||
//TODO: investigate whether boolean return is appropriate
|
//TODO: investigate whether boolean return is appropriate
|
||||||
bool tx_memory_pool::fill_block_template(block &bl, size_t median_size, uint64_t already_generated_coins, size_t &total_size, uint64_t &fee, uint8_t version)
|
bool tx_memory_pool::fill_block_template(block &bl, size_t median_size, uint64_t already_generated_coins, size_t &total_size, uint64_t &fee, uint64_t &expected_reward, uint8_t version)
|
||||||
{
|
{
|
||||||
// Warning: This function takes already_generated_
|
// Warning: This function takes already_generated_
|
||||||
// coins as an argument and appears to do nothing
|
// coins as an argument and appears to do nothing
|
||||||
|
@ -705,6 +705,7 @@ namespace cryptonote
|
||||||
LOG_PRINT_L2(" added, new block size " << total_size << "/" << max_total_size << ", coinbase " << print_money(best_coinbase));
|
LOG_PRINT_L2(" added, new block size " << total_size << "/" << max_total_size << ", coinbase " << print_money(best_coinbase));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
expected_reward = best_coinbase;
|
||||||
LOG_PRINT_L2("Block template filled with " << bl.tx_hashes.size() << " txes, size "
|
LOG_PRINT_L2("Block template filled with " << bl.tx_hashes.size() << " txes, size "
|
||||||
<< total_size << "/" << max_total_size << ", coinbase " << print_money(best_coinbase)
|
<< total_size << "/" << max_total_size << ", coinbase " << print_money(best_coinbase)
|
||||||
<< " (including " << print_money(fee) << " in fees)");
|
<< " (including " << print_money(fee) << " in fees)");
|
||||||
|
|
|
@ -220,11 +220,12 @@ namespace cryptonote
|
||||||
* @param already_generated_coins the current total number of coins "minted"
|
* @param already_generated_coins the current total number of coins "minted"
|
||||||
* @param total_size return-by-reference the total size of the new block
|
* @param total_size return-by-reference the total size of the new block
|
||||||
* @param fee return-by-reference the total of fees from the included transactions
|
* @param fee return-by-reference the total of fees from the included transactions
|
||||||
|
* @param expected_reward return-by-reference the total reward awarded to the miner finding this block, including transaction fees
|
||||||
* @param version hard fork version to use for consensus rules
|
* @param version hard fork version to use for consensus rules
|
||||||
*
|
*
|
||||||
* @return true
|
* @return true
|
||||||
*/
|
*/
|
||||||
bool fill_block_template(block &bl, size_t median_size, uint64_t already_generated_coins, size_t &total_size, uint64_t &fee, uint8_t version);
|
bool fill_block_template(block &bl, size_t median_size, uint64_t already_generated_coins, size_t &total_size, uint64_t &fee, uint64_t &expected_reward, uint8_t version);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief get a list of all transactions in the pool
|
* @brief get a list of all transactions in the pool
|
||||||
|
|
|
@ -883,7 +883,7 @@ namespace cryptonote
|
||||||
block b = AUTO_VAL_INIT(b);
|
block b = AUTO_VAL_INIT(b);
|
||||||
cryptonote::blobdata blob_reserve;
|
cryptonote::blobdata blob_reserve;
|
||||||
blob_reserve.resize(req.reserve_size, 0);
|
blob_reserve.resize(req.reserve_size, 0);
|
||||||
if(!m_core.get_block_template(b, acc, res.difficulty, res.height, blob_reserve))
|
if(!m_core.get_block_template(b, acc, res.difficulty, res.height, res.expected_reward, blob_reserve))
|
||||||
{
|
{
|
||||||
error_resp.code = CORE_RPC_ERROR_CODE_INTERNAL_ERROR;
|
error_resp.code = CORE_RPC_ERROR_CODE_INTERNAL_ERROR;
|
||||||
error_resp.message = "Internal error: failed to create block template";
|
error_resp.message = "Internal error: failed to create block template";
|
||||||
|
|
|
@ -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 9
|
#define CORE_RPC_VERSION_MINOR 10
|
||||||
#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)
|
||||||
|
|
||||||
|
@ -692,6 +692,7 @@ namespace cryptonote
|
||||||
uint64_t difficulty;
|
uint64_t difficulty;
|
||||||
uint64_t height;
|
uint64_t height;
|
||||||
uint64_t reserved_offset;
|
uint64_t reserved_offset;
|
||||||
|
uint64_t expected_reward;
|
||||||
std::string prev_hash;
|
std::string prev_hash;
|
||||||
blobdata blocktemplate_blob;
|
blobdata blocktemplate_blob;
|
||||||
blobdata blockhashing_blob;
|
blobdata blockhashing_blob;
|
||||||
|
@ -701,6 +702,7 @@ namespace cryptonote
|
||||||
KV_SERIALIZE(difficulty)
|
KV_SERIALIZE(difficulty)
|
||||||
KV_SERIALIZE(height)
|
KV_SERIALIZE(height)
|
||||||
KV_SERIALIZE(reserved_offset)
|
KV_SERIALIZE(reserved_offset)
|
||||||
|
KV_SERIALIZE(expected_reward)
|
||||||
KV_SERIALIZE(prev_hash)
|
KV_SERIALIZE(prev_hash)
|
||||||
KV_SERIALIZE(blocktemplate_blob)
|
KV_SERIALIZE(blocktemplate_blob)
|
||||||
KV_SERIALIZE(blockhashing_blob)
|
KV_SERIALIZE(blockhashing_blob)
|
||||||
|
|
Loading…
Reference in a new issue