lnd/chainntfs/chainntfs.go
Olaoluwa Osuntokun b913bda472 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.
2016-02-26 17:38:30 -08:00

52 lines
1.3 KiB
Go

package chainntnfs
import "github.com/btcsuite/btcd/wire"
// ChainNotifier ...
// TODO(roasbeef): finish
// * multiple backends for interface
// * btcd - websockets
// * core - rpc polling or ZeroMQ
// * direct p2p
// * random bitcoin API?
// * electrum?
// * SPV bloomfilter
// * other stuff maybe...
type ChainNotifier interface {
RegisterConfirmationsNtfn(txid *wire.ShaHash, numConfs uint32) (*ConfirmationEvent, error)
RegisterSpendNtfn(outpoint *wire.OutPoint) (*SpendEvent, error)
Start() error
Stop() error
}
// 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.
}