blockchain: fix sync at v14 boundary
Miners with MLSAG txes which they'd already verified included a couple in that block, but the consensus rules had changed in the meantime, so that block is technically invalid and any node which did not already have those two txes in their txpool could not sync. Grandfather them in, since it has no effect in practice.
This commit is contained in:
parent
4d855fcca7
commit
1120df3c53
|
@ -3068,9 +3068,21 @@ bool Blockchain::check_tx_outputs(const transaction& tx, tx_verification_context
|
||||||
if (tx.version >= 2) {
|
if (tx.version >= 2) {
|
||||||
if (tx.rct_signatures.type <= rct::RCTTypeBulletproof2)
|
if (tx.rct_signatures.type <= rct::RCTTypeBulletproof2)
|
||||||
{
|
{
|
||||||
MERROR_VER("Ringct type " << (unsigned)tx.rct_signatures.type << " is not allowed from v" << (HF_VERSION_CLSAG + 1));
|
// two MLSAG txes went in due to a bug with txes that went into the txpool before the fork, grandfather them in
|
||||||
tvc.m_invalid_output = true;
|
static const char * grandfathered[2] = { "c5151944f0583097ba0c88cd0f43e7fabb3881278aa2f73b3b0a007c5d34e910", "6f2f117cde6fbcf8d4a6ef8974fcac744726574ac38cf25d3322c996b21edd4c" };
|
||||||
return false;
|
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));
|
||||||
|
tvc.m_invalid_output = true;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue