parent
caa62bc9ea
commit
ac0af73222
|
@ -171,9 +171,10 @@ namespace cryptonote
|
||||||
extra_nonce = m_extra_messages[m_config.current_extra_message_index];
|
extra_nonce = m_extra_messages[m_config.current_extra_message_index];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
uint64_t cumulative_weight;
|
||||||
uint64_t seed_height;
|
uint64_t seed_height;
|
||||||
crypto::hash seed_hash;
|
crypto::hash seed_hash;
|
||||||
if(!m_phandler->get_block_template(bl, m_mine_address, di, height, expected_reward, extra_nonce, seed_height, seed_hash))
|
if(!m_phandler->get_block_template(bl, m_mine_address, di, height, expected_reward, cumulative_weight, extra_nonce, seed_height, seed_hash))
|
||||||
{
|
{
|
||||||
LOG_ERROR("Failed to get_block_template(), stopping mining");
|
LOG_ERROR("Failed to get_block_template(), stopping mining");
|
||||||
return false;
|
return false;
|
||||||
|
|
|
@ -47,7 +47,7 @@ namespace cryptonote
|
||||||
struct i_miner_handler
|
struct i_miner_handler
|
||||||
{
|
{
|
||||||
virtual bool handle_block_found(block& b, block_verification_context &bvc) = 0;
|
virtual bool handle_block_found(block& b, block_verification_context &bvc) = 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, uint64_t &seed_height, crypto::hash &seed_hash) = 0;
|
virtual bool get_block_template(block& b, const account_public_address& adr, difficulty_type& diffic, uint64_t& height, uint64_t& expected_reward, uint64_t &cumulative_weight, const blobdata& ex_nonce, uint64_t &seed_height, crypto::hash &seed_hash) = 0;
|
||||||
protected:
|
protected:
|
||||||
~i_miner_handler(){};
|
~i_miner_handler(){};
|
||||||
};
|
};
|
||||||
|
|
|
@ -1544,7 +1544,7 @@ uint64_t Blockchain::get_current_cumulative_block_weight_median() 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 crypto::hash *from_block, const account_public_address& miner_address, difficulty_type& diffic, uint64_t& height, uint64_t& expected_reward, const blobdata& ex_nonce, uint64_t &seed_height, crypto::hash &seed_hash)
|
bool Blockchain::create_block_template(block& b, const crypto::hash *from_block, const account_public_address& miner_address, difficulty_type& diffic, uint64_t& height, uint64_t& expected_reward, uint64_t& cumulative_weight, const blobdata& ex_nonce, uint64_t &seed_height, crypto::hash &seed_hash)
|
||||||
{
|
{
|
||||||
LOG_PRINT_L3("Blockchain::" << __func__);
|
LOG_PRINT_L3("Blockchain::" << __func__);
|
||||||
size_t median_weight;
|
size_t median_weight;
|
||||||
|
@ -1571,6 +1571,7 @@ bool Blockchain::create_block_template(block& b, const crypto::hash *from_block,
|
||||||
diffic = m_btc_difficulty;
|
diffic = m_btc_difficulty;
|
||||||
height = m_btc_height;
|
height = m_btc_height;
|
||||||
expected_reward = m_btc_expected_reward;
|
expected_reward = m_btc_expected_reward;
|
||||||
|
cumulative_weight = m_btc_cumulative_weight;
|
||||||
seed_height = m_btc_seed_height;
|
seed_height = m_btc_seed_height;
|
||||||
seed_hash = m_btc_seed_hash;
|
seed_hash = m_btc_seed_hash;
|
||||||
return true;
|
return true;
|
||||||
|
@ -1754,7 +1755,7 @@ bool Blockchain::create_block_template(block& b, const crypto::hash *from_block,
|
||||||
size_t max_outs = hf_version >= 4 ? 1 : 11;
|
size_t max_outs = hf_version >= 4 ? 1 : 11;
|
||||||
bool r = construct_miner_tx(height, median_weight, already_generated_coins, txs_weight, fee, miner_address, b.miner_tx, ex_nonce, max_outs, hf_version);
|
bool r = construct_miner_tx(height, median_weight, already_generated_coins, txs_weight, fee, miner_address, b.miner_tx, ex_nonce, max_outs, hf_version);
|
||||||
CHECK_AND_ASSERT_MES(r, false, "Failed to construct miner tx, first chance");
|
CHECK_AND_ASSERT_MES(r, false, "Failed to construct miner tx, first chance");
|
||||||
size_t cumulative_weight = txs_weight + get_transaction_weight(b.miner_tx);
|
cumulative_weight = txs_weight + get_transaction_weight(b.miner_tx);
|
||||||
#if defined(DEBUG_CREATE_BLOCK_TEMPLATE)
|
#if defined(DEBUG_CREATE_BLOCK_TEMPLATE)
|
||||||
MDEBUG("Creating block template: miner tx weight " << get_transaction_weight(b.miner_tx) <<
|
MDEBUG("Creating block template: miner tx weight " << get_transaction_weight(b.miner_tx) <<
|
||||||
", cumulative weight " << cumulative_weight);
|
", cumulative weight " << cumulative_weight);
|
||||||
|
@ -1806,16 +1807,16 @@ bool Blockchain::create_block_template(block& b, const crypto::hash *from_block,
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
if (!from_block)
|
if (!from_block)
|
||||||
cache_block_template(b, miner_address, ex_nonce, diffic, height, expected_reward, seed_height, seed_hash, pool_cookie);
|
cache_block_template(b, miner_address, ex_nonce, diffic, height, expected_reward, cumulative_weight, seed_height, seed_hash, pool_cookie);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
LOG_ERROR("Failed to create_block_template with " << 10 << " tries");
|
LOG_ERROR("Failed to create_block_template with " << 10 << " tries");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
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, uint64_t &seed_height, crypto::hash &seed_hash)
|
bool Blockchain::create_block_template(block& b, const account_public_address& miner_address, difficulty_type& diffic, uint64_t& height, uint64_t& expected_reward, uint64_t& cumulative_weight, const blobdata& ex_nonce, uint64_t &seed_height, crypto::hash &seed_hash)
|
||||||
{
|
{
|
||||||
return create_block_template(b, NULL, miner_address, diffic, height, expected_reward, ex_nonce, seed_height, seed_hash);
|
return create_block_template(b, NULL, miner_address, diffic, height, expected_reward, cumulative_weight, ex_nonce, seed_height, seed_hash);
|
||||||
}
|
}
|
||||||
//------------------------------------------------------------------
|
//------------------------------------------------------------------
|
||||||
bool Blockchain::get_miner_data(uint8_t& major_version, uint64_t& height, crypto::hash& prev_id, crypto::hash& seed_hash, difficulty_type& difficulty, uint64_t& median_weight, uint64_t& already_generated_coins, std::vector<tx_block_template_backlog_entry>& tx_backlog)
|
bool Blockchain::get_miner_data(uint8_t& major_version, uint64_t& height, crypto::hash& prev_id, crypto::hash& seed_hash, difficulty_type& difficulty, uint64_t& median_weight, uint64_t& already_generated_coins, std::vector<tx_block_template_backlog_entry>& tx_backlog)
|
||||||
|
@ -5607,7 +5608,7 @@ void Blockchain::invalidate_block_template_cache()
|
||||||
m_btc_valid = false;
|
m_btc_valid = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Blockchain::cache_block_template(const block &b, const cryptonote::account_public_address &address, const blobdata &nonce, const difficulty_type &diff, uint64_t height, uint64_t expected_reward, uint64_t seed_height, const crypto::hash &seed_hash, uint64_t pool_cookie)
|
void Blockchain::cache_block_template(const block &b, const cryptonote::account_public_address &address, const blobdata &nonce, const difficulty_type &diff, uint64_t height, uint64_t expected_reward, uint64_t cumulative_weight, uint64_t seed_height, const crypto::hash &seed_hash, uint64_t pool_cookie)
|
||||||
{
|
{
|
||||||
MDEBUG("Setting block template cache");
|
MDEBUG("Setting block template cache");
|
||||||
m_btc = b;
|
m_btc = b;
|
||||||
|
@ -5616,6 +5617,7 @@ void Blockchain::cache_block_template(const block &b, const cryptonote::account_
|
||||||
m_btc_difficulty = diff;
|
m_btc_difficulty = diff;
|
||||||
m_btc_height = height;
|
m_btc_height = height;
|
||||||
m_btc_expected_reward = expected_reward;
|
m_btc_expected_reward = expected_reward;
|
||||||
|
m_btc_cumulative_weight = cumulative_weight;
|
||||||
m_btc_seed_hash = seed_hash;
|
m_btc_seed_hash = seed_hash;
|
||||||
m_btc_seed_height = seed_height;
|
m_btc_seed_height = seed_height;
|
||||||
m_btc_pool_cookie = pool_cookie;
|
m_btc_pool_cookie = pool_cookie;
|
||||||
|
|
|
@ -371,8 +371,8 @@ namespace cryptonote
|
||||||
*
|
*
|
||||||
* @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, uint64_t& expected_reward, const blobdata& ex_nonce, uint64_t &seed_height, crypto::hash &seed_hash);
|
bool create_block_template(block& b, const account_public_address& miner_address, difficulty_type& di, uint64_t& height, uint64_t& expected_reward, uint64_t& cumulative_weight, const blobdata& ex_nonce, uint64_t &seed_height, crypto::hash &seed_hash);
|
||||||
bool create_block_template(block& b, const crypto::hash *from_block, const account_public_address& miner_address, difficulty_type& di, uint64_t& height, uint64_t& expected_reward, const blobdata& ex_nonce, uint64_t &seed_height, crypto::hash &seed_hash);
|
bool create_block_template(block& b, const crypto::hash *from_block, const account_public_address& miner_address, difficulty_type& di, uint64_t& height, uint64_t& expected_reward, uint64_t& cumulative_weight, const blobdata& ex_nonce, uint64_t &seed_height, crypto::hash &seed_hash);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief gets data required to create a block template and start mining on it
|
* @brief gets data required to create a block template and start mining on it
|
||||||
|
@ -1202,6 +1202,7 @@ namespace cryptonote
|
||||||
uint64_t m_btc_height;
|
uint64_t m_btc_height;
|
||||||
uint64_t m_btc_pool_cookie;
|
uint64_t m_btc_pool_cookie;
|
||||||
uint64_t m_btc_expected_reward;
|
uint64_t m_btc_expected_reward;
|
||||||
|
uint64_t m_btc_cumulative_weight;
|
||||||
crypto::hash m_btc_seed_hash;
|
crypto::hash m_btc_seed_hash;
|
||||||
uint64_t m_btc_seed_height;
|
uint64_t m_btc_seed_height;
|
||||||
bool m_btc_valid;
|
bool m_btc_valid;
|
||||||
|
@ -1594,7 +1595,7 @@ namespace cryptonote
|
||||||
*
|
*
|
||||||
* At some point, may be used to push an update to miners
|
* At some point, may be used to push an update to miners
|
||||||
*/
|
*/
|
||||||
void cache_block_template(const block &b, const cryptonote::account_public_address &address, const blobdata &nonce, const difficulty_type &diff, uint64_t height, uint64_t expected_reward, uint64_t seed_height, const crypto::hash &seed_hash, uint64_t pool_cookie);
|
void cache_block_template(const block &b, const cryptonote::account_public_address &address, const blobdata &nonce, const difficulty_type &diff, uint64_t height, uint64_t expected_reward, uint64_t cumulative_weight, uint64_t seed_height, const crypto::hash &seed_hash, uint64_t pool_cookie);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief sends new block notifications to ZMQ `miner_data` subscribers
|
* @brief sends new block notifications to ZMQ `miner_data` subscribers
|
||||||
|
|
|
@ -1468,14 +1468,14 @@ namespace cryptonote
|
||||||
notify_txpool_event(tx_blobs, epee::to_span(tx_hashes), epee::to_span(txs), just_broadcasted);
|
notify_txpool_event(tx_blobs, epee::to_span(tx_hashes), epee::to_span(txs), just_broadcasted);
|
||||||
}
|
}
|
||||||
//-----------------------------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------------------------
|
||||||
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, uint64_t &seed_height, crypto::hash &seed_hash)
|
bool core::get_block_template(block& b, const account_public_address& adr, difficulty_type& diffic, uint64_t& height, uint64_t& expected_reward, uint64_t& cumulative_weight, const blobdata& ex_nonce, uint64_t &seed_height, crypto::hash &seed_hash)
|
||||||
{
|
{
|
||||||
return m_blockchain_storage.create_block_template(b, adr, diffic, height, expected_reward, ex_nonce, seed_height, seed_hash);
|
return m_blockchain_storage.create_block_template(b, adr, diffic, height, expected_reward, cumulative_weight, ex_nonce, seed_height, seed_hash);
|
||||||
}
|
}
|
||||||
//-----------------------------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------------------------
|
||||||
bool core::get_block_template(block& b, const crypto::hash *prev_block, const account_public_address& adr, difficulty_type& diffic, uint64_t& height, uint64_t& expected_reward, const blobdata& ex_nonce, uint64_t &seed_height, crypto::hash &seed_hash)
|
bool core::get_block_template(block& b, const crypto::hash *prev_block, const account_public_address& adr, difficulty_type& diffic, uint64_t& height, uint64_t& expected_reward, uint64_t& cumulative_weight, const blobdata& ex_nonce, uint64_t &seed_height, crypto::hash &seed_hash)
|
||||||
{
|
{
|
||||||
return m_blockchain_storage.create_block_template(b, prev_block, adr, diffic, height, expected_reward, ex_nonce, seed_height, seed_hash);
|
return m_blockchain_storage.create_block_template(b, prev_block, adr, diffic, height, expected_reward, cumulative_weight, ex_nonce, seed_height, seed_hash);
|
||||||
}
|
}
|
||||||
//-----------------------------------------------------------------------------------------------
|
//-----------------------------------------------------------------------------------------------
|
||||||
bool core::get_miner_data(uint8_t& major_version, uint64_t& height, crypto::hash& prev_id, crypto::hash& seed_hash, difficulty_type& difficulty, uint64_t& median_weight, uint64_t& already_generated_coins, std::vector<tx_block_template_backlog_entry>& tx_backlog)
|
bool core::get_miner_data(uint8_t& major_version, uint64_t& height, crypto::hash& prev_id, crypto::hash& seed_hash, difficulty_type& difficulty, uint64_t& median_weight, uint64_t& already_generated_coins, std::vector<tx_block_template_backlog_entry>& tx_backlog)
|
||||||
|
|
|
@ -231,8 +231,8 @@ 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, uint64_t& expected_reward, const blobdata& ex_nonce, uint64_t &seed_height, crypto::hash &seed_hash) override;
|
virtual bool get_block_template(block& b, const account_public_address& adr, difficulty_type& diffic, uint64_t& height, uint64_t& expected_reward, uint64_t &cumulative_weight, const blobdata& ex_nonce, uint64_t &seed_height, crypto::hash &seed_hash) override;
|
||||||
virtual bool get_block_template(block& b, const crypto::hash *prev_block, const account_public_address& adr, difficulty_type& diffic, uint64_t& height, uint64_t& expected_reward, const blobdata& ex_nonce, uint64_t &seed_height, crypto::hash &seed_hash);
|
virtual bool get_block_template(block& b, const crypto::hash *prev_block, const account_public_address& adr, difficulty_type& diffic, uint64_t& height, uint64_t& expected_reward, uint64_t &cumulative_weight, const blobdata& ex_nonce, uint64_t &seed_height, crypto::hash &seed_hash);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @copydoc Blockchain::get_miner_data
|
* @copydoc Blockchain::get_miner_data
|
||||||
|
|
|
@ -1856,10 +1856,10 @@ namespace cryptonote
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
//------------------------------------------------------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------------------------------------------------------
|
||||||
bool core_rpc_server::get_block_template(const account_public_address &address, const crypto::hash *prev_block, const cryptonote::blobdata &extra_nonce, size_t &reserved_offset, cryptonote::difficulty_type &difficulty, uint64_t &height, uint64_t &expected_reward, block &b, uint64_t &seed_height, crypto::hash &seed_hash, crypto::hash &next_seed_hash, epee::json_rpc::error &error_resp)
|
bool core_rpc_server::get_block_template(const account_public_address &address, const crypto::hash *prev_block, const cryptonote::blobdata &extra_nonce, size_t &reserved_offset, cryptonote::difficulty_type &difficulty, uint64_t &height, uint64_t &expected_reward, uint64_t& cumulative_weight, block &b, uint64_t &seed_height, crypto::hash &seed_hash, crypto::hash &next_seed_hash, epee::json_rpc::error &error_resp)
|
||||||
{
|
{
|
||||||
b = boost::value_initialized<cryptonote::block>();
|
b = boost::value_initialized<cryptonote::block>();
|
||||||
if(!m_core.get_block_template(b, prev_block, address, difficulty, height, expected_reward, extra_nonce, seed_height, seed_hash))
|
if(!m_core.get_block_template(b, prev_block, address, difficulty, height, expected_reward, cumulative_weight, extra_nonce, seed_height, seed_hash))
|
||||||
{
|
{
|
||||||
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";
|
||||||
|
@ -1984,7 +1984,7 @@ namespace cryptonote
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
crypto::hash seed_hash, next_seed_hash;
|
crypto::hash seed_hash, next_seed_hash;
|
||||||
if (!get_block_template(info.address, req.prev_block.empty() ? NULL : &prev_block, blob_reserve, reserved_offset, wdiff, res.height, res.expected_reward, b, res.seed_height, seed_hash, next_seed_hash, error_resp))
|
if (!get_block_template(info.address, req.prev_block.empty() ? NULL : &prev_block, blob_reserve, reserved_offset, wdiff, res.height, res.expected_reward, res.cumulative_weight, b, res.seed_height, seed_hash, next_seed_hash, error_resp))
|
||||||
return false;
|
return false;
|
||||||
if (b.major_version >= RX_BLOCK_VERSION)
|
if (b.major_version >= RX_BLOCK_VERSION)
|
||||||
{
|
{
|
||||||
|
@ -3520,9 +3520,9 @@ namespace cryptonote
|
||||||
crypto::hash seed_hash, next_seed_hash;
|
crypto::hash seed_hash, next_seed_hash;
|
||||||
if (!m_rpc_payment->get_info(client, [&](const cryptonote::blobdata &extra_nonce, cryptonote::block &b, uint64_t &seed_height, crypto::hash &seed_hash)->bool{
|
if (!m_rpc_payment->get_info(client, [&](const cryptonote::blobdata &extra_nonce, cryptonote::block &b, uint64_t &seed_height, crypto::hash &seed_hash)->bool{
|
||||||
cryptonote::difficulty_type difficulty;
|
cryptonote::difficulty_type difficulty;
|
||||||
uint64_t height, expected_reward;
|
uint64_t height, expected_reward, cumulative_weight;
|
||||||
size_t reserved_offset;
|
size_t reserved_offset;
|
||||||
if (!get_block_template(m_rpc_payment->get_payment_address(), NULL, extra_nonce, reserved_offset, difficulty, height, expected_reward, b, seed_height, seed_hash, next_seed_hash, error_resp))
|
if (!get_block_template(m_rpc_payment->get_payment_address(), NULL, extra_nonce, reserved_offset, difficulty, height, expected_reward, cumulative_weight, b, seed_height, seed_hash, next_seed_hash, error_resp))
|
||||||
return false;
|
return false;
|
||||||
return true;
|
return true;
|
||||||
}, hashing_blob, res.seed_height, seed_hash, top_hash, res.diff, res.credits_per_hash_found, res.credits, res.cookie))
|
}, hashing_blob, res.seed_height, seed_hash, top_hash, res.diff, res.credits_per_hash_found, res.credits, res.cookie))
|
||||||
|
|
|
@ -285,7 +285,7 @@ private:
|
||||||
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);
|
||||||
bool get_block_template(const account_public_address &address, const crypto::hash *prev_block, const cryptonote::blobdata &extra_nonce, size_t &reserved_offset, cryptonote::difficulty_type &difficulty, uint64_t &height, uint64_t &expected_reward, block &b, uint64_t &seed_height, crypto::hash &seed_hash, crypto::hash &next_seed_hash, epee::json_rpc::error &error_resp);
|
bool get_block_template(const account_public_address &address, const crypto::hash *prev_block, const cryptonote::blobdata &extra_nonce, size_t &reserved_offset, cryptonote::difficulty_type &difficulty, uint64_t &height, uint64_t &expected_reward, uint64_t& cumulative_weight, block &b, uint64_t &seed_height, crypto::hash &seed_hash, crypto::hash &next_seed_hash, epee::json_rpc::error &error_resp);
|
||||||
bool check_payment(const std::string &client, uint64_t payment, const std::string &rpc, bool same_ts, std::string &message, uint64_t &credits, std::string &top_hash);
|
bool check_payment(const std::string &client, uint64_t payment, const std::string &rpc, bool same_ts, std::string &message, uint64_t &credits, std::string &top_hash);
|
||||||
|
|
||||||
core& m_core;
|
core& m_core;
|
||||||
|
|
|
@ -101,7 +101,7 @@ inline const std::string get_rpc_status(const bool trusted_daemon, const std::st
|
||||||
// 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 15
|
#define CORE_RPC_VERSION_MINOR 16
|
||||||
#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)
|
||||||
|
|
||||||
|
@ -984,6 +984,7 @@ inline const std::string get_rpc_status(const bool trusted_daemon, const std::st
|
||||||
uint64_t height;
|
uint64_t height;
|
||||||
uint64_t reserved_offset;
|
uint64_t reserved_offset;
|
||||||
uint64_t expected_reward;
|
uint64_t expected_reward;
|
||||||
|
uint64_t cumulative_weight;
|
||||||
std::string prev_hash;
|
std::string prev_hash;
|
||||||
uint64_t seed_height;
|
uint64_t seed_height;
|
||||||
std::string seed_hash;
|
std::string seed_hash;
|
||||||
|
@ -999,6 +1000,7 @@ inline const std::string get_rpc_status(const bool trusted_daemon, const std::st
|
||||||
KV_SERIALIZE(height)
|
KV_SERIALIZE(height)
|
||||||
KV_SERIALIZE(reserved_offset)
|
KV_SERIALIZE(reserved_offset)
|
||||||
KV_SERIALIZE(expected_reward)
|
KV_SERIALIZE(expected_reward)
|
||||||
|
KV_SERIALIZE_OPT(cumulative_weight, static_cast<uint64_t>(0))
|
||||||
KV_SERIALIZE(prev_hash)
|
KV_SERIALIZE(prev_hash)
|
||||||
KV_SERIALIZE(seed_height)
|
KV_SERIALIZE(seed_height)
|
||||||
KV_SERIALIZE(blocktemplate_blob)
|
KV_SERIALIZE(blocktemplate_blob)
|
||||||
|
|
|
@ -137,6 +137,7 @@ class BlockchainTest():
|
||||||
assert res_getblocktemplate.reserved_offset > 0
|
assert res_getblocktemplate.reserved_offset > 0
|
||||||
assert res_getblocktemplate.prev_hash == res_info.top_block_hash
|
assert res_getblocktemplate.prev_hash == res_info.top_block_hash
|
||||||
assert res_getblocktemplate.expected_reward >= 600000000000
|
assert res_getblocktemplate.expected_reward >= 600000000000
|
||||||
|
assert res_getblocktemplate.cumulative_weight > 0
|
||||||
assert len(res_getblocktemplate.blocktemplate_blob) > 0
|
assert len(res_getblocktemplate.blocktemplate_blob) > 0
|
||||||
assert len(res_getblocktemplate.blockhashing_blob) > 0
|
assert len(res_getblocktemplate.blockhashing_blob) > 0
|
||||||
assert int(res_getblocktemplate.wide_difficulty, 16) == (res_getblocktemplate.difficulty_top64 << 64) + res_getblocktemplate.difficulty
|
assert int(res_getblocktemplate.wide_difficulty, 16) == (res_getblocktemplate.difficulty_top64 << 64) + res_getblocktemplate.difficulty
|
||||||
|
|
Loading…
Reference in New Issue