[英]ETH ENS Web3 - How to get Registrant
我已經按照代碼片段獲取“控制器”(域的所有者),但我需要獲取提供的 ENS 名稱的“注冊人”
const Web3 = require("web3")
const web3 = new Web3("https://cloudflare-eth.com");
var ens = web3.eth.ens;
var names = ['jtimberlake.eth', 'usman.eth'];
(async () => {
for (let domainName of names) {
// console.log('checking: ' + domainName);
const addr = await getDomain(domainName);
console.log(addr);
}
})();
async function getDomain(word) {
try {
const addr = await ens.getAddress(`${word}`)
// console.log(addr);
return addr;
} catch (err) {
console.error(err);
return;
}
}
您能否指導我如何獲得提供的 ENS 名稱的“注冊人”,例如 jtimberlake.eth
Web3 是一堆熱氣騰騰的東西。 它沒有用它的方法來做到這一點。 注冊人過去被稱為契約所有者,而控制人則被稱為所有者。 現在它是注冊人和控制人。 這就是為什么方法名稱現在在 Web3.js 中完全沒有意義的原因——它從未更新過,而且一開始就沒有用處。
好消息是有一個簡單的方法。 您可以使用下面的 getRegistrant 函數從其名稱中獲取 ENS 域的令牌 ID。 https://docs.ens.domains/dapp-developer-guide/ens-as-nft
文檔中的 name 變量是多余的,什么都不做。 您將需要實例化 ethersjs (npm install ethers) 以使 ethers 方法工作。 你必須使用這么多的函數,因為 ENS 域/NFT 的令牌 ID 是 uint256。 JavaScript 本身就討厭這些。
如果您需要,查找控制器的 web3 方法也仍然可以正常工作。 我建議把它放在另一個函數中。
const getRegistrant = (domainName) => {
const BigNumber = ethers.BigNumber
const utils = ethers.utils
const labelHash = utils.keccak256(utils.toUtf8Bytes(domainName))
const derivedTokenId = BigNumber.from(labelHash).toString()
//You need to instantiate the ENSRegistrarContract with its ABI and address. e.g. const ENSRegistrarContract = new web3.eth.Contract(ABI, ADDRESS)
ENSRegistrarContract.methods.ownerOf(derivedTokenId).call()
.then(function(registrant) {
console.log(domainName + "is owned by: " + registrant)
return registrant
})
}
const getController = (domainName) => {
//getOwner fetches the controller of a domain confusingly.
web3.eth.ens.getOwner(domainName).then(function(controller) {
console.log(domainName + "is controlled by: " + controller)
return controller
})
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.