cryptonote core/protocol: don't drop peers for soft offenses
Also: txs with tx_extra which is too large will not get published to ZMQ Co-authored-by: SChernykh <sergey.v.chernykh@gmail.com>
This commit is contained in:
parent
4f47fd2626
commit
059b975388
|
@ -42,7 +42,12 @@ namespace cryptonote
|
||||||
static_assert(unsigned(relay_method::none) == 0, "default m_relay initialization is not to relay_method::none");
|
static_assert(unsigned(relay_method::none) == 0, "default m_relay initialization is not to relay_method::none");
|
||||||
|
|
||||||
relay_method m_relay; // gives indication on how tx should be relayed (if at all)
|
relay_method m_relay; // gives indication on how tx should be relayed (if at all)
|
||||||
bool m_verifivation_failed; //bad tx, should drop connection
|
bool m_verifivation_failed; //bad tx, tx should not enter mempool and connection should be dropped unless m_no_drop_offense
|
||||||
|
// Do not add to mempool, do not relay, but also do not punish the peer for sending or drop
|
||||||
|
// connections to them. Used for low fees, tx_extra too big, "relay-only rules". Not to be
|
||||||
|
// confused with breaking soft fork rules, because tx could be later added to the chain if mined
|
||||||
|
// because it does not violate consensus rules.
|
||||||
|
bool m_no_drop_offense;
|
||||||
bool m_verifivation_impossible; //the transaction is related with an alternative blockchain
|
bool m_verifivation_impossible; //the transaction is related with an alternative blockchain
|
||||||
bool m_added_to_pool;
|
bool m_added_to_pool;
|
||||||
bool m_low_mixin;
|
bool m_low_mixin;
|
||||||
|
|
|
@ -1099,7 +1099,7 @@ namespace cryptonote
|
||||||
else if(tvc[i].m_verifivation_impossible)
|
else if(tvc[i].m_verifivation_impossible)
|
||||||
{MERROR_VER("Transaction verification impossible: " << results[i].hash);}
|
{MERROR_VER("Transaction verification impossible: " << results[i].hash);}
|
||||||
|
|
||||||
if(tvc[i].m_added_to_pool)
|
if(tvc[i].m_added_to_pool && results[i].tx.extra.size() <= MAX_TX_EXTRA_SIZE)
|
||||||
{
|
{
|
||||||
MDEBUG("tx added: " << results[i].hash);
|
MDEBUG("tx added: " << results[i].hash);
|
||||||
valid_events = true;
|
valid_events = true;
|
||||||
|
|
|
@ -207,6 +207,7 @@ namespace cryptonote
|
||||||
{
|
{
|
||||||
tvc.m_verifivation_failed = true;
|
tvc.m_verifivation_failed = true;
|
||||||
tvc.m_fee_too_low = true;
|
tvc.m_fee_too_low = true;
|
||||||
|
tvc.m_no_drop_offense = true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -225,6 +226,7 @@ namespace cryptonote
|
||||||
LOG_PRINT_L1("transaction tx-extra is too big: " << tx_extra_size << " bytes, the limit is: " << MAX_TX_EXTRA_SIZE);
|
LOG_PRINT_L1("transaction tx-extra is too big: " << tx_extra_size << " bytes, the limit is: " << MAX_TX_EXTRA_SIZE);
|
||||||
tvc.m_verifivation_failed = true;
|
tvc.m_verifivation_failed = true;
|
||||||
tvc.m_tx_extra_too_big = true;
|
tvc.m_tx_extra_too_big = true;
|
||||||
|
tvc.m_no_drop_offense = true;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -1020,7 +1020,7 @@ namespace cryptonote
|
||||||
for (auto& tx : arg.txs)
|
for (auto& tx : arg.txs)
|
||||||
{
|
{
|
||||||
tx_verification_context tvc{};
|
tx_verification_context tvc{};
|
||||||
if (!m_core.handle_incoming_tx({tx, crypto::null_hash}, tvc, tx_relay, true))
|
if (!m_core.handle_incoming_tx({tx, crypto::null_hash}, tvc, tx_relay, true) && !tvc.m_no_drop_offense)
|
||||||
{
|
{
|
||||||
LOG_PRINT_CCONTEXT_L1("Tx verification failed, dropping connection");
|
LOG_PRINT_CCONTEXT_L1("Tx verification failed, dropping connection");
|
||||||
drop_connection(context, false, false);
|
drop_connection(context, false, false);
|
||||||
|
|
Loading…
Reference in New Issue