Beranames is a decentralized name service on Berachain — ENS-compatible, NFT-backed, and fully usable without any frontend. This page is everything you need to register and resolve a name straight from the block explorer.
| Contract | Address |
|---|---|
| RegistrarController | 0xf0fb7ba7d6d18adc32298d2ff452f448f90255dc |
| BeraNamesRegistry | 0x5b22280886a2f5e09a49bea7e320eab0e5320e28 |
| BaseRegistrar | 0x5ede4408e78c36c3ab16c5813c418624c2823b27 |
| BeraDefaultResolver | 0xc23e819766cd5c5f5ec0e1b1764afeba1dc2d03c |
| UniversalResolver | 0xddfb18888a9466688235887dec2a10c4f5effee9 |
| ReverseRegistrar | 0x3c05f49af5fa3b13ba780e3f1924d1c112bde922 |
| PriceOracle | 0xbd5cf602e5c62ac1a3a597347952d6ce8b1114b0 |
| ReservedRegistry | 0xd343a4f2204c1182bb2ee2cd95b677ff811e38c0 |
| BeraAuctionHouse | 0x830ad25c45072e1fce2af5d0028a2fbfb7f83a8e |
There is no commit-reveal. You call register on the RegistrarController in a single transaction, paying the BERA equivalent of the USD price (priced via Pyth). You can do this entirely from BeraScan.
Go to the Write Contract tab and click Connect to Web3 with your wallet on Berachain mainnet.
On the Read Contract tab, call rentPrice(name, duration) with your name (no .bera) and a duration in seconds (1 year = 31536000). The returned base is what you pay in wei. Add a small buffer for BERA/USD price drift.
registerFind the register function on the Write tab. BeraScan accepts the struct as a single tuple. Paste this in (replacing the placeholders), and set payableAmount (BERA) to your quoted price plus a small buffer:
// register(RegisterRequest) // tuple format on the explorer: [ "yourname", // name (no .bera) "0xYourAddress", // owner 31536000, // duration (1 year, in seconds) "0xc23e819766cd5c5f5ec0e1b1764afeba1dc2d03c", // resolver (BeraDefaultResolver) [], // data — leave empty, then setAddr in step 4 true, // reverseRecord — sets primary name "0x0000000000000000000000000000000000000000" // referrer ]
Submit. Your name is now an NFT in your wallet.
For viem / wallets to resolve yourname.bera back to your address, the resolver needs an addr record. On BeraDefaultResolver → Write, call setAddr(node, address) where node is the namehash of yourname.bera. You can compute namehash with viem: namehash('yourname.bera').
Tip: you can skip step 4 by encoding the setAddr call into the data array in step 3 — but the explorer makes that fiddly, so doing it as a second tx is usually easier.
Prices are denominated in USD and paid in BERA at the Pyth-fed rate. Multi-year discounts apply.
| Length | Per year |
|---|---|
| 1 character | $420 |
| 2 characters | $269 |
| 3 characters | $169 |
| 4 characters | $69 |
| 5+ characters | $25 |
| Duration | Discount |
|---|---|
| 1 year | — |
| 2 years | 5% |
| 3 years | 15% |
| 4 years | 30% |
| 5 years | 40% |
Beranames is ENS-compatible. Any ENS-aware library that points at Berachain mainnet will work — no custom code, just configure the registry / universal resolver addresses above.
import { createPublicClient, http } from 'viem' import { berachain } from 'viem/chains' import { normalize } from 'viem/ens' const client = createPublicClient({ chain: berachain, transport: http(), contracts: { ensRegistry: { address: '0x5b22280886a2f5e09a49bea7e320eab0e5320e28' }, ensUniversalResolver: { address: '0xddfb18888a9466688235887dec2a10c4f5effee9' }, }, }) const address = await client.getEnsAddress({ name: normalize('yourname.bera') })
const name = await client.getEnsName({ address: '0x...' }) // Names are stored as `.bera` on-chain. Display them as `.🐻⛓️` if you like: const display = name?.replace('.bera', '.🐻⛓️')
Note: names containing emoji or other unusual unicode may not round-trip cleanly through ENS normalization. For anything routing real funds, prefer plain alphanumeric names.
bera, honey, berachain) cannot be minted via the public path.renew(name, duration) on the RegistrarController, paying the same per-year price.