如何在 Web 项目中将 ENS 域名解析为 ETH 地址
基础知识
什么是 ENS
- https://docs.ens.domains (English)
- https://ensuser.com/docs/readme.html (Chinese)
ENS 官方提供的开发文档(域名解析相关)
特殊需求的特殊办法
- 某些场景下,就希望 “通过类似调用公共 API 的方式,直接将 ENS 转换为 ETH 地址”
对于这个问题,网上除了大量机翻的内容,几乎没有什么有效信息,本文将介绍两种方法
- 使用 The Graph 提供的 SubGraph
- 使用第三方网站提供的 API
- 特别注意:中心化的方式在安全性上可能存在风险,请根据使用场景自行评估
① 使用 The Graph 提供的 SubGraph
进入 ENS 的 Subgraph 地址
在下方的 Playground 中运行查询语句,找到自己想要的内容
- 右侧的 Schema 模块中列出了所有可查询的字段及其结构
- 查询需要使用 GraphQL 语法,相关内容可以自行查询
- 我们以查询某个 ENS 域名(test.eth)对应的 ETH ADDRESS 为例,查询语句和返回内容如下
查询语句
{
domains(where:{name:"test.eth"}){
name
owner {
id
}
}
}
返回内容
{
"data": {
"domains": [
{
"name": "test.eth",
"owner": {
"id": "0xbd6bbe64bf841b81fc5a6e2b760029e316f2783b"
}
}
]
}
}
使用项目语言构造查询请求
- 以 PHP 为例
$url = "https://api.thegraph.com/subgraphs/name/ensdomains/ens";
$header = [];
$curl = curl_init($url);
curl_setopt($curl,CURLOPT_RETURNTRANSFER,1);
curl_setopt($curl,CURLOPT_HTTPHEADER,$header);
curl_setopt($curl,CURLOPT_POST,1);
curl_setopt(
$curl,CURLOPT_POSTFIELDS,
'{"query":"{\n domains(where:{name:\"test.eth\"}) {\n name\n owner {\n id\n }\n }\n}","variables":null}'
);
$result = curl_exec($curl);
② 使用 Whois3.me 提供的 API
- 简单明了,不做过多介绍了,使用方式参见 https://whois3.me/pages/api