Add --actor flag in lotus-shed sectors terminate

Can specify miner actor address when terminate sectors,
so that you can terminate sectors without miner api.
This commit is contained in:
chadwick2143 2021-03-16 14:09:46 +08:00
parent a54c6bfb05
commit 7417a13be3

View File

@ -6,6 +6,7 @@ import (
"golang.org/x/xerrors" "golang.org/x/xerrors"
"github.com/filecoin-project/go-address"
"github.com/filecoin-project/go-bitfield" "github.com/filecoin-project/go-bitfield"
"github.com/filecoin-project/go-state-types/abi" "github.com/filecoin-project/go-state-types/abi"
"github.com/filecoin-project/go-state-types/big" "github.com/filecoin-project/go-state-types/big"
@ -34,6 +35,10 @@ var terminateSectorCmd = &cli.Command{
Usage: "Forcefully terminate a sector (WARNING: This means losing power and pay a one-time termination penalty(including collateral) for the terminated sector)", Usage: "Forcefully terminate a sector (WARNING: This means losing power and pay a one-time termination penalty(including collateral) for the terminated sector)",
ArgsUsage: "[sectorNum1 sectorNum2 ...]", ArgsUsage: "[sectorNum1 sectorNum2 ...]",
Flags: []cli.Flag{ Flags: []cli.Flag{
&cli.StringFlag{
Name: "actor",
Usage: "specify the address of miner actor",
},
&cli.BoolFlag{ &cli.BoolFlag{
Name: "really-do-it", Name: "really-do-it",
Usage: "pass this flag if you know what you are doing", Usage: "pass this flag if you know what you are doing",
@ -44,6 +49,15 @@ var terminateSectorCmd = &cli.Command{
return fmt.Errorf("at least one sector must be specified") return fmt.Errorf("at least one sector must be specified")
} }
var maddr address.Address
if act := cctx.String("actor"); act != "" {
var err error
maddr, err = address.NewFromString(act)
if err != nil {
return fmt.Errorf("parsing address %s: %w", act, err)
}
}
if !cctx.Bool("really-do-it") { if !cctx.Bool("really-do-it") {
return fmt.Errorf("this is a command for advanced users, only use it if you are sure of what you are doing") return fmt.Errorf("this is a command for advanced users, only use it if you are sure of what you are doing")
} }
@ -54,17 +68,19 @@ var terminateSectorCmd = &cli.Command{
} }
defer closer() defer closer()
api, acloser, err := lcli.GetStorageMinerAPI(cctx)
if err != nil {
return err
}
defer acloser()
ctx := lcli.ReqContext(cctx) ctx := lcli.ReqContext(cctx)
maddr, err := api.ActorAddress(ctx) if maddr.Empty() {
if err != nil { api, acloser, err := lcli.GetStorageMinerAPI(cctx)
return err if err != nil {
return err
}
defer acloser()
maddr, err = api.ActorAddress(ctx)
if err != nil {
return err
}
} }
mi, err := nodeApi.StateMinerInfo(ctx, maddr, types.EmptyTSK) mi, err := nodeApi.StateMinerInfo(ctx, maddr, types.EmptyTSK)
@ -147,28 +163,45 @@ var terminateSectorPenaltyEstimationCmd = &cli.Command{
Name: "termination-estimate", Name: "termination-estimate",
Usage: "Estimate the termination penalty", Usage: "Estimate the termination penalty",
ArgsUsage: "[sectorNum1 sectorNum2 ...]", ArgsUsage: "[sectorNum1 sectorNum2 ...]",
Flags: []cli.Flag{
&cli.StringFlag{
Name: "actor",
Usage: "specify the address of miner actor",
},
},
Action: func(cctx *cli.Context) error { Action: func(cctx *cli.Context) error {
if cctx.Args().Len() < 1 { if cctx.Args().Len() < 1 {
return fmt.Errorf("at least one sector must be specified") return fmt.Errorf("at least one sector must be specified")
} }
var maddr address.Address
if act := cctx.String("actor"); act != "" {
var err error
maddr, err = address.NewFromString(act)
if err != nil {
return fmt.Errorf("parsing address %s: %w", act, err)
}
}
nodeApi, closer, err := lcli.GetFullNodeAPI(cctx) nodeApi, closer, err := lcli.GetFullNodeAPI(cctx)
if err != nil { if err != nil {
return err return err
} }
defer closer() defer closer()
api, acloser, err := lcli.GetStorageMinerAPI(cctx)
if err != nil {
return err
}
defer acloser()
ctx := lcli.ReqContext(cctx) ctx := lcli.ReqContext(cctx)
maddr, err := api.ActorAddress(ctx) if maddr.Empty() {
if err != nil { api, acloser, err := lcli.GetStorageMinerAPI(cctx)
return err if err != nil {
return err
}
defer acloser()
maddr, err = api.ActorAddress(ctx)
if err != nil {
return err
}
} }
mi, err := nodeApi.StateMinerInfo(ctx, maddr, types.EmptyTSK) mi, err := nodeApi.StateMinerInfo(ctx, maddr, types.EmptyTSK)