基于Neo区块链的分布式NNS域名系统解析
扫描二维码
随时随地手机看文章
NNS(NEO Name Service)是Neo的域名服务,是一个基于Neo区块链的分布式、开源和可扩展的域名系统。 旨在将钱包地址、智能合约Hash等人类难以记忆的无规则的字符串用单词短语简写等代替。我们首先提供以”.neo”结尾的域名服务。
通过域名服务,人们再也不用记忆看不懂的地址和Hash,只要知道一个单词或一个短语就能进行转账、调用合约。
NNS可以将域名解析到各种目标。最容易联想到的是Neo的账户(Address),或者智能合约地址(ScriptHash)。 我们预留了足够的扩展性,可以在不更新合约的情况下支持更多的解析目标协议。
NNS 的使用场景
别名服务的最主要使用场景在于别名转账,尤其是那些需要公开自己转账地址并且不常更换地址的账户,例如在ICO时, 项目方需要在官网提前公开自己官方账户地址,如果黑客篡改了ICO账户地址,投资人将很难发现。但是如果项目方提前公布一个简短易记的地址别名, 由于简短的有意义的词组很难被篡改,因此可以防止黑客的恶意攻击,避免不必要的损失。
一个别名要指向什么样的资源,是可以灵活扩展的,只需要实现相应的解析器即可。除了可以指向一个账户地址外,也可以指向一个合约地址,进而可以实现别名和智能合约交互。
区块链作为下一代互联网的基础设施,未来会有越来越多的服务基于区块链进行构建,例如去中心化云存储服务。云存储中的文件寻址是通过文件哈希值唯一标识实现的, 我们可以为哈希值取一个容易理解别名例如文件名,然后将别名映射到文件哈希,从而实现文件精准寻址,因此别名服务未来可以和NEO上的去中心化文件存储NEOFS结合使用。 随着构建在NEO上服务越来越多,NNS将逐步拓展以为去中心化消息通信、邮件服务等提供解析服务。
NNS 和 ENS 的关系NNS和ENS具有相同的目标,都是为了提升区块链的易用性,但是基于不同的区块链平台实现,服务于不同的区块链平台。NNS在做系统设计时参考借鉴了ENS的系统设计, 在此对他们表示感谢,同时我们也针对NEO平台做出了很多创新设计,例如将所有者合约从注册器模块中拆分出来以实现更灵活的所有权控制,在解析方式上, 分为了快速解析和完整解析两种方式,在经济模型上引入了一种新型的智能代币,以实现系统费用的高效循环。
NNS 系统设计概述NNS 系统功能
NNS系统有两个作用 一是将beautiful.neo 等人类可读的名称解析为机器使用的标识符,如Neo的地址等。 二是为域名提供描述性数据,比如whois,合约接口描述等。
NNS 和 DNS的目标类似,但是基于区块链架构设计,是去中心化的,服务于区块链网络。NNS使用和DNS一样用点(。)分割的域名称系统,域的所有者对隶属于他的子域名有完全的分配权利。
.neo .gas 这样的根域名由一个称为(注册器Registry)的智能合约管理。一个注册器管理一个根域名,并设定取得其下一级域名所有权的规则。任何人均可遵照对应的注册器设定的规则取得下一级域名的所有权。
NNS 系统架构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系统,直接配置实现。
解析规则
域名的存储
NS中存储的域名为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…”);
解析过程用户调用根域名的解析函数进行解析,根域名提供完整和快速两种解析方式。可根据需要调用,也可以直接查询解析器,自行调用。
快速解析方式快速方式域名根直接查表完整域名的解析器,如果没有,查询父域名的解析器。然后调用解析器解析。 快速方式运算次数少,但可能存在一个漏洞,即为三级域名卖给了别人,解析器存在,但是二级域名已经转让的情况。 此时依然可以正常解析
完整解析方式完整方式,域名根将从根域名开始,逐层检查所有权和TTL,如果不符合将失败。 运算次数较多,与域名级数线性增长。
NNS经济模型在NNS的经济模型里引入两中代币,一种是NNC,属于UTXO资产类型,总发行量10亿枚。另一种是SGAS,属于NEP5代币,与NEOGAS进行1:1绑定,支持双向兑换。
NNS根域名通过NNC持有者投票启动,投票分为两种模式,一种是管理员启动根域名投票,3天内反对票少于30%则根域名启动,一种是任何NNC持有者启动域名投票,3天内赞成票超过50%则根域名启动,无论哪种方式,投票者或不投票者都是博弈的参与者,域名注册GAS会再分配给NNC持有者。
在NNS系统中,所有拍卖域名收取的手续费会进入奖池系统进行重新分配,针对用户持有的NNC的数量,分配相应比例的SGAS。
NNC股权证明代币NNC是NNS系统引入的一种股权证明代币。NNS为了实现系统的可持续性,引入了手续费再分配系统, 所有域名拍卖收取的手续费将完全再分配给NNC的持有者。
NNC的初始发放为空投的形式,接收NNC空投需要用户持有NEO。空投按照NEO持有量1:0.1进行发放。
除了空头外,在NNS系统上线后,用户注册新的域名也将获得一定数量的NNC作为奖励,NNS理事会将会拿出总共10%的NNC来激励用户注册域名。
SGAS燃料代币为了方便GAS在应用合约中的使用,NNS发行了一种基于NEP5的代币,总量一亿枚,与NEO的GAS燃料币进行1:1绑定,支持双向兑换。
兑换SGAS使用的GAS将会保存在SGAS合约的账户中,NNS不会转移或者使用这些GAS,因此可以保证只要用户持有SGAS,一定可以兑换到等量的GAS。
在NNS系统中,SGAS主要有以下功能:
·与GAS双向兑换。
·向注册器充值/提款。
·参与域名竞拍。
·竞拍手续费支付。
除了在NNS系统内使用之外,由于SGAS本身是发布在主网上的NEP5代币系统,因此所有的合约应用也都可以使用这个SGAS合约来进行便捷的合约内GAS操作。
奖金池
用户在域名竞拍时,NNS将会产生SGAS的收入,主要来源有两个:
·用户拍卖款。如果用户拍卖得到域名所有权,那么将收取用户全部的竞拍款作为手续费。
·流拍用户的拍卖手续费。对于参与竞拍,但是没有拍得域名的用户,收取出价的5%作为手续费。
所有的手续费收入将会转入奖池中,在奖池中,所有持有NNC的用户可以根据自己持有的NNC按比例领取SGAS。
奖金池将以中心化形式进行。
总结NNS项目是一个完全构建在NEO区块链上的一个智能合约协议层应用,是一个真正意义上的区块链落地应用。 NNS的所有服务都是由智能合约提供的,是分布式并且灵活可扩展的,不存在中心化风险。
NNS是一次NEO智能合约体系的大规模应用,为了实现解析器的灵活可扩展,我们应用了最新的NEP4动态调用,在经济模型中,我们会设计Vickrey拍卖合约和荷兰式拍卖合约, 为了实现系统费用更易重新分配,我们扩展了NEP5代币标准,增加了币天的概念,从而实现无需锁定代币就可以实现系统收入的重新分配,将应用代币和股权融合成一个代币。
域名服务能够提升区块链的易用性,并且具有丰富的使用场景,会形成围绕域名的生态系统。 未来,我们会和NEO生态的客户端合作,让所有的NEO钱包支持通过别名转账,我们也会探索一些新的使用场景,例如和宠物游戏合作,通过NNS为宠物起一个昵称。 未来,随着NEO生态的应用越来越多,NNS的域名也会越来越有价值。