lnwallet+fundingmgr: interrupt funding flow for PSBT
In case the funding manager detects that a funding flow is requested to be executed with the help of a PsbtIntent, the normal channel negotiation with the remote peer is interrupted, as soon as the accept_channel message was received. With the remote peer's funding multisig key and our local key, we can derive the funding output script and its address. This is enough to start the PSBT funding and signing process which the user will do externally to the daemon.
This commit is contained in:
4 files changed
+419
-19
No files matched your search
@@ -471,6 +471,37 @@ func (r *ChannelReservation) ProcessContribution(theirContribution *ChannelContr
|
||||
return <-errChan
|
||||
}
|
||||
|
||||
// IsPsbt returns true if there is a PSBT funding intent mapped to this
|
||||
// reservation.
|
||||
func (r *ChannelReservation) IsPsbt() bool {
|
||||
_, ok := r.fundingIntent.(*chanfunding.PsbtIntent)
|
||||
return ok
|
||||
}
|
||||
|
||||
// ProcessPsbt continues a previously paused funding flow that involves PSBT to
|
||||
// construct the funding transaction. This method can be called once the PSBT is
|
||||
// finalized and the signed transaction is available.
|
||||
func (r *ChannelReservation) ProcessPsbt() error {
|
||||
errChan := make(chan error, 1)
|
||||
|
||||
r.wallet.msgChan <- &continueContributionMsg{
|
||||
pendingFundingID: r.reservationID,
|
||||
err: errChan,
|
||||
}
|
||||
|
||||
return <-errChan
|
||||
}
|
||||
|
||||
// RemoteCanceled informs the PSBT funding state machine that the remote peer
|
||||
// has canceled the pending reservation, likely due to a timeout.
|
||||
func (r *ChannelReservation) RemoteCanceled() {
|
||||
psbtIntent, ok := r.fundingIntent.(*chanfunding.PsbtIntent)
|
||||
if !ok {
|
||||
return
|
||||
}
|
||||
psbtIntent.RemoteCanceled()
|
||||
}
|
||||
|
||||
// ProcessSingleContribution verifies, and records the initiator's contribution
|
||||
// to this pending single funder channel. Internally, no further action is
|
||||
// taken other than recording the initiator's contribution to the single funder
|
||||
|
||||
Reference in new issue
Block a user