> ## Documentation Index
> Fetch the complete documentation index at: https://docs.primev.xyz/llms.txt
> Use this file to discover all available pages before exploring further.

# Rocket Pool Opt-in

> Opt into mev-commit using Validators registered through Rocket Minipools.

export const HoodiRocketMinipoolRegistryAddress = "0xbe5a803a7b68f442eff1953c672a3499779680b0";

This guide explains how to register Rocket Pool validators with the **Rocket Pool Minipool Registry** for mev-commit, how freezing works, and how to deregister. This Registry is only available on Hoodi testnet at the moment, with mainnet deployment coming soon.

***

## Why use this method?

Opting-in validators through the RocketMinipool Registry is ideal for validators that already exist through Rocket Pool and want to earn additional rewards.

***

## How the Registry integrates with Rocket Pool

The registry relies on Rocket Pool's contracts to check for each validator's associated minipool and determine the **authorized operators**. The registry itself does not remap keys to minipools and operators; Rocket Pool contract data is checked at the time of the relevant call.

***

## Registering validators

### Registering using a withdrawal address

Simple registration can currently be executed on Hoodi etherscan from a Rocket Pool <strong>withdrawal address</strong> using the "Write as Proxy" tab on the [RocketMinipoolRegistry contract](https://hoodi.etherscan.io/address/0xbe5a803a7b68f442eff1953c672a3499779680b0#writeProxyContract) (address {HoodiRocketMinipoolRegistryAddress}). Mainnet deployment is planned in the near future.

Call:

```solidity theme={null}
registerValidators(bytes[] valPubKeys)
```

Requirements per key:

* The pubkey must be associated with an **active Rocket Pool minipool**.
* The validator must not already be registered.
* The caller must be the **withdrawal address** for that minipool.

**Etherscan input tip (bytes\[]):**

```
0xkey1, 0xkey2, 0xkey3, ...
```

No brackets, no quotes.

***

### Registering using a signature from your node address

Users can also register by authorizing an executor with a signature from their node address, signed locally via Smart Node. Full front-end support for generating these signatures will be available soon.

> **⚠️ Caution: Do not use your node address in a web browser**
>
> For node security, it is best practice to avoid putting <strong>node address keys</strong> into web browsers.
> When registering via a browser, use your <strong>withdrawal address</strong> instead, or perform the action locally via so keys never touch a website.

## Freezing & unfreezing

* **Freeze:** The **freeze oracle** can call `freeze(bytes[] valPubKeys)` for validators that violate protocol rules. Frozen validators are considered opted out.
* **Unfreeze:** Anyone can call `unfreeze(bytes[] valPubKeys)` and pay `unfreezeFee * numberOfKeys`. The current fee and receiver can be checked on-chain. The owner can also override with `ownerUnfreeze(bytes[] valPubKeys)`.

***

## Deregistration

Deregistration is a two-step process:

* Call `requestValidatorDeregistration(bytes[] valPubKeys)` to start the timer.
* After `deregistrationPeriod` has passed, call `deregisterValidators(bytes[] valPubKeys)` to complete it. Validators must not be frozen.

Helper: `getEligibleTimeForDeregistration(bytes pubkey)` returns the timestamp when a validator can be deregistered. A value of 0 indicates that no deregistration request has been made for the key.
