funding: obtain and populate shortChanID for MarkChannelAsOpen

This commit modifies the funding process to use the short channel ID,
rather than only the opening block height to mark a channel as open
once it has been confirmed. With this change, the short channel ID
information will now be available immediately after the channel has
been confirmed in the chain.
This commit is contained in:
Olaoluwa Osuntokun 2017-06-16 23:15:45 +02:00
parent 1c0712ca03
commit 4173b9748d
No known key found for this signature in database
GPG Key ID: 9CC5B105D03521A2
1 changed files with 11 additions and 12 deletions

View File

@ -743,7 +743,7 @@ func (f *fundingManager) handleFundingComplete(fmsg *fundingCompleteMsg) {
// The channel initiator has responded with the funding outpoint of the // The channel initiator has responded with the funding outpoint of the
// final funding transaction, as well as a signature for our version of // final funding transaction, as well as a signature for our version of
// the commitment transaction. So at this point, we can validate the // the commitment transaction. So at this point, we can validate the
// inititator's commitment transaction, then send our own if it's valid. // initiator's commitment transaction, then send our own if it's valid.
// TODO(roasbeef): make case (p vs P) consistent throughout // TODO(roasbeef): make case (p vs P) consistent throughout
fundingOut := fmsg.msg.FundingOutPoint fundingOut := fmsg.msg.FundingOutPoint
fndgLog.Infof("completing pendingID(%x) with ChannelPoint(%v)", fndgLog.Infof("completing pendingID(%x) with ChannelPoint(%v)",
@ -844,7 +844,6 @@ func (f *fundingManager) handleFundingSignComplete(fmsg *fundingSignCompleteMsg)
return return
} }
fundingPoint := resCtx.reservation.FundingOutpoint()
fndgLog.Infof("Finalizing pendingID(%x) over ChannelPoint(%v), "+ fndgLog.Infof("Finalizing pendingID(%x) over ChannelPoint(%v), "+
"waiting for channel open on-chain", chanID, fundingPoint) "waiting for channel open on-chain", chanID, fundingPoint)
@ -930,11 +929,20 @@ func (f *fundingManager) waitForFundingConfirmation(completeChan *channeldb.Open
fndgLog.Infof("ChannelPoint(%v) is now active: ChannelID(%x)", fndgLog.Infof("ChannelPoint(%v) is now active: ChannelID(%x)",
fundingPoint, chanID[:]) fundingPoint, chanID[:])
// With the block height and the transaction index known, we can
// construct the compact chanID which is used on the network to unique
// identify channels.
shortChanID := lnwire.ShortChannelID{
BlockHeight: confDetails.BlockHeight,
TxIndex: confDetails.TxIndex,
TxPosition: uint16(fundingPoint.Index),
}
// Now that the channel has been fully confirmed, we'll mark it as open // Now that the channel has been fully confirmed, we'll mark it as open
// within the database. // within the database.
completeChan.IsPending = false completeChan.IsPending = false
err = f.cfg.Wallet.ChannelDB.MarkChannelAsOpen(&fundingPoint, err = f.cfg.Wallet.ChannelDB.MarkChannelAsOpen(&fundingPoint,
confDetails.BlockHeight) shortChanID)
if err != nil { if err != nil {
fndgLog.Errorf("error setting channel pending flag to false: "+ fndgLog.Errorf("error setting channel pending flag to false: "+
"%v", err) "%v", err)
@ -962,15 +970,6 @@ func (f *fundingManager) waitForFundingConfirmation(completeChan *channeldb.Open
fundingLockedMsg := lnwire.NewFundingLocked(chanID, nextRevocation) fundingLockedMsg := lnwire.NewFundingLocked(chanID, nextRevocation)
f.cfg.SendToPeer(completeChan.IdentityPub, fundingLockedMsg) f.cfg.SendToPeer(completeChan.IdentityPub, fundingLockedMsg)
// With the block height and the transaction index known, we can
// construct the compact chanID which is used on the network to unique
// identify channels.
shortChanID := lnwire.ShortChannelID{
BlockHeight: confDetails.BlockHeight,
TxIndex: confDetails.TxIndex,
TxPosition: uint16(fundingPoint.Index),
}
fndgLog.Infof("Announcing ChannelPoint(%v), short_chan_id=%v", fundingPoint, fndgLog.Infof("Announcing ChannelPoint(%v), short_chan_id=%v", fundingPoint,
spew.Sdump(shortChanID)) spew.Sdump(shortChanID))