ENS中文文档系列之一 [ ENS介绍 ]

前言

ENS中文文档 是由我照ENS英文官方文档翻译而来,其中的一些内容和细节得到了ENS官方团队的指导。文档中包含 “LBB译注” 的地方是译者为了便于读者理解而进行的注释。

未来一段时间,我会在该博客定时发布ENS中文文档的一系列内容,对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有两个主要组件:注册表解析器

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注册器

原文地址:https://www.cnblogs.com/cnliu/p/ens-introduction.html

时间: 2024-11-05 16:00:46

ENS中文文档系列之一 [ ENS介绍 ]的相关文章

jQuery EasyUI API 中文文档 - Tree树使用介绍

用 $.fn.tree.defaults 重写了 defaults. 依赖 draggable droppable 用法 Tree 能在 <ul> 元素里定义,此标记可以定义为叶节点和子节点.下面是一个示例: 复制代码代码如下: <ul id="tt"> <li> <span>Folder</span> <ul> <li> <span>Sub Folder 1</span> &l

Flutter 中文文档网站 flutter.cn 正式发布!

在通常的对 Flutter 介绍中,最耳熟能详的是下面四个特点: 精美 (Beautiful):充分的赋予和发挥设计师的创造力和想象力,让你真正掌控屏幕上的每一个像素. ** 极速 (Fast)**:基于 Skia 的硬件加速图形引擎,帮助你媲美原生应用的速度. 高效 (Productive):Flutter 的 Stateful Hot Reload (热重载) 特性帮助你实时看到应用修改的结果. 开放 (Open):不管是 Flutter 引擎还是 Dart 开发语言,甚至是工程团队的工作空

Visual Studio Code中文文档

Visual Studio Code中文文档 Visual Studio Code是一个轻量级但是十分强大的源代码编辑器,重要的是它在Windows, OS X 和Linux操作系统的桌面上均可运行.Visual Studio Code内置了对JavaScript, TypeScript和Node.js语言的支持,并且为其他语言如C++, C#, Python, PHP等提供了丰富的扩展库和运行时. 一.Visual Studio Code实际应用(一)快速强大的编码功能:    能够快速捕捉程

MyBatis Generator中文文档

MyBatis Generator中文文档 MyBatis Generator中文文档地址: http://mbg.cndocs.tk/ 该中文文档由于尽可能和原文内容一致,所以有些地方如果不熟悉,看中文版的文档的也会有一定的障碍,所以本章根据该中文文档以及实际应用,使用通俗的语言来讲解详细的配置. 本文中所有节点的链接都是对应的中文文档地址,可以点击查看详细信息. 下载本文档的PDF版本 注:本文后面提到的MBG全部指代MyBatis Generator. 运行MyBatis Generato

Hadoop-2.2.0中文文档—— Common - 超级用户模拟别的用户

pcDuino3下支持mmc启动,官方的Uboot是采用SPL框架实现的,因为内部的SRAM空间达到32K,我们完全可以在这32K空间内编写一个完整可用小巧的bootloader来完成引导Linux kernel的目的. 我们首先介绍下SPL框架,可以先看下<GNU ARM汇编--(十八)u-boot-采用nand_spl方式的启动方法>和<GNU ARM汇编--(十九)u-boot-nand-spl启动过程分析>,NAND_SPL也算是SPL框架下的一种模式. 当使用Nand f

【Chromium中文文档】线程

线程 转载请注明出处:https://ahangchen.gitbooks.io/chromium_doc_zh/content/zh//General_Architecture/Threading.html 全书地址 Chromium中文文档 for https://www.chromium.org/developers/design-documents 持续更新ing,欢迎star gitbook地址:https://ahangchen.gitbooks.io/chromium_doc_zh

spring-data-jpa 中文文档(1)

spring-data-jpa 中文文档(1) 简介 为了让Spring Data的版本保持一致,可以使用maven提供的dependencyManagement <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-releasetrain</a

spring-data-jpa 中文文档(2)

spring-data-jpa 中文文档(2) JPA Repositories 简介 Spring命名空间 SpringData使用了自定义的命名空间去定义repository.通常我们会使用repositories元素: <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns

.NET Core开源API网关 – Ocelot中文文档

原文:.NET Core开源API网关 – Ocelot中文文档 Ocelot是一个用.NET Core实现并且开源的API网关,它功能强大,包括了:路由.请求聚合.服务发现.认证.鉴权.限流熔断.并内置了负载均衡器与Service Fabric.Butterfly Tracing集成.这些功能只都只需要简单的配置即可完成,下面我们会对这些功能的配置一一进行说明. 介绍 简单的来说Ocelot是一堆的asp.net core middleware组成的一个管道.当它拿到请求之后会用一个reque