# 关于web3py解析ens的实践 **Published by:** [Webber Woo](https://paragraph.com/@webber-woo/) **Published on:** 2023-02-25 **URL:** https://paragraph.com/@webber-woo/web3py-ens ## Content 背景:线下将一批ENS地址需要转换成Address。由于本人是后端出生,本次任务挑选的技术栈是python。本以为10分钟能搞定的事情,花了整整2小时。。。以下是踩坑总结: 第一步:按照Web3.py的文档执行pip install web3 命令,非常顺利。 第二步:根据doc中ens的文档依葫芦画瓢写下以下代码:from web3 import Web3 from ens import ENS # provider = IPCProvider(...) --我改成http的方式接入provider node_url = "我的节点" ns = ENS(Web3.HTTPProvider(node_url)) eth_address = ns.address('jasoncarver.eth') print("【eth_address】: " + eth_address) assert eth_address == '0x5B2063246F2191f18F2675ceDB8b28102e957458' 输出结果与文档一直且符合预期,真tm简单😊:控制台输出: 【eth_address】: 0x5B2063246F2191f18F2675ceDB8b28102e957458 第三步:看看换个输入是否ok呢?换成我自己的ens试试。from web3 import Web3 from ens import ENS # provider = IPCProvider(...) --我改成http的方式接入provider node_url = "我的api url" ns = ENS(Web3.HTTPProvider(node_url)) eth_address = ns.address('webber-woo.eth') print(eth_address) 输出结果None 难道是网络没连接上?重试了N次也是None,None,None……。 物理学以太坊不存在了?!😱😱😱一时间脑瓜子嗡嗡作响。 ============================================================== 喝了杯咖啡,胖揍了我那只乱叫的傻狗后再次坐在电脑前——我试试js的方式吧。 在Alchemy中找到了example,再次以葫芦画瓢并执行我的脚本import { Network, Alchemy } from 'alchemy-sdk'; const settings = { apiKey: "我的api key", network: Network.ETH_MAINNET, }; const alchemy = new Alchemy(settings); const wl = [ "webber-woo.eth", "jasoncarver.eth", "vitalik.eth", ]; for (var i=0; i<wl.length; i++) { var addr = await alchemy.core.resolveName(wl[i]); console.log(wl[i] + ", " + addr); } 输出结果如下:webber-woo.eth, 0x24e76Ed92D5c0B1CACA4fA4A9e0A8FFBC63BB67C jasoncarver.eth, 0x5B2063246F2191f18F2675ceDB8b28102e957458 vitalik.eth, 0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045 世界没有坏!🧐 有人在捣鬼,好奇心驱使我去抓鬼。 ============================================================== 回到ENS(Web3.HTTPProvider(node_url))这行代码。它的构造函数可以传入addressENS构造方法如果未传入address则使用内部写死的‘0x314159265dd8dbb310642f98f50c066173c1259b’ 这个合约地址构造ens合约对象。这个合约是在上古时代创建的。 而ENS官网推荐的地址是:0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e,它是升级后的(找寻到该文档花费时间近2小时)。 将python代码中ENS构造方法添加推荐地址,from web3 import Web3 from ens import ENS # provider = IPCProvider(...) --我改成http的方式接入provider node_url = "我的api url" ns = ENS(Web3.HTTPProvider(alchemy_url), '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e') eth_address = ns.address('webber-woo.eth') print(eth_address) 输出结果符合预期。由此世界太平了。 ## Publication Information - [Webber Woo](https://paragraph.com/@webber-woo/): Publication homepage - [All Posts](https://paragraph.com/@webber-woo/): More posts from this publication - [RSS Feed](https://api.paragraph.com/blogs/rss/@webber-woo): Subscribe to updates