From d59ff447f502a55868b3d125905b9b1d348db3ad Mon Sep 17 00:00:00 2001 From: Fornax <23104993+0xfornax@users.noreply.github.com> Date: Fri, 25 Sep 2026 13:18:04 -0300 Subject: [PATCH 1/2] Megapools dont have penaliseMegapool --- bindings/network/exit.go | 22 ------- .../node/check-megapool-exit-requests.go | 64 +------------------ 2 files changed, 1 insertion(+), 85 deletions(-) diff --git a/bindings/network/exit.go b/bindings/network/exit.go index d7890f161..fb8aef580 100644 --- a/bindings/network/exit.go +++ b/bindings/network/exit.go @@ -209,28 +209,6 @@ func ForceMegapoolExit(rp *rocketpool.RocketPool, megapoolAddress common.Address return tx.Hash(), nil } -// Estimate the gas of PenaliseMegapoolValidator -func EstimatePenaliseMegapoolValidatorGas(rp *rocketpool.RocketPool, megapoolAddress common.Address, validatorId uint32, opts *bind.TransactOpts) (gaslimit.Limits, error) { - rocketNetworkExit, err := getRocketNetworkExit(rp, nil) - if err != nil { - return gaslimit.Limits{}, err - } - return rocketNetworkExit.GetTransactionGasInfo(opts, "penaliseMegapool", megapoolAddress, validatorId) -} - -// Penalise a megapool validator that failed to exit within the cooperative exit phase -func PenaliseMegapoolValidator(rp *rocketpool.RocketPool, megapoolAddress common.Address, validatorId uint32, opts *bind.TransactOpts) (common.Hash, error) { - rocketNetworkExit, err := getRocketNetworkExit(rp, nil) - if err != nil { - return common.Hash{}, err - } - tx, err := rocketNetworkExit.Transact(opts, "penaliseMegapool", megapoolAddress, validatorId) - if err != nil { - return common.Hash{}, fmt.Errorf("error penalising megapool %s validator %d: %w", megapoolAddress.Hex(), validatorId, err) - } - return tx.Hash(), nil -} - // Get MinipoolExitRequested events emitted during the given block range func GetMinipoolExitRequests(rp *rocketpool.RocketPool, intervalSize *big.Int, fromBlock *big.Int, toBlock *big.Int, opts *bind.CallOpts) ([]MinipoolExitRequest, error) { rocketNetworkExit, err := getRocketNetworkExit(rp, opts) diff --git a/rocketpool/node/check-megapool-exit-requests.go b/rocketpool/node/check-megapool-exit-requests.go index 1482692dd..f633c069d 100644 --- a/rocketpool/node/check-megapool-exit-requests.go +++ b/rocketpool/node/check-megapool-exit-requests.go @@ -217,8 +217,7 @@ func (t *checkMegapoolExitRequests) run(state *state.NetworkStateIndex) error { continue } - // Megapools from version 2 support a forced exit request, so the - // did-not-exit penalty only applies to version 1 + // Megapools from version 2 support a forced exit request if mpv2, ok := mp.(megapool.MegapoolV2); ok { t.log.Printlnf("Megapool %s (validator %d) uses version %d; submitting ForceExit", request.MegapoolAddress.Hex(), validatorIndex, mp.GetVersion()) err := t.forceExitMegapoolValidator(mpv2, request) @@ -227,15 +226,6 @@ func (t *checkMegapoolExitRequests) run(state *state.NetworkStateIndex) error { } continue } - - // Log - t.log.Printlnf("The validator %d (megapool %s) did not exit within the cooperative exit phase", validatorIndex, request.MegapoolAddress.Hex()) - - err = t.penaliseMegapoolValidator(request) - // dont return if there was an error, just log it so we can continue with the next validator - if err != nil { - t.log.Printlnf("Error penalising megapool %s validator %d: %s", request.MegapoolAddress.Hex(), request.ValidatorId, err.Error()) - } } // Return @@ -354,55 +344,3 @@ func (t *checkMegapoolExitRequests) forceExitMegapoolValidator(mp megapool.Megap // Return return nil } - -func (t *checkMegapoolExitRequests) penaliseMegapoolValidator(request network.MegapoolExitRequest) error { - - // Get transactor - opts, err := t.w.GetNodeAccountTransactor() - if err != nil { - return err - } - - // Get the gas limit - gasInfo, err := network.EstimatePenaliseMegapoolValidatorGas(t.rp, request.MegapoolAddress, request.ValidatorId, opts) - if err != nil { - return fmt.Errorf("could not estimate the gas required to penalise megapool %s validator %d: %w", request.MegapoolAddress.Hex(), request.ValidatorId, err) - } - gas := big.NewInt(int64(gasInfo.Safe)) - - // Get the max fee - maxFee := t.maxFee - if maxFee == nil || maxFee.Uint64() == 0 { - maxFee, err = rpgas.GetHeadlessMaxFeeWeiWithLatestBlock(t.cfg, t.rp) - if err != nil { - return err - } - } - - // Print the gas info - if !gasInfo.PrintAndCheck(true, t.gasThreshold, &t.log, maxFee, t.gasLimit) { - return nil - } - - opts.GasFeeCap = maxFee - opts.GasTipCap = GetPriorityFee(t.maxPriorityFee, maxFee) - opts.GasLimit = gas.Uint64() - - // Penalise the megapool validator for failing to exit within the cooperative phase - hash, err := network.PenaliseMegapoolValidator(t.rp, request.MegapoolAddress, request.ValidatorId, opts) - if err != nil { - return err - } - - // Print TX info and wait for it to be included in a block - err = transactions.PrintAndWaitForTransaction(t.cfg, hash, t.rp.Client, &t.log) - if err != nil { - return err - } - - // Log - t.log.Printlnf("Successfully penalised megapool %s (validator %d) for not exiting.", request.MegapoolAddress.Hex(), request.ValidatorId) - - // Return - return nil -} From 3531aad6c79327df86726285a964df9e65139fbb Mon Sep 17 00:00:00 2001 From: Fornax <23104993+0xfornax@users.noreply.github.com> Date: Fri, 25 Sep 2026 13:31:21 -0300 Subject: [PATCH 2/2] Remove bindings from contract-only calls --- bindings/dao/security/actions.go | 44 ------------------- bindings/deposit/deposit-pool.go | 25 ----------- bindings/megapool/megapool-contract-v2.go | 21 +-------- bindings/megapool/megapool-contract.go | 28 ------------ bindings/megapool/megapool-interface.go | 4 -- bindings/minipool/minipool-contract-v4.go | 20 +-------- bindings/network/exit.go | 44 ------------------- bindings/node/node.go | 14 ------ .../node/check-megapool-exit-requests.go | 6 +-- 9 files changed, 6 insertions(+), 200 deletions(-) diff --git a/bindings/dao/security/actions.go b/bindings/dao/security/actions.go index 0f87c13b5..c35b5dea0 100644 --- a/bindings/dao/security/actions.go +++ b/bindings/dao/security/actions.go @@ -34,50 +34,6 @@ func Join(rp *rocketpool.RocketPool, opts *bind.TransactOpts) (common.Hash, erro return tx.Hash(), nil } -// Estimate the gas of Kick -func EstimateKickGas(rp *rocketpool.RocketPool, address common.Address, opts *bind.TransactOpts) (gaslimit.Limits, error) { - rocketDAOSecurityActions, err := getRocketDAOSecurityActions(rp, nil) - if err != nil { - return gaslimit.Limits{}, err - } - return rocketDAOSecurityActions.GetTransactionGasInfo(opts, "actionKick", address) -} - -// Removes a member from the security DAO -func Kick(rp *rocketpool.RocketPool, address common.Address, opts *bind.TransactOpts) (common.Hash, error) { - rocketDAOSecurityActions, err := getRocketDAOSecurityActions(rp, nil) - if err != nil { - return common.Hash{}, err - } - tx, err := rocketDAOSecurityActions.Transact(opts, "actionKick", address) - if err != nil { - return common.Hash{}, fmt.Errorf("error kicking %s from the security DAO: %w", address.Hex(), err) - } - return tx.Hash(), nil -} - -// Estimate the gas of KickMulti -func EstimateKickMultiGas(rp *rocketpool.RocketPool, addresses []common.Address, opts *bind.TransactOpts) (gaslimit.Limits, error) { - rocketDAOSecurityActions, err := getRocketDAOSecurityActions(rp, nil) - if err != nil { - return gaslimit.Limits{}, err - } - return rocketDAOSecurityActions.GetTransactionGasInfo(opts, "actionKickMulti", addresses) -} - -// Removes multiple members from the security DAO -func KickMulti(rp *rocketpool.RocketPool, addresses []common.Address, opts *bind.TransactOpts) (common.Hash, error) { - rocketDAOSecurityActions, err := getRocketDAOSecurityActions(rp, nil) - if err != nil { - return common.Hash{}, err - } - tx, err := rocketDAOSecurityActions.Transact(opts, "actionKickMulti", addresses) - if err != nil { - return common.Hash{}, fmt.Errorf("error kicking members from the security DAO: %w", err) - } - return tx.Hash(), nil -} - // Estimate the gas of RequestLeave func EstimateRequestLeaveGas(rp *rocketpool.RocketPool, opts *bind.TransactOpts) (gaslimit.Limits, error) { rocketDAOSecurityActions, err := getRocketDAOSecurityActions(rp, nil) diff --git a/bindings/deposit/deposit-pool.go b/bindings/deposit/deposit-pool.go index b5a78ba89..6473baeb7 100644 --- a/bindings/deposit/deposit-pool.go +++ b/bindings/deposit/deposit-pool.go @@ -8,33 +8,8 @@ import ( "github.com/ethereum/go-ethereum/common" "github.com/rocket-pool/smartnode/bindings/rocketpool" - "github.com/rocket-pool/smartnode/bindings/transactions/gaslimit" ) -// Estimate the gas required to exit the validator queue -func EstimateExitQueueGas(rp *rocketpool.RocketPool, validatorIndex uint64, expressQueue bool, opts *bind.TransactOpts) (gaslimit.Limits, error) { - rocketDepositPool, err := getRocketDepositPool(rp, nil) - if err != nil { - return gaslimit.Limits{}, err - } - validatorIndexBig := big.NewInt(int64(validatorIndex)) - return rocketDepositPool.GetTransactionGasInfo(opts, "exitQueue", validatorIndexBig, expressQueue) -} - -// Exit the validator queue -func ExitQueue(rp *rocketpool.RocketPool, validatorIndex uint64, expressQueue bool, opts *bind.TransactOpts) (common.Hash, error) { - rocketDepositPool, err := getRocketDepositPool(rp, nil) - if err != nil { - return common.Hash{}, err - } - validatorIndexBig := big.NewInt(int64(validatorIndex)) - tx, err := rocketDepositPool.Transact(opts, "exitQueue", validatorIndexBig, expressQueue) - if err != nil { - return common.Hash{}, fmt.Errorf("error exiting validator queue: %w", err) - } - return tx.Hash(), nil -} - // Struct to hold queue top (address of the validator at the top of the queue and a boolean indicating if the assignment is possible) type QueueTop struct { Receiver common.Address `abi:"receiver"` diff --git a/bindings/megapool/megapool-contract-v2.go b/bindings/megapool/megapool-contract-v2.go index a1c900f39..549a63a11 100644 --- a/bindings/megapool/megapool-contract-v2.go +++ b/bindings/megapool/megapool-contract-v2.go @@ -1,26 +1,21 @@ package megapool import ( - "fmt" - "math/big" - "github.com/ethereum/go-ethereum/accounts/abi" "github.com/ethereum/go-ethereum/accounts/abi/bind" "github.com/ethereum/go-ethereum/common" "github.com/rocket-pool/smartnode/bindings/rocketpool" - "github.com/rocket-pool/smartnode/bindings/transactions/gaslimit" ) type MegapoolV2 interface { Megapool - EstimateForceExitGas(validatorIds []uint32, feeLimit *big.Int, opts *bind.TransactOpts) (gaslimit.Limits, error) - ForceExit(validatorIds []uint32, feeLimit *big.Int, opts *bind.TransactOpts) (common.Hash, error) } // Megapool contract from delegate version 2, which adds support for EL-triggered forced exits type megapoolV2 struct { megapoolV1 + // TODO keeping this while waiting for megapoolv2 details } const ( @@ -57,17 +52,3 @@ func NewMegaPoolV2(rp *rocketpool.RocketPool, address common.Address, opts *bind }, }, nil } - -// Estimate the gas of ForceExit -func (mp *megapoolV2) EstimateForceExitGas(validatorIds []uint32, feeLimit *big.Int, opts *bind.TransactOpts) (gaslimit.Limits, error) { - return mp.Contract.GetTransactionGasInfo(opts, "forceExit", validatorIds, feeLimit) -} - -// Force exit megapool validators that failed to exit within the cooperative exit phase -func (mp *megapoolV2) ForceExit(validatorIds []uint32, feeLimit *big.Int, opts *bind.TransactOpts) (common.Hash, error) { - tx, err := mp.Contract.Transact(opts, "forceExit", validatorIds, feeLimit) - if err != nil { - return common.Hash{}, fmt.Errorf("error force exiting megapool %s validators: %w", mp.Address.Hex(), err) - } - return tx.Hash(), nil -} diff --git a/bindings/megapool/megapool-contract.go b/bindings/megapool/megapool-contract.go index 4936a126a..3923066ab 100644 --- a/bindings/megapool/megapool-contract.go +++ b/bindings/megapool/megapool-contract.go @@ -400,20 +400,6 @@ func (mp *megapoolV1) GetNodeAddress(opts *bind.CallOpts) (common.Address, error return *nodeAddress, nil } -// Estimate the gas required to create a new validator as part of a megapool -func (mp *megapoolV1) EstimateNewValidatorGas(validatorId uint32, validatorSignature rptypes.ValidatorSignature, depositDataRoot common.Hash, opts *bind.TransactOpts) (gaslimit.Limits, error) { - return mp.Contract.GetTransactionGasInfo(opts, "newValidator", validatorId, validatorSignature[:], depositDataRoot) -} - -// Create a new validator as part of a megapool -func (mp *megapoolV1) NewValidator(bondAmount *big.Int, useExpressTicket bool, validatorPubkey rptypes.ValidatorPubkey, validatorSignature rptypes.ValidatorSignature, opts *bind.TransactOpts) (common.Hash, error) { - tx, err := mp.Contract.Transact(opts, "newValidator", bondAmount, useExpressTicket, validatorPubkey[:], validatorSignature[:]) - if err != nil { - return common.Hash{}, fmt.Errorf("error creating new validator %s: %w", validatorPubkey.Hex(), err) - } - return tx.Hash(), nil -} - // Estimate the gas required to remove a validator from the deposit queue func (mp *megapoolV1) EstimateDequeueGas(validatorId uint32, opts *bind.TransactOpts) (gaslimit.Limits, error) { return mp.Contract.GetTransactionGasInfo(opts, "dequeue", validatorId) @@ -428,20 +414,6 @@ func (mp *megapoolV1) Dequeue(validatorId uint32, opts *bind.TransactOpts) (comm return tx.Hash(), nil } -// Estimate the gas required to accept requested funds from the deposit pool -func (mp *megapoolV1) EstimateAssignFundsGas(validatorId uint32, opts *bind.TransactOpts) (gaslimit.Limits, error) { - return mp.Contract.GetTransactionGasInfo(opts, "assignFunds", validatorId) -} - -// Accept requested funds from the deposit pool -func (mp *megapoolV1) AssignFunds(validatorId uint32, opts *bind.TransactOpts) (common.Hash, error) { - tx, err := mp.Contract.Transact(opts, "assignFunds", validatorId) - if err != nil { - return common.Hash{}, fmt.Errorf("error assigning funds to validator ID %d: %w", validatorId, err) - } - return tx.Hash(), nil -} - // Estimate the gas required to dissolve a validator that has not staked within the required period func (mp *megapoolV1) EstimateDissolveValidatorGas(validatorId uint32, opts *bind.TransactOpts) (gaslimit.Limits, error) { return mp.Contract.GetTransactionGasInfo(opts, "dissolveValidator", validatorId) diff --git a/bindings/megapool/megapool-interface.go b/bindings/megapool/megapool-interface.go index 045ed0ba5..42026e55e 100644 --- a/bindings/megapool/megapool-interface.go +++ b/bindings/megapool/megapool-interface.go @@ -34,14 +34,10 @@ type Megapool interface { CalculateRewards(amount *big.Int, opts *bind.CallOpts) (RewardSplit, error) GetPendingRewards(opts *bind.CallOpts) (*big.Int, error) GetNodeAddress(opts *bind.CallOpts) (common.Address, error) - EstimateNewValidatorGas(validatorId uint32, validatorSignature rptypes.ValidatorSignature, depositDataRoot common.Hash, opts *bind.TransactOpts) (gaslimit.Limits, error) - NewValidator(bondAmount *big.Int, useExpressTicket bool, validatorPubkey rptypes.ValidatorPubkey, validatorSignature rptypes.ValidatorSignature, opts *bind.TransactOpts) (common.Hash, error) EstimateDequeueGas(validatorId uint32, opts *bind.TransactOpts) (gaslimit.Limits, error) Dequeue(validatorId uint32, opts *bind.TransactOpts) (common.Hash, error) EstimateDistributeGas(opts *bind.TransactOpts) (gaslimit.Limits, error) Distribute(opts *bind.TransactOpts) (common.Hash, error) - EstimateAssignFundsGas(validatorId uint32, opts *bind.TransactOpts) (gaslimit.Limits, error) - AssignFunds(validatorId uint32, opts *bind.TransactOpts) (common.Hash, error) EstimateDissolveValidatorGas(validatorId uint32, opts *bind.TransactOpts) (gaslimit.Limits, error) DissolveValidator(validatorId uint32, opts *bind.TransactOpts) (common.Hash, error) EstimateClaimRefundGas(opts *bind.TransactOpts) (gaslimit.Limits, error) diff --git a/bindings/minipool/minipool-contract-v4.go b/bindings/minipool/minipool-contract-v4.go index 0fbc5d63a..f2c0c6ddb 100644 --- a/bindings/minipool/minipool-contract-v4.go +++ b/bindings/minipool/minipool-contract-v4.go @@ -36,8 +36,6 @@ type MinipoolV4 interface { EstimateDistributeBalanceGas(rewardsOnly bool, opts *bind.TransactOpts) (gaslimit.Limits, error) DistributeBalance(rewardsOnly bool, opts *bind.TransactOpts) (common.Hash, error) PrepareDistributeBalance(rewardsOnly bool, opts *bind.TransactOpts) (*types.Transaction, error) - ForceExit(opts *bind.TransactOpts) (common.Hash, error) - EstimateForceExitGas(opts *bind.TransactOpts) (gaslimit.Limits, error) } // Minipool contract @@ -77,10 +75,10 @@ func newMinipool_v4(rp *rocketpool.RocketPool, address common.Address, opts *bin }, nil } -// Get the minipool as a v4 minipool if it implements the required methods +// Get the minipool as a v4 minipool if its version and methods support it. func GetMinipoolAsV4(mp Minipool) (MinipoolV4, bool) { castedMp, ok := mp.(MinipoolV4) - if ok { + if ok && mp.GetVersion() >= 4 { return castedMp, true } return nil, false @@ -651,17 +649,3 @@ func (mp *minipool_v4) GetPrestakeEvent(intervalSize *big.Int, opts *bind.CallOp } return prestakeData, nil } - -// Estimate the gas required to force exit a minipool -func (mp *minipool_v4) EstimateForceExitGas(opts *bind.TransactOpts) (gaslimit.Limits, error) { - return mp.Contract.GetTransactionGasInfo(opts, "forceExit") -} - -// Force exit a minipool -func (mp *minipool_v4) ForceExit(opts *bind.TransactOpts) (common.Hash, error) { - tx, err := mp.Contract.Transact(opts, "forceExit") - if err != nil { - return common.Hash{}, fmt.Errorf("error forcing exit for minipool %s: %w", mp.Address.Hex(), err) - } - return tx.Hash(), nil -} diff --git a/bindings/network/exit.go b/bindings/network/exit.go index fb8aef580..f58e017e8 100644 --- a/bindings/network/exit.go +++ b/bindings/network/exit.go @@ -99,28 +99,6 @@ func GetMinipoolLastExit(rp *rocketpool.RocketPool, minipoolAddress common.Addre return time.Unix((*value).Int64(), 0), nil } -// Estimate the gas of RequestMinipoolExit -func EstimateRequestMinipoolExitGas(rp *rocketpool.RocketPool, minipoolAddress common.Address, opts *bind.TransactOpts) (gaslimit.Limits, error) { - rocketNetworkExit, err := getRocketNetworkExit(rp, nil) - if err != nil { - return gaslimit.Limits{}, err - } - return rocketNetworkExit.GetTransactionGasInfo(opts, "requestMinipoolExit", minipoolAddress) -} - -// Request a Minipool to exit cooperatively -func RequestMinipoolExit(rp *rocketpool.RocketPool, minipoolAddress common.Address, opts *bind.TransactOpts) (common.Hash, error) { - rocketNetworkExit, err := getRocketNetworkExit(rp, nil) - if err != nil { - return common.Hash{}, err - } - tx, err := rocketNetworkExit.Transact(opts, "requestMinipoolExit", minipoolAddress) - if err != nil { - return common.Hash{}, fmt.Errorf("error requesting minipool exit for %s: %w", minipoolAddress.Hex(), err) - } - return tx.Hash(), nil -} - // Estimate the gas of ForceMinipoolExit func EstimateForceMinipoolExitGas(rp *rocketpool.RocketPool, minipoolAddress common.Address, opts *bind.TransactOpts) (gaslimit.Limits, error) { rocketNetworkExit, err := getRocketNetworkExit(rp, nil) @@ -165,28 +143,6 @@ func PenaliseMinipool(rp *rocketpool.RocketPool, minipoolAddress common.Address, return tx.Hash(), nil } -// Estimate the gas of RequestMegapoolExit -func EstimateRequestMegapoolExitGas(rp *rocketpool.RocketPool, megapoolAddress common.Address, validatorId uint32, opts *bind.TransactOpts) (gaslimit.Limits, error) { - rocketNetworkExit, err := getRocketNetworkExit(rp, nil) - if err != nil { - return gaslimit.Limits{}, err - } - return rocketNetworkExit.GetTransactionGasInfo(opts, "requestMegapoolExit", megapoolAddress, validatorId) -} - -// Request a Megapool validator to exit cooperatively -func RequestMegapoolExit(rp *rocketpool.RocketPool, megapoolAddress common.Address, validatorId uint32, opts *bind.TransactOpts) (common.Hash, error) { - rocketNetworkExit, err := getRocketNetworkExit(rp, nil) - if err != nil { - return common.Hash{}, err - } - tx, err := rocketNetworkExit.Transact(opts, "requestMegapoolExit", megapoolAddress, validatorId) - if err != nil { - return common.Hash{}, fmt.Errorf("error requesting megapool exit for %s validator %d: %w", megapoolAddress.Hex(), validatorId, err) - } - return tx.Hash(), nil -} - // Estimate the gas of ForceMegapoolExit func EstimateForceMegapoolExitGas(rp *rocketpool.RocketPool, megapoolAddress common.Address, validatorId uint32, opts *bind.TransactOpts) (gaslimit.Limits, error) { rocketNetworkExit, err := getRocketNetworkExit(rp, nil) diff --git a/bindings/node/node.go b/bindings/node/node.go index 4920dc768..88d338dec 100644 --- a/bindings/node/node.go +++ b/bindings/node/node.go @@ -722,20 +722,6 @@ func GetExpressTicketCount(rp *rocketpool.RocketPool, nodeAddress common.Address return (*expressTicketCount).Uint64(), nil } -// Consume an express ticket for the given node operator -func UseExpressTicket(rp *rocketpool.RocketPool, nodeAddress common.Address, opts *bind.TransactOpts) (common.Hash, error) { - rocketNodeManager, err := getRocketNodeManager(rp, nil) - if err != nil { - return common.Hash{}, nil - } - - tx, err := rocketNodeManager.Transact(opts, "useExpressTicket") - if err != nil { - return common.Hash{}, fmt.Errorf("error calling useExpressticket: %w", err) - } - return tx.Hash(), nil -} - // Get the megapool address for the given node operator func GetMegapoolAddress(rp *rocketpool.RocketPool, nodeAddress common.Address, opts *bind.CallOpts) (common.Address, error) { rocketNodeManager, err := getRocketNodeManager(rp, opts) diff --git a/rocketpool/node/check-megapool-exit-requests.go b/rocketpool/node/check-megapool-exit-requests.go index f633c069d..682e2b2a3 100644 --- a/rocketpool/node/check-megapool-exit-requests.go +++ b/rocketpool/node/check-megapool-exit-requests.go @@ -218,9 +218,9 @@ func (t *checkMegapoolExitRequests) run(state *state.NetworkStateIndex) error { } // Megapools from version 2 support a forced exit request - if mpv2, ok := mp.(megapool.MegapoolV2); ok { + if mp.GetVersion() >= 2 { t.log.Printlnf("Megapool %s (validator %d) uses version %d; submitting ForceExit", request.MegapoolAddress.Hex(), validatorIndex, mp.GetVersion()) - err := t.forceExitMegapoolValidator(mpv2, request) + err := t.forceExitMegapoolValidator(request) if err != nil { t.log.Printlnf("Error force-exiting megapool %s validator %d: %s", request.MegapoolAddress.Hex(), request.ValidatorId, err.Error()) } @@ -281,7 +281,7 @@ func (t *checkMegapoolExitRequests) exitOwnMegapoolValidator(state *state.Networ return nil } -func (t *checkMegapoolExitRequests) forceExitMegapoolValidator(mp megapool.MegapoolV2, request network.MegapoolExitRequest) error { +func (t *checkMegapoolExitRequests) forceExitMegapoolValidator(request network.MegapoolExitRequest) error { // Get transactor opts, err := t.w.GetNodeAccountTransactor()