b913bda472
* 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.
52 lines
1.3 KiB
Go
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.
|
|
}
|