naming-Overview-Blockstack Namin
本文档概述了blockstack命名服务的工作原理。本节向您介绍BNS,并解释以下概念:
什么是BNS
命名服务背后的动机
BNS的组织
(blockstack核心)存储库是blockstack命名服务的参考实现。
什么是BNS
blockstack命名服务(BNS)是一个网络系统,它将名称绑定到离线状态,而不依赖于任何中心点的控制。它通过在一个公共区块链(比如比特币)中嵌入一个控制平面消息日志来做到这一点。
每个BNS对等点通过索引这些特别设计的事务来确定每个名称的状态。在此过程中,每个对等点独立计算相同的全局名称状态。
BNS中的名称有三个属性:
- 名称是全局惟一的。该协议不允许名称冲突,所有行为良好的节点都将给定的名称解析为相同的状态。
- 名字是人们可以理解的l。每个名称都是由它的创建者选择的。
- 名字是强所有权的。只有名称的所有者可以更改它解析到的状态。具体来说,名称由一个或多个ECDSA私钥拥有。
在内部,BNS节点实现一个复制的名称数据库。每个BNS节点保持自己与世界上所有其他节点的同步,因此在一个BNS节点上的查询在其他节点上是相同的。BNS节点允许名称的所有者将最多40Kb的链下状态绑定到其名称,该名称将通过Atlas网络复制到所有BNS节点。
BNS节点从底层区块链中提取名称数据库日志(Blockstack Core目前使用比特币,过去使用过Namecoin)。BNS使用区块链为系统建立一个共享的“ground truth”:只要两个节点具有相同的区块链视图,它们就会建立相同的数据库。
对于开发人员来说,最大的结论是在BNS中,读取名称状态又快又便宜,但是写入名称状态又慢又昂贵。这是因为注册和修改名称需要将一个或多个事务发送到底层区块链,而BNS节点在充分确认之前不会处理它们。用户和开发者需要购买和使用必要的加密货币(即比特币)来发送BNS交易。
命名服务背后的动机
我们在日常生活中依赖于命名系统,它们在许多不同的应用程序中扮演着重要的角色。例如,当你在社交媒体上查找朋友时,你使用平台的命名服务将他们的名字解析为他们的个人资料。当您查找网站时,您使用域名服务将主机名解析为其主机的IP地址。签出Git分支时,使用Git客户机将分支名称解析为提交散列。当您在密钥服务器上查找某人的PGP密钥时,您将他们的密钥ID解析为他们的公钥。
关于名字,我们希望什么是真实的?在BNS中,名称是全局惟一的,名称是有意义的,并且名称是强拥有的。但是,如果您查看这些示例,您会发现它们每个都只能保证其中两个属性。这限制了它们的用处。
- 在DNS和社交媒体中,名称是全球唯一的、人类可读的,但不是强拥有的。对于每个名称解析为什么,系统操作员有最终发言权。
问题:客户必须相信系统能够正确地选择给定名称的解析结果。这包括相信只有系统管理员才能进行这些更改。
- 在Git中,分支名称是对人有意义的、强拥有的,但不是全局惟一的。两个不同的Git节点可以将相同的分支名称解析为不同的不相关存储库状态。
问题:由于名称可以引用冲突状态,开发人员必须找到其他机制来解决歧义。在Git的情况下,用户必须手动干预。
- 在PGP中,名称是键id。它们在全球范围内是独一无二的,以密码方式拥有,但人类无法读取。PGP密钥id是从它们引用的密钥派生出来的。
问题:这些名称对大多数用户来说很难记住,因为它们不包含与在系统中使用有关的语义信息。
BNS名称具有所有这三个属性,并且没有这些问题。这使得它成为构建各种网络应用程序的强大工具。使用BNS,我们可以做以下和更多:
- 构建主机名不会被劫持的域名服务。
- 建立社交媒体平台,让用户名不会被窃取。
- 构建存储库分支不冲突的版本控制系统。
- 构建公钥基础设施,让用户很容易地发现和记住彼此的密钥。
BNS的组织
BNS名称被组织成一个全局名称层次结构。这个层次结构中有三个不同的层与命名有关:
-
名称空间。这些是层次结构中的顶级名称。与BNS名称空间类似的是DNS顶级域名。现有的BNS名称空间包括.id、.podcast和.helloworld。所有其他名称都只属于一个名称空间。任何人都可以创建名称空间,但是为了持久保存名称空间,必须启动它,以便任何人都可以在其中注册名称。名称空间不属于它们的创建者。
-
BNS的名字。这些名称的记录直接存储在区块链上。这些名称的所有权和状态通过发送区块链事务来控制。示例名称包括verified.podcast和muneeb.id。任何人都可以创建BNS名称,只要包含它的名称空间已经存在。BNS名称的状态通常存储在Atlas网络中。
-
BNS子域名。这些名称的记录存储在off-chain中,但是被集体锚定到区块链。这些名称的所有权和状态位于Atlas网络中。虽然BNS子域名由单独的私钥拥有,但BNS名称所有者必须广播其子域名状态。示例子域名包括jude.personal.id和podsaveamerica.verified.podcast。与BNS名称空间和名称不同,BNS子域名的状态不是区块链一致规则的一部分。
下面给出了一个特征比较矩阵,总结了这些命名对象之间的相似点和不同点:
功能 | 命名空间 | BNS names | BNS Subdomains |
---|---|---|---|
全局唯一 | X | X | X |
人们可以理解的 | X | X | X |
由私钥拥有 | X | X | |
任何人都可以创建 | X | X | [1] |
所有者可以更新 | X | [1] | |
状态保存在链上 | X | X | |
状态保存在下 | X | X | |
由共识规则控制行为 | X | X | |
可能有一个有效期 | X |
[1]需要BNS名称所有者的合作来广播其事务