mirror of
https://codeberg.org/anoncontributorxmr/monero.git
synced 2024-11-23 07:52:25 +00:00
Merge pull request #5032
5ee6f037
blockchain: fix wrong hf version when popping multiple blocks (moneromooo-monero)634d359a
blockchain: use the version passed as parameter, not a new one (moneromooo-monero)94a375d5
hardfork: remove batch transactions setup (moneromooo-monero)
This commit is contained in:
commit
dc726f4b3b
3 changed files with 38 additions and 8 deletions
|
@ -222,7 +222,6 @@ bool HardFork::reorganize_from_block_height(uint64_t height)
|
||||||
if (height >= db.height())
|
if (height >= db.height())
|
||||||
return false;
|
return false;
|
||||||
|
|
||||||
db.set_batch_transactions(true);
|
|
||||||
bool stop_batch = db.batch_start();
|
bool stop_batch = db.batch_start();
|
||||||
|
|
||||||
versions.clear();
|
versions.clear();
|
||||||
|
@ -306,6 +305,29 @@ bool HardFork::rescan_from_chain_height(uint64_t height)
|
||||||
return rescan_from_block_height(height - 1);
|
return rescan_from_block_height(height - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void HardFork::on_block_popped(uint64_t nblocks)
|
||||||
|
{
|
||||||
|
CHECK_AND_ASSERT_THROW_MES(nblocks > 0, "nblocks must be greater than 0");
|
||||||
|
|
||||||
|
CRITICAL_REGION_LOCAL(lock);
|
||||||
|
|
||||||
|
const uint64_t new_chain_height = db.height();
|
||||||
|
const uint64_t old_chain_height = new_chain_height + nblocks;
|
||||||
|
uint8_t version;
|
||||||
|
uint64_t height;
|
||||||
|
for (height = old_chain_height - 1; height >= new_chain_height; --height)
|
||||||
|
{
|
||||||
|
versions.pop_back();
|
||||||
|
version = db.get_hard_fork_version(height);
|
||||||
|
versions.push_front(version);
|
||||||
|
}
|
||||||
|
|
||||||
|
// does not take voting into account
|
||||||
|
for (current_fork_index = heights.size() - 1; current_fork_index > 0; --current_fork_index)
|
||||||
|
if (height >= heights[current_fork_index].height)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
int HardFork::get_voted_fork_index(uint64_t height) const
|
int HardFork::get_voted_fork_index(uint64_t height) const
|
||||||
{
|
{
|
||||||
CRITICAL_REGION_LOCAL(lock);
|
CRITICAL_REGION_LOCAL(lock);
|
||||||
|
|
|
@ -149,6 +149,16 @@ namespace cryptonote
|
||||||
bool reorganize_from_block_height(uint64_t height);
|
bool reorganize_from_block_height(uint64_t height);
|
||||||
bool reorganize_from_chain_height(uint64_t height);
|
bool reorganize_from_chain_height(uint64_t height);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief called when one or more blocks are popped from the blockchain
|
||||||
|
*
|
||||||
|
* The current fork will be updated by looking up the db,
|
||||||
|
* which is much cheaper than recomputing everything
|
||||||
|
*
|
||||||
|
* @param new_chain_height the height of the chain after popping
|
||||||
|
*/
|
||||||
|
void on_block_popped(uint64_t new_chain_height);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief returns current state at the given time
|
* @brief returns current state at the given time
|
||||||
*
|
*
|
||||||
|
|
|
@ -641,6 +641,9 @@ block Blockchain::pop_block_from_blockchain()
|
||||||
throw;
|
throw;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// make sure the hard fork object updates its current version
|
||||||
|
m_hardfork->on_block_popped(1);
|
||||||
|
|
||||||
// return transactions from popped block to the tx_pool
|
// return transactions from popped block to the tx_pool
|
||||||
for (transaction& tx : popped_txs)
|
for (transaction& tx : popped_txs)
|
||||||
{
|
{
|
||||||
|
@ -651,12 +654,7 @@ block Blockchain::pop_block_from_blockchain()
|
||||||
// FIXME: HardFork
|
// FIXME: HardFork
|
||||||
// Besides the below, popping a block should also remove the last entry
|
// Besides the below, popping a block should also remove the last entry
|
||||||
// in hf_versions.
|
// in hf_versions.
|
||||||
//
|
uint8_t version = get_ideal_hard_fork_version(m_db->height());
|
||||||
// FIXME: HardFork
|
|
||||||
// This is not quite correct, as we really want to add the txes
|
|
||||||
// to the pool based on the version determined after all blocks
|
|
||||||
// are popped.
|
|
||||||
uint8_t version = get_current_hard_fork_version();
|
|
||||||
|
|
||||||
// We assume that if they were in a block, the transactions are already
|
// We assume that if they were in a block, the transactions are already
|
||||||
// known to the network as a whole. However, if we had mined that block,
|
// known to the network as a whole. However, if we had mined that block,
|
||||||
|
@ -1201,7 +1199,7 @@ bool Blockchain::validate_miner_transaction(const block& b, size_t cumulative_bl
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
// From hard fork 2, we allow a miner to claim less block reward than is allowed, in case a miner wants less dust
|
// From hard fork 2, we allow a miner to claim less block reward than is allowed, in case a miner wants less dust
|
||||||
if (m_hardfork->get_current_version() < 2)
|
if (version < 2)
|
||||||
{
|
{
|
||||||
if(base_reward + fee != money_in_use)
|
if(base_reward + fee != money_in_use)
|
||||||
{
|
{
|
||||||
|
|
Loading…
Reference in a new issue