diff --git a/src/cryptonote_config.h b/src/cryptonote_config.h index 295f59e51..d271d2e4a 100644 --- a/src/cryptonote_config.h +++ b/src/cryptonote_config.h @@ -6,6 +6,7 @@ #define CRYPTONOTE_MAX_BLOCK_NUMBER 500000000 #define CRYPTONOTE_MAX_BLOCK_SIZE 500000000 // block header blob limit, never used! +#define CRYPTONOTE_GETBLOCKTEMPLATE_MAX_BLOCK_SIZE 196608 //size of block (bytes) that is the maximum that miners will produce #define CRYPTONOTE_MAX_TX_SIZE 1000000000 #define CRYPTONOTE_PUBLIC_ADDRESS_TEXTBLOB_VER 0 #define CRYPTONOTE_PUBLIC_ADDRESS_BASE58_PREFIX 18 // addresses start with "4" diff --git a/src/cryptonote_core/tx_pool.cpp b/src/cryptonote_core/tx_pool.cpp index 1778c590a..bf932404a 100644 --- a/src/cryptonote_core/tx_pool.cpp +++ b/src/cryptonote_core/tx_pool.cpp @@ -424,6 +424,14 @@ namespace cryptonote if (tx.second.blob_size > upper_transaction_size_limit) continue; + // If adding this tx will make the block size + // greater than CRYPTONOTE_GETBLOCKTEMPLATE_MAX + // _BLOCK_SIZE bytes, reject the tx; this will + // keep block sizes from becoming too unwieldly + // to propagate at 60s block times. + if ( (total_size + tx.second.blob_size) > CRYPTONOTE_GETBLOCKTEMPLATE_MAX_BLOCK_SIZE ) + continue; + // If adding this tx will make the block size // greater than 130% of the median, reject the // tx; this will keep down largely punitive tx