peer: when creating new links, obtain an on-chain events subscription

This commit is contained in:
Olaoluwa Osuntokun 2018-01-18 14:03:13 -08:00
parent b5ae0855d2
commit defa1bc3e3
No known key found for this signature in database
GPG Key ID: 964EA263DD637C21

16
peer.go

@ -296,8 +296,7 @@ func (p *peer) Start() error {
func (p *peer) loadActiveChannels(chans []*channeldb.OpenChannel) error { func (p *peer) loadActiveChannels(chans []*channeldb.OpenChannel) error {
for _, dbChan := range chans { for _, dbChan := range chans {
lnChan, err := lnwallet.NewLightningChannel( lnChan, err := lnwallet.NewLightningChannel(
p.server.cc.signer, p.server.cc.chainNotifier, p.server.cc.signer, p.server.witnessBeacon, dbChan,
p.server.witnessBeacon, dbChan,
) )
if err != nil { if err != nil {
return err return err
@ -379,6 +378,10 @@ func (p *peer) loadActiveChannels(chans []*channeldb.OpenChannel) error {
// Register this new channel link with the HTLC Switch. This is // Register this new channel link with the HTLC Switch. This is
// necessary to properly route multi-hop payments, and forward // necessary to properly route multi-hop payments, and forward
// new payments triggered by RPC clients. // new payments triggered by RPC clients.
chainEvents, err := p.server.chainArb.SubscribeChannelEvents(*chanPoint)
if err != nil {
return err
}
linkCfg := htlcswitch.ChannelLinkConfig{ linkCfg := htlcswitch.ChannelLinkConfig{
Peer: p, Peer: p,
DecodeHopIterator: p.server.sphinx.DecodeHopIterator, DecodeHopIterator: p.server.sphinx.DecodeHopIterator,
@ -394,6 +397,7 @@ func (p *peer) loadActiveChannels(chans []*channeldb.OpenChannel) error {
FeeEstimator: p.server.cc.feeEstimator, FeeEstimator: p.server.cc.feeEstimator,
BlockEpochs: blockEpoch, BlockEpochs: blockEpoch,
PreimageCache: p.server.witnessBeacon, PreimageCache: p.server.witnessBeacon,
ChainEvents: chainEvents,
UpdateContractSignals: func(signals *contractcourt.ContractSignals) error { UpdateContractSignals: func(signals *contractcourt.ContractSignals) error {
return p.server.chainArb.UpdateContractSignals( return p.server.chainArb.UpdateContractSignals(
*chanPoint, signals, *chanPoint, signals,
@ -1275,6 +1279,12 @@ out:
peerLog.Errorf("unable to get best block: %v", err) peerLog.Errorf("unable to get best block: %v", err)
continue continue
} }
chainEvents, err := p.server.chainArb.SubscribeChannelEvents(*chanPoint)
if err != nil {
peerLog.Errorf("unable to subscribe to chain "+
"events: %v", err)
continue
}
linkConfig := htlcswitch.ChannelLinkConfig{ linkConfig := htlcswitch.ChannelLinkConfig{
Peer: p, Peer: p,
DecodeHopIterator: p.server.sphinx.DecodeHopIterator, DecodeHopIterator: p.server.sphinx.DecodeHopIterator,
@ -1290,6 +1300,7 @@ out:
FeeEstimator: p.server.cc.feeEstimator, FeeEstimator: p.server.cc.feeEstimator,
BlockEpochs: blockEpoch, BlockEpochs: blockEpoch,
PreimageCache: p.server.witnessBeacon, PreimageCache: p.server.witnessBeacon,
ChainEvents: chainEvents,
UpdateContractSignals: func(signals *contractcourt.ContractSignals) error { UpdateContractSignals: func(signals *contractcourt.ContractSignals) error {
return p.server.chainArb.UpdateContractSignals( return p.server.chainArb.UpdateContractSignals(
*chanPoint, signals, *chanPoint, signals,
@ -1562,7 +1573,6 @@ func (p *peer) finalizeChanClosure(chanCloser *channelCloser) {
} }
chanCloser.cfg.channel.Stop() chanCloser.cfg.channel.Stop()
chanCloser.cfg.channel.CancelObserver()
// Next, we'll launch a goroutine which will request to be notified by // Next, we'll launch a goroutine which will request to be notified by
// the ChainNotifier once the closure transaction obtains a single // the ChainNotifier once the closure transaction obtains a single