|
|
|
@ -540,53 +540,7 @@ public:
@@ -540,53 +540,7 @@ public:
|
|
|
|
|
return dPriority > COIN * 144 / 250; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int64 GetMinFee(unsigned int nBlockSize=1, bool fAllowFree=true, enum GetMinFee_mode mode=GMF_BLOCK) const |
|
|
|
|
{ |
|
|
|
|
// Base fee is either MIN_TX_FEE or MIN_RELAY_TX_FEE
|
|
|
|
|
int64 nBaseFee = (mode == GMF_RELAY) ? MIN_RELAY_TX_FEE : MIN_TX_FEE; |
|
|
|
|
|
|
|
|
|
unsigned int nBytes = ::GetSerializeSize(*this, SER_NETWORK, PROTOCOL_VERSION); |
|
|
|
|
unsigned int nNewBlockSize = nBlockSize + nBytes; |
|
|
|
|
int64 nMinFee = (1 + (int64)nBytes / 1000) * nBaseFee; |
|
|
|
|
|
|
|
|
|
if (fAllowFree) |
|
|
|
|
{ |
|
|
|
|
if (nBlockSize == 1) |
|
|
|
|
{ |
|
|
|
|
// Transactions under 10K are free
|
|
|
|
|
// (about 4500 BTC if made of 50 BTC inputs)
|
|
|
|
|
if (nBytes < 10000) |
|
|
|
|
nMinFee = 0; |
|
|
|
|
} |
|
|
|
|
else |
|
|
|
|
{ |
|
|
|
|
// Free transaction area
|
|
|
|
|
if (nNewBlockSize < 27000) |
|
|
|
|
nMinFee = 0; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// To limit dust spam, require MIN_TX_FEE/MIN_RELAY_TX_FEE if any output is less than 0.01
|
|
|
|
|
if (nMinFee < nBaseFee) |
|
|
|
|
{ |
|
|
|
|
BOOST_FOREACH(const CTxOut& txout, vout) |
|
|
|
|
if (txout.nValue < CENT) |
|
|
|
|
nMinFee = nBaseFee; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Raise the price as the block approaches full
|
|
|
|
|
if (nBlockSize != 1 && nNewBlockSize >= MAX_BLOCK_SIZE_GEN/2) |
|
|
|
|
{ |
|
|
|
|
if (nNewBlockSize >= MAX_BLOCK_SIZE_GEN) |
|
|
|
|
return MAX_MONEY; |
|
|
|
|
nMinFee *= MAX_BLOCK_SIZE_GEN / (MAX_BLOCK_SIZE_GEN - nNewBlockSize); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
if (!MoneyRange(nMinFee)) |
|
|
|
|
nMinFee = MAX_MONEY; |
|
|
|
|
return nMinFee; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int64 GetMinFee(unsigned int nBlockSize=1, bool fAllowFree=true, enum GetMinFee_mode mode=GMF_BLOCK) const; |
|
|
|
|
|
|
|
|
|
bool ReadFromDisk(CDiskTxPos pos, FILE** pfileRet=NULL) |
|
|
|
|
{ |
|
|
|
|