mirror of
https://github.com/lightningnetwork/lnd.git
synced 2025-07-04 04:21:12 +02:00
multi: add blinded paths to invoices
Expose the ability to add blinded paths to an invoice. Also expose various configuration values. We also let the lncfg.Invoices struct satisfy the Validator interface so that we can verify all its config values in one place.
This commit is contained in:
45
rpcserver.go
45
rpcserver.go
@ -5743,6 +5743,13 @@ func (r *rpcServer) AddInvoice(ctx context.Context,
|
||||
|
||||
defaultDelta := r.cfg.Bitcoin.TimeLockDelta
|
||||
|
||||
blindingRestrictions := &routing.BlindedPathRestrictions{
|
||||
MinDistanceFromIntroNode: r.server.cfg.Invoices.BlindedPaths.
|
||||
MinNumRealHops,
|
||||
NumHops: r.server.cfg.Invoices.BlindedPaths.NumHops,
|
||||
MaxNumPaths: r.server.cfg.Invoices.BlindedPaths.MaxNumPaths,
|
||||
}
|
||||
|
||||
addInvoiceCfg := &invoicesrpc.AddInvoiceConfig{
|
||||
AddInvoice: r.server.invoices.AddInvoice,
|
||||
IsChannelActive: r.server.htlcSwitch.HasActiveLink,
|
||||
@ -5752,12 +5759,45 @@ func (r *rpcServer) AddInvoice(ctx context.Context,
|
||||
ChanDB: r.server.chanStateDB,
|
||||
Graph: r.server.graphDB,
|
||||
GenInvoiceFeatures: func() *lnwire.FeatureVector {
|
||||
return r.server.featureMgr.Get(feature.SetInvoice)
|
||||
v := r.server.featureMgr.Get(feature.SetInvoice)
|
||||
|
||||
if invoice.Blind {
|
||||
// If an invoice includes blinded paths, then a
|
||||
// payment address is not required since we use
|
||||
// the PathID in the final hop's encrypted data
|
||||
// as equivalent to the payment address
|
||||
v.Unset(lnwire.PaymentAddrRequired)
|
||||
v.Set(lnwire.PaymentAddrOptional)
|
||||
|
||||
// The invoice payer will also need to
|
||||
// understand the new BOLT 11 tagged field
|
||||
// containing the blinded path, so we switch
|
||||
// the bit to required.
|
||||
v.Unset(lnwire.Bolt11BlindedPathsOptional)
|
||||
v.Set(lnwire.Bolt11BlindedPathsRequired)
|
||||
}
|
||||
|
||||
return v
|
||||
},
|
||||
GenAmpInvoiceFeatures: func() *lnwire.FeatureVector {
|
||||
return r.server.featureMgr.Get(feature.SetInvoiceAmp)
|
||||
},
|
||||
GetAlias: r.server.aliasMgr.GetPeerAlias,
|
||||
GetAlias: r.server.aliasMgr.GetPeerAlias,
|
||||
BestHeight: r.server.cc.BestBlockTracker.BestHeight,
|
||||
BlindedRoutePolicyIncrMultiplier: r.server.cfg.Invoices.
|
||||
BlindedPaths.PolicyIncreaseMultiplier,
|
||||
BlindedRoutePolicyDecrMultiplier: r.server.cfg.Invoices.
|
||||
BlindedPaths.PolicyDecreaseMultiplier,
|
||||
QueryBlindedRoutes: func(amt lnwire.MilliSatoshi) (
|
||||
[]*route.Route, error) {
|
||||
|
||||
return r.server.chanRouter.FindBlindedPaths(
|
||||
r.selfNode, amt,
|
||||
r.server.missionControl.GetProbability,
|
||||
blindingRestrictions,
|
||||
)
|
||||
},
|
||||
MinNumHops: r.server.cfg.Invoices.BlindedPaths.NumHops,
|
||||
}
|
||||
|
||||
value, err := lnrpc.UnmarshallAmt(invoice.Value, invoice.ValueMsat)
|
||||
@ -5780,6 +5820,7 @@ func (r *rpcServer) AddInvoice(ctx context.Context,
|
||||
Private: invoice.Private,
|
||||
RouteHints: routeHints,
|
||||
Amp: invoice.IsAmp,
|
||||
Blind: invoice.Blind,
|
||||
}
|
||||
|
||||
if invoice.RPreimage != nil {
|
||||
|
Reference in New Issue
Block a user