From 8aef43360f9dcd429eccfff4dcdd2ead3183a27a Mon Sep 17 00:00:00 2001 From: Olaoluwa Osuntokun Date: Wed, 30 May 2018 22:16:34 -0700 Subject: [PATCH] funding: update fundingManager to register for conf's using pkScripts --- fundingmanager.go | 37 +++++++++++++++++++++++++++++++++---- fundingmanager_test.go | 5 +++-- 2 files changed, 36 insertions(+), 6 deletions(-) diff --git a/fundingmanager.go b/fundingmanager.go index 7753204d..fa414545 100644 --- a/fundingmanager.go +++ b/fundingmanager.go @@ -1752,6 +1752,20 @@ func (f *fundingManager) waitForFundingWithTimeout(completeChan *channeldb.OpenC } } +// makeFundingScript re-creates the funding script for the funding transaction +// of the target channel. +func makeFundingScript(channel *channeldb.OpenChannel) ([]byte, error) { + localKey := channel.LocalChanCfg.MultiSigKey.PubKey.SerializeCompressed() + remoteKey := channel.RemoteChanCfg.MultiSigKey.PubKey.SerializeCompressed() + + multiSigScript, err := lnwallet.GenMultiSigScript(localKey, remoteKey) + if err != nil { + return nil, err + } + + return lnwallet.WitnessScriptHash(multiSigScript) +} + // waitForFundingConfirmation handles the final stages of the channel funding // process once the funding transaction has been broadcast. The primary // function of waitForFundingConfirmation is to wait for blockchain @@ -1767,9 +1781,16 @@ func (f *fundingManager) waitForFundingConfirmation(completeChan *channeldb.Open // Register with the ChainNotifier for a notification once the funding // transaction reaches `numConfs` confirmations. txid := completeChan.FundingOutpoint.Hash + fundingScript, err := makeFundingScript(completeChan) + if err != nil { + fndgLog.Errorf("unable to create funding script for "+ + "ChannelPoint(%v): %v", completeChan.FundingOutpoint, err) + return + } numConfs := uint32(completeChan.NumConfsRequired) - confNtfn, err := f.cfg.Notifier.RegisterConfirmationsNtfn(&txid, - numConfs, completeChan.FundingBroadcastHeight) + confNtfn, err := f.cfg.Notifier.RegisterConfirmationsNtfn( + &txid, fundingScript, numConfs, completeChan.FundingBroadcastHeight, + ) if err != nil { fndgLog.Errorf("Unable to register for confirmation of "+ "ChannelPoint(%v)", completeChan.FundingOutpoint) @@ -2073,8 +2094,16 @@ func (f *fundingManager) annAfterSixConfs(completeChan *channeldb.OpenChannel, shortChanID.ToUint64(), completeChan.FundingOutpoint, numConfs) - confNtfn, err := f.cfg.Notifier.RegisterConfirmationsNtfn(&txid, - numConfs, completeChan.FundingBroadcastHeight) + fundingScript, err := makeFundingScript(completeChan) + if err != nil { + return fmt.Errorf("unable to create funding script for "+ + "ChannelPoint(%v): %v", + completeChan.FundingOutpoint, err) + } + + confNtfn, err := f.cfg.Notifier.RegisterConfirmationsNtfn( + &txid, fundingScript, numConfs, completeChan.FundingBroadcastHeight, + ) if err != nil { return fmt.Errorf("Unable to register for "+ "confirmation of ChannelPoint(%v): %v", diff --git a/fundingmanager_test.go b/fundingmanager_test.go index 7550db4c..fabcf780 100644 --- a/fundingmanager_test.go +++ b/fundingmanager_test.go @@ -98,8 +98,9 @@ type mockNotifier struct { epochChan chan *chainntnfs.BlockEpoch } -func (m *mockNotifier) RegisterConfirmationsNtfn(txid *chainhash.Hash, numConfs, - heightHint uint32) (*chainntnfs.ConfirmationEvent, error) { +func (m *mockNotifier) RegisterConfirmationsNtfn(txid *chainhash.Hash, + _ []byte, numConfs, heightHint uint32) (*chainntnfs.ConfirmationEvent, error) { + if numConfs == 6 { return &chainntnfs.ConfirmationEvent{ Confirmed: m.sixConfChannel,