Blockstack 域名系统(BNS)

本篇文档概述了Blockstack域名系统(BNS)是如何工作的。 本节向您介绍BNS,并说明以下概念:

(Blockstack Core) 库是“Blockstack域名系统(BNS)”的参考实现.

什么是BNS

Blockstack域名系统(BNS)是一个将域名绑定到链下状态的网络系统,而无需依赖任何中央控制点。它通过将其控制平面消息的日志嵌入到比特币之类的公共区块链中来做到这一点。

每个BNS对等节点通过索引这些特制的交易来确定每个域名的状态。这样,每个对等节点(端)独立地计算相同的全局域名状态。

BNS中的域名具有三个属性:

  • 域名是全局唯一的 该协议不允许域名冲突,并且所有行为良好的节点都将给定的域名解析为相同的状态。
  • 域名是有意义的 每个域名均由其创建者选择。
  • 域名是具备强所有权 只有域名的所有者可以更改其解析状态。 具体来说,域名由一个或多个ECDSA私钥拥有。

BNS节点内部实现了一个复制的域名数据库。 每个BNS节点都会使其自己与世界上所有其他节点保持同步,因此,在一个BNS节点上的查询返回的结果与在其他节点上是相同的。 BNS节点允许域名所有者将最多40Kb的链下状态绑定到其域名,该域名将通过Atlas网络.复制到所有BNS节点 )。

BNS节点从底层区块链中提取域名数据库日志(Blockstack Core当前使用比特币,过去使用过Namecoin)。 BNS使用区块链为系统建立一个共享的“基础事实”:只要两个节点对区块链具有相同的看法,它们就将建立相同的数据库。

对于开发人员而言,最大的后果就是在BNS系统中,读取域名状态既快速又便宜,而写入域名状态又慢又昂贵。 这是因为注册和修改域名需要将一个或多个交易发送到基础区块链,并且BNS节点直到得到该基础区块链充分确认后才会对其进行处理。 用户和开发人员需要获取并花费必要的加密货币(即比特币)来发送BNS交易。

域名服务背后的动机

我们在日常生活中依赖域名系统,它们在许多不同的应用程序中都扮演着至关重要的角色。 例如,当您在社交媒体上查找朋友时,您正在使用平台的命名服务将他们的名字解析为他们的个人资料。 当您查找网站时,您正在使用域名服务将主机名解析为其主机的IP地址。 签出Git分支时,您正在使用Git客户端将分支域名解析为提交哈希。 当您在密钥服务器上查找某人的PGP密钥时,您正在将其密钥ID解析为他们的公共密钥。

我们想对这些域名做些什么? 在BNS中,域名在全球范围内是唯一的,域名具有人类意义,并且域名具有很强的所有权。 但是,如果查看这些示例,您将看到它们每个都仅保证其中两个属性。 这限制了它们的有用性。

  • 在DNS和社交媒体中,域名在全球范围内是唯一的,并且易于人读,但并非所有人都拥有。 而对于每个名称的含义,系统操作员拥有最终决定权。
    • 问题: 客户必须信任系统才能正确选择一个给定的域名究竟是什么。 这也包括你只能相信系统管理员才能进行这些更改。
  • 在Git中,分支名称是具有人类意义的且具有很强的所有权,但并非全球唯一。 两个不同的Git节点可以将相同的分支名称解析为不同的不相关存储库状态。
    • 问题: 由于域名可能出现冲突状态,因此开发人员必须找出其他机制来解决歧义。 在Git的这个例子中,用户必须手动进行干预。
  • 在PGP中,域名是密钥ID。 它们在全球范围内是唯一的,并且是加密拥有的,但不是人可读的。 PGP密钥ID是从它们引用的密钥派生出来的。
    • 问题: 对于大多数用户而言,这些域名很难记住,因为它们不携带与系统中与用户使用有关的语义信息。

BNS域名具有所有三个属性,而这些都不是问题。 这使其成为构建各种网络应用程序的强大工具。 使用BNS,我们可以做以下以及更多事情:

  • 建立无法被劫持主机名的域名服务。
  • 建立社交媒体平台,防止网络钓鱼者窃取用户名。
  • 建立版本控制系统,其中存储库分支不会冲突。
  • 建立公共密钥基础设施,使用户可以轻松发现和记住彼此的密钥。

Organization of BNS

BNS域名被组织成一个全局域名层级。 在此层级结构中,有三个不同的层与域名相关:

  • 命名空间。这些是层级结构中的顶级域名。与BNS命名空间类似的是DNS顶级域。现有的BNS命名空间包括 .id.podcast.helloworld。 所有其他域名仅属于一个命名空间。任何人都可以创建一个命名空间,但是为了使该命名空间得以保留,必须“启动”该命名空间,以便任何人都可以在其中注册域名。命名空间不归其创建者所有。

  • BNS 域名。这些是将记录直接存储在区块链上的域名。 这些域名的所有权和状态通过发送区块链交易来控制。 示例域名包括verified.podcastmuneeb.id。 任何人都可以创建一个BNS域名,只要包含它的命名空间已经存在即可。 BNS域名的状态通常存储在 Atlas网络

  • BNS 子域名. 这些是其记录存储在链外的域名,但它们共同锚定在区块链上。 这些域名的所有权和状态位于Atlas网络中。 虽然BNS子域由单独的私钥拥有,但BNS名称所有者必须广播其子域状态。 子域名示例包括“jude.personal.id” 和 “ podsaveamerica.verified.podcast” 。 与BNS命名空间和域名不同,BNS子域名的状态不是区块链共识规则的一部分。

下面展示了一个功能比较的表格,总结了这些域名对象之间的相似性和差异:

特性 命名空间 BNS 域名 BNS 子域名
全局唯一 X X X
域名可读性 X X X
由私钥拥有   X X
任何人可创建 X X [1]
创建者可更新   X [1]
状态托管在链上 X X  
状态托管在链下   X X
行为受到共识层控制 X X  
可能会有有效期   X  

[1] 需要BNS域名所有者的合作以广播其交易