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:
parent
a54c6bfb05
commit
7417a13be3
@ -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)
|
||||||
|
Loading…
Reference in New Issue
Block a user