如何使用Web3.js通过以太坊地址查询对应的ENS域名
你调用的getOwner方法仅支持传入ENS域名作为参数,返回该域名的所有者地址,无法用于地址反向查域名场景。
正确实现代码
Web3.js已经封装了现成的反向查询方法getName,直接传入目标地址即可获取绑定的ENS域名:
import Web3 from "web3"; useEffect(() => { const web3 = new Web3(window.ethereum); // 目标查询地址 const targetAddress = "0xc74E8eFaFE54481bD109f97422AeBca607499f57"; web3.eth.ens.getName(targetAddress) .then((result) => { // 对应ENS域名存放在返回结果的name属性中 console.log(result.name); // 输出 ethereum.eth }) .catch((err) => { console.log("该地址未绑定ENS域名", err); }); }, []);
注意事项
- 只有主动设置了反向解析记录的地址才会返回ENS域名,无绑定的场景会抛出异常,建议增加异常捕获逻辑
- 生产环境使用时建议增加二次校验:拿到返回的域名后再正向调用
getAddress查询该域名对应的地址,和原始查询地址做比对,避免用户恶意伪造反向解析记录 - 如果你使用的Web3.js版本低于1.3.0,没有内置
getName方法,可以手动构造反向查询节点实现:const reverseNode = `${targetAddress.slice(2)}.addr.reverse`; web3.eth.ens.getResolver(reverseNode) .then((resolver) => resolver.name()) .then((name) => console.log(name));
内容的提问来源于stack exchange,提问作者soubhagya
相关产品推荐
相关产品推荐

