如何在 Web 项目中将 ENS 域名解析为 ETH 地址

基础知识

特殊需求的特殊办法

  • 某些场景下,就希望 “通过类似调用公共 API 的方式,直接将 ENS 转换为 ETH 地址”
  • 对于这个问题,网上除了大量机翻的内容,几乎没有什么有效信息,本文将介绍两种方法

    • 使用 The Graph 提供的 SubGraph
    • 使用第三方网站提供的 API
  • 特别注意:中心化的方式在安全性上可能存在风险,请根据使用场景自行评估

① 使用 The Graph 提供的 SubGraph

  1. 进入 ENS 的 Subgraph 地址

subgraph.png

  1. 在下方的 Playground 中运行查询语句,找到自己想要的内容

    • 右侧的 Schema 模块中列出了所有可查询的字段及其结构
    • 查询需要使用 GraphQL 语法,相关内容可以自行查询
    • 我们以查询某个 ENS 域名(test.eth)对应的 ETH ADDRESS 为例,查询语句和返回内容如下
查询语句
{
  domains(where:{name:"test.eth"}){ 
    name
    owner {
      id
    }
  }
}

返回内容
{
  "data": {
    "domains": [
      {
        "name": "test.eth",
        "owner": {
          "id": "0xbd6bbe64bf841b81fc5a6e2b760029e316f2783b"
        }
      }
    ]
  }
}

graph.png

  1. 使用项目语言构造查询请求

    • 以 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

whois.png