L2
AENS 开发
Æternity 命名系统完整开发指南
为什么需要 AENS?
区块链地址如 ak_2swhL... 难以记忆、容易出错。AENS(Æternity Naming System)让你用人类可读的名称(如 alice.chain)替代这些复杂地址。
原生链上实现
非第三方服务,完全去中心化
多类型 Pointer
一个域名可指向账户、合约、Oracle
拍卖公平分配
短域名通过拍卖防止抢注
低成本注册
长域名仅 ~1.77 AE 即可注册
ak_2swhLkgB...
alice.chain
应用场景
可读地址
将 ak_xxx...xxx 替换为 alice.chain
// 转账时使用域名
await aeSdk.spend(amount, 'alice.chain');
去中心化网站
将域名指向 IPFS 哈希,实现永久可访问的去中心化网站
// Pointer 指向 IPFS
await aeSdk.aensUpdate('mysite.chain', {
'ipfs': 'ipfs://Qm...',
'account_pubkey': 'ak_...' // 也可同时指向账户
});
身份标识
作为链上身份,在多个 DApp 中使用统一标识
- 社交媒体个人主页
- NFT 创作者签名
- DAO 成员身份
品牌保护
注册品牌相关域名,防止铓鱼和仿冒
brand.chainbrand-official.chainbrand-pay.chain
提示:AENS 域名支持多个 Pointers,可同时指向账户、合约、Oracle 等不同类型的地址。
核心概念
Name ID
以 nm_ 开头的唯一标识符,用于链上索引
Commitment
预注册时生成的隐藏承诺哈希,防止抢注
Pointers
域名指向的地址映射,可指向账户、合约、Oracle
TTL
域名有效期,以区块高度表示(约 180 天)
生命周期
PreClaim
Claim/Bid
Update
Transfer
Extend
| 阶段 | 交易类型 | 说明 |
|---|---|---|
| PreClaim | NamePreclaimTx |
提交隐藏承诺,防止名称被抢注 |
| Claim | NameClaimTx |
正式注册域名(长名)或开始拍卖(短名) |
| Update | NameUpdateTx |
设置 Pointers,指向账户/合约地址 |
| Transfer | NameTransferTx |
将域名所有权转让给其他账户 |
| Extend | NameUpdateTx |
延长域名有效期 |
拍卖机制详解
本节描述 Ceres 协议 (当前主网版本) 下的拍卖机制规则。
拍卖触发条件
13 字符及以上
直接注册,无需拍卖
12 字符及以下
必须通过拍卖流程
拍卖时间参数
2.1 拍卖持续时间 (BidTimeout)
| 名称长度 | 持续时间 | 估算 |
|---|---|---|
| 1 - 4 字符 | 2400 blocks | ~5 天 |
| 5 - 8 字符 | 960 blocks | ~2 天 |
| 9 - 12 字符 | 480 blocks | ~1 天 |
2.2 拍卖延时 (BidExtension)
防止“狙击”(Sniping)的保护机制:
- 触发条件:拍卖结束前 240 区块内有新出价
- 延长规则:结束时间重置为 当前高度 + 240
- Extension:240 区块(约 12 小时)
价格与加价机制
3.1 起拍价与注册费 (NameFee)
| 名称长度 | 费用 (AE) |
|---|---|
| 1 字符 | ~570.29 AE |
| 2 字符 | ~352.46 AE |
| 3 字符 | ~217.83 AE |
| 4 字符 | ~134.63 AE |
| 5 字符 | ~83.20 AE |
| 12 字符 | ~2.87 AE |
| 13+ 字符 | ~1.77 AE (无拍卖) |
3.2 加价规则 (BidIncrement)
最低加价幅度:5%
NewBid >= PreviousBid * 1.05
3.3 资金锁定与返还
- 锁定:出价金额从账户扣除
- 返还:被超越时自动退回
- 最终:胜出者费用销毁 (burn)
技术参数汇总
| 参数项 | 值 / 逻辑 |
|---|---|
| 拍卖触发长度 | <= 12 字符 |
| 最短拍卖时间 | 480 区块 (~1 天) |
| 最长拍卖时间 | 2400 区块 (~5 天) |
| 加价延时窗口 | 240 区块 (~12 小时) |
| 加价幅度 | 5% |
| Pre-Claim 间隔 | 1 区块 |
| 名称保护期 | 2016 区块 |
apps/aecore/src/aec_governance.erl
实战案例:aeks.chain
参数分析
- 名称:
aeks(4 字符) - 起拍价:134.63 AE
- 拍卖时长:2400 区块 (~5 天)
竞争场景 (Sniping)
假设拍卖即将结束的 12 小时内有人出价:
- 新出价 141.36 AE (134.63 × 1.05)
- 触发延时:新结束高度 = 当前 + 240
- 原出价者 134.63 AE 自动解锁退回
代码示例 (JavaScript SDK)
1. 预注册域名
// PreClaim - 隐藏承诺
const name = 'myname.chain';
const preclaim = await aeSdk.aensPreclaim(name);
console.log('Salt:', preclaim.salt);
console.log('Commitment:', preclaim.commitmentId);
2. 正式注册
// Claim - 使用 preclaim 的 salt
await aeSdk.aensClaim(name, preclaim.salt);
console.log('Name claimed!');
3. 设置指向
// Update - 设置 Pointers
await aeSdk.aensUpdate(name, {
'account_pubkey': 'ak_YourAccountAddress',
'contract_pubkey': 'ct_YourContractAddress'
});
console.log('Pointers updated!');
4. 转让域名
// Transfer - 转让给新所有者
const newOwner = 'ak_NewOwnerAddress';
await aeSdk.aensTransfer(name, newOwner);
console.log('Name transferred!');
5. 查询域名信息
// 通过名称查询
const info = await aeSdk.aensQuery(name);
console.log('Owner:', info.owner);
console.log('Pointers:', info.pointers);
console.log('TTL:', info.ttl);