以太坊名称服务
原文:https://web3py.readthedocs.io/en/stable/ens_overview.html
以太坊名称服务类似于域名服务。它使用户和开发人员能够使用易于理解的名称来代替容易出错的十六进制地址、内容散列等等。
web3.py 中包含了 ens
模块,它提供了一个从名字中查找地址、设置自己的地址等界面。
设置
用三种方法之一创建一个ENS
对象(下面命名为ns
):
# automatic detection
from ens.auto import ns
# or, with a provider
from web3 import IPCProvider
from ens import ENS
provider = IPCProvider(...)
ns = ENS(provider)
# or, with a w3 instance
# Note: This inherits the w3 middlewares from the w3 instance and adds a stalecheck middleware to the middleware onion
from ens import ENS
w3 = Web3(...)
ns = ENS.fromWeb3(w3)
使用
姓名信息
#### 查找 ENS 名称的地址
from ens.auto import ns
# look up the hex representation of the address for a name
eth_address = ns.address('jasoncarver.eth')
assert eth_address == '0x5B2063246F2191f18F2675ceDB8b28102e957458'
模块不知道你可以使用哪一个 TLD,但是如果没有提供名字,它不会推断出一个 TLD。
从地址获取姓名
domain = ns.name('0x5B2063246F2191f18F2675ceDB8b28102e957458')
# name() also accepts the bytes version of the address
assert ns.name(b'[ c$o!\x91\xf1\x8f&u\xce\xdb\x8b(\x10.\x95tX') == domain
# confirm that the name resolves back to the address that you looked up:
assert ns.address(domain) == '0x5B2063246F2191f18F2675ceDB8b28102e957458'
获取名称的所有者
eth_address = ns.owner('exchange.eth')
设置您的姓名
把你的名字指向你的地址
您想设置您的名字以便address()
显示它指向的地址吗?
ns.setup_address('jasoncarver.eth', '0x5B2063246F2191f18F2675ceDB8b28102e957458')
您必须已经是该域(或其父域)的所有者。
在通常情况下,如果您想将名称指向自己的地址,可以跳过该地址
ns.setup_address('jasoncarver.eth')
你可以宣称任意深度的子域。燃气成本随着子域数量的增加而增加!
ns.setup_address('supreme.executive.power.derives.from.a.mandate.from.the.masses.jasoncarver.eth')
等待事务被挖掘,然后:
assert ns.address('supreme.executive.power.derives.from.a.mandate.from.the.masses.jasoncarver.eth') == \
'0x5B2063246F2191f18F2675ceDB8b28102e957458'
允许人们使用您的地址找到您的姓名
您想设置您的地址以便name()
显示指向它的名称吗?
这就像来电显示。它使您和其他人能够获得一个帐户,并确定哪个名称指向它。有时这被称为“反向”解决方案。
ns.setup_name('jasoncarver.eth', '0x5B2063246F2191f18F2675ceDB8b28102e957458')
注意
不要依赖反向解析来获得安全性。
任何人都可以认领任何“来电显示”。只有向前解决意味着该名称的所有者给他们的批准盖章。
如果您不提供地址,setup_name()
将认为您希望由address()
返回地址。
ns.setup_name('jasoncarver.eth')
如果名称没有指向地址,setup_name()
将为您调用setup_address()
。
等待事务被挖掘,然后:
assert ns.name('0x5B2063246F2191f18F2675ceDB8b28102e957458') == 'jasoncarver.eth'
为 ENS 记录设置文本元数据
作为 ENS 记录的所有者,您可以添加文本元数据。在 ENS 文档中可以找到支持字段的列表。您需要首先设置地址,然后才能设置文本:
ns.setup_address('jasoncarver.eth', 0x5B2063246F2191f18F2675ceDB8b28102e957458)
ns.set_text('jasoncarver.eth', 'url', 'https://example.com')
如果需要,可以将事务字典作为最后一个参数传递:
transaction_dict = {'from': '0x123...'}
ns.set_text('jasoncarver.eth', 'url', 'https://example.com', transaction_dict)
如果事务字典没有通过,将使用合理的缺省值,如果事务字典通过但没有from
值,缺省值将是owner
。
读取 ENS 记录的文本元数据
任何人都可以从 ENS 记录中读取数据:
url = ns.get_text('jasoncarver.eth', 'url')
assert url == 'https://example.com'