New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
chainntnfs: handle spend notifications within TxConfNotifier #2004
chainntnfs: handle spend notifications within TxConfNotifier #2004
Commits on Oct 31, 2018
-
chainntnfs/interface_test: stop UnsafeStart notifiers within test
In this commit, we modify the set of tests that start the different backend notifiers with UnsafeStart to stop them within the tests themselves. This prevents us from running into a panic when attempting to run the package-level tests with a filter (using test.run).
-
chainntnfs/height_hint_cache: prevent db transactions with no updates
In this commit, we modify our height hint cache to no longer start a database transaction if no outpoints/txids are provided to update the height hints for.
-
-
-
-
-
chainntnfs: extend SpendEvent with reorg channel
In this commit, we add a new channel within the SpendEvent struct that will be sent upon whenever the spending transaction of the registered outpoint gets reorged out of the chain. This will pave the road for successfully handling a funding transaction getting reorged out of the chain among other things.
-
chainntnfs/txnotifier: add fields/structs to track spend notifications
In this commit, we introduce the required fields for the TxNotifier to properly carry its duties in notifying its registered clients about the spend of an outpoint. These are not yet used, but will be throughout the some of the following commits.
-
chainntnfs/txnotifier: allow registration of spend notifications
In this commit, we introduce the registration logic for spend notifications to the TxNotifier. Most of this logic was taken from the different existing ChainNotifier implementations, however, it features some useful additions in order to make the ChainNotifier a bit more robust. Some of these additions include the following: 1. RegisterSpend will now return a HistoricalSpendDispatch struct, which includes the details for successfully determining if an outpoint was spent in the past. A HistoricalSpendDispatch will only be returned upon the first registration of an outpoint. This is done as, previously, if multiple clients registered for the same outpoint, then multiple historical rescans would also be dispatched, incurring a toll on the backend itself. 2. UpdateSpendDetails will now be used to determine when a historical rescan has completed, no matter if a spending transaction was found or not. This is needed in order to responsibly update the spend hints for outpoints at tip, otherwise we'd attempt to update them even though we haven't yet determined if they have been spent or not. This will dispatch notifications to all currently registered clients for the same outpoint. In the event that another client registers later on, then the spending details are cached in memory in order to prevent further historical rescans.
-
chainntnfs/txnotifier: watch for spends at tip
In this commit, we add support to allow the TxNotifier to properly determine whether a new block extending the chain contains a transaction that spends a registered outpoint. In the event that it does, spend notifications will be dispatched to all active registered clients for such outpoint.
-
chainntnfs/txnotifier: detect reorgs for spending transactions of reg…
…istered outpoints In this commit, we introduce support to the TxNotifier to detect spending transactions of registered outpoints being reorged out of the chain. In the event that a reorg does occur, we'll consume the Spend notification if it hasn't been consumed yet, and dispatch a Reorg notification instead.
-
chainntnfs/txnotifier: correctly update confirm/spend hints on chain …
…updates In this commit, we address an issue w.r.t. updating the confirm hints for transactions and spend hints for outpoints on chain updates. Previously, upon a block being disconnected, we'd attempt to commit a new height hint for all outstanding confirmation notifications. This is not correct because we'll end up modifying the height hint for things that have confirmed at a previous height than the one being disconnected. This would cause issues on restart when attempting a historical dispatch, as we would start scanning at a height above which the transaction actually confirmed in. This has been addressed by only updating the hints for outstanding notifications that are still unconfirmed/unspent and for notifications that were confirmed/spent within the block being connected/disconnected.
-
chainntnfs/bitcoindnotify: handle spend notification registration w/ …
…TxNotifier In this commit, we modify the logic within RegisterSpendNtfn for the BitcoindNotifier to account for the recent changes made to the TxNotifier. Since it is now able to handle spend notification registration and dispatch, we can bypass all the current logic within the BitcoindNotifier and interact directly with the TxNotifier instead. The most notable changes include the following: 1. We'll only attempt a historical rescan if the TxNotifier tells us so. 2. We'll dispatch the historical rescan within the main goroutine to prevent WaitGroup panics, due to the asynchronous nature of the notifier.
-
chainntnfs/bitcoindnotify: remove old spend notification handling logic
In this commit, we remove the old spend notification logic within the BitcoindNotifier as it's been phased out by the TxNotifier.
-
chainntnfs/btcdnotify: handle spend notification registration w/ TxNo…
…tifier In this commit, we modify the logic within RegisterSpendNtfn for the BtcdNotifier to account for the recent changes made to the TxNotifier. Since it is now able to handle spend notification registration and dispatch, we can bypass all the current logic within the BtcdNotifier and interact directly with the TxNotifier instead. The most notable change is that now we'll only attempt a historical rescan if the TxNotifier tells us so.
-
chainntnfs/btcdnotify: remove old spend notification handling logic
In this commit, we remove the old spend notification logic within the BtcdNotifier as it's been phased out by the TxNotifier.
-
chainntnfs/neutrinonotify: handle spend notification registration w/ …
…TxNotifier In this commit, we modify the logic within RegisterSpendNtfn for the NeutrinoNotifier to account for the recent changes made to the TxNotifier. Since it is now able to handle spend notification registration and dispatch, we can bypass all the current logic within the NeutrinoNotifier and interact directly with the TxNotifier instead. The most notable change is that now we'll only attempt a historical rescan if the TxNotifier tells us so.
-
chainntnfs/neutrinonotify: remove old spend notification handling logic
In this commit, we remove the old spend notification logic within the NeutrinoNotifier as it's been phased out by the TxNotifier.
-
-
chainntnfs/txnotifier: commit height hint after rescan is complete
In this commit, we'll now commit the current height of the TxNotifier as the height hint for an outpoint/transaction after a rescan has been completed and has determined that the outpoint is unspent/transaction is unconfirmed. We do this to prevent another potentially long rescan if the daemon is restarted before a new block comes in (which is when the hints will be updated again).
-
chainntnfs/neutrinonotify: make filter update synchronous
In this commit, we modify the notifier to handle filter updates synchronously. We do this to prevent race conditions between new block notifications and filter updates. Otherwise, it's possible for a new block to come in that should match our filter, but doesn't due to the filter being updated after. We also modify their order so that the filter is updated first. We do this so we can immediately start watching for the event at tip while the rescan is ongoing.