lncli: add chan_point flag to closechannel command

This commit is contained in:
mads krogh
2022-01-11 21:41:20 +01:00
parent fd63301dc5
commit 807bc0628c

View File

@@ -39,6 +39,9 @@ const (
defaultUtxoMinConf = 1 defaultUtxoMinConf = 1
) )
var errBadChanPoint = errors.New("expecting chan_point to be in format of: " +
"txid:index")
func getContext() context.Context { func getContext() context.Context {
shutdownInterceptor, err := signal.Intercept() shutdownInterceptor, err := signal.Intercept()
if err != nil { if err != nil {
@@ -719,6 +722,12 @@ var closeChannelCommand = cli.Command{
Usage: "the output index for the funding output of the funding " + Usage: "the output index for the funding output of the funding " +
"transaction", "transaction",
}, },
cli.StringFlag{
Name: "chan_point",
Usage: "(optional) the channel point. If set, " +
"funding_txid and output_index flags and " +
"positional arguments will be ignored",
},
cli.BoolFlag{ cli.BoolFlag{
Name: "force", Name: "force",
Usage: "attempt an uncooperative closure", Usage: "attempt an uncooperative closure",
@@ -1183,10 +1192,19 @@ func abandonChannel(ctx *cli.Context) error {
// line. Both named options as well as unnamed parameters are supported. // line. Both named options as well as unnamed parameters are supported.
func parseChannelPoint(ctx *cli.Context) (*lnrpc.ChannelPoint, error) { func parseChannelPoint(ctx *cli.Context) (*lnrpc.ChannelPoint, error) {
channelPoint := &lnrpc.ChannelPoint{} channelPoint := &lnrpc.ChannelPoint{}
var err error
args := ctx.Args() args := ctx.Args()
switch { switch {
case ctx.IsSet("chan_point"):
channelPoint, err = parseChanPoint(ctx.String("chan_point"))
if err != nil {
return nil, fmt.Errorf("unable to parse chan_point: "+
"%v", err)
}
return channelPoint, nil
case ctx.IsSet("funding_txid"): case ctx.IsSet("funding_txid"):
channelPoint.FundingTxid = &lnrpc.ChannelPoint_FundingTxidStr{ channelPoint.FundingTxid = &lnrpc.ChannelPoint_FundingTxidStr{
FundingTxidStr: ctx.String("funding_txid"), FundingTxidStr: ctx.String("funding_txid"),
@@ -1984,9 +2002,8 @@ var updateChannelPolicyCommand = cli.Command{
func parseChanPoint(s string) (*lnrpc.ChannelPoint, error) { func parseChanPoint(s string) (*lnrpc.ChannelPoint, error) {
split := strings.Split(s, ":") split := strings.Split(s, ":")
if len(split) != 2 { if len(split) != 2 || len(split[0]) == 0 || len(split[1]) == 0 {
return nil, fmt.Errorf("expecting chan_point to be in format of: " + return nil, errBadChanPoint
"txid:index")
} }
index, err := strconv.ParseInt(split[1], 10, 32) index, err := strconv.ParseInt(split[1], 10, 32)
@@ -2077,7 +2094,7 @@ func updateChannelPolicy(ctx *cli.Context) error {
if chanPointStr != "" { if chanPointStr != "" {
chanPoint, err = parseChanPoint(chanPointStr) chanPoint, err = parseChanPoint(chanPointStr)
if err != nil { if err != nil {
return fmt.Errorf("unable to parse chan point: %v", err) return fmt.Errorf("unable to parse chan_point: %v", err)
} }
} }
@@ -2227,7 +2244,7 @@ func exportChanBackup(ctx *cli.Context) error {
if chanPointStr != "" { if chanPointStr != "" {
chanPointRPC, err := parseChanPoint(chanPointStr) chanPointRPC, err := parseChanPoint(chanPointStr)
if err != nil { if err != nil {
return err return fmt.Errorf("unable to parse chan_point: %v", err)
} }
chanBackup, err := client.ExportChannelBackup( chanBackup, err := client.ExportChannelBackup(