ENS中文文档系列之一 [ ENS介绍 ]
前言
ENS中文文档是由我照ENS英文官方文档翻译而来,其中的一些内容和细节得到了ENS官方团队的指导。文档中包含 “LBB译注” 的地方是译者为了便于读者理解而进行的注释。
未来一段时间,我会在该博客定时发布ENS中文文档的一系列内容,对ENS域名或是区块链有兴趣的园友请关注本博客。为尊重汗水,我会在文前加上我翻译原文链接(望管理员理解)。
------------
原文链接:https://liubenben.com/docs/readme.html
ENS(Ethereum Name Service)是以太坊域名服务,是一个基于以太坊区块链的分布式、开放和可扩展的命名系统。
ENS的工作是将可读的域名(比如”alice.eth”)解析为计算机可以识别的标识符,如以太坊地址、内容的哈希、元数据等。ENS还支持”反向解析”,这使得将元数据(如规范化域名或接口描述)与以太坊地址相关联成为可能。
ENS的目标与DNS(互联网域名服务)类似,但由于以太坊区块链的功能特点和限制条件,两者架构有很大的不同。与DNS一样,ENS是一个层次结构的域名系统,不同层次域名之间以点作为分隔符,我们把层次的名称叫做域,一个域的所有者能够完全控制其子域。
顶级域名(比如”.eth”和”.test”)的所有者是一种名为”注册器(registrar)”的智能合约,该合约内指定了控制子域名分配的规则。任何人都可以按照这些合约规定的规则,获得一个域名的所有权并为自己所用。
由于ENS的层次性,不论一个人拥有哪个级别的域名,都可以根据需要为自己或他人配置子域名。例如,如果Alice拥有”alice.eth”,她就可以创建”pay.alice.eth”并按需对其进行设置。
ENS部署在以太坊主网络和几个测试网络上。如果你使用ethereum-ens Javascript库或终端用户应用程序,它将自动检测与你交互的网络并在该网络上部署ENS。
你现在就可以通过ENS管理器或ENS官方主页上的ENS应用程序,来试用ENS。
ENS架构

ENS注册表是一个智能合约,该合约维护所有域名和子域名列表,并存储关于每个域名的三个关键信息:
- 域名的所有者
- 域名的解析器
- 域名下所有记录的缓存存活时间(即TTL)
域名的所有者可以是外部帐户(用户)或智能合约。注册器就是一个拥有顶级域名的智能合约,并按照合约中的规则将该域名的子域名分发给用户。
ENS注册表中的域名所有者可以:
- 为域名设置解析器和TTL
- 将域名的所有权转让给另一个地址
- 更改子域名的所有权
ENS注册表非常简单,它的存在只是为了将域名映射到负责解析这个域名的解析器。
解析器负责将域名转换为地址。只要是符合解析器相关标准的智能合约,都可以在ENS中作为解析器程序。通用解析器服务于需求简单的用户,比如不经常更改地址的用户。
每个记录类型(以太坊地址、内容的哈希等)都定义了一个或多个方法,解析器必须实现这些方法才能提供这类记录。新的记录类型可以随时通过EIP标准化程序进行定义,因此不需要为了支持它们而对ENS注册表或现有的解析器进行更改。
在ENS中解析一个域名需要两个步骤:首先,询问注册表是哪个解析器负责解析该域名,然后,向该解析器查询解析结果。

