关于域名你想知道的一切

May 3, 23

4分钟 阅读

让我们从技术角度多方面深入了解什么是域名,并剖析域名服务的设计。

什么是域名?

Solana 上的所有东西都来自一个账户,域名也不例外。这包括钱包,程序(智能合约),以及其他每一个用户和程序生成的数据。这意味着 Solana 上的一切都可以通过公钥唯一识别,反之,这个公钥可以指向一些数据。这个数据可以包含任何东西,它只是一般的二进制数据,尽管一个账户的最大数据量是 10Mb。正因为如此,Solana 可以被看作是一个大的许可键值数据库,其历史是一个分类账/区块链。

那么,什么是域名的关键和数据呢?让我们从数据开始。

域名账户内的数据代表了一个称为域名注册处的 "对象"。域名注册处由两个元素组成:

头部: 一个固定长度的数据结构(96 字节),包含三个公钥

数据/负载: 一个可变长度的数据阵列,可用于将任意信息附加到一个域名上。

域名注册表头

域名注册表头是由 3 个公钥组成的:

父域名: 域名是分层的。父域名字段包含父域名的账户地址,如果不存在父域名,则为默认的零公钥(即 1111111111111111111111111111111111)。

拥有人: 该域名的所有者

类: 这个账户代表的数据类别。如果设置为默认的公钥,那么数据类别是未指定的。

虽然父域名和拥有人的含义浅显易懂,但类这个内容可能会让人困惑。当一个类别的公钥被指定时,相关账户将是每个转移和更新指令的唯一必要签名者。这意味着,拥有人签名将不能转移和更新域名。

这怎么会有帮助呢?对于某些使用情况,将数据与用户控制的域名相关联,并由第三方进行验证,可能会很有趣。这方面的一个例子是一个徽章系统:作为一个组织,我们给一个用户的域名授予一个徽章,他们可以申请。这个徽章由一个我们控制的子域来代表。它包含了关于用户在我们平台上的成就的细节。这对曝光度来说是非常有益,因为我们要在不同的应用程序中获得一个用户的徽章列表,所要做的就是获取他们域名的子域。

乍一看,我们可以简单地拥有这个子域,这样我们就可以完全控制它了。然而,一个由类控制的子域的真正价值在于该类可以控制子域的整个生命周期:一个用户可以创建一个子域,向其添加任意的数据,然后将其转移给我们。然后,我们将需要监控区块链,积极验证并在必要时纠正这些信息。但这将创造一个实际的时间点,即链上信息是错误的。此外,还需要我们支付费用来保护我们的系统。

数据

域名账户的数据部分可以容纳任意的二进制数据。它的长度是不固定的,在域名注册时设置。域名的所有者可以决定在这部分存储任何东西。

???? Solana 帐户的数据和域名的数据是两回事。域名注册表对象是域名服务域账户的数据。然后,这个域名注册处包含一个用户控制的数据字段,我们称之为域名数据。

它如何适用于.sol?

让我们来看看一个真实的例子:.sol 域名。

Solana 域名服务的层次结构以根域开始。这个域名没有父类,也没有类。根域名是.sol TLD 的父域名。.sol TLD 本身就是一个域名,所有.sol 域名(例如 bonfida.sol)都是.sol TLD 的 "子域名"(或子域)。

同样,dex.bonfida.sol 也是 bonfida.sol 的一个 "子"(或子域名)。严格地说,这个域名的整个 URL 应该是:dex.bonfida.sol.(根域名的名字习惯上是一个空字符串)。然而,按照惯例,URL 中的最后一个.是省略的。

它如何适用于推特用户名?

推特 TLD 也是根域所持有的一个域名。而注册的推特用户名是推特 TLD 的子域名。因此,@bonfida 可以被解析为以下域名 bonfida.twitter。

我们还能用它来做什么?

如前所述,域名是分层次的,可以用来表示任何具有父/子关系的东西。巧合的是,SNS Optics 类别也有这种父/子的设计:

为了将 SNS Optics 类别推上链,我们决定使用域名服务,用域名来代表.sol 域名属于某个特定类别。

然而,重要的是要了解这些域名并不是.sol 域名。每个属于 SNS Optics 类别的.sol 域名都会有一个代表其属于特定类别的等效域名。如果一个.sol 域名属于多个类别,这并不是一个问题,也不会产生任何碰撞。事实上,.sol 域名将只是拥有多个类别的域名,例如,对于 00.sol:

  • 00.99 俱乐部类别
  • 00.2 位数字回文类别

加入我们社区