# 通过Subgraph使用ENS

By [dns3](https://paragraph.com/@beagles) · 2022-10-05

---

Subgraph是ENS在The Graph上托管的ENS合约的索引和结构化数据访问服务。比起ENS的JavaScript库，它可以用来更加灵活的访问ENS数据，比如以下的使用场景：

[https://docs.ens.domains/contract-api-reference/subgraphdata](https://docs.ens.domains/contract-api-reference/subgraphdata)

1.  查询设置了某个TEXTS字段的用户，如设置了头像avatar的用户, 设置了email的用户, 或者其他更特殊的字段，如carrierId。 我们可以通过carrierId来判断使用了[beagle chat手机客户端](https://apps.apple.com/us/app/beagle-chat/id1597429120)的用户。查询方法如下：
    
        {
          domains(where: {resolver_:{texts_contains:["carrierId"]}}) {
          name
          labelName
          resolver{
            texts
          }
          resolvedAddress{id}
         }
        }
        
    
    返回结果为：
    
        {
        "data": {
        "domains": [
          {
            "name": "tomas.eth",
            "labelName": "tomas",
            "resolver": {
            "texts": [
              "email",
              "carrierId"
              ]
          },
        "resolvedAddress": {
            "id": "0x2259c79c85141a59b9117c789a5ae09774b7572f"
            }
          },
          {
            "name": "liwei.beagles.eth",
            "labelName": "liwei",
            "resolver": {
              "texts": [
                "carrierId"
                ]
            },
            "resolvedAddress": {
              "id": "0xa37f4be5106ec699488e21e5412956f765e32b6e"
            }
          },
          {
            "name": "zeliang.beagle.eth",
            "labelName": "zeliang",
            "resolver": {
              "texts": [
                "carrierId",
                "avatar",
                "nickName"
              ]
              },
            "resolvedAddress": {
                "id": "0x2259c79c85141a59b9117c789a5ae09774b7572f"
                }
          }
        ]
        }
        }
        
    
2.  查询某个地址是否有ENS名字 注意id的字符串为小写字母。
    
        query getDomainForAccount {
        account(id: "0xc461d56919d1957692eb98dbb15ae23a3567d1bb") {
          registrations(first: 10, orderBy: expiryDate, orderDirection: desc) {
          domain {
            name
          }
          }
          id
        }
        }
        
    
    返回值为：
    
        {
        "data": {
          "account": {
            "registrations": [
                {
                  "domain": {
                      "name": "beagles.eth"
                  }
                },
                {
                  "domain": {
                      "name": "lenspace.eth"
                  }
                }
            ],
            "id": "0xc461d56919d1957692eb98dbb15ae23a3567d1bb"
          }
        }
        }
        
    

**subgprah的查询地址为：**

1.  rinkeby testnet
    
    [https://thegraph.com/hosted-service/subgraph/ensdomains/ensrinkeby](https://thegraph.com/hosted-service/subgraph/ensdomains/ensrinkeby)
    
2.  Ethereum Mainnet
    
    [https://thegraph.com/hosted-service/subgraph/ensdomains/ens](https://thegraph.com/hosted-service/subgraph/ensdomains/ens)
    
    `Graph的使用文档：`
    

[https://thegraph.com/docs/en/querying/graphql-api/](https://thegraph.com/docs/en/querying/graphql-api/)

特别注意递归条件（nested entity filtering）的使用。

---

*Originally published on [dns3](https://paragraph.com/@beagles/subgraph-ens)*
