Name Service

在web3系统中,地址通常作为用户的身份标识。然而地址的可读性比较差,拿以太坊上的地址为例,一串16进制的数字,长度为40。不便于作为社交应用的身份展示。

为此,我们提供一个Relation Name Service合约,将可读名称(比如 "relation.soul")解析为计算机可以识别的表示符。

图 5-2 Name Service 数据流

同时,我们利用Arweave作为去中心化存储,实现身份属性的扩展,构建完整的profile。用户可以将个人的其他信息存储到Arweave,并在Name Service合约上存储Arweave交易哈希。

图 5-3 Profile 数据流

Relation Name Service是Relation Protocol中的重要对象,RNS自身是一个SBT,该SBT允许让你控制你在Relation网络中的基础社交身份数据。

Name Service SBT被个人地址拥有,它包含以下两种状态:

  • hold:hold状态下 ,Name Service SBT可以被转移,无法通过该名称搜索或查询到对应的地址。

  • resolved:Name Service SBT的只有地址通过resolve动作将token与Soul绑定后,视为name与个人地址的绑定,此时,Name Service SBT与地址在社交网络中可以相互映射。resolved状态的Name Service SBT 不可被转移。

为了使社交图谱的推荐和查询可以得到唯一的结果,一个地址可以拥有多个Name Service SBT,但只能同时resolved一个。

Schema

我们给出Relation Name Service的schema。 schema以ttl文件的形式保存至Arweave,交易哈希将作为schemaURI,在初始化合约时传入,参数示例:

  • schema 前缀列表

  • class

:Soul表示接受和绑定域名解析的地址;

:Domain用于表示域名

  • predicate

p:hold表示地址持有域名,并未解析

p:resolved表示地址已经与域名建立联系,可通过域名解析出地址。

p:profileURI 表示用户的profileURI

合约

合约接口

Name Service的合约接口如下:

完整的合约代码可访问:

合约实现说明

我们对Name Service做了一些规则设置:

  • 域名默认最小长度为3个字符

  • 域名只有设置解析之后,才能被合约正确解析。设置解析有两个方式:

    • register时即设置解析

    • register之后,调用setNameForAddr设置解析

  • 如果当前域名已经设置了解析,需要先解绑原地址,才能重新设置

  • 合约默认transfer开关关闭,即所有token不能transfer。如果需要打开,可以调用setTransferable方法进行设置

  • 只有没设置解析的token才能被transfer

Last updated