Contract Addresses
All contracts are deployed to the same addresses on both Base and BSC:| Contract | Address |
|---|---|
| ENSRegistry | 0xce3830A628674C67e35294128F638dDC9c69d8f8 |
| MakxRegistrar | 0x62b26B7e71127AF8bD26b44FB3BF2f17D845A530 |
| MakxTokenResolver | 0xEcB18a27D37a289AA5A9721f8F28c879E894E2F3 |
| MakxUniversalResolver | 0x535aeD7b7Cd80Ed9A0835E1Ed29a99d038B8B777 |
Viem Setup
.makx domains are compatible with viem and Wagmi ENS queries. There are two ways to configure viem for .makx resolution.Option 1: Per-Call Universal Resolver Address
If your app also queries other ENS domains besides .makx, pass theuniversalResolverAddress directly to each viem ENS method call.
getEnsAddress, getEnsText, getEnsName, getEnsAvatar, getEnsResolver) accept universalResolverAddress as a parameter.
Option 2: Custom makxChain Config (Preferred)
Override theensUniversalResolver address in your chain definition. This directs all ENS calls on the client to use .makx by default.
makxChain method above.
Normalizing Names
ENS names prohibit certain characters (e.g. underscore) and have validation rules. Always normalize names with UTS-46 normalization before passing them to any resolution method:normalize() on any user-supplied name before passing it to getEnsAddress, getEnsText, getEnsName, getEnsAvatar, or getEnsResolver.
Resolving a .makx Name to a Token Address
Reading Token Metadata
UsegetEnsText() to read text records attached to a .makx domain:
Text Record Keys
| Key | Mutable | Description |
|---|---|---|
name | No | Token display name |
symbol | No | Token ticker symbol |
token.symbol | No | Token ticker symbol |
token.decimals | No | Token decimals (e.g. “18”) |
token.totalSupply | No | Total supply (as string) |
launchpad.address | No | Bonding curve / launchpad address |
description | Yes | Token description |
url | Yes | Project website |
avatar | Yes | Avatar image URI |
com.twitter | Yes | Twitter/X handle |
com.github | Yes | GitHub organization |
com.discord | Yes | Discord invite |
null.
Reverse Resolution (Address to Name)
Look up which .makx domain belongs to a token address:null.
Finding the Resolver
MakxTokenResolver contract.
Verifying a Token is from Makx
A token has a valid .makx domain if and only if it was registered through an approved Makx factory. To verify:- The address has a .makx reverse record (set only by the registrar)
- The forward record resolves back to the same address
How to compute the domain node (namehash)
When calling methods on theMakxTokenResolver contract directly, the view functions take a node (bytes32) parameter — compute it with namehash(normalize("yourticker.makx")) from viem/ens.
Batch Token Info (Direct Contract Call)
If you need token address, name, and symbol in a single call, use thetokenInfo() function directly on the resolver.
Checking if a Name Exists
Error Handling
ResolverNotFound error from the universal resolver. Wrap resolution calls in try/catch and treat errors as “name does not exist.”
Viem Method Mapping
| Viem Method | Resolver Function | Returns |
|---|---|---|
getEnsAddress({ name }) | addr(node) | Token contract address |
getEnsText({ name, key }) | text(node, key) | Text record value or null |
getEnsAvatar({ name }) | text(node, "avatar") | Avatar URI or null |
getEnsName({ address }) | name(reverseNode) | .makx name or null |
getEnsResolver({ name }) | findResolver(name) | Resolver contract address |