// +build invoicesrpc package main import ( "context" "encoding/hex" "fmt" "github.com/lightningnetwork/lnd/lnrpc/invoicesrpc" "github.com/urfave/cli" ) // invoicesCommands will return nil for non-invoicesrpc builds. func invoicesCommands() []cli.Command { return []cli.Command{ cancelInvoiceCommand, } } func getInvoicesClient(ctx *cli.Context) (invoicesrpc.InvoicesClient, func()) { conn := getClientConn(ctx, false) cleanUp := func() { conn.Close() } return invoicesrpc.NewInvoicesClient(conn), cleanUp } var cancelInvoiceCommand = cli.Command{ Name: "cancelinvoice", Category: "Payments", Usage: "Cancels a (hold) invoice", Description: ` Todo.`, ArgsUsage: "paymenthash", Flags: []cli.Flag{ cli.StringFlag{ Name: "paymenthash", Usage: "the hex-encoded payment hash (32 byte) for which the " + "corresponding invoice will be canceled.", }, }, Action: actionDecorator(cancelInvoice), } func cancelInvoice(ctx *cli.Context) error { var ( paymentHash []byte err error ) client, cleanUp := getInvoicesClient(ctx) defer cleanUp() args := ctx.Args() switch { case ctx.IsSet("paymenthash"): paymentHash, err = hex.DecodeString(ctx.String("paymenthash")) case args.Present(): paymentHash, err = hex.DecodeString(args.First()) } if err != nil { return fmt.Errorf("unable to parse preimage: %v", err) } invoice := &invoicesrpc.CancelInvoiceMsg{ PaymentHash: paymentHash, } resp, err := client.CancelInvoice(context.Background(), invoice) if err != nil { return err } printJSON(resp) return nil }