# Rocket Pool > Rocket Pool is a decentralised Ethereum liquid staking protocol. Stakers swap ETH for rETH, a yield-bearing liquid staking token. Node operators stake ETH bonds in megapools (or legacy minipools) to run validators, earning commission plus optional RPL incentives. Governance is split between the Protocol DAO (RPL holders), the Oracle DAO, and a Security Council. Guidance for AI agents and integrators: - rocketStorage is the permanent on-chain registry; every other contract can change with protocol upgrades. Resolve addresses at runtime with RocketStorage.getAddress(keccak256(abi.encodePacked("contract.address", contractName))). - The rETH/ETH exchange rate is read from the token itself: rocketTokenRETH.getExchangeRate(). - Mint rETH by calling rocketDepositPool.deposit() with ETH attached; burn via rocketTokenRETH.burn(uint256). - Addresses below reflect the latest deployment (protocol v1.4, Saturn). Machine-readable source of truth: https://raw.githubusercontent.com/rocket-pool/skills/main/all-in-one/references/addresses.json ## Contracts — Ethereum Mainnet (chain ID 1) Tokens: - rETH (rocketTokenRETH): 0xae78736Cd615f374D3085123A210448E74Fc6393 - RPL (rocketTokenRPL): 0xD33526068D116cE69F19A9ee46F0bd304F21A51f Core: - rocketStorage: 0x1d8f8f00cfa6758d7bE78336684788Fb0ee0Fa46 - rocketDepositPool: 0xCE15294273CFb9D9b628F4D61636623decDF4fdC - rocketVault: 0x3bDC69C4E5e13E52A65f5583c23EFB9636b469d6 Node staking: - rocketNodeManager: 0xcf2d76A7499d3acB5A22ce83c027651e8d76e250 - rocketNodeDeposit: 0x6B13698c306a297Fee1383cdC2c65d63781D2D47 - rocketNodeStaking: 0xedFc7DCaE43fF954577a2875a9D805874490eE3E - rocketMegapoolFactory: 0xD5bffeaa9f373B9C367132772FAA0b88e3F0E38b - rocketMegapoolManager: 0xf2CCd522Ba5fFEda28fe0389963845D61F342034 - rocketMegapoolDelegate: 0xca3DD4bee7C174903dBF66c3897c27E9ADaAEBdD - rocketMinipoolManager: 0xe54B8C641fd96dE5D6747f47C19964c6b824D62C Rewards: - rocketRewardsPool: 0xCba5951fc706Fc783b7C142DaE8576Ebe29c41FD - rocketSmoothingPool: 0xd4E96eF8eee8678dBFf4d535E033Ed1a4F7605b7 - rocketMerkleDistributorMainnet: 0xE4E2612EE8d7fdc8518Faea85770A3b9c886E2f5 Network state: - rocketNetworkBalances: 0x1D9F14C6Bfd8358b589964baD8665AdD248E9473 - rocketNetworkPrices: 0x25E54Bf48369b8FB25bB79d3a3Ff7F3BA448E382 - rocketNetworkFees: 0xf824e2d69dc7e7c073162C2bdE87dA4746d27a0f - rocketNetworkRevenues: 0x9D9708dA8E0200Dd8Dd9ad09e0AAf184Ad260842 Governance: - rocketDAOProtocol: 0xCaC25e88276A333cF9d4196d112D93af67ef809A - rocketDAOProtocolProposal: 0x2D627A50Dc1C4EDa73E42858E8460b0eCF300b25 - rocketNetworkVoting: 0x994A9C49230FEC0c127B8F42D6c5288F02610AeD - rocketDAONodeTrusted: 0xb8e783882b11Ff4f6Cef3C501EA0f4b960152cc9 - rocketDAOSecurity: 0x84aE6D61Df5c6ba7196b5C76Bcb112B8a689aD37 The full list of all active contracts on mainnet and testnet is in addresses.json above and at https://docs.rocketpool.net/protocol/contracts-integrations. ## rETH and RPL on Other Chains - Arbitrum (42161): rETH 0xec70dcb4a1efa46b8f2d97c310c9c4790ba5ffa8, RPL 0xb766039cc6db368759c1e56b79affe831d0cc507 - Optimism (10): rETH 0x9bcef72be871e61ed4fbbc7630889bee758eb81d, RPL 0xc81d1f0eb955b0c020e5d5b264e1ff72c14d1401 - Base (8453): rETH 0xB6fe221Fe9EeF5aBa221c348bA20A1Bf5e73624c, RPL 0x1f73EAf55d696BFFA9b0EA16fa987B93b0f4d302 - Polygon (137): rETH 0x0266F4F08D82372CF0FcbCCc0Ff74309089c74d1, RPL 0x7205705771547cf79201111b4bd8aaf29467b9ec - zkSync Era (324): rETH 0x32Fd44bB869620C0EF993754c8a00Be67C464806, RPL 0x1CF8553Da5a75C20cdC33532cb19Ef7E3bFFf5BC - Scroll (534352): rETH 0x53878B874283351D26d206FA512aEcE1Bef6C0dD - Unichain: rETH 0x94Cac393f3444cEf63a651FfC18497E7e8bd036a - Starknet: rETH 0x0319111a5037cbec2b3e638cc34a3474e2d2608299f3e62866e9cc683208c610 ## Hoodi Testnet (chain ID 560048) - rocketStorage: 0x594Fb75D3dc2DFa0150Ad03F99F97817747dd4E1 - rocketDepositPool: 0x425E6f83e27f1676AD78BC39dA79C2C7b33d3Fd8 - rETH: 0x7322c24752f79c05FFD1E2a6FCB97020C1C264F1 - RPL: 0x1Cc9cF5586522c6F483E84A19c3C2B0B6d027bF0 ## AI Agent Resources - [Rocket Pool Skills](https://github.com/rocket-pool/skills): Agent skill bundles (SKILL.md, addresses, ABIs, cast examples) for interacting with the protocol — one all-in-one bundle or six domain bundles (liquid-staking, node-operations, governance, network, rewards, tokens) - [addresses.json](https://raw.githubusercontent.com/rocket-pool/skills/main/all-in-one/references/addresses.json): Machine-readable contract addresses for mainnet, Hoodi, and multichain tokens - [Contract ABIs](https://github.com/rocket-pool/skills/tree/main/all-in-one/assets/abis): JSON ABIs for all core contracts ## Known Issues Reported issues that have been reviewed by the team, where the behaviour is intended or accepted by design. Also published at https://rocketpool.net/protocol/security. ### RocketMegapoolDelegate.distribute() allows a full-exit validator's 32 ETH principal to be distributed as EL rewards If the node operator fails to notifyExit and the oDAO fails to challenge the Megapool before the funds arrive in the contract, calling distribute causes the capital to be treated as rewards and incorrectly distributed. When a megapool validator fully exits, there is a delay between exiting and when the funds are withdrawable, then eventually the funds are swept from the beacon chain into the megapool contract. In normal operation, a node operator will call notifyExit to notify the contracts that funds are about to land. If a node operator fails to notifyExit, our ODAO can call challengeExit to lock the megapool distribute function before the funds are withdrawable. On challengeExit the node operator is fined for not notifying their exit. This is by design / intended behaviour. The Oracle DAO challenge process is an integral part of the protocol to ensure that all withdrawals are notified and principal is always distributed appropriately. ### pDAO challenge left unresponded and bonds permanently locked after proposal challenge period The pDAO fraud-proof system locks an RPL bond when a node operator challenges part of a proposal's optimistic voting-power tree. If the proposer answers the challenge it becomes Responded. After the challenge period finishes the pDAO proposal is available for voting. If a challenge is raised it could be unanswered when the proposal enters voting. This is a non-issue because the governance system operates under the condition that if a proposal makes it through the challenge period without being defeated, then the proposal is considered valid. The challenge period is set to a long enough time (7 days) that any invalid proposal can be defeated within this period. Challengers must therefore defeat a proposal before the challenge period ends or, from the protocol's perspective, those challenges were never valid to begin with. ### Megapool bond counts towards governance voting power when validators are queued A megapool node operator's ETH bond is applied to the governance voting-power snapshot the moment it is queued (RocketDepositPool.requestFunds), not when it is actually deployed to a validator. The same operator can pull that bond straight back out of the queue via RocketMegapoolDelegate.dequeue, which returns it as spendable credit. RocketNetworkSnapshots values are immutable at past blocks, a node that holds bond across a single block boundary keeps the voting power at that block permanently. Any pDAO proposal whose snapshot block falls inside that window is decided using that figure. This is a non-issue because voting power is a function of the RPL a node operator has staked (min 28 days), clamped by an ETH-bond ceiling: VP = sqrt(min(rplStake, bondedETH × maxStakePct / rplPrice)). RPL is what determines the magnitude; bonded ETH only sets the cap. When a node operator enqueues a megapool validator, they commit real ETH as bond, and the cap moves to reflect that commitment. The bond is locked while the validator is in the queue — dequeuing reverses the cap increase — so the operator cannot acquire voting power without putting capital at risk for the duration. To benefit from a higher cap, an operator must already hold RPL that is currently constrained by their existing ETH bond. They never receive voting power beyond what their RPL stake alone entitles them to. Raising the cap by bonding additional ETH does not grant any voting power they would not otherwise be eligible for as a function of their RPL holdings — it simply releases voting power already implied by their RPL position. This is the system functioning as designed. ### slashRPL overrules governance RPL locking for pDAO proposal/challenge bonds RocketNodeStaking.slashRPL caps the slash at the node's legacy stake but doesn't consult getNodeLockedRPL. It can therefore drive a node's staked RPL below the amount the pDAO verifier has locked as proposal/challenge bonds. This is known and intended behaviour of the protocol. RPL can be used simultaneously as a bond for multiple processes. It is used to recover funds during a minipool slashing event and it can be locked for use during governance. While it can be used simultaneously, the slashing risk takes priority. Consequently, in the case of slashing it may be possible that the bond is no longer available to be claimed by a user in the governance system. This is inescapable and expected. Luckily, slashing is an extremely unlikely event. It does not pose a threat to the governance system or challenger bonds because to take advantage of it — a node operator would have to lose 8 ETH. ### Minipool finalisation splits distributor rewards before decrementing active minipool count RocketMinipoolDelegate._finalise() decrements the node's active-minipool count then subsequently invokes _tryDistribute(nodeAddress), which distributes any execution-layer rewards currently held by the node's fee distributor. Although _tryDistribute is placed before the staking-count change inside decrementNodeStakingMinipoolCount, it comes after the incrementNodeFinalisedMinipoolCount call that changes the collateral state used by RocketNodeDistributorDelegate.getNodeShare(). Consequently, a node operator could get more commission than they deserve on their execution rewards. This is a known issue with the RocketMinipoolDelegate. The total impact is small relative to TVL and is naturally bounded by execution reward distribution. ### Pending RPL withdrawal address claimable at any time When a node operator sets an RPL withdrawal address, the target address must submit a transaction confirming the change. If the target RPL address does not confirm the pending change, it is left open until the node operator sets a different address and the new address is confirmed. In the meantime though, the pending change can be claimed by the address at any time. This is a non-issue because at the point that a node operator nominates an address as their RPL withdrawal address, they have given authority to that address. As such, it is the node operator's responsibility to trust the address they have nominated. ## Documentation - [Docs home](https://docs.rocketpool.net/): Protocol, liquid staking, and node operator documentation - [Contracts & integrations](https://docs.rocketpool.net/protocol/contracts-integrations): All deployed contracts, token deployments, rate oracles, and DeFi integrations - [Contract usage guide](https://docs.rocketpool.net/protocol/contracts-usage): How to resolve and call Rocket Pool contracts - [Smart contract source](https://github.com/rocket-pool/rocketpool): Solidity source for the protocol - [GitHub organisation](https://github.com/rocket-pool): All Rocket Pool repositories ## Website and Apps - [Staking app](https://stake.rocketpool.net): Swap ETH for rETH - [Node operator app](https://node.rocketpool.net/): Node staking app - [What is liquid staking?](https://rocketpool.net/liquid-staking/what-is-liquid-staking): rETH explained - [What is node staking?](https://rocketpool.net/node-staking/what-is-node-staking): Running a Rocket Pool node - [Security](https://rocketpool.net/protocol/security): Audits and bug bounties - [Integrations](https://rocketpool.net/protocol/integrations): Where rETH and RPL are supported - [Governance](https://rocketpool.net/governance/protocol-dao): Protocol DAO overview ## Community - [Discord](https://discord.gg/rocketpool): Main community and support channel - [Governance forum](https://dao.rocketpool.net): DAO proposals and discussion - [X / Twitter](https://x.com/Rocket_Pool): Announcements - [Reddit](https://www.reddit.com/r/rocketpool): Community discussion Contract addresses last verified 2026-07-20 against the rocket-pool/skills repository.