Reference: networks & addresses
HAM launched on HyperEVM mainnet (chain 999) on 2026-06-13. The protocol contract addresses below are the live, on-chain deployment. The canonical machine-readable record is
deployments/<chainid>.jsonin the protocol repository.Every address on this page was read back from HyperEVM mainnet on 2026-08-22 (via
https://rpc.hyperliquid.xyz/evm) — proxies from their EIP-1967 implementation slot, roles from the contract that holds them, pairs from their factory.
Networks
| Network | Chain ID | RPC | Explorer |
|---|---|---|---|
| HyperEVM mainnet | 999 | https://rpc.hyperliquid.xyz/evm | https://hyperscan.com |
| HyperEVM testnet | 998 | https://rpc.hyperliquid-testnet.xyz/evm | https://testnet.purrsec.com |
Standing infrastructure (HyperEVM mainnet)
| What | Address |
|---|---|
| WHYPE (reserve token) | 0x5555555555555555555555555555555555555555 |
| Ramses legacy (Solidly) pair factory | 0xd0a07E160511c40ccD5340e94660E9C9c01b0D27 |
| Multicall3 | 0xcA11bde05977b3631167028862bE2a173976CA11 |
| Treasury / governance Safe (3-of-5) | 0xF61D218b1429243d7F5937bCB85A4B8b41301CCa |
The treasury Safe above is deployed on mainnet (999) only — it does not exist on testnet. A testnet rehearsal needs its own Safe on chain 998. (Safe addresses are per-chain.)
The two token contracts: HAM and wHAM
HAM is a rebasing token: your balanceOf changes at every rebase. That behaviour breaks contracts that assume balances only move on transfer — AMM pairs above all. So the protocol also ships a non-rebasing wrapper, wHAM, and it is wHAM (not HAM) that trades on the live pool.
| Token | Address | Decimals | What it is |
|---|---|---|---|
HAM | 0xd62DcC1E28D646Db54E2204A40980F9db28e0363 | 18 | The rebasing token. Balances scale at every rebase. |
wHAM (Wrapped HAM) | 0xD48ad2f34Ce9071ac130F55237c030643C5eeDe6 | 24 | Non-rebasing wrapper. One wHAM share is one HAM internal unit and never rescales; the HAM it redeems for grows with the scaling factor. This is the token in the live pool. |
wHAM has 24 decimals, not 18
wHAM.decimals() returns 24, because a wHAM share is a HAM internal unit (INTERNAL_DECIMALS = 1e24), not a HAM fragment. Any indexer, price feed, token list, or reader that defaults to 18 will be wrong by a factor of 10^6. State the decimals explicitly in every registration and read decimals() back to confirm.
Trading venue
The live pool is the Ramses legacy (Solidly) volatile pair — WHYPE/wHAM.
| What | Address |
|---|---|
WHYPE/wHAM volatile pair (Volatile - WHYPE/wHAM) | 0x6cCA1C5a88A391f4e55f69E7BBA13e42A813BaD5 |
| Pair factory | 0xd0a07E160511c40ccD5340e94660E9C9c01b0D27 |
| Pool fee | Owner-mutable — read pairFee(pair) on the factory. Do not hard-code it; it was 5000 ppm at deploy and is lower now. |
token0 / token1 | WHYPE 0x5555…5555 / wHAM 0xD48a…eDe6 |
The old Project X pair is dead — do not trade or LP into it
The original HAM/WHYPE Uniswap V2 pair on the Project X factory, 0x948e6F60e07654602Ed7D60447e0B683fd86E3d5, was drained to zero HAM by the Ramses cutover on 2026-08-10. Read live, its getReserves() returns ~3.56 WHYPE and 0 HAM. It is still a deployed contract and will still accept transactions — a swap or an addLiquidity against it will execute at an arbitrary price against an empty book. Use the Ramses pair above.
Protocol contracts
The
HAMtoken address below (the ERC-1967 proxy) is the canonical contract address — the one to add to wallets, explorers, and DEX listings. The implementation lives behind the proxy and is replaced on upgrades; the proxy address never changes.
HAM token CA (mainnet): 0xd62DcC1E28D646Db54E2204A40980F9db28e0363
| Contract | Mainnet (999) | Testnet (998) |
|---|---|---|
HAM token (ERC-1967 proxy) | 0xd62DcC1E28D646Db54E2204A40980F9db28e0363 | 0x94d9D59157064645AaCfB2ED1d4577cB6C8377C6 |
HAM implementation | 0xE6D908F7c156d3FcE88FF145A239d017dBc9a68f | 0x4fb240CDBfD34d8365e5434389dd124A03B645E5 |
wHAM wrapper (24 dec) | 0xD48ad2f34Ce9071ac130F55237c030643C5eeDe6 | — |
HAMRebaserV2 — the live rebaser | 0x08E5cEf25c7fe9dbcf584d1Bd95de5cDD55962F5 | 0xfd1Ded0DfE6b51dE23FB7829633D6aEf2aB50774 |
HAMRebaser (V1, superseded) | 0xa55fC153BE71E416BcCeD93e688D470dA42eb4Da | — |
RamsesLegacyZap | 0x9f43EfA4dD3DCFfd2eeD43964B80f8272c1ee25f | — |
| WHYPE/wHAM pair (live venue) | 0x6cCA1C5a88A391f4e55f69E7BBA13e42A813BaD5 | — |
| HAM/WHYPE Project X pair (dead) | 0x948e6F60e07654602Ed7D60447e0B683fd86E3d5 | — |
Which rebaser is authoritative: the one the token itself accepts.
HAM.rebaser()returns0x08E5cEf2…62F5(HAMRebaserV2, deployed 2026-08-10 for the Ramses migration). V10xa55fC153…b4Dastill reportsrebasingActive() == trueon its own storage, but it is inert — the token will not accept arebase()from it. Read V2 for live policy state.
Integrator trap —
RamsesLegacyZap.ham()returns the rebasing HAM (0xd62D…0363), not wHAM. The zap wraps internally. Do not infer the pool's token from it; the pool holds wHAM.
Treasury, lending & bond contracts
| Contract | Mainnet (999) | What it is |
|---|---|---|
BackingLens | 0x5c0Af8e697f45C632dE8E3f08e7dB9450625ca69 | Canonical on-chain backing mark. Reads treasury reserves and a dual HYPE/USD feed — never the pool — so rebases and pool-price manipulation cannot move it. Stateless, immutable, ownerless. |
CoolerVault | 0x4B184A9f7DE61A3254B35Bb2F0295D68B0C3221e | Fixed-term (90-day) loan desk against wHAM collateral, marked off BackingLens. |
HAMBondDesk | 0xA7FF7341A3A2A545293249D00959960A6Db6dcb2 | Discounted-bond desk; sells wHAM against reserve/LP deposits at a discount floored by the backing mark. Owner: treasury Safe. |
Reading the backing mark
BackingLens is the contract to read for backing — not a number frozen in this page, which would be stale the moment a rebase or a HYPE move lands.
| View | Returns |
|---|---|
backingPerUnitUsd() | USD (1e18) backing 1e24 internal units — i.e. one whole wHAM. Rebase-invariant. |
backingPerUnitReserve() | The same mark denominated in WHYPE (1e18). Oracle-free; readable during an oracle incident. |
backingPerHamUsd() | USD (1e18) backing one HAM fragment at the current scaling factor. Display-only — moves inversely with rebases. |
treasuryReserveAssets() · circulatingInternal() · reserveUsd() | The three inputs, if you want to recompute the mark yourself. |
Backing is not a redemption right
These views measure what the treasury holds against circulating supply. They are not a claim: there is no contract that redeems HAM or wHAM for reserves at the backing mark, and no holder can demand $1. The $1.00 peg is a supply-policy target pursued by rebasing — see The peg.
Verify on the explorer: HAM token · wHAM · HAMRebaserV2 · WHYPE/wHAM pair · BackingLens
USD-mode oracle feeds (HyperEVM mainnet)
USD mode requires two independent reserve→USD (WHYPE/USD) feeds. The launch ships two HyperCoreOracleAdapters, each wrapping a native HyperCore price precompile:
| Role | Adapter | Source precompile | Address |
|---|---|---|---|
Primary reserveUsdOracle | HyperCoreOracleAdapter | Perp oracle 0x0000000000000000000000000000000000000807 (HYPE perp index 159, scale exp 4) | 0xb582949a6A7350F6678487C0a6eD28f8072111f5 |
Secondary secondaryReserveUsdOracle | HyperCoreOracleAdapter | Spot 0x0000000000000000000000000000000000000808 (HYPE/USDC pair @107, scale exp 2) | 0x1cE0D3ff08aeCF05574cF3c17dF06d98566B3635 |
Both adapters report decimals() == 8. The same pair backs BackingLens, which requires them to agree within its divergence bound and reverts otherwise — failing closed rather than marking off a single feed.
Testnet (998) runs in RATIO mode (pool TWAP only); no oracle adapters are deployed there.