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.chain
  • brand-official.chain
  • brand-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 小时内有人出价:

  1. 新出价 141.36 AE (134.63 × 1.05)
  2. 触发延时:新结束高度 = 当前 + 240
  3. 原出价者 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);
查看实时数据

使用 AEKnow Explorer 查看链上 AENS 数据:

学习路径
L2 AENS (当前)