multi: let blinded path invoice options be set per addinvoice call
Extend the configurability of blinded paths in invoices by adding the ability to change the global config options on a per-RPC basis.
This commit is contained in:
7 files changed
+2101
-1821
No files matched your search
+71
-11
@@ -90,6 +90,26 @@ var addInvoiceCommand = cli.Command{
|
||||
"ephemeral key so as not to reveal the real " +
|
||||
"node ID of this node.",
|
||||
},
|
||||
cli.UintFlag{
|
||||
Name: "min_real_blinded_hops",
|
||||
Usage: "The minimum number of real hops to use in a " +
|
||||
"blinded path. This option will only be used " +
|
||||
"if `--blind` has also been set.",
|
||||
},
|
||||
cli.UintFlag{
|
||||
Name: "num_blinded_hops",
|
||||
Usage: "The number of hops to use for each " +
|
||||
"blinded path included in the invoice. This " +
|
||||
"option will only be used if `--blind` has " +
|
||||
"also been set. Dummy hops will be used to " +
|
||||
"pad paths shorter than this.",
|
||||
},
|
||||
cli.UintFlag{
|
||||
Name: "max_blinded_paths",
|
||||
Usage: "The maximum number of blinded paths to add " +
|
||||
"to an invoice. This option will only be " +
|
||||
"used if `--blind` has also been set.",
|
||||
},
|
||||
},
|
||||
Action: actionDecorator(addInvoice),
|
||||
}
|
||||
@@ -140,18 +160,24 @@ func addInvoice(ctx *cli.Context) error {
|
||||
"blinded paths in the same invoice")
|
||||
}
|
||||
|
||||
blindedPathCfg, err := parseBlindedPathCfg(ctx)
|
||||
if err != nil {
|
||||
return fmt.Errorf("could not parse blinded path config: %w",
|
||||
err)
|
||||
}
|
||||
|
||||
invoice := &lnrpc.Invoice{
|
||||
Memo: ctx.String("memo"),
|
||||
RPreimage: preimage,
|
||||
Value: amt,
|
||||
ValueMsat: amtMsat,
|
||||
DescriptionHash: descHash,
|
||||
FallbackAddr: ctx.String("fallback_addr"),
|
||||
Expiry: ctx.Int64("expiry"),
|
||||
CltvExpiry: ctx.Uint64("cltv_expiry_delta"),
|
||||
Private: ctx.Bool("private"),
|
||||
IsAmp: ctx.Bool("amp"),
|
||||
Blind: ctx.Bool("blind"),
|
||||
Memo: ctx.String("memo"),
|
||||
RPreimage: preimage,
|
||||
Value: amt,
|
||||
ValueMsat: amtMsat,
|
||||
DescriptionHash: descHash,
|
||||
FallbackAddr: ctx.String("fallback_addr"),
|
||||
Expiry: ctx.Int64("expiry"),
|
||||
CltvExpiry: ctx.Uint64("cltv_expiry_delta"),
|
||||
Private: ctx.Bool("private"),
|
||||
IsAmp: ctx.Bool("amp"),
|
||||
BlindedPathConfig: blindedPathCfg,
|
||||
}
|
||||
|
||||
resp, err := client.AddInvoice(ctxc, invoice)
|
||||
@@ -164,6 +190,40 @@ func addInvoice(ctx *cli.Context) error {
|
||||
return nil
|
||||
}
|
||||
|
||||
func parseBlindedPathCfg(ctx *cli.Context) (*lnrpc.BlindedPathConfig, error) {
|
||||
if !ctx.Bool("blind") {
|
||||
if ctx.IsSet("min_real_blinded_hops") ||
|
||||
ctx.IsSet("num_blinded_hops") ||
|
||||
ctx.IsSet("max_blinded_paths") ||
|
||||
ctx.IsSet("blinded_path_omit_node") {
|
||||
|
||||
return nil, fmt.Errorf("blinded path options are " +
|
||||
"only used if the `--blind` options is set")
|
||||
}
|
||||
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
var blindCfg lnrpc.BlindedPathConfig
|
||||
|
||||
if ctx.IsSet("min_real_blinded_hops") {
|
||||
minNumRealHops := uint32(ctx.Uint("min_real_blinded_hops"))
|
||||
blindCfg.MinNumRealHops = &minNumRealHops
|
||||
}
|
||||
|
||||
if ctx.IsSet("num_blinded_hops") {
|
||||
numHops := uint32(ctx.Uint("num_blinded_hops"))
|
||||
blindCfg.NumHops = &numHops
|
||||
}
|
||||
|
||||
if ctx.IsSet("max_blinded_paths") {
|
||||
maxPaths := uint32(ctx.Uint("max_blinded_paths"))
|
||||
blindCfg.MaxNumPaths = &maxPaths
|
||||
}
|
||||
|
||||
return &blindCfg, nil
|
||||
}
|
||||
|
||||
var lookupInvoiceCommand = cli.Command{
|
||||
Name: "lookupinvoice",
|
||||
Category: "Invoices",
|
||||
|
||||
Reference in new issue
Block a user