aboutsummaryrefslogtreecommitdiff
path: root/src/txmempool.cpp
AgeCommit message (Collapse)Author
2016-05-09Merge #7976: Remove obsolete reference to CValidationState from UpdateCoins.Wladimir J. van der Laan
c8b9248 Remove obsolete reference to CValidationState from UpdateCoins. (21E14)
2016-05-05Merge #7840: Several performance and privacy improvements to inv/mempool ↵Wladimir J. van der Laan
handling b559914 Move bloom and feerate filtering to just prior to tx sending. (Gregory Maxwell) 4578215 Return mempool queries in dependency order (Pieter Wuille) ed70683 Handle mempool requests in send loop, subject to trickle (Pieter Wuille) dc13dcd Split up and optimize transaction and block inv queues (Pieter Wuille) f2d3ba7 Eliminate TX trickle bypass, sort TX invs for privacy and priority. (Gregory Maxwell)
2016-04-30Remove obsolete reference to CValidationState from UpdateCoins.21E14
2016-04-30[trivial] Add missing const qualifiers.Daniel Kraft
Add some const qualifiers to references that are not modified and should be marked as const.
2016-04-21Return mempool queries in dependency orderPieter Wuille
2016-04-20Eliminate TX trickle bypass, sort TX invs for privacy and priority.Gregory Maxwell
Previously Bitcoin would send 1/4 of transactions out to all peers instantly. This causes high overhead because it makes >80% of INVs size 1. Doing so harms privacy, because it limits the amount of source obscurity a transaction can receive. These randomized broadcasts also disobeyed transaction dependencies and required use of the orphan pool. Because the orphan pool is so small this leads to poor propagation for dependent transactions. When the bypass wasn't in effect, transactions were sent in the order they were received. This avoided creating orphans but undermines privacy fairly significantly. This commit: Eliminates the bypass. The bypass is replaced by halving the average delay for outbound peers. Sorts candidate transactions for INV by their topological depth then by their feerate (then hash); removing the information leakage and providing priority service to higher fee transactions. Limits the amount of transactions sent in a single INV to 7tx/sec (and twice that for outbound); this limits the harm of low fee transaction floods, gives faster relay service to higher fee transactions. The 7 sounds lower than it really is because received advertisements need not be sent, and because the aggregate rate is multipled by the number of peers.
2016-03-21Implement "feefilter" P2P message.Alex Morcos
The "feefilter" p2p message is used to inform other nodes of your mempool min fee which is the feerate that any new transaction must meet to be accepted to your mempool. This will allow them to filter invs to you according to this feerate.
2016-03-17Merge #7594: Mempool: Add tracking of ancestor packagesWladimir J. van der Laan
ce019bf Check all ancestor state in CTxMemPool::check() (Suhas Daftuar) e2eeb5d Add ancestor feerate index to mempool (Suhas Daftuar) 72abd2c Add ancestor tracking to mempool (Suhas Daftuar) 76a7632 Remove work limit in UpdateForDescendants() (Suhas Daftuar) 5de2baa Rename CTxMemPool::remove -> removeRecursive (Suhas Daftuar) 7659438 CTxMemPool::removeForBlock now uses RemoveStaged (Suhas Daftuar)
2016-03-16Merge #7187: Keep reorgs fast for SequenceLocks checksWladimir J. van der Laan
982670c Add LockPoints (Alex Morcos)
2016-03-16Add LockPointsAlex Morcos
Obtain LockPoints to store in CTxMemPoolEntry and during a reorg, evaluate whether they are still valid and if not, recalculate them.
2016-03-14Check all ancestor state in CTxMemPool::check()Suhas Daftuar
2016-03-14Add ancestor feerate index to mempoolSuhas Daftuar
2016-03-14Add ancestor tracking to mempoolSuhas Daftuar
This implements caching of ancestor state to each mempool entry, similar to descendant tracking, but also including caching sigops-with-ancestors (as that metric will be helpful to future code that implements better transaction selection in CreatenewBlock).
2016-03-14Remove work limit in UpdateForDescendants()Suhas Daftuar
The work limit served to prevent the descendant walking algorithm from doing too much work by marking the parent transaction as dirty. However to implement ancestor tracking, it's not possible to similarly mark those descendant transactions as dirty without having to calculate them to begin with. This commit removes the work limit altogether. With appropriate chain limits (-limitdescendantcount) the concern about doing too much work inside this function should be mitigated.
2016-03-14Rename CTxMemPool::remove -> removeRecursiveSuhas Daftuar
remove is no longer called non-recursively, so simplify the logic and eliminate an unnecessary parameter
2016-03-14CTxMemPool::removeForBlock now uses RemoveStagedSuhas Daftuar
2016-02-16Add tags to mempool's mapTx indicesSuhas Daftuar
2016-02-12Merge #7184: Implement SequenceLocks functions for BIP 68Wladimir J. van der Laan
b043c4b fix sdaftuar's nits again (Alex Morcos) a51c79b Bug fix to RPC test (Alex Morcos) da6ad5f Add RPC test exercising BIP68 (mempool only) (Suhas Daftuar) c6c2f0f Implement SequenceLocks functions (Alex Morcos)
2016-02-10Implement SequenceLocks functionsAlex Morcos
SequenceLocks functions are used to evaluate sequence lock times or heights per BIP 68. The majority of this code is copied from maaku in #6312 Further credit: btcdrak, sipa, NicolasDorier
2016-01-05Merge pull request #7205Wladimir J. van der Laan
fa71669 [devtools] Use git pretty-format for year parsing (MarcoFalke) fa24439 Bump copyright headers to 2015 (MarcoFalke) fa6ad85 [devtools] Rewrite fix-copyright-headers.py (MarcoFalke)
2015-12-13Bump copyright headers to 2015MarcoFalke
2015-12-02Fix mempool limiting for PrioritiseTransactionSuhas Daftuar
Redo the feerate index to be based on mining score, rather than fee. Update mempool_packages.py to test prioritisetransaction's effect on package scores.
2015-12-01Get the set of now-uncacheable-txn from CTxMemPool::TrimToSizeMatt Corallo
2015-12-01Add a score index to the mempool.Alex Morcos
The score index is meant to represent the order of priority for being included in a block for miners. Initially this is set to the transactions modified (by any feeDelta) fee rate. Index improvements and unit tests by sdaftuar.
2015-12-01Store the total sig op count of a tx.Alex Morcos
Store sum of legacy and P2SH sig op counts. This is calculated in AcceptToMemory pool and storing it saves redoing the expensive calculation in block template creation.
2015-11-30Fix removeForReorg to use MedianTimePastSuhas Daftuar
2015-11-30Track coinbase spends in CTxMemPoolEntrySuhas Daftuar
This allows us to optimize CTxMemPool::removeForReorg.
2015-11-30Fix comment in removeForReorgMatt Corallo
2015-11-30Fix removal of time-locked transactions during reorgMatt Corallo
2015-11-19Change GetPriority calculation.Alex Morcos
Compute the value of inputs that already are in the chain at time of mempool entry and only increase priority due to aging for those inputs. This effectively changes the CTxMemPoolEntry's GetPriority calculation from an upper bound to a lower bound.
2015-11-19Modify variable names for entry height and priorityAlex Morcos
2015-11-24Pass reference to estimateSmartFee and cleanup whitespaceSuhas Daftuar
2015-11-16EstimateSmart functions consider mempool min feeAlex Morcos
2015-11-16Add smart fee estimation functionsAlex Morcos
These are more useful fee and priority estimation functions. If there is no fee/pri high enough for the target you are aiming for, it will give you the estimate for the lowest target that you can reliably obtain. This is better than defaulting to the minimum. It will also pass back the target for which it returned an answer.
2015-10-28Merge pull request #6776Pieter Wuille
ab1f560 Support -checkmempool=N, which runs checks on average once every N transactions (Pieter Wuille)
2015-10-27Merge pull request #6464Wladimir J. van der Laan
2d8c49d Clean up tx prioritization when conflict mined (Casey Rodarmor)
2015-10-26fix locking issue with new mempool limitingJonas Schnelli
Current master crashes on OSX with an exception: "boost: mutex lock failed in pthread_mutex_lock: Invalid argument"
2015-10-20Support -checkmempool=N, which runs checks on average once every N transactionsPieter Wuille
2015-10-19Fix stale comment in CTxMemPool::TrimToSize.Matt Corallo
2015-10-14Undo GetMinFee-requires-extra-call-to-hit-0Matt Corallo
2015-10-13Implement on-the-fly mempool size limitation.Matt Corallo
After each transaction which is added to mempool, we first call Expire() to remove old transactions, then throwing away the lowest-feerate transactions. After throwing away transactions by feerate, we set the minimum relay fee to the maximum fee transaction-and-dependant-set we removed, plus the default minimum relay fee. After the next block is received, the minimum relay fee is allowed to decrease exponentially. Its halflife defaults to 12 hours, but is decreased to 6 hours if the mempool is smaller than half its maximum size, and 3 hours if the mempool is smaller than a quarter its maximum size. The minimum -maxmempool size is 40*-limitdescendantsize, as it is easy for an attacker to play games with the cheapest -limitdescendantsize transactions. -maxmempool defaults to 300MB. This disables high-priority transaction relay when the min relay fee adjustment is >0 (ie when the mempool is full). When the relay fee adjustment drops below the default minimum relay fee / 2 it is set to 0 (re-enabling priority-based free relay).
2015-10-13Track (and define) ::minRelayTxFee in CTxMemPoolMatt Corallo
2015-10-13Fix calling mempool directly, instead of pool, in ATMPMatt Corallo
2015-10-13Add Mempool Expire function to remove old transactionsPieter Wuille
(note the 9x multiplier on (void*)'s for CTxMemPool::DynamicMemoryUsage was accidentally introduced in 5add7a7 but should have waited for this commit which adds the extra index)
2015-09-23Fix mempool package tracking edge caseSuhas Daftuar
CalculateMemPoolAncestors was always looping over a transaction's inputs to find in-mempool parents. When adding a new transaction, this is the correct behavior, but when removing a transaction, we want to use the ancestor set that would be calculated by walking mapLinks (which should in general be the same set, except during a reorg when the mempool is in an inconsistent state, and the mapLinks-based calculation would be the correct one).
2015-09-19Track transaction packages in CTxMemPoolEntrySuhas Daftuar
Associate with each CTxMemPoolEntry all the size/fees of descendant mempool transactions. Sort mempool by max(feerate of entry, feerate of descendants). Update statistics on-the-fly as transactions enter or leave the mempool. Also add ancestor and descendant limiting, so that transactions can be rejected if the number or size of unconfirmed ancestors exceeds a target, or if adding a transaction would cause some other mempool entry to have too many (or too large) a set of unconfirmed in- mempool descendants.
2015-09-19TxMemPool: Change mapTx to a boost::multi_index_containerAshley Holman
Indexes on: - Tx Hash - Fee Rate (fee-per-kb)
2015-08-03Clean up tx prioritization when conflict minedCasey Rodarmor
2015-08-03Make sure LogPrintf strings are line-terminatedWladimir J. van der Laan
Fix the cases where LogPrint[f] was accidentally called without line terminator, which resulted in concatenated log lines. (see e.g. #6492)
2015-07-20Separate core memory usage computation in core_memusage.hPieter Wuille