代码编织梦想

ENS阅读笔记_【03】的博客-CSDN博客

关于ENS
以太坊域名服务(ENS)类似于DNS。但它通过一种更安全和且去中心化的方式来管理网站域名,而且可以通过它发送ETH和ERC-20代币。
ENS注册表记录所有域和子域,以及所有者的详细信息和指向解析器的链接;而解析器是另一个智能合约,处理从名称到地址或其他类型资源的转换,反之亦然。
ENS的运行类似于互联网的DNS,因为它有一个分级系统,允许域名所有者完全控制任何子域。

web3.eth.ens文档地址:https://web3js.readthedocs.io/en/v1.5.2/web3-eth-ens.html#eth-ens

ENS文档地址:https://docs.ens.domains/

ENS开源地址:https://github.com/ensdomains

ens-subgraph开源地址:https://github.com/graphprotocol/ens-subgraph

合约分布
ETHRegistrarController
DefaultReverseResolver
PublicResolver
ReverseRegistrar
BaseRegistrarImplementation
ENSRegistryWithFallback
BulkRenewal
1
2
3
4
5
6
7
工具类代码块
const ETHRegistrarControllerContract = new web3.eth.Contract(
      ETHRegistrarControllerAbi,
      ETHRegistrarControllerAddress
    )
const ReverseRegistrarContract = new web3.eth.Contract(
      ReverseRegistraAbi,
      ReverseRegistraAddress
    )

randomString(length) {
      var str =
        "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
      var result = "";
      for (var i = length; i > 0; --i)
        result += str[Math.floor(Math.random() * str.length)];
      return result;
    }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
获取域名价格
const name = "xxx.xyz".split('.')[0]//只取域名前缀xxx
ETHRegistrarControllercontract.methods
      .rentPrice(name, 31536000)//获取一年的价格
      .call()
      .then((res) => {

        });
1
2
3
4
5
6
7
注册域名
提交注册申请

let bytes = ''
const name = "xxx.xyz".split('.')[0]//只取域名前缀
ETHRegistrarControllerContract.methods
        .makeCommitmentWithConfig(
          name,
          window.ethereum.selectedAddress,
          Web3.utils.sha3(randomString(12)),
          PublicResolverAddress,
          window.ethereum.selectedAddress
        )
        .call()
        .then((res) => {
          bytes = res;
        });

ETHRegistrarControllerContract.methods
        .commit(bytes)
        .send({ from: window.ethereum.selectedAddress })

        .on("receipt", function (receipt) {
          
        })

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
需等待1min

完成注册
ETHRegistrarControllerContract.contract.methods
          .registerWithConfig(
            name,
            window.ethereum.selectedAddress,
            31556952 * years,//注册年数,单位s
             Web3.utils.sha3(randomString(12)),
            PublicResolverAddress,
            window.ethereum.selectedAddress
          )
          .send({
            from: window.ethereum.selectedAddress,
            value: price * 1.2 * years,//价格*年数
          })
1
2
3
4
5
6
7
8
9
10
11
12
13
设置主 ENS 名称
**ReverseRegistrarContract**.methods
        .setName('xxxx.xyz')
        .send({ from: window.ethereum.selectedAddress })

        .on("receipt", function (receipt) {
          
        })
1
2
3
4
5
6
7
设置解析记录
const PublicResolverContract = new Web3.eth.Contract(
           PublicResolverAbi,
            resolverAddress,//ENSRegistryWithFallbackContract.resolver
          )
var domainHash = namehash.hash(
          'xxx.xyz'//ens域名地址
      );
PublicResolverContract.methods
.setAddr(domainHash, coinType, "0x" + formatsByName["ETH"].decoder(inputAddress).toString("hex"))
.on("receipt", function (receipt) {
          
        })
1
2
3
4
5
6
7
8
9
10
11
12
获取数据
通过合约获取数据
获取owner和resolver

