1

I want to know if it's safe to assume that multiple calls of get_block_template rpc method will give me the same block template until the blockchain is updated. By updating, I mean the appearance of a new block, or rebuilding the blockchain to an alternative chain, which makes the previous template invalid. I am interested in whether monerod tries to include some new transactions in the template when get_block_template is called again. And if so, is there any way I can disable this behavior and guarantee that once created, the same template will be returned to me as long as it's valid?

Oroffe
  • 185
  • 5

1 Answers1

3

monerod caches the block template across calls. but will regenerate one either when a new block is added, one is removed or the txpool has changed. So one should be regenerated when a new transaction is received.

See the relevant code in blockchain.cpp:

  if (m_btc_valid && !from_block) {
    [...]
    if (!memcmp(&miner_address, &m_btc_address, sizeof(cryptonote::account_public_address)) && m_btc_nonce == ex_nonce
      && m_btc_pool_cookie == m_tx_pool.cookie() && m_btc.prev_id == get_tail_id()) {
      MDEBUG("Using cached template");

If you were to remove "&& m_btc_pool_cookie == m_tx_pool.cookie()", it would ensure receiving new transactions does not cause a new block template to be regenerated.

user36303
  • 34,928
  • 2
  • 58
  • 123