rETH [ ERC-20 ] MAINNET

Yield that never stops being an ordinary token

Fees stay out of the promise: deposit ETH, receive a plain rETH token, and redeem 1:1 whenever liquidity is available.

$ROXX CA To Be Announced
Live Data Stream

One deposit that works in two places at the same time

roxx.fi
Mint Redeem rETH
ETH locked
ETH
100%backing, held in contract
0d60d120d180d180d
Peg
1.00000
1 : 1ETH per rETH
rETH supply
Peg drift
0.00%
Your rETH
rETH
1 : 1redeemable for ETH
Mint fee
0%
Redeem fee
0%
Contract log
[MINT]mint() — 1 ETH in, 1 rETH outDONE
[RDM]redeem(amount) — 1 rETH burned for 1 ETH
[XFR]transfer(to, amount) — rETH sent as plain ERC-20
Reserve check
ETH in contract
rETH supply
Fully backed
100%

A simple 1:1 token, built for clear exits

Roxx turns deposited ETH into a plain rETH token at a one-for-one rate. Connect your wallet, mint from this page or the dedicated app, and redeem when you want to return to ETH.

Open the mint app
01

The argument

rETH is designed around a clear promise: the token is minted only when ETH enters the contract, and each token can be redeemed against the same amount of ETH.

What rETH does not promise

  • No fixed APY or manual return promise.
  • No price oracle or synthetic exposure.
  • No hidden reward stream.

The token represents deposited ETH, not a made-up performance number.

What rETH does provide

  • One ETH deposited mints one rETH.
  • rETH remains a transferable ERC-20.
  • Burning rETH requests the matching ETH.

The balance and backing can be checked directly on Robinhood Chain.

02

The mechanic

Four clear actions describe the entire rETH lifecycle. ETH enters, a plain ERC-20 leaves, and the same token can be redeemed back through the contract.

  1. 1

    Deposit

    mint() payable

    Send ETH to the contract and it mints the same amount of rETH to your wallet.

  2. 2

    Hold

    transfer(to, amount)

    rETH is a plain ERC-20. Send it to another wallet or use it wherever compatible tokens are accepted.

  3. 3

    Redeem

    redeem(amount)

    Burn rETH and the contract sends the same amount of ETH back to your wallet.

  4. 4

    Verify

    balanceOf / totalSupply

    Compare the contract's ETH balance with rETH total supply to check the 1:1 backing relationship.

The rETH lifecycle

Every action is visible and tied to the same 1:1 backing rule.

Deposit ETH

Send ETH to mint the same amount of rETH.

Plain ERC-20

Transfer rETH like any other token on the network.

Exact backing

Contract ETH and rETH supply move together.

Redeem

Burn rETH to request the matching amount of ETH.

No mint fee

The contract does not charge a mint fee.

No admin mint

New rETH only comes from ETH deposited through the contract.

03

Mint rETH that accrues value

Deposit ETH and receive rETH at the current exchange rate. As the protocol adds yield from staking and lending, each rETH becomes redeemable for more ETH. Withdraw to ETH at the live rate anytime. The rate is set purely by the ETH actually backing the token — variable, and never more than the vault holds.

You pay Balance: 0.000
ETH
You receive
rETH

Connect a wallet to mint rETH.

Exchange rate1 rETH = 1.0000 ETH
Your rETH value
Target yield~8% APY · variable
Backing100% ETH
NetworkRobinhood Chain
RETHVault.sol · rate = totalAssets / totalSupply
// The rate is derived purely from balances, so the vault can never owe
// more ETH than it holds. Yield fed in via addYield() lifts every rETH.

// ETH value of a given amount of rETH:
function convertToAssets(uint256 shares) public view returns (uint256) {
    return (shares * (totalAssets + 1)) / (totalSupply + 1e3);
}

// Deposit ETH, mint rETH at the current rate:
function deposit() external payable returns (uint256 shares) {
    shares = convertToShares(msg.value);   // assets and supply rise together
    totalAssets += msg.value;
    _mint(msg.sender, shares);             // depositors never dilute holders
}

// Withdraw anytime: burn rETH for its current ETH value:
function redeem(uint256 shares) external returns (uint256 assets) {
    assets = convertToAssets(shares);
    require(assets <= totalAssets, "insufficient liquidity");
    _burn(msg.sender, shares);
    totalAssets -= assets;
    (bool ok, ) = msg.sender.call{value: assets}("");
    require(ok, "ETH transfer failed");
}

// Permissionless yield top-up — mints NO shares, so the rate rises
// for everyone. This is where the protocol returns real staking /
// lending yield. No privileged setter can move the rate directly.
function addYield() external payable {
    totalAssets += msg.value;
}

The redemption rate is rate = totalAssets / totalSupply. Deposits and withdrawals move both together, so they never change the rate — only real yield added through addYield() does. Because redemption is always priced against the ETH actually held, the vault is always fully backed. The ~8% target is variable and comes from the protocol's staking and lending; it is not a guarantee.

04

Where this stands

The live contract is on Robinhood Chain. The product is intentionally simple: ETH enters, rETH is minted 1:1, and rETH can be redeemed back to ETH.

Network
Mainnet
Robinhood Chain, chain ID 4663.
Contract
Live
RETHVault deployed at 0x7D2c73…6000. View on Blockscout
Rate
Accruing
rETH value = vault ETH / rETH supply. Starts at 1:1 and rises as yield is added.
Target yield
~8% · variable
Generated by the protocol's staking and lending. Variable and not guaranteed.
Withdrawals
Always open
Withdraw to ETH anytime at the live rate, subject to vault liquidity.
Audit
Pending
The contract is not audited. Use small amounts and review the code before interacting.

Use the Open App button to connect a wallet and mint from the dedicated app page, or use the mint interface on this home page.

05

Questions

The ones integrators actually ask.

rETH is a plain ERC-20 you receive by depositing ETH into the Roxx vault. It starts at 1:1 with ETH, and its redemption value rises over time as the protocol adds yield to the vault.

The exchange rate is simply the vault's ETH balance divided by the rETH supply. The protocol stakes and lends the deposited ETH off-chain and returns the earnings to the vault, which lifts every rETH's redemption value. The target is around 8% APY, but it is variable and not guaranteed — it only reflects the ETH actually funded into the vault.

Yes, withdrawals are always open. Burning rETH returns its current ETH value at the live rate, subject to the ETH liquidity available in the vault at that moment.

The app uses EIP-6963 wallet discovery and can list compatible browser wallets such as MetaMask, Phantom EVM, Coinbase Wallet, Rabby, and others installed in your browser.

Use the mint panel on the home page or click Open app in the header to use the dedicated app page. Both surfaces use the same Robinhood Chain contract configuration.