ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

EthQL如何集成ENS?用GraphQL查询以太坊域名解析数据的实战教程

EthQL如何集成ENS?用GraphQL查询以太坊域名解析数据的实战教程 EthQL如何集成ENS用GraphQL查询以太坊域名解析数据的实战教程【免费下载链接】ethqlA GraphQL interface to Ethereum :fire:项目地址: https://gitcode.com/gh_mirrors/et/ethqlEthQL 是一个以太坊区块链数据的 GraphQL 接口服务器它把区块、交易、账户等链上数据暴露为标准的 GraphQL API。而 ENSEthereum Name Service插件则让 EthQL 支持在查询中直接使用ethereum.eth这类域名替代难记的0x开头地址轻松完成以太坊域名解析数据查询。为什么要在 EthQL 中使用 ENS以太坊地址是一串难以阅读和记忆的十六进制字符串例如0xfb6916095ca1df60bb79ce92ce3ea74c37c5d359。而 ENS 域名如ethereum.eth直观易读、便于人工核对是 Web3 应用与数据查询中的常用身份标识。EthQL 官方文档中提到ENS 插件允许在查询中用 ENS 名称代替地址Address相关示例见packages/ens/README.md。集成后你只需在原本填写地址的地方填入域名其余查询逻辑完全不变。快速启动一键部署本地 EthQL 服务环境要求很简单Node.js ≥ 8.0.0 和 yarn。git clone https://gitcode.com/gh_mirrors/et/ethql yarn install yarn bootstrap yarn run dev服务启动后会看到类似输出Running a GraphQL API server at http://0.0.0.0:4000/graphql (browse here: http://localhost:4000/graphql)浏览器打开http://localhost:4000/graphql即可进入图形化 Playground直接编写并执行 GraphQL 查询。 如果拥有 Infura 项目 ID用INFURA_IDmyid yarn run dev可获得更稳定的主网访问能力。3 种用 ENS 域名查询以太坊数据的实战示例以下查询可直接粘贴进 GraphQL Playground 执行。示例一按域名查询账户Account 查询{ account(address: ethereum.eth) { code transactionCount } }EthQL 会先把ethereum.eth解析成真实地址再执行账户查询返回该账户的合约代码与交易笔数。示例二按域名过滤交易角色transactionsRoles{ block(hash: 0x27cb5d9151939faeb4d5604b4ddb69fefcd166e690a9c1c9a235c024f376e49f) { transactionsRoles(to: ethereum.eth) { hash } } }from与to两个方向都支持 ENS 域名可以按发件人/收件人维度筛选某区块内相关交易。示例三查询域名涉及的交易transactionsInvolving{ block(hash: 0x27cb5d9151939faeb4d5604b4ddb69fefcd166e690a9c1c9a235c024f376e49f) { transactionsInvolving(participants: [ethereum.eth]) { hash } } }participants是数组可同时传入多个域名或地址一次查清所有相关方参与的交易。进阶技巧使用 GraphQL 变量传域名query($address: Address!) { account(address: $address) { address } }变量值传入ethereum.eth同样会触发域名解析。这让前端应用可以动态拼接查询参数非常实用。原理揭秘ENS 插件是如何无缝接入 EthQL 的EthQL 采用插件架构ENS 插件的集成堪称教科示例。核心代码位于packages/ens/src/目录1. 插件注册packages/ens/src/index.tsENS_PLUGIN声明了插件名称、优先级priority: 20、依赖的web3服务并注册一个基于ez-ens库的单例ens服务定义见packages/ens/src/services/index.ts。2. Address 标量类型改造packages/ens/src/resolvers/scalars.ts这是整个集成的灵魂所在。EthQL 把地址字段设计为自定义标量Address其解析逻辑为输入包含.eth→ 判定为 ENS 域名返回一个延迟解析函数thunk查询执行时才真正调用ens.resolve()完成域名解析输入是合法0x地址 → 原样返回其他 → 报错Expected type Address!。3. 解析器包装packages/ens/src/resolvers/index.ts插件采用归约reduction方式接管原有解析器先await域名解析 Promise拿到真实地址后再把参数交回原始解析器处理。这样account、transactionsRoles、transactionsInvolving等所有消费地址的解析器都自动获得了 ENS 能力原有地址查询则完全不受影响。4. 服务器装配packages/server/src/index.ts服务端只需在插件列表中登记CORE_PLUGIN、ERC20_PLUGIN、ENS_PLUGIN三件套即可让服务同时具备区块查询、ERC20 解码和 ENS 域名解析三大能力。项目还配有完整的自动化测试packages/ens/src/__tests__/ens.test.ts覆盖了按域名查账户域名过滤交易地址回归测试等场景保证域名与地址两种用法长期兼容。常见问题与注意事项 域名识别规则只有输入字符串包含.eth时才会触发 ENS 解析普通地址走原路径零额外开销。解析时机是延迟的解析发生在查询执行阶段而非请求解析阶段因此域名解析失败会以 GraphQL 错误形式返回便于排查。混合使用同一查询中域名和地址可以混用比如transactionsInvolving(participants: [ethereum.eth, 0xfb6916...])。依赖网络ENS 解析需要访问以太坊节点若使用 Infura 等 RPC 服务请确保其可用性。总结通过本文的完整流程你已经掌握了 EthQL 集成 ENS 插件的全链路本地一键启动 EthQL 服务、用 GraphQL 查询以太坊域名解析数据的 3 种实战姿势以及 ENS 插件背后的标量改造与解析器包装原理。对于需要频繁分析链上数据的开发者而言用 ENS 域名替代地址查询能显著提升查询的可读性与开发效率。输出文章【免费下载链接】ethqlA GraphQL interface to Ethereum :fire:项目地址: https://gitcode.com/gh_mirrors/et/ethql创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表