lnd/lnwallet/chancloser/aux_closer.go
2024-09-19 10:18:40 +02:00

105 lines
3.4 KiB
Go

package chancloser
import (
"github.com/btcsuite/btcd/btcec/v2"
"github.com/btcsuite/btcd/btcutil"
"github.com/btcsuite/btcd/wire"
"github.com/lightningnetwork/lnd/fn"
"github.com/lightningnetwork/lnd/lnwallet"
"github.com/lightningnetwork/lnd/lnwire"
"github.com/lightningnetwork/lnd/tlv"
)
// CloseOutput represents an output that should be included in the close
// transaction.
type CloseOutput struct {
// Amt is the amount of the output.
Amt btcutil.Amount
// DustLimit is the dust limit for the local node.
DustLimit btcutil.Amount
// PkScript is the script that should be used to pay to the output.
PkScript []byte
// ShutdownRecords is the set of custom records that may result in
// extra close outputs being added.
ShutdownRecords lnwire.CustomRecords
}
// AuxShutdownReq is used to request a set of extra custom records to include
// in the shutdown message.
type AuxShutdownReq struct {
// ChanPoint is the channel point of the channel that is being shut
// down.
ChanPoint wire.OutPoint
// ShortChanID is the short channel ID of the channel that is being
// closed.
ShortChanID lnwire.ShortChannelID
// Initiator is true if the local node is the initiator of the channel.
Initiator bool
// InternalKey is the internal key for the shutdown addr. This will
// only be set for taproot shutdown addrs.
InternalKey fn.Option[btcec.PublicKey]
// CommitBlob is the blob that was included in the last commitment.
CommitBlob fn.Option[tlv.Blob]
// FundingBlob is the blob that was included in the funding state.
FundingBlob fn.Option[tlv.Blob]
}
// AuxCloseDesc is used to describe the channel close that is being performed.
type AuxCloseDesc struct {
AuxShutdownReq
// CloseFee is the closing fee to be paid for this state.
CloseFee btcutil.Amount
// CommitFee is the fee that was paid for the last commitment.
CommitFee btcutil.Amount
// LocalCloseOutput is the output that the local node should be paid
// to. This is None if the local party will not have an output on the
// co-op close transaction.
LocalCloseOutput fn.Option[CloseOutput]
// RemoteCloseOutput is the output that the remote node should be paid
// to. This will be None if the remote party will not have an output on
// the co-op close transaction.
RemoteCloseOutput fn.Option[CloseOutput]
}
// AuxCloseOutputs is used to specify extra outputs that should be used when
// constructing the co-op close transaction.
type AuxCloseOutputs struct {
// ExtraCloseOutputs is a set of extra outputs that should be included
// in the close transaction.
ExtraCloseOutputs []lnwallet.CloseOutput
// CustomSort is a custom function that can be used to sort the
// transaction outputs. If this isn't set, then the default BIP-69
// sorting is used.
CustomSort lnwallet.CloseSortFunc
}
// AuxChanCloser is used to allow an external caller to modify the co-op close
// transaction.
type AuxChanCloser interface {
// ShutdownBlob returns the set of custom records that should be
// included in the shutdown message.
ShutdownBlob(req AuxShutdownReq) (fn.Option[lnwire.CustomRecords],
error)
// AuxCloseOutputs returns the set of custom outputs that should be used
// to construct the co-op close transaction.
AuxCloseOutputs(desc AuxCloseDesc) (fn.Option[AuxCloseOutputs], error)
// FinalizeClose is called after the close transaction has been agreed
// upon.
FinalizeClose(desc AuxCloseDesc, closeTx *wire.MsgTx) error
}