Vault addresses
Both vaults hold WETH and issueWETH-REL shares with 18 decimals.
ABIs are published in the
@relay-vaults/abis package (RelayPool, RelayPoolNativeGateway). See the RelayPool and RelayPoolNativeGateway references for the full interfaces.
Check your balance
Read these view functions on the vault contract, from a block explorer’s Read Contract tab or any RPC client:balanceOf(you)— your share balance.convertToAssets(shares)— the WETH value of those shares.yieldPool()— the yield pool that holds the vault’s liquid WETH.
maxWithdraw(vault) on the yield pool address. This is the WETH the vault can pay out right now, across all LPs.
If convertToAssets(balanceOf(you)) is at or below the yield pool’s maxWithdraw(vault), you can withdraw your whole position in one transaction. Otherwise, convert that WETH amount to shares by calling convertToShares(amount) on the vault, not the yield pool, and redeem slightly fewer shares than the result: the limit is shared by all LPs and can move before your transaction lands. The example below keeps a 0.1% margin. See Limits.
If you have trouble withdrawing, reach out to Relay support.
Withdraw as WETH
Withdrawing as WETH takes one transaction on the vault and needs no approval.- Pick the shares to redeem: your
balanceOf(you), or the liquidity cap in shares from Check your balance if that is lower. - Call
redeem(shares, receiver, owner)withreceiverset to the address that should receive WETH, andownerset to your address.
withdraw(assets, receiver, owner) with assets at or below both your position’s value and the yield pool’s maxWithdraw(vault).
Withdraw as native ETH
TheRelayPoolNativeGateway redeems your shares, unwraps the WETH, and sends ETH to the receiver. It takes two transactions because the gateway redeems on your behalf and needs a share allowance.
- Pick the shares to redeem: your
balanceOf(you), or the liquidity cap in shares from Check your balance if that is lower. On the vault, callapprove(gateway, shares). - On the gateway, call
redeem(vault, shares, receiver, minAssetsOut). SetminAssetsOutslightly belowpreviewRedeem(shares)to protect against rounding.
withdraw(vault, assets, receiver, maxSharesIn) for an exact ETH amount. Approve at least maxSharesIn shares first.
Example
The script below redeems as many of your shares as current liquidity allows, as WETH, using viem. To withdraw on Arbitrum, importarbitrum from viem/chains, use it in place of mainnet, and set VAULT to the Arbitrum vault address.
pool:withdraw Hardhat task from the relay-vaults repository. Set DEPLOYER_PRIVATE_KEY to the LP wallet’s key and pass the vault address explicitly, for example yarn run hardhat pool:withdraw --network ethereum --pool 0x57b68c4ea221ee8da6eb14ebdfccee5177567771. When prompted, enter an amount at or below the yield pool’s maxWithdraw(vault): all redeems your entire balance and reverts while liquidity is short.
Limits
- Liquidity cap — withdrawals are limited to the yield pool’s
maxWithdraw(vault). Funds still outstanding in bridges cannot be withdrawn until they return to the vault, and high utilization in the underlying lending market (Aave) can also lower the limit temporarily. If liquidity is short, withdraw what is available and keep the remaining shares: they stay redeemable once liquidity returns. The limit is shared by all LPs, so if a withdrawal at the limit reverts withERC4626: withdraw more than max, retry with a slightly smaller amount. If you cannot withdraw your full position, reach out to Relay support. - No cooldown — withdrawals take effect in the same transaction. There is no lock-up or withdrawal queue.
- No pause — the vault contracts have no pause function and no withdrawal allowlist. The vault owner can still move the vault’s assets to a different yield pool with
updateYieldPool; see RelayPool. - Gas — you pay gas in ETH on the vault’s chain (Ethereum or Arbitrum). The native ETH path costs two transactions.
- Yield — yield streams into the vault over a streaming period (currently 7 days), so
convertToAssetscan increase slightly between reads.