mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-03-26 01:33:02 +01:00
multi: add experimental endorsement feature bit and disable option
This commit is contained in:
parent
4bb5b0c27c
commit
f02bb58486
@ -96,4 +96,7 @@ var defaultSetDesc = setDesc{
|
||||
SetInit: {}, // I
|
||||
SetNodeAnn: {}, // N
|
||||
},
|
||||
lnwire.ExperimentalEndorsementOptional: {
|
||||
SetNodeAnn: {}, // N
|
||||
},
|
||||
}
|
||||
|
@ -66,6 +66,10 @@ type Config struct {
|
||||
// NoTaprootOverlay unsets the taproot overlay channel feature bits.
|
||||
NoTaprootOverlay bool
|
||||
|
||||
// NoExperimentalEndorsement unsets any bits that signal support for
|
||||
// forwarding experimental endorsement.
|
||||
NoExperimentalEndorsement bool
|
||||
|
||||
// CustomFeatures is a set of custom features to advertise in each
|
||||
// set.
|
||||
CustomFeatures map[Set][]lnwire.FeatureBit
|
||||
@ -199,6 +203,12 @@ func newManager(cfg Config, desc setDesc) (*Manager, error) {
|
||||
raw.Unset(lnwire.SimpleTaprootOverlayChansOptional)
|
||||
raw.Unset(lnwire.SimpleTaprootOverlayChansRequired)
|
||||
}
|
||||
|
||||
if cfg.NoExperimentalEndorsement {
|
||||
raw.Unset(lnwire.ExperimentalEndorsementOptional)
|
||||
raw.Unset(lnwire.ExperimentalEndorsementRequired)
|
||||
}
|
||||
|
||||
for _, custom := range cfg.CustomFeatures[set] {
|
||||
if custom > set.Maximum() {
|
||||
return nil, fmt.Errorf("feature bit: %v "+
|
||||
|
@ -67,6 +67,9 @@ type ProtocolOptions struct {
|
||||
// NoRouteBlindingOption disables forwarding of payments in blinded routes.
|
||||
NoRouteBlindingOption bool `long:"no-route-blinding" description:"do not forward payments that are a part of a blinded route"`
|
||||
|
||||
// NoExperimentalEndorsementOption disables experimental endorsement.
|
||||
NoExperimentalEndorsementOption bool `long:"no-experimental-endorsement" description:"do not forward experimental endorsement signals"`
|
||||
|
||||
// CustomMessage allows the custom message APIs to handle messages with
|
||||
// the provided protocol numbers, which fall outside the custom message
|
||||
// number range.
|
||||
@ -132,6 +135,12 @@ func (l *ProtocolOptions) NoRouteBlinding() bool {
|
||||
return l.NoRouteBlindingOption
|
||||
}
|
||||
|
||||
// NoExperimentalEndorsement returns true if experimental endorsement should
|
||||
// be disabled.
|
||||
func (l *ProtocolOptions) NoExperimentalEndorsement() bool {
|
||||
return l.NoExperimentalEndorsementOption
|
||||
}
|
||||
|
||||
// CustomMessageOverrides returns the set of protocol messages that we override
|
||||
// to allow custom handling.
|
||||
func (p ProtocolOptions) CustomMessageOverrides() []uint16 {
|
||||
|
@ -70,6 +70,9 @@ type ProtocolOptions struct {
|
||||
// NoRouteBlindingOption disables forwarding of payments in blinded routes.
|
||||
NoRouteBlindingOption bool `long:"no-route-blinding" description:"do not forward payments that are a part of a blinded route"`
|
||||
|
||||
// NoExperimentalEndorsementOption disables experimental endorsement.
|
||||
NoExperimentalEndorsementOption bool `long:"no-experimental-endorsement" description:"do not forward experimental endorsement signals"`
|
||||
|
||||
// CustomMessage allows the custom message APIs to handle messages with
|
||||
// the provided protocol numbers, which fall outside the custom message
|
||||
// number range.
|
||||
@ -127,6 +130,12 @@ func (l *ProtocolOptions) NoRouteBlinding() bool {
|
||||
return l.NoRouteBlindingOption
|
||||
}
|
||||
|
||||
// NoExperimentalEndorsement returns true if experimental endorsement should
|
||||
// be disabled.
|
||||
func (l *ProtocolOptions) NoExperimentalEndorsement() bool {
|
||||
return l.NoExperimentalEndorsementOption
|
||||
}
|
||||
|
||||
// CustomMessageOverrides returns the set of protocol messages that we override
|
||||
// to allow custom handling.
|
||||
func (l ProtocolOptions) CustomMessageOverrides() []uint16 {
|
||||
|
@ -263,6 +263,14 @@ const (
|
||||
// being finalized.
|
||||
SimpleTaprootChannelsOptionalStaging = 181
|
||||
|
||||
// ExperimentalEndorsementRequired is a required feature bit that
|
||||
// indicates that the node will relay experimental endorsement signals.
|
||||
ExperimentalEndorsementRequired FeatureBit = 260
|
||||
|
||||
// ExperimentalEndorsementOptional is an optional feature bit that
|
||||
// indicates that the node will relay experimental endorsement signals.
|
||||
ExperimentalEndorsementOptional FeatureBit = 261
|
||||
|
||||
// Bolt11BlindedPathsRequired is a required feature bit that indicates
|
||||
// that the node is able to understand the blinded path tagged field in
|
||||
// a BOLT 11 invoice.
|
||||
@ -349,6 +357,8 @@ var Features = map[FeatureBit]string{
|
||||
SimpleTaprootChannelsOptionalStaging: "simple-taproot-chans-x",
|
||||
SimpleTaprootOverlayChansOptional: "taproot-overlay-chans",
|
||||
SimpleTaprootOverlayChansRequired: "taproot-overlay-chans",
|
||||
ExperimentalEndorsementRequired: "endorsement-x",
|
||||
ExperimentalEndorsementOptional: "endorsement-x",
|
||||
Bolt11BlindedPathsOptional: "bolt-11-blinded-paths",
|
||||
Bolt11BlindedPathsRequired: "bolt-11-blinded-paths",
|
||||
}
|
||||
|
@ -760,6 +760,10 @@ func (r *rpcServer) addDeps(s *server, macService *macaroons.Service,
|
||||
return nil
|
||||
},
|
||||
ShouldSetExpEndorsement: func() bool {
|
||||
if s.cfg.ProtocolOptions.NoExperimentalEndorsement() {
|
||||
return false
|
||||
}
|
||||
|
||||
return clock.NewDefaultClock().Now().Before(
|
||||
EndorsementExperimentEnd,
|
||||
)
|
||||
|
@ -1399,6 +1399,9 @@
|
||||
; Set to disable blinded route forwarding.
|
||||
; protocol.no-route-blinding=false
|
||||
|
||||
; Set to disable experimental endorsement signaling.
|
||||
; protocol.no-experimental-endorsement=false
|
||||
|
||||
; Set to handle messages of a particular type that falls outside of the
|
||||
; custom message number range (i.e. 513 is onion messages). Note that you can
|
||||
; set this option as many times as you want to support more than one custom
|
||||
|
31
server.go
31
server.go
@ -573,19 +573,20 @@ func newServer(cfg *Config, listenAddrs []net.Addr,
|
||||
|
||||
//nolint:lll
|
||||
featureMgr, err := feature.NewManager(feature.Config{
|
||||
NoTLVOnion: cfg.ProtocolOptions.LegacyOnion(),
|
||||
NoStaticRemoteKey: cfg.ProtocolOptions.NoStaticRemoteKey(),
|
||||
NoAnchors: cfg.ProtocolOptions.NoAnchorCommitments(),
|
||||
NoWumbo: !cfg.ProtocolOptions.Wumbo(),
|
||||
NoScriptEnforcementLease: cfg.ProtocolOptions.NoScriptEnforcementLease(),
|
||||
NoKeysend: !cfg.AcceptKeySend,
|
||||
NoOptionScidAlias: !cfg.ProtocolOptions.ScidAlias(),
|
||||
NoZeroConf: !cfg.ProtocolOptions.ZeroConf(),
|
||||
NoAnySegwit: cfg.ProtocolOptions.NoAnySegwit(),
|
||||
CustomFeatures: cfg.ProtocolOptions.CustomFeatures(),
|
||||
NoTaprootChans: !cfg.ProtocolOptions.TaprootChans,
|
||||
NoTaprootOverlay: !cfg.ProtocolOptions.TaprootOverlayChans,
|
||||
NoRouteBlinding: cfg.ProtocolOptions.NoRouteBlinding(),
|
||||
NoTLVOnion: cfg.ProtocolOptions.LegacyOnion(),
|
||||
NoStaticRemoteKey: cfg.ProtocolOptions.NoStaticRemoteKey(),
|
||||
NoAnchors: cfg.ProtocolOptions.NoAnchorCommitments(),
|
||||
NoWumbo: !cfg.ProtocolOptions.Wumbo(),
|
||||
NoScriptEnforcementLease: cfg.ProtocolOptions.NoScriptEnforcementLease(),
|
||||
NoKeysend: !cfg.AcceptKeySend,
|
||||
NoOptionScidAlias: !cfg.ProtocolOptions.ScidAlias(),
|
||||
NoZeroConf: !cfg.ProtocolOptions.ZeroConf(),
|
||||
NoAnySegwit: cfg.ProtocolOptions.NoAnySegwit(),
|
||||
CustomFeatures: cfg.ProtocolOptions.CustomFeatures(),
|
||||
NoTaprootChans: !cfg.ProtocolOptions.TaprootChans,
|
||||
NoTaprootOverlay: !cfg.ProtocolOptions.TaprootOverlayChans,
|
||||
NoRouteBlinding: cfg.ProtocolOptions.NoRouteBlinding(),
|
||||
NoExperimentalEndorsement: cfg.ProtocolOptions.NoExperimentalEndorsement(),
|
||||
})
|
||||
if err != nil {
|
||||
return nil, err
|
||||
@ -4221,6 +4222,10 @@ func (s *server) peerConnected(conn net.Conn, connReq *connmgr.ConnReq,
|
||||
AuxChanCloser: s.implCfg.AuxChanCloser,
|
||||
AuxResolver: s.implCfg.AuxContractResolver,
|
||||
ShouldFwdExpEndorsement: func() bool {
|
||||
if s.cfg.ProtocolOptions.NoExperimentalEndorsement() {
|
||||
return false
|
||||
}
|
||||
|
||||
return clock.NewDefaultClock().Now().Before(
|
||||
EndorsementExperimentEnd,
|
||||
)
|
||||
|
Loading…
x
Reference in New Issue
Block a user