mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-03-26 01:33:02 +01:00
chainntfs: expand ChainNotifier interface
* The `NotificationTrigger` struct has been dropped. Instead we know simply employ a non-blocking send over a chan struct. This moves the responsibility of triggering callbacks a level above to the registering client. * Confirmation notifications also now have a counter part in order to notify a caller of the scenario wherein a funding transaction drops out of the chain due to a re-org. A “neagtiveConf” value will be sent to the client over a channel in this case. This will allow a caller to re-register for another confirmation notification. Note that due to this scenario, callers should also register for notifications concerning spends of the counterparty’s inputs to the funding transaction. If a second spend (other than the funding) is detected, the channel should be closed immediately. * Notifications concerning spends now also include the spending transaction, hash, and the input on the spending transaction at which the outpoint is spent.
This commit is contained in:
parent
2367300d71
commit
b913bda472
@ -2,6 +2,7 @@ package chainntnfs
|
||||
|
||||
import "github.com/btcsuite/btcd/wire"
|
||||
|
||||
// ChainNotifier ...
|
||||
// TODO(roasbeef): finish
|
||||
// * multiple backends for interface
|
||||
// * btcd - websockets
|
||||
@ -12,14 +13,39 @@ import "github.com/btcsuite/btcd/wire"
|
||||
// * SPV bloomfilter
|
||||
// * other stuff maybe...
|
||||
type ChainNotifier interface {
|
||||
RegisterConfirmationsNotification(txid *wire.ShaHash, numConfs uint32, trigger *NotificationTrigger) error
|
||||
RegisterSpendNotification(outpoint *wire.OutPoint, trigger *NotificationTrigger) error
|
||||
RegisterConfirmationsNtfn(txid *wire.ShaHash, numConfs uint32) (*ConfirmationEvent, error)
|
||||
RegisterSpendNtfn(outpoint *wire.OutPoint) (*SpendEvent, error)
|
||||
|
||||
Start() error
|
||||
Stop() error
|
||||
}
|
||||
|
||||
type NotificationTrigger struct {
|
||||
TriggerChan chan struct{}
|
||||
Callback func()
|
||||
// TODO(roasbeef): ln channels should request spend ntfns for counterparty's
|
||||
// inputs to funding tx also, consider channel closed if funding tx re-org'd
|
||||
// out and inputs double spent.
|
||||
|
||||
// ConfirmationEvent ...
|
||||
type ConfirmationEvent struct {
|
||||
Confirmed chan struct{} // MUST be buffered.
|
||||
|
||||
// TODO(roasbeef): all goroutines on ln channel updates should also
|
||||
// have a struct chan that's closed if funding gets re-org out. Need
|
||||
// to sync, to request another confirmation event ntfn, then re-open
|
||||
// channel after confs.
|
||||
|
||||
NegativeConf chan uint32 // MUST be buffered.
|
||||
}
|
||||
|
||||
// SpendDetail ...
|
||||
type SpendDetail struct {
|
||||
SpentOutPoint *wire.OutPoint
|
||||
|
||||
SpendingTx *wire.MsgTx
|
||||
SpenderTxHash *wire.ShaHash
|
||||
SpenderInputIndex uint32
|
||||
}
|
||||
|
||||
// SpendEvent ...
|
||||
type SpendEvent struct {
|
||||
Spend chan *SpendDetail // MUST be buffered.
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user