@ -1202,11 +1202,12 @@ difficulty_type Blockchain::get_next_difficulty_for_alternative_chain(const std:
// one input, of type txin_gen, with height set to the block's height
// correct miner tx unlock time
// a non-overflowing tx amount (dubious necessity on this check)
bool Blockchain : : prevalidate_miner_transaction ( const block & b , uint64_t height )
bool Blockchain : : prevalidate_miner_transaction ( const block & b , uint64_t height , uint8_t hf_version )
{
LOG_PRINT_L3 ( " Blockchain:: " < < __func__ ) ;
CHECK_AND_ASSERT_MES ( b . miner_tx . vin . size ( ) = = 1 , false , " coinbase transaction in the block has no inputs " ) ;
CHECK_AND_ASSERT_MES ( b . miner_tx . vin [ 0 ] . type ( ) = = typeid ( txin_gen ) , false , " coinbase transaction in the block has the wrong type " ) ;
CHECK_AND_ASSERT_MES ( b . miner_tx . version > 1 | | hf_version < HF_VERSION_MIN_V2_COINBASE_TX , false , " Invalid coinbase transaction version " ) ;
if ( boost : : get < txin_gen > ( b . miner_tx . vin [ 0 ] ) . height ! = height )
{
MWARNING ( " The miner transaction in block has invalid height: " < < boost : : get < txin_gen > ( b . miner_tx . vin [ 0 ] ) . height < < " , expected: " < < height ) ;
@ -1713,6 +1714,7 @@ bool Blockchain::handle_alternative_block(const block& b, const crypto::hash& id
}
// this is a cheap test
const uint8_t hf_version = m_hardfork - > get_ideal_version ( block_height ) ;
if ( ! m_hardfork - > check_for_height ( b , block_height ) )
{
LOG_PRINT_L1 ( " Block with id: " < < id < < std : : endl < < " has old version for height " < < block_height ) ;
@ -1770,7 +1772,7 @@ bool Blockchain::handle_alternative_block(const block& b, const crypto::hash& id
return false ;
}
if ( ! prevalidate_miner_transaction ( b , bei . height ))
if ( ! prevalidate_miner_transaction ( b , bei . height , hf_version ))
{
MERROR_VER ( " Block with id: " < < epee : : string_tools : : pod_to_hex ( id ) < < " (as alternative) has incorrect miner transaction. " ) ;
bvc . m_verifivation_failed = true ;
@ -3615,9 +3617,10 @@ leave:
}
// this is a cheap test
const uint8_t hf_version = get_current_hard_fork_version ( ) ;
if ( ! m_hardfork - > check ( bl ) )
{
MERROR_VER ( " Block with id: " < < id < < std : : endl < < " has old version: " < < ( unsigned ) bl . major_version < < std : : endl < < " current: " < < ( unsigned ) m_ hard fork- > get_current _version( ) ) ;
MERROR_VER ( " Block with id: " < < id < < std : : endl < < " has old version: " < < ( unsigned ) bl . major_version < < std : : endl < < " current: " < < ( unsigned ) hf_version) ;
bvc . m_verifivation_failed = true ;
goto leave ;
}
@ -3722,7 +3725,7 @@ leave:
TIME_MEASURE_START ( t3 ) ;
// sanity check basic miner tx properties;
if ( ! prevalidate_miner_transaction ( bl , blockchain_height ))
if ( ! prevalidate_miner_transaction ( bl , blockchain_height , hf_version ))
{
MERROR_VER ( " Block with id: " < < id < < " failed to pass prevalidation " ) ;
bvc . m_verifivation_failed = true ;