簡體   English   中英

ETH ENS Web3 - 如何獲得注冊人

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM