Secondary mechanism to trigger watches for transactions from past blocks #3002
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
When a new block is found, we want to check its confirmed transactions to potentially trigger watches. This is especially important when a channel is spent and we haven't seen the spending transaction in our mempool before receiving it in a block.
This is already handled through the ZMQ
rawtx
topic, where bitcoind sends us every transaction it receives (either in the mempool or in a block). But when using remotebitcoind
instances, ZMQ seems to sometimes be unreliable and silently drop some events (mostly when the connection is unstable with thebitcoind
instance). That's why we add another mechanism for extra safety, where whenever a new block is found, we fetch the lastN
blocks and re-process their transactions. We keep a cache of the processed blocks to ensure that we don't needlessly re-process them multiple times.