mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-08-31 17:51:33 +02:00
multi: add channel open parameters to channel acceptor
Add more fields to channel acceptor response so that users can have more fine grained control over their incoming channels. With our chained acceptor, it is possible that we get inconsistent responses from multiple chained acceptors. We create a conjugate repsponse from all the set fields in our various responses, but fail if we get different, non- zero responses from our various acceptors. Separate merge functions are used per type so that we avoid unexpected outcomes comparing interfaces (panic on comparing types that aren't comparable), with casting used where applicable to avoid code duplication.
This commit is contained in:
@@ -4,6 +4,7 @@ import (
|
||||
"errors"
|
||||
|
||||
"github.com/btcsuite/btcd/btcec"
|
||||
"github.com/btcsuite/btcutil"
|
||||
"github.com/lightningnetwork/lnd/lnwire"
|
||||
)
|
||||
|
||||
@@ -28,11 +29,39 @@ type ChannelAcceptRequest struct {
|
||||
}
|
||||
|
||||
// ChannelAcceptResponse is a struct containing the response to a request to
|
||||
// open an inbound channel.
|
||||
// open an inbound channel. Note that fields added to this struct must be added
|
||||
// to the mergeResponse function to allow combining of responses from different
|
||||
// acceptors.
|
||||
type ChannelAcceptResponse struct {
|
||||
// ChanAcceptError the error returned by the channel acceptor. If the
|
||||
// channel was accepted, this value will be nil.
|
||||
ChanAcceptError
|
||||
|
||||
// UpfrontShutdown is the address that we will set as our upfront
|
||||
// shutdown address.
|
||||
UpfrontShutdown lnwire.DeliveryAddress
|
||||
|
||||
// CSVDelay is the csv delay we require for the remote peer.
|
||||
CSVDelay uint16
|
||||
|
||||
// Reserve is the amount that require the remote peer hold in reserve
|
||||
// on the channel.
|
||||
Reserve btcutil.Amount
|
||||
|
||||
// InFlightTotal is the maximum amount that we allow the remote peer to
|
||||
// hold in outstanding htlcs.
|
||||
InFlightTotal lnwire.MilliSatoshi
|
||||
|
||||
// HtlcLimit is the maximum number of htlcs that we allow the remote
|
||||
// peer to offer us.
|
||||
HtlcLimit uint16
|
||||
|
||||
// MinHtlcIn is the minimum incoming htlc value allowed on the channel.
|
||||
MinHtlcIn lnwire.MilliSatoshi
|
||||
|
||||
// MinAcceptDepth is the minimum depth that the initiator of the
|
||||
// channel should wait before considering the channel open.
|
||||
MinAcceptDepth uint16
|
||||
}
|
||||
|
||||
// NewChannelAcceptResponse is a constructor for a channel accept response,
|
||||
@@ -40,13 +69,25 @@ type ChannelAcceptResponse struct {
|
||||
// a rejection) so that the error will be whitelisted and delivered to the
|
||||
// initiating peer. Accepted channels simply return a response containing a nil
|
||||
// error.
|
||||
func NewChannelAcceptResponse(accept bool,
|
||||
acceptErr error) *ChannelAcceptResponse {
|
||||
func NewChannelAcceptResponse(accept bool, acceptErr error,
|
||||
upfrontShutdown lnwire.DeliveryAddress, csvDelay, htlcLimit,
|
||||
minDepth uint16, reserve btcutil.Amount, inFlight,
|
||||
minHtlcIn lnwire.MilliSatoshi) *ChannelAcceptResponse {
|
||||
|
||||
resp := &ChannelAcceptResponse{
|
||||
UpfrontShutdown: upfrontShutdown,
|
||||
CSVDelay: csvDelay,
|
||||
Reserve: reserve,
|
||||
InFlightTotal: inFlight,
|
||||
HtlcLimit: htlcLimit,
|
||||
MinHtlcIn: minHtlcIn,
|
||||
MinAcceptDepth: minDepth,
|
||||
}
|
||||
|
||||
// If we want to accept the channel, we return a response with a nil
|
||||
// error.
|
||||
if accept {
|
||||
return &ChannelAcceptResponse{}
|
||||
return resp
|
||||
}
|
||||
|
||||
// Use a generic error when no custom error is provided.
|
||||
@@ -54,11 +95,11 @@ func NewChannelAcceptResponse(accept bool,
|
||||
acceptErr = errChannelRejected
|
||||
}
|
||||
|
||||
return &ChannelAcceptResponse{
|
||||
ChanAcceptError: ChanAcceptError{
|
||||
error: acceptErr,
|
||||
},
|
||||
resp.ChanAcceptError = ChanAcceptError{
|
||||
error: acceptErr,
|
||||
}
|
||||
|
||||
return resp
|
||||
}
|
||||
|
||||
// RejectChannel returns a boolean that indicates whether we should reject the
|
||||
|
Reference in New Issue
Block a user