Reset InMempool txs to Inactive before connecting to the node#2051
Reset InMempool txs to Inactive before connecting to the node#2051
Conversation
ImplOfAnImpl
left a comment
There was a problem hiding this comment.
As I mentioned earlier, mempool can evict transactions - there is a size limit for the entire mempool and an expiration time for each tx. Though at this memoment it's unlikely to happen (the size limit is 300Mb and expiration time 2 weeks), it's better to fix the problem fully from the beginning. At this moment eviction only happens after a new tx has been added to the mempool. So the fix could be that whenever the wallet receives a NewTransaction event, it would obtain all InMempool tx ids from the output cache, check which of them are no longer in mempool and reset their status. (though it's better not to use MempoolRpc::contains_tx for checking and instead introduce an additional method that would operate on a set of ids, to avoid the rpc calls overhead).
|
|
||
| // add 10 random txs | ||
| for _ in 0..10 { | ||
| add_random_transfer_tx(&mut output_cache, &chain_config, &mut rng); |
There was a problem hiding this comment.
Plz don't create random transactions, create ones with InMempool state explicitly.
For this you can factor out the corresponding logic from add_random_transfer_tx into a separate func add_random_transfer_tx_with_state and call it here and inside add_random_transfer_tx.
| // after the first successful sync to the tip fetch all mempool transactions | ||
| if !self.finished_initial_sync.test() { | ||
| if self.should_resecan_mempool_txs { |
There was a problem hiding this comment.
The comment is outdated, as mempool fetching is now performed not only after the first successful sync
We reset all InMempool transactions back to Inactive on
so that we can rescan them from the node when we connect back.