@ -29,7 +29,8 @@ static const unsigned int MAX_BLOCK_SIZE_GEN = MAX_BLOCK_SIZE/2;
static const int MAX_BLOCK_SIGOPS = MAX_BLOCK_SIZE / 50 ;
static const int MAX_BLOCK_SIGOPS = MAX_BLOCK_SIZE / 50 ;
static const int64 COIN = 100000000 ;
static const int64 COIN = 100000000 ;
static const int64 CENT = 1000000 ;
static const int64 CENT = 1000000 ;
static const int64 MIN_TX_FEE = 50000 ;
static const int64 MIN_TX_FEE = CENT ;
static const int64 MIN_RELAY_TX_FEE = 50000 ;
static const int64 MAX_MONEY = 21000000 * COIN ;
static const int64 MAX_MONEY = 21000000 * COIN ;
inline bool MoneyRange ( int64 nValue ) { return ( nValue > = 0 & & nValue < = MAX_MONEY ) ; }
inline bool MoneyRange ( int64 nValue ) { return ( nValue > = 0 & & nValue < = MAX_MONEY ) ; }
static const int COINBASE_MATURITY = 100 ;
static const int COINBASE_MATURITY = 100 ;
@ -599,12 +600,14 @@ public:
return dPriority > COIN * 144 / 250 ;
return dPriority > COIN * 144 / 250 ;
}
}
int64 GetMinFee ( unsigned int nBlockSize = 1 , bool fAllowFree = true ) const
int64 GetMinFee ( unsigned int nBlockSize = 1 , bool fAllowFree = true , bool fForRelay = false ) const
{
{
// Base fee is 1 cent per kilobyte
// Base fee is either MIN_TX_FEE or MIN_RELAY_TX_FEE
int64 nBaseFee = fForRelay ? MIN_RELAY_TX_FEE : MIN_TX_FEE ;
unsigned int nBytes = : : GetSerializeSize ( * this , SER_NETWORK ) ;
unsigned int nBytes = : : GetSerializeSize ( * this , SER_NETWORK ) ;
unsigned int nNewBlockSize = nBlockSize + nBytes ;
unsigned int nNewBlockSize = nBlockSize + nBytes ;
int64 nMinFee = ( 1 + ( int64 ) nBytes / 1000 ) * MIN_TX_FEE ;
int64 nMinFee = ( 1 + ( int64 ) nBytes / 1000 ) * nBaseFee ;
if ( fAllowFree )
if ( fAllowFree )
{
{
@ -623,11 +626,11 @@ public:
}
}
}
}
// To limit dust spam, require MIN_TX_FEE if any output is less than 0.01
// To limit dust spam, require MIN_TX_FEE /MIN_RELAY_TX_FEE if any output is less than 0.01
if ( nMinFee < MIN_TX_FEE )
if ( nMinFee < nBaseFee )
BOOST_FOREACH ( const CTxOut & txout , vout )
BOOST_FOREACH ( const CTxOut & txout , vout )
if ( txout . nValue < CENT )
if ( txout . nValue < CENT )
nMinFee = MIN_TX_FEE ;
nMinFee = nBaseFee ;
// Raise the price as the block approaches full
// Raise the price as the block approaches full
if ( nBlockSize ! = 1 & & nNewBlockSize > = MAX_BLOCK_SIZE_GEN / 2 )
if ( nBlockSize ! = 1 & & nNewBlockSize > = MAX_BLOCK_SIZE_GEN / 2 )