@ -3067,6 +3067,17 @@ bool Blockchain::check_tx_outputs(const transaction& tx, tx_verification_context
if ( hf_version > HF_VERSION_CLSAG ) {
if ( hf_version > HF_VERSION_CLSAG ) {
if ( tx . version > = 2 ) {
if ( tx . version > = 2 ) {
if ( tx . rct_signatures . type < = rct : : RCTTypeBulletproof2 )
if ( tx . rct_signatures . type < = rct : : RCTTypeBulletproof2 )
{
// two MLSAG txes went in due to a bug with txes that went into the txpool before the fork, grandfather them in
static const char * grandfathered [ 2 ] = { " c5151944f0583097ba0c88cd0f43e7fabb3881278aa2f73b3b0a007c5d34e910 " , " 6f2f117cde6fbcf8d4a6ef8974fcac744726574ac38cf25d3322c996b21edd4c " } ;
crypto : : hash h0 , h1 ;
epee : : string_tools : : hex_to_pod ( grandfathered [ 0 ] , h0 ) ;
epee : : string_tools : : hex_to_pod ( grandfathered [ 1 ] , h1 ) ;
if ( cryptonote : : get_transaction_hash ( tx ) = = h0 | | cryptonote : : get_transaction_hash ( tx ) = = h1 )
{
MDEBUG ( " Grandfathering cryptonote::get_transaction_hash(tx) in " ) ;
}
else
{
{
MERROR_VER ( " Ringct type " < < ( unsigned ) tx . rct_signatures . type < < " is not allowed from v " < < ( HF_VERSION_CLSAG + 1 ) ) ;
MERROR_VER ( " Ringct type " < < ( unsigned ) tx . rct_signatures . type < < " is not allowed from v " < < ( HF_VERSION_CLSAG + 1 ) ) ;
tvc . m_invalid_output = true ;
tvc . m_invalid_output = true ;
@ -3074,6 +3085,7 @@ bool Blockchain::check_tx_outputs(const transaction& tx, tx_verification_context
}
}
}
}
}
}
}
return true ;
return true ;
}
}