Satoshi MailBeta Open in Satoshi Mail

require some minimal priority for free transactions to slow down transaction spam

Commit by Satoshi Nakamoto (s_nakamoto) on 19 November 2010 · SVN r185 · release v0.3.17 · 3 files, +17 −12

Open in Satoshi Mail View on GitHub

Files changed

main.cpp
@@ -3197,6 +3197,7 @@ void BitcoinMiner()
             while (!mapPriority.empty())
             {
                 // Take highest priority transaction off priority queue
+                double dPriority = (*mapPriority.begin()).first;
                 CTransaction& tx = *(*mapPriority.begin()).second;
                 mapPriority.erase(mapPriority.begin());
 
@@ -3208,8 +3209,9 @@ void BitcoinMiner()
                 if (nBlockSigOps + nTxSigOps >= MAX_BLOCK_SIGOPS)
                     continue;
 
-                // Transaction fee based on block size
-                int64 nMinFee = tx.GetMinFee(nBlockSize);
+                // Transaction fee required depends on block size
+                bool fAllowFree = (nBlockSize + nTxSize < 4000 || dPriority > COIN * 144 / 250);
+                int64 nMinFee = tx.GetMinFee(nBlockSize, fAllowFree);
 
                 // Connecting shouldn't fail due to dependency on other memory pool transactions
                 // because we're already processing them in order of dependency
main.h
@@ -528,21 +528,24 @@ public:
         return nValueOut;
     }
 
-    int64 GetMinFee(unsigned int nBlockSize=1) const
+    int64 GetMinFee(unsigned int nBlockSize=1, bool fAllowFree=true) const
     {
         // Base fee is 1 cent per kilobyte
         unsigned int nBytes = ::GetSerializeSize(*this, SER_NETWORK);
         unsigned int nNewBlockSize = nBlockSize + nBytes;
         int64 nMinFee = (1 + (int64)nBytes / 1000) * CENT;
 
-        // Transactions under 25K are free as long as block size is under 40K
-        // (about 11,000bc if made of 50bc inputs)
-        if (nBytes < 25000 && nNewBlockSize < 40000)
-            nMinFee = 0;
-
-        // Transactions under 3K are free as long as block size is under 50K
-        if (nBytes < 3000 && nNewBlockSize < 50000)
-            nMinFee = 0;
+        if (fAllowFree)
+        {
+            // Transactions under 25K are free as long as block size is under 40K
+            // (about 11,000bc if made of 50bc inputs)
+            if (nBytes < 25000 && nNewBlockSize < 40000)
+                nMinFee = 0;
+
+            // Transactions under 3K are free as long as block size is under 50K
+            if (nBytes < 3000 && nNewBlockSize < 50000)
+                nMinFee = 0;
+        }
 
         // To limit dust spam, require a 0.01 fee if any output is less than 0.01
         if (nMinFee < CENT)
serialize.h
@@ -22,7 +22,7 @@ class CDataStream;
 class CAutoFile;
 static const unsigned int MAX_SIZE = 0x02000000;
 
-static const int VERSION = 31502;
+static const int VERSION = 31503;
 static const char* pszSubVer = "";