NNS系统有两个作用 一是将beautiful.neo 等人类可读的名称解析为机器使用的标识符,如Neo的地址等。 二是为域名提供描述性数据,比如whois,合约接口描述等。
NNS 和 DNS的目标类似,但是基于区块链架构设计,是去中心化的,服务于区块链网络。NNS使用和DNS一样用点(.)分割的域名称系统,域的所有者对隶属于他的子域名有完全的分配权利。
.neo .gas 这样的根域名由一个称为(注册器Registry)的智能合约管理。一个注册器管理一个根域名,并设定取得其下一级域名所有权的规则。任何人均可遵照对应的注册器设定的规则取得下一级域名的所有权。
NNS有四个系统组件
- 顶级域名合约(域名根是管理根域名的脚本)
- 所有者(所有者可以是一个个人账户address,也可以是一个智能合约)
- 注册机(专门负责给一个域名的子域名分配所有者的智能合约,根域名也会指定一个根域名的注册机)
- 解析器(负责解析一个域名或者他的子域名)
域名根是一个根域名 比如.test 所有信息的管理者。 无论二级域名 aa.test 还是 三级域名 bbb.aa.test,他们的所有者都保存在域名根之中。 域名根以字典的形式保存如下数据:
- 域名的所有者(owner)
- 域名的注册器(register)
- 域名的解析器(resolver)
- 域名的TTL(域名到期时间)
域名的所有者可以是一个账户地址或者一个智能合约。(ens的设计是拥有域名的智能合约叫做注册器,实际上注册器只是owner的一个特例, 我们将域名的所有者和注册器分开了,这个系统会变得更加清晰) 域名的所有者(owner)可以:
- 将域名的所有权转移到另一个地址
- 更改注册器,最常见域名注册器为“管理员手动分配子域名”
- 更改解析器
允许所有者是一个智能合约,可以提供多种多样的所有权模式
- 比如双人共有域名,要两人签名才可以转让域名或者更改注册器
- 比如多人共有域名,超过50%人签名才可以转让域名或者更改注册器
如果域名的所有者是一个账户地址,那么用户可以调用注册器的接口管理二级域名。
(ens的设计是拥有域名的智能合约叫做注册器,实际上注册器只是owner的一个特例, 我们将域名的所有者和注册器分开了,这个系统会变得更加清晰。 大部分用户并不会去卖自己的二级域名,所以大部分用户无需配置注册器,配置解析器即可)。
注册器专门负责将一个域名的子域名重新分配给其他所有者。 注册器会调用域名根脚本进行操作。 域名根会检查注册器是否有权限操作此域名。 注册器有两个功能:
- 将一个域名的子域名重新分配给其他所有者。
- 查询一个子域名的拥有者是否合法,因为存在三级域名卖掉了,然后二级域名转让给别人这种情况。
所以在做完整解析的情况下,解析过程会询问注册器,他的下级域名是不是分配给了指定的所有者,如果没有,则此解析无效。
注册器是一个智能合约,可以有不同种类的注册器:
- 先到先得注册器,大家可以自由抢域名。测试网.test后缀域名将采用先到先得注册方式。
- 管理员手动分配注册器,由一个管理员来设置将子域名的所有权如何处理。通常情况下,个人持有的二级域名会通过手动方式分配子域名。
- 拍卖注册器。测试网.neo后缀的域名及主网.neo后缀域名都会通过抵押拍卖的方式注册。
NNS最主要的功能,就是完成从域名到解析器的映射。 解析器是一个智能合约,他来完成实际将名字翻译成地址的实际过程。 只要遵循NNS解析器规范的智能合约就可以被配置为解析器。NNS会提供通用的解析器。
如果要增加新的协议类型,在对现有NNS规范没有颠覆性改变的情况下,都可以不需改动NNS系统,直接配置实现。
NNS中存储的域名为32字节散列值,而不是域名原文的文本。这有几个设计原因:
- 处理过程统一,允许任意长度的域名。
- 一定程度保留了域名的隐私。
- 将域名转换为散列的算法称为NameHash,我们将在其他的文档资料中对他进行解释。 NameHash的定义方式为递归式。
比如aaa.neo 对应
hashA = hash256(hash256("neo") + "aaa")
bbb.aaa.neo对应
hashB = hash256(hashA + "bbb")
那么 ccc.bbb.aaa.neo 对应
HashC = hash256(hashB+"ccc")
这样的定义方式让我们可以将所有层次的域名,一级,二级到无数级,都扁平化的保存在一个Map<hash256, 解析器> 的数据结构中。
这正是注册器保存域名解析的方法,这个递归计算NameHash的方式,可以用一个函数表达:
Hash = NameHash("xxx.xxx.xxx…");
NameHash实现方法请参考 :ref:`namehash`。
用户调用根域名的解析函数进行解析,根域名提供完整和快速两种解析方式。可根据需要调用,也可以直接查询解析器,自行调用。
快速解析方式
快速方式域名根直接查表完整域名的解析器,如果没有,查询父域名的解析器。然后调用解析器解析。 快速方式运算次数少,但可能存在一个漏洞,即为三级域名卖给了别人,解析器存在,但是二级域名已经转让的情况。 此时依然可以正常解析
完整解析方式
完整方式,域名根将从根域名开始,逐层检查所有权和TTL,如果不符合将失败。 运算次数较多,与域名级数线性增长。
在NNS的经济模型里引入两中代币,一种是NNC,是由NEL为NNS发行维护的股权证明代币。总发行量10亿枚。 另一种是CGAS,前期由NEL提出并开发,后由NEO官方进行维护,是一种基于Nep5发型的代币,可以与GAS进行1:1绑定,支持双向兑换。
NNS根域名通过NNC持有者投票启动,投票分为两种模式,一种是管理员启动根域名投票, 3天内反对票少于30%则根域名启动,一种是任何NNC持有者启动域名投票, 3天内赞成票超过50%则根域名启动,无论哪种方式,投票者或不投票者都是博弈的参与者, 域名注册GAS会再分配给NNC持有者。
在NNS系统中,所有拍卖域名收取的手续费会进入奖池系统进行重新分配, 针对用户持有的NNC的数量,分配相应比例的CGAS。
NNC是NNS系统引入的一种股权证明代币。NNS为了实现系统的可持续性, 引入了手续费再分配系统, 所有域名拍卖收取的手续费将完全再分配给NNC的持有者。 除此之外,当域名系统移植到其他公链(例如本体网络)时,持有NNC的用户依然可以在其他公链获取等比例的代币。 当官方开放域名二级交易市场时,NNC将作为支付代币进行域名的买卖。在未来,NNC的使用场景也会不断拓宽。
NNC的初始发放为空投的形式,接收NNC空投需要用户持有NEO。空投按照NEO持有量1:0.1进行发放。
除了空头外,在NNS系统上线后,用户注册新的域名也将获得一定数量的NNC作为奖励,NNS理事会将会拿出总共10%的NNC来激励用户注册域名。
为了方便GAS在应用合约中的使用,NNS发行了一种基于NEP5的代币CGAS,总量一亿枚,与NEO的GAS燃料币进行1:1绑定,支持双向兑换。
兑换CGAS使用的GAS将会保存在CGAS合约的账户中,NNS不会转移或者使用这些GAS,因此可以保证只要用户持有CGAS,一定可以兑换到等量的GAS。 .. note:
CGAS原名SGAS,由NEL开发并发布,现由NEO官方维护。
在NNS系统中,CGAS主要有以下功能:
- 与GAS双向兑换。
- 向注册器充值/提款。
- 参与域名竞拍。
- 竞拍手续费支付。
除了在NNS系统内使用之外,由于CGAS本身是发布在主网上的NEP5代币系统,因此所有的合约应用也都可以使用这个CGAS合约来进行便捷的合约内GAS操作。
用户在域名竞拍时,NNS将会产生CGAS的收入,主要来源有两个:
- 用户拍卖款。如果用户拍卖得到域名所有权,那么将收取用户全部的竞拍款作为手续费。
- 流拍用户的拍卖手续费。对于参与竞拍,但是没有拍得域名的用户,收取出价的5%作为手续费。
所有的手续费收入将会转入分红池中,在奖池中,所有持有NNC的用户可以收到依据自己持有的NNC比例发放的CGAS分红。
分红池将以中心化形式进行。
NNS域名浏览器是提供NNS域名查询,拍卖,转让等功能的入口。
NNS将支持反向解析,反向解析将称为验证地址、验证智能合约的一个有效手段。
2018年1季度
- 2018.1 正式发布NNS技术白皮书
- 2018.1 完成技术原理测试和验证
- 2018.1.31 在测试网发布包括注册器、解析器的NNS第一阶段测试服务,任何人可以注册未被注册且符合规则的域名
2018年2季度
- 2018.3 发布基于测试网的域名浏览器V1
- 2018.4 在测试网发行NNC
- 2018.5 在测试网发布包含竞标服务的NNS第二阶段测试服务,任何人可以向NEL申请NNC进行竞标测试域名
- 2018.5 发布基于测试网的域名浏览器V2
2018年3季度
- 2018.6 在主网发行NNC
- 2018.10 在主网上发布NNS合约,开放5个字符以上的.neo后缀域名,Neo域名时代来临
- 2018.11 发布基于正式网的域名浏览器
2018年4季度
- 实现域名交易所
2019年
- 实现租金机制
- 完全开放.neo后缀域名