在上面的例子中,我们想找到“foo.eth”指向的以太坊地址。首先,我们询问注册表是哪个解析器负责解析“foo.eth”;然后,我们向该解析器查询“foo.eth”的地址。
Namehash
智能合约中的资源限制使得直接与可读的域名交互效率低下,因此ENS只使用固定长度的256位加密哈希。为了从域名生成哈希的同时仍然保留其层次性,ENS使用了名为Namehash的算法。例如,”alice.eth”的Namehash为 0x787192fc5378cc32aa956ddfdedbf26b24e8d78e40109add0eea2c1a012c3dec ,Namehash只是用来在ENS内部表示域名。
Namehash是一个递归过程,可以为任何有效的域名生成唯一的哈希。从任意一个域名的Namehash开始(比如“alice.eth”的Namehash)可以推导出任意子域名的Namehash(比如“iam.alice.eth”的Namehash),而且推导过程中不需要知道或处理”alice.eth”这个可读的原始域名。正是这个特性使得ENS能够成为一个层次性的系统,且不必在内部处理可读的文本字符串。
在使用Namehash进行哈希之前,首先需要借助UTS-46标准对域名进行规范化,确保域名中的字母与大小写无关,并禁止使用无效字符。任何对域名进行哈希和解析的操作都必须首先对其进行规范化,以确保所有用户获得ENS的一致性。
有关Namehash和规范化如何工作的详细信息,请参阅有关域名处理的文档。
开始使用
ENS为包括DApp开发者和合约开发者在内的各种人员提供参考文档。
我是DApp的开发者,我想为我的DApp添加ENS支持
从在DApp中启用ENS开始,查看开发应用程序开发者指南,你可以从众多可用的ENS库中选择一个来开始使用ENS。
我是一名合约开发者,希望在我的智能合约中与ENS进行交互
从链上域名解析开始,查看合约开发者指南。你还可以编写自己的解析器(自定义查询域名的过程)或自己的注册器(自定义注册新域名的过程)。
我想查看ENS智能合约的参考文档
查看ENS智能合约的API参考文档,这些文档涵盖了ENS的核心合约、注册表、解析器和常用的注册器,如:测试注册器、反向注册器以及.eth注册器。
ENS中文文档系列之一 [ ENS介绍 ]的更多相关文章
- ENS中文文档系列之三 [ ENS常见问题 ]
原文地址:https://ensuser.com/docs/frequently-asked-questions.html更多最新信息,请前往 ENS 中文服务站点:ENSUser 关于 ENS 注册 ...
- jQuery EasyUI API 中文文档 - Tree树使用介绍
用 $.fn.tree.defaults 重写了 defaults. 依赖 draggable droppable 用法 Tree 能在 <ul> 元素里定义,此标记可以定义为叶节点和子节 ...
- Knockout中文开发指南(完整版API中文文档) 目录索引
a, .tree li > span { padding: 4pt; border-radius: 4px; } .tree li a { color:#46cfb0; text-decorat ...
- Spring中文文档
前一段时间翻译了Jetty的一部分文档,感觉对阅读英文没有大的提高(*^-^*),毕竟Jetty的受众面还是比较小的,而且翻译过程中发现Jetty的文档写的不是很好,所以呢翻译的兴趣慢慢就不大了,只能 ...
- Apache Spark 2.2.0 中文文档
Apache Spark 2.2.0 中文文档 - 快速入门 | ApacheCN Geekhoo 关注 2017.09.20 13:55* 字数 2062 阅读 13评论 0喜欢 1 快速入门 使用 ...
- Flutter 中文文档网站 flutter.cn 正式发布!
在通常的对 Flutter 介绍中,最耳熟能详的是下面四个特点: 精美 (Beautiful):充分的赋予和发挥设计师的创造力和想象力,让你真正掌控屏幕上的每一个像素. ** 极速 (Fast)**: ...
- Mockito 中文文档 ( 2.0.26 beta )
Mockito 中文文档 ( 2.0.26 beta ) 由于缺乏校对,难免有谬误之处,如果发现任何语句不通顺.翻译错误,都可以在github中的项目提出issue.谢谢~ Mockito框架官方地址 ...
- Reactor3 中文文档(用户手册)
文章很长,建议收藏起来,慢慢读! 疯狂创客圈为小伙伴奉上以下珍贵的学习资源: 疯狂创客圈 经典图书 : <Netty Zookeeper Redis 高并发实战> 面试必备 + 大厂必备 ...
- Phoenix综述(史上最全Phoenix中文文档)
个人主页:http://www.linbingdong.com 简书地址:http://www.jianshu.com/users/6cb45a00b49c/latest_articles 网上关于P ...
随机推荐
- Redis实战篇
Redis实战篇 1 Redis 客户端 1.1 客户端通信 原理 客户端和服务器通过 TCP 连接来进行数据交互, 服务器默认的端口号为 6379 . 客户端和服务器发送的命令或数据一律以 \r\n ...
- 浅谈Mysql索引
文章原创于公众号:程序猿周先森.本平台不定时更新,喜欢我的文章,欢迎关注我的微信公众号. 我们都知道,数据库索引可以帮助我们更加快速的找出符合的数据,但是如果不使用索引,Mysql则会从第一条开始查询 ...
- django报错问题解决
注意以下修改文件均是修改虚拟python环境中的文件 1.执行(venv) E:\myproj\autotest>python manage.py makemigrations报错: 解决办法: ...
- LeetCode 十月份题目汇总
开源地址:点击该链接 前言 十月份共有60道题目,全部属于 Easy 难度的,所以公众号中分享出来的并不多,只是挑了一些感觉还可以的才分享了出来,这60道题目我按照不同类别进行了分类整理,所有源码以及 ...
- 设计模式(二)Adapter模式
Adapter模式也被成为Wrapper模式.适配器模式用于填补“现有的程序”和“所需的程序”之间差异的设计模式. Adapter模式有两种,即使用继承的适配器和使用委托的适配器. 1.使用继承的适配 ...
- Java基础(五)继承和多态
1.多态 先来看一个例子,其中Employee类是父类,Manager类继承了Employee类: public static void main(String[] args) { // constr ...
- URL百分号编码
百分号编码是什么! 百分号编码(Percent-Encoding)也被称为 URL 编码,是一种编码机制.该机制主要应用于 URI 编码中,URI 包含 URL 和 URN,所以它们也同样适用.除此之 ...
- shell 脚本中的注释详解
上次写了shell脚本的注释,没想到那么多人的需要,也存在不少不足.这次做个补充吧. 单行注释: 单行注释就比较简单了,直接在行最前端加上符号 # 即可.具体用法如下所示: # this is com ...
- Vue 实现前进刷新,后退不刷新的效果 玩转vue-router里的meta
Vue 实现前进刷新,后退不刷新的效果 玩转vue-router里的meta. 需求一: 在一个列表页中,第一次进入的时候,请求获取数据. 点击某个列表项,跳到详情页,再从详情页后退回到列表页时,不刷 ...
- 记录一次C#的asyn和await
static void Main(string[] args) { var d = new NavDownLoader(); Task<bool> success = d.DownLoad ...