| 1205 | } |
| 1206 | |
| 1207 | CFeeRate CTxMemPool::GetMinFee(size_t sizelimit) const { |
| 1208 | LOCK(cs); |
| 1209 | if (!blockSinceLastRollingFeeBump || rollingMinimumFeeRate == 0) |
| 1210 | return CFeeRate(llround(rollingMinimumFeeRate)); |
| 1211 | |
| 1212 | int64_t time = GetTime(); |
| 1213 | if (time > lastRollingFeeUpdate + 10) { |
| 1214 | double halflife = ROLLING_FEE_HALFLIFE; |
| 1215 | if (DynamicMemoryUsage() < sizelimit / 4) |
| 1216 | halflife /= 4; |
| 1217 | else if (DynamicMemoryUsage() < sizelimit / 2) |
| 1218 | halflife /= 2; |
| 1219 | |
| 1220 | rollingMinimumFeeRate = rollingMinimumFeeRate / pow(2.0, (time - lastRollingFeeUpdate) / halflife); |
| 1221 | lastRollingFeeUpdate = time; |
| 1222 | |
| 1223 | if (rollingMinimumFeeRate < (double)incrementalRelayFee.GetFeePerK() / 2) { |
| 1224 | rollingMinimumFeeRate = 0; |
| 1225 | return CFeeRate(0); |
| 1226 | } |
| 1227 | } |
| 1228 | return std::max(CFeeRate(llround(rollingMinimumFeeRate)), incrementalRelayFee); |
| 1229 | } |
| 1230 | |
| 1231 | void CTxMemPool::trackPackageRemoved(const CFeeRate& rate) { |
| 1232 | AssertLockHeld(cs); |