Skip to content
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

Merged
merged 23 commits into from Oct 31, 2018

Commits on Oct 31, 2018

  1. 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).
    wpaulino committed Oct 31, 2018
    Copy the full SHA
    39d86d5 View commit details
    Browse the repository at this point in the history
  2. 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.
    wpaulino committed Oct 31, 2018
    Copy the full SHA
    f4cf107 View commit details
    Browse the repository at this point in the history
  3. Copy the full SHA
    f8789e9 View commit details
    Browse the repository at this point in the history
  4. Copy the full SHA
    82f6fd7 View commit details
    Browse the repository at this point in the history
  5. Copy the full SHA
    f65401b View commit details
    Browse the repository at this point in the history
  6. Copy the full SHA
    405e8f0 View commit details
    Browse the repository at this point in the history
  7. Copy the full SHA
    f4128c9 View commit details
    Browse the repository at this point in the history
  8. 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.
    wpaulino committed Oct 31, 2018
    Copy the full SHA
    87123d5 View commit details
    Browse the repository at this point in the history
  9. 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.
    wpaulino committed Oct 31, 2018
    Copy the full SHA
    fc7a33b View commit details
    Browse the repository at this point in the history
  10. 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.
    wpaulino committed Oct 31, 2018
    Copy the full SHA
    4d7fa9e View commit details
    Browse the repository at this point in the history
  11. 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.
    wpaulino committed Oct 31, 2018
    Copy the full SHA
    e6b2755 View commit details
    Browse the repository at this point in the history
  12. 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.
    wpaulino committed Oct 31, 2018
    Copy the full SHA
    f27e73f View commit details
    Browse the repository at this point in the history
  13. 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.
    wpaulino committed Oct 31, 2018
    Copy the full SHA
    2935392 View commit details
    Browse the repository at this point in the history
  14. Copy the full SHA
    1fe3d59 View commit details
    Browse the repository at this point in the history
  15. 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.
    wpaulino committed Oct 31, 2018
    Copy the full SHA
    180dffd View commit details
    Browse the repository at this point in the history
  16. 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.
    wpaulino committed Oct 31, 2018
    Copy the full SHA
    0927f35 View commit details
    Browse the repository at this point in the history
  17. 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.
    wpaulino committed Oct 31, 2018
    Copy the full SHA
    88edd32 View commit details
    Browse the repository at this point in the history
  18. 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.
    wpaulino committed Oct 31, 2018
    Copy the full SHA
    74139c9 View commit details
    Browse the repository at this point in the history
  19. 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.
    wpaulino committed Oct 31, 2018
    Copy the full SHA
    bfd11a2 View commit details
    Browse the repository at this point in the history
  20. 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.
    wpaulino committed Oct 31, 2018
    Copy the full SHA
    deca4cf View commit details
    Browse the repository at this point in the history
  21. Copy the full SHA
    6458868 View commit details
    Browse the repository at this point in the history
  22. 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).
    wpaulino committed Oct 31, 2018
    Copy the full SHA
    60a1d73 View commit details
    Browse the repository at this point in the history
  23. 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.
    wpaulino committed Oct 31, 2018
    Copy the full SHA
    e6b1a27 View commit details
    Browse the repository at this point in the history