diff --git a/rocketpool-cli/minipool/commands.go b/rocketpool-cli/minipool/commands.go index c1c323815..a7428fdb4 100644 --- a/rocketpool-cli/minipool/commands.go +++ b/rocketpool-cli/minipool/commands.go @@ -546,6 +546,10 @@ func RegisterCommands(app *cli.App, name string, aliases []string) { Name: "amount, a", Usage: "The amount of ETH to deposit into the minipool", }, + cli.BoolFlag{ + Name: "no-send, n", + Usage: "Don't submit the transaction", + }, }, Action: func(c *cli.Context) error { diff --git a/rocketpool-cli/minipool/rescue-dissolved.go b/rocketpool-cli/minipool/rescue-dissolved.go index 32989a3e3..eb756a3dc 100644 --- a/rocketpool-cli/minipool/rescue-dissolved.go +++ b/rocketpool-cli/minipool/rescue-dissolved.go @@ -209,8 +209,10 @@ func rescueDissolved(c *cli.Context) error { return nil } + submit := !c.Bool("no-send") + // Refund minipool - response, err := rp.RescueDissolvedMinipool(selectedMinipool.Address, depositAmount) + response, err := rp.RescueDissolvedMinipool(selectedMinipool.Address, depositAmount, submit) if err != nil { return fmt.Errorf("Could not rescue minipool %s: %s.\n", selectedMinipool.Address.Hex(), err.Error()) } diff --git a/rocketpool/api/minipool/commands.go b/rocketpool/api/minipool/commands.go index 744ff32a2..3f689cdcf 100644 --- a/rocketpool/api/minipool/commands.go +++ b/rocketpool/api/minipool/commands.go @@ -773,11 +773,11 @@ func RegisterSubcommands(command *cli.Command, name string, aliases []string) { { Name: "rescue-dissolved", Usage: "Rescue a dissolved minipool by depositing ETH for it to the Beacon deposit contract", - UsageText: "rocketpool api minipool rescue-dissolved minipool-address deposit-amount", + UsageText: "rocketpool api minipool rescue-dissolved minipool-address deposit-amount submit", Action: func(c *cli.Context) error { // Validate args - if err := cliutils.ValidateArgCount(c, 2); err != nil { + if err := cliutils.ValidateArgCount(c, 3); err != nil { return err } minipoolAddress, err := cliutils.ValidateAddress("minipool address", c.Args().Get(0)) @@ -788,9 +788,13 @@ func RegisterSubcommands(command *cli.Command, name string, aliases []string) { if err != nil { return err } + submit, err := cliutils.ValidateBool("submit", c.Args().Get(2)) + if err != nil { + return err + } // Run - api.PrintResponse(rescueDissolvedMinipool(c, minipoolAddress, depositAmount)) + api.PrintResponse(rescueDissolvedMinipool(c, minipoolAddress, depositAmount, submit)) return nil }, diff --git a/rocketpool/api/minipool/rescue-dissolved.go b/rocketpool/api/minipool/rescue-dissolved.go index 88b1dc877..5fb1c1812 100644 --- a/rocketpool/api/minipool/rescue-dissolved.go +++ b/rocketpool/api/minipool/rescue-dissolved.go @@ -281,7 +281,7 @@ func getDepositTx(rp *rocketpool.RocketPool, w *wallet.Wallet, bc beacon.Client, } -func rescueDissolvedMinipool(c *cli.Context, minipoolAddress common.Address, amount *big.Int) (*api.RescueDissolvedMinipoolResponse, error) { +func rescueDissolvedMinipool(c *cli.Context, minipoolAddress common.Address, amount *big.Int, submit bool) (*api.RescueDissolvedMinipoolResponse, error) { // Get services if err := services.RequireNodeRegistered(c); err != nil { @@ -316,11 +316,23 @@ func rescueDissolvedMinipool(c *cli.Context, minipoolAddress common.Address, amo return nil, fmt.Errorf("Error checking for nonce override: %w", err) } + opts.NoSend = !submit + // Submit the rescue deposit tx, err := getDepositTx(rp, w, bc, minipoolAddress, amount, opts) if err != nil { return nil, fmt.Errorf("error submitting rescue deposit: %w", err) } + + // Print transaction if requested + if !submit { + b, err := tx.MarshalBinary() + if err != nil { + return nil, err + } + fmt.Printf("%x\n", b) + } + response.TxHash = tx.Hash() // Return response diff --git a/shared/services/rocketpool/minipool.go b/shared/services/rocketpool/minipool.go index e829fc963..6222b9752 100644 --- a/shared/services/rocketpool/minipool.go +++ b/shared/services/rocketpool/minipool.go @@ -521,8 +521,8 @@ func (c *Client) GetMinipoolRescueDissolvedDetailsForNode() (api.GetMinipoolResc } // Rescue a dissolved minipool by depositing ETH for it to the Beacon deposit contract -func (c *Client) RescueDissolvedMinipool(address common.Address, amount *big.Int) (api.RescueDissolvedMinipoolResponse, error) { - responseBytes, err := c.callAPI(fmt.Sprintf("minipool rescue-dissolved %s %s", address.Hex(), amount.String())) +func (c *Client) RescueDissolvedMinipool(address common.Address, amount *big.Int, submit bool) (api.RescueDissolvedMinipoolResponse, error) { + responseBytes, err := c.callAPI(fmt.Sprintf("minipool rescue-dissolved %s %s %t", address.Hex(), amount.String(), submit)) if err != nil { return api.RescueDissolvedMinipoolResponse{}, fmt.Errorf("Could not rescue dissolved minipool: %w", err) }