MegaNames 是 MegaETH 上 .mega 命名服务的 AI 编程技能,用于在开发中集成域名注册、解析与子域名市场。
用途 当用户需要注册或续费 MegaETH 上的 .mega 名称、进行正向解析(名称转地址)或反向解析(地址转名称)、设置文本记录(头像、社交链接、简介)、创建或撤销子域名、通过市场(SubdomainRouter)出售子域名、对子域名购买进行代币门控、将 Warren Protocol 链上网站与 .mega 名称关联、构建集成 MegaNames 解析的前端,或查询名称所有权、到期时间与市场状态时,可使用本技能。
链配置 主网:Chain ID 4326,RPC https://mainnet.megaeth.com/rpc,浏览器 https://mega.etherscan.io。测试网:Chain ID 6343,RPC https://carrot.megaeth.com/rpc,浏览器 https://testnet-mega.etherscan.io。
合约地址(主网) MegaNames:0x5B424C6CCba77b32b9625a6fd5A30D409d20d997;USDM:0xFAfDdbb3FC7688494971a79cc65DCa3EF82079E7;Renderer:0x8d206c277E709c8F4f8882fc0157bE76dA0C48C4;SubdomainRouter:0xdB5e5Ab907e62714D7d9Ffde209A4E770a0507Fe;SubdomainLogic:0xf09fB5cB77b570A30D68b1Aa1d944256171C5172;Fee Recipient:0x25925C0191E8195aFb9dFA35Cd04071FF11D2e38。测试网:MegaNames 0x8F0310eEDcfB71E5095ee5ce4f3676D9cEA65101,MockUSDM 0xa8a7Ea151E366532ce8b0442255aE60E0ff2F833。前端:dotmega.domains。
默认技术决策
- 所有写入使用 eth_sendRawTransactionSync:MegaETH 通过 EIP-7966 在 10ms 内返回回执,无需轮询。2. 尽可能使用 registerWithPermit:通过 ERC-2612 permit 实现单笔交易注册,比 approve + register 体验更好。3. 使用链上费用计算:调用 calculateFee(labelLength, numYears),而不是在本地复制折扣逻辑。4. 通过 tokenId 解析,而非字符串查询:在客户端计算 tokenId,然后调用 addr(tokenId),不要向读取函数发送原始标签字符串。5. 标签始终小写:在哈希前用 .toLowerCase() 规范化标签;合约强制 [a-z0-9-],不允许开头或结尾连字符,最大 255 个字符。
Token ID 计算 名称通过 ENS 风格 namehashing 映射到 ERC-721 token ID。MEGA_NODE 由 keccak256 对空 bytes32 与 keccak256(toBytes('mega')) 编码打包计算,结果为 0x892fab39f6d2ae901009febba7dbdd0fd85e8a1651be6b8901774cdef395852f。getTokenId(label) 返回 BigInt(keccak256(encodePacked(['bytes32','bytes32'], [MEGA_NODE, keccak256(toBytes(label.toLowerCase()))])))。子域名 tokenId 使用父 tokenId 作为 node:getSubTokenId(parentTokenId, subLabel) 将父 tokenId 转为 64 位十六进制 bytes32,再与子标签哈希编码打包后取 keccak256。
费用表 所有费用以 USDM(18 位小数)计价。1 字符年费 $1,000;2 字符 $500;3 字符 $100;4 字符 $10;5+ 字符 $1。多年折扣:2 年 5%,3 年 10%,5 年 15%,10 年 25%。
核心操作 注册名称:先调用 calculateFee 计算费用,再 approve USDM,最后调用 register(label, ownerAddress, numYears)。使用 Permit 单笔交易注册:megaNames.registerWithPermit("yourname", msg.sender, 1, deadline, v, r, s)。正向解析:计算 tokenId 后调用 addr(tokenId)。反向解析:调用 getName(userAddress),返回 "bread" 或空字符串。设置文本记录:调用 setText(tokenId, key, value),标准键包括 avatar、url、com.twitter、com.github、com.discord、org.telegram、description。创建子域名(免费):父所有者调用 registerSubdomain(parentTokenId, "blog"),子域名是完整 ERC-721 token,拥有自己的解析与记录,最多嵌套 3 层。
子域名市场 名称所有者通过 SubdomainRouter 出售子域名,97.5% 归所有者,2.5% 为协议费。卖家设置:先 setApprovalForAll 授权 router,再调用 SubdomainLogic 的 setPrice 设置价格(最低 $0.01 USDM),最后调用 SubdomainRouter 的 configure(parentTokenId, payoutAddress, true, mode) 启用销售,mode 0 为开放,1 为代币门控。买家流程:调用 quote 获取报价,approve USDM,再调用 register(parentTokenId, "sublabel", referrer)。代币门控:调用 SubdomainLogic 的 setTokenGate(parentTokenId, tokenContractAddress, minBalance),并在 configure 中使用 mode=1。批量注册:router.registerBatch(parentTokenId, labels, address(0)) 可在单笔交易中注册最多 50 个子域名。
Warren Contenthash 将 .mega 名称关联到 Warren Protocol 链上网站:调用 setWarrenContenthash(tokenId, warrenTokenId, isMaster),isMaster 为 true 表示 Master,false 表示 Container。读取 warren(tokenId) 返回 { warrenTokenId, isMaster, isWarren }。Contenthash 格式为 0xe9 + 01(master)/02(container) + 4 字节 warrenTokenId。
过期名称与溢价衰减 名称在注册期后过期。经过 90 天宽限期后,名称可被注册,并带有荷兰式拍卖溢价,在 21 天内从 $10,000 线性衰减至 $0。调用 currentPremium(tokenId) 获取溢价,溢价加在基础注册费之上。
枚举与统计 tokensOfOwner(userAddress) 返回某地址拥有的所有名称 tokenId。totalRegistrations 与 totalVolume 提供全局统计。
MegaETH 特定说明 Gas 估算:始终通过 RPC 使用 eth_estimateGas,本地 Foundry 估算在 MegaETH 上可能偏低。即时回执:使用 eth_sendRawTransactionSync(EIP-7966)立即确认。USDM:18 位小数,支持 ERC-2612 permit。无 commit-reveal:MegaETH 出块时间约 10ms,使抢跑不切实际。
完整 ABI 参考 完整函数参考、事件与集成模式见仓库根目录的 AGENTS.md。