var namehash = require("eth-ens-namehash");
const web3 = new Web3(window.ethereum)
      const ENSRegistryWithFallbackContract = new web3.eth.Contract(
          ABI,
         ENSRegistryWithFallbackAddress
      );
      var domainHash = namehash.hash(
          'xxx.xyz'//ens域名地址
      );
      ENSRegistryWithFallbackContract.methods
          .owner(domainHash)
          .call().then(res => {
        
      })
      ENSRegistryWithFallbackContract.methods
          .resolver(domainHash)
          .call().then(res => {
        
      })
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
获取ens域名解析记录

var domainHash = namehash.hash(
          'xxx.xyz'//ens域名地址
      );
const PublicResolverContract = new Web3.eth.Contract(
           PublicResolverAbi,
            resolverAddress,//ENSRegistryWithFallbackContract.resolver
          )
PublicResolverContract.methods
  .addr(domainHash, coinType)//coinTypes在graph可查,看下方graph代码块
  .call()
  .then((res) => {
})
1
2
3
4
5
6
7
8
9
10
11
12
通过graph获取数据
数据基本都用graph查询

获取注册信息

const name = "xxx.xyz".split('.')[0]//只取域名前缀
const id = Web3.utils.sha3(name)
axios.post(
    this.GLOBAL.netdata.api_url,
    {
      query: `
        {
              registration(id: "${id}") {
                id
                registrationDate
                domain {
                  name
                }
                registrant {
                  id
                }
              }
            }
        `
    }

).then((res) => {
  
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
获取域名信息

var domainHash = namehash.hash(
          'xxx.xyz'//ens域名地址
      );
axios.post(
graphUrl,
{
  query: `
   {
  domain(id: "${domainHash}") {
    id
    name
    resolver {
      coinTypes
      texts
    }
  }
}
 `
}

).then((res) => {

});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
通过ethers.js调用
ethers.js原生支持ens

const provider = new ethers.providers.JsonRpcProvider('https://rinkeby.infura.io/v3/3dd7eb5d146740f4a47e136531e7795e', {
      chainId: 4,
      name: 'rinkeby',
      ensAddress: ensAddress
    })
const resolver  = await provider.getResolver('xxx.xyz')
const x = await resolver.getAddress(60)//参数是coinType
// 获取余额
const resolver  = await provider.getBalance('xxx.xyz')
1
2
3
4
5
6
7
8
9
获取其他值阅读ethjs文档:https://docs.ethers.io/v5/api/providers/provider/#EnsResolver


对于批量获取,可以使用ensjs库

@ensdomains/ensjs:https://www.npmjs.com/package/@ensdomains/ensjs
————————————————
版权声明:本文为CSDN博主「【03】」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43840202/article/details/125845397

centos7中输入ifconfig出现ens33,没有eth0_null111666的博客-爱代码爱编程

vmware安装的centos7中没有出现eth0网卡,也没有ip,不能上网,输入ifconfig后如下图 解决办法 1.编辑网卡的配置文件 vi /etc/sysconfig/network-scripts/ifcfg-ens33 将里面的NAME和DEVICE项修改为eth0 [root@localhost ~]# vi /etc/sysco

边缘计算ens:拓展云的边界_xstardust的博客-爱代码爱编程

摘要: 在9月19日下午的杭州云栖大会飞天技术汇-CDN与边缘计算专场中,阿里云边缘计算团队的高级技术专家王广芳,从边缘计算的定义、场景的需求和挑战、ENS产品的价值及能力,以及典型的应用场景和案例等几个方面,详细解读了阿里云对于边缘计算的理解。 在9月19日下午的杭州云栖大会飞天技术汇-CDN与边缘计算专场中,阿里云边缘计算团队的高级技术专家王广芳,从

以太坊ens使用方法_weixin_33895604的博客-爱代码爱编程

2019独角兽企业重金招聘Python工程师标准>>> ENS,全称为:Ethereum Name Service,即以太坊名称服务,类似于DNS将域名解析为IP地址,ENS则负责将以太坊名称解析为以太坊地址。例如,当你要给我们转账时,可以使用名称hubwiz.eth而不是地址0x4cbe58c50480…,E

虚拟机ubuntu中ens33没有ip-爱代码爱编程

ens与eth0的区别 老师我的网卡显示的是ens33,不是什么eth0,请问这两者之间有什么区别吗? 答:         内容选自《鸟哥的linux私房菜:基础学习篇》第四版 新版的CentOS 7 开始对于网卡的编号有另外一套规则,网卡的代号与网卡的来源有关 eno1:代表由主板bios内置的网卡 ens1:代表有主板bios内置的PC

【转】Ubuntu下如何修改ens33的IP默认值并且修改ens33为eth0-爱代码爱编程

root@flm:/etc/network# gedit interfaces& #interfaces(5) file used by ifup(8) and ifdown(8) #auto lo #iface lo inet loopback auto ens33 iface ens33 inet static address 192.16

centos7没有ens33网卡的解决方案-爱代码爱编程

1.首先设置在系统启动时激活网卡 vim /etc/sysconfig/network-scripts/ifcfg-ens33 将ONBOOT=no改为ONBOOT=yes 2.执行下面的命令,此时ifconfig 显示有了ens33网卡,但没有ip ifconfig ens33 up 3.执行下面的命令 systemctl stop Networ

查询ip时linux上的ens33丢失???-爱代码爱编程

一、前言 运行环境:window10+VMware14+Centos7 在虚拟机上操作Linux系统查看IP的时候,发现没有ens33或者eth0了 二、解决办法(找了很多办法之后,执行了下面三行命令就成功了) systemctl stop NetworkManager                             临时关闭 systemctl

linux在vm下安装ens33网卡改不,rhel和centos7下更改网卡名称ens33为eth0-爱代码爱编程

python 之Twsited Twisted是一个事件驱动的网络框架,其中包含了诸多功能,例如网络协议,线程,数据库管理,网络操作,电子邮件等 事件驱动 一,注册事件 二,触发事件 自定义事件框架  event_fram.py # ... 有关基于模型的设计(MBD)一些概念和理解(zz) http://ww

Connection ‘ens33‘ is not available on device ens33 because device is strictly unmanaged-爱代码爱编程

本文只针对部分情况,网卡未加入托管导致 本人遇到的问题 虚拟机开启 ifconfig 没有ens33网卡,无法上网,同时 图形化模式 没有有线连接选项 手动启动网卡提示: Connection 'ens33' is not available on device ens33 because device is strictly unmanaged

linux:ifconfig找不到ens33端口-爱代码爱编程

问题描述 一觉醒来,打开虚拟机,发现连不上网,使用ipconfig命令查看下什么情况,发现少了个ens33端口。。。心里mmp,今天任务又得延后熬夜完成了。。。未买过任何有关linux的书籍,只能百度,发现各种方法层出不穷。。。本人也基本各个都试过了,与Network相关的,与NetworkManager相关的都试了,但都没没卵用,配置Mac地址?抱歉,

解决CentOS7中ens33网卡不显示IP的问题-爱代码爱编程

解决: 输入cd /etc/sysconfig/network-scripts/ 输入:vi ifcfg-ens33 进行编辑 注意:编辑需要root权限 若没有root权限 输入su切换到超级用户 等操作完了再按exit退出超级用户 输入i进行编辑 将最后一行的ONBOOT=no改为ONBOOT=yes即可 esc退出输入模式 输入:wq保存并退出 输

ens在web3.0浪潮下的有什么价值?_区块链文博的博客-爱代码爱编程

在昨天的文章中,我提到两个和地址有关的应用。虽说这些应用看上去都有一定的市场,并且有可能有一定的需求,但至少到目前为止,它们的使用频次似乎并不高。不说别的,就说用户之间的相互转账吧,就这么一个最基本的功能,在我看来即便是在圈