mirror of
				https://git.wownero.com/wownero/wownero.git
				synced 2024-08-15 01:03:23 +00:00 
			
		
		
		
	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
					
				
					 4 changed files with 10 additions and 3 deletions
				
			
		| 
						 | 
				
			
			@ -42,7 +42,12 @@ namespace cryptonote
 | 
			
		|||
    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)
 | 
			
		||||
    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_added_to_pool; 
 | 
			
		||||
    bool m_low_mixin;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1099,7 +1099,7 @@ namespace cryptonote
 | 
			
		|||
      else if(tvc[i].m_verifivation_impossible)
 | 
			
		||||
      {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);
 | 
			
		||||
        valid_events = true;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -207,6 +207,7 @@ namespace cryptonote
 | 
			
		|||
    {
 | 
			
		||||
      tvc.m_verifivation_failed = true;
 | 
			
		||||
      tvc.m_fee_too_low = true;
 | 
			
		||||
      tvc.m_no_drop_offense = true;
 | 
			
		||||
      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);
 | 
			
		||||
      tvc.m_verifivation_failed = true;
 | 
			
		||||
      tvc.m_tx_extra_too_big = true;
 | 
			
		||||
      tvc.m_no_drop_offense = true;
 | 
			
		||||
      return false;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1020,7 +1020,7 @@ namespace cryptonote
 | 
			
		|||
    for (auto& tx : arg.txs)
 | 
			
		||||
    {
 | 
			
		||||
      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");
 | 
			
		||||
        drop_connection(context, false, false);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue