diff --git a/cmd/lotus-storage-miner/actor.go b/cmd/lotus-storage-miner/actor.go index 18e3796a3..6f2cefad3 100644 --- a/cmd/lotus-storage-miner/actor.go +++ b/cmd/lotus-storage-miner/actor.go @@ -2,6 +2,8 @@ package main import ( "fmt" + "github.com/filecoin-project/specs-actors/actors/builtin" + "golang.org/x/xerrors" ma "github.com/multiformats/go-multiaddr" "github.com/urfave/cli/v2" @@ -19,6 +21,7 @@ var actorCmd = &cli.Command{ Usage: "manipulate the miner actor", Subcommands: []*cli.Command{ actorSetAddrsCmd, + actorWithdrawCmd, }, } @@ -91,3 +94,76 @@ var actorSetAddrsCmd = &cli.Command{ }, } + + +var actorWithdrawCmd = &cli.Command{ + Name: "withdraw", + Usage: "withdraw available balance", + ArgsUsage: "[amount (FIL)]", + Action: func(cctx *cli.Context) error { + nodeApi, closer, err := lcli.GetStorageMinerAPI(cctx) + if err != nil { + return err + } + defer closer() + + api, acloser, err := lcli.GetFullNodeAPI(cctx) + if err != nil { + return err + } + defer acloser() + + ctx := lcli.ReqContext(cctx) + + maddr, err := nodeApi.ActorAddress(ctx) + if err != nil { + return err + } + + mi, err := api.StateMinerInfo(ctx, maddr, types.EmptyTSK) + if err != nil { + return err + } + + available, err := api.StateMinerAvailableBalance(ctx, maddr, types.EmptyTSK) + if err != nil { + return err + } + + amount := available + if cctx.Args().Present() { + f, err := types.ParseFIL(cctx.Args().First()) + if err != nil { + return xerrors.Errorf("parsing 'amount' argument: %w", err) + } + + amount = abi.TokenAmount(f) + + if amount.GreaterThan(available) { + return xerrors.Errorf("can't withdraw more funds than available; requested: %s; available: %s", amount, available) + } + } + + params, err := actors.SerializeParams(&miner.WithdrawBalanceParams{ + AmountRequested: amount, // Default to attempting to withdraw all the extra funds in the miner actor + }) + if err != nil { + return err + } + + smsg, err := api.MpoolPushMessage(ctx, &types.Message{ + To: maddr, + From: mi.Owner, + Value: types.NewInt(0), + Method: builtin.MethodsMiner.WithdrawBalance, + Params: params, + }, nil) + if err != nil { + return err + } + + fmt.Printf("Requested rewards withdrawal in message %s\n", smsg.Cid()) + + return nil + }, +} diff --git a/cmd/lotus-storage-miner/rewards.go b/cmd/lotus-storage-miner/rewards.go deleted file mode 100644 index 279965e1e..000000000 --- a/cmd/lotus-storage-miner/rewards.go +++ /dev/null @@ -1,78 +0,0 @@ -package main - -import ( - "fmt" - - "github.com/urfave/cli/v2" - - "github.com/filecoin-project/specs-actors/actors/builtin" - "github.com/filecoin-project/specs-actors/actors/builtin/miner" - - "github.com/filecoin-project/lotus/chain/actors" - "github.com/filecoin-project/lotus/chain/types" - lcli "github.com/filecoin-project/lotus/cli" -) - -var rewardsCmd = &cli.Command{ - Name: "rewards", - Subcommands: []*cli.Command{ - rewardsRedeemCmd, - }, -} - -var rewardsRedeemCmd = &cli.Command{ - Name: "redeem", - Usage: "Redeem block rewards", - Action: func(cctx *cli.Context) error { - nodeApi, closer, err := lcli.GetStorageMinerAPI(cctx) - if err != nil { - return err - } - defer closer() - - api, acloser, err := lcli.GetFullNodeAPI(cctx) - if err != nil { - return err - } - defer acloser() - - ctx := lcli.ReqContext(cctx) - - maddr, err := nodeApi.ActorAddress(ctx) - if err != nil { - return err - } - - mi, err := api.StateMinerInfo(ctx, maddr, types.EmptyTSK) - if err != nil { - return err - } - - mact, err := api.StateGetActor(ctx, maddr, types.EmptyTSK) - if err != nil { - return err - } - - params, err := actors.SerializeParams(&miner.WithdrawBalanceParams{ - AmountRequested: mact.Balance, // Default to attempting to withdraw all the extra funds in the miner actor - }) - if err != nil { - return err - } - - smsg, err := api.MpoolPushMessage(ctx, &types.Message{ - To: maddr, - From: mi.Owner, - Value: types.NewInt(0), - Method: builtin.MethodsMiner.WithdrawBalance, - Params: params, - }, nil) - if err != nil { - return err - } - - fmt.Printf("Requested rewards withdrawal in message %s\n", smsg.Cid()) - - return nil - }, -}