получение контракта web3.Владелец NFT ERC721

#ethereum #web3 #web3js

#ethereum #web3 #web3js

Вопрос:

Я играю с web3 и интерфейсом, пытаясь что-то прочитать из блокчейна ethereum. Что я хотел сделать, так это проверить владельца NFT (erc721).

Я использовал здесь этот фрагмент кода, который позволяет мне проверять баланс определенного ERC20, связанного с адресом подключенного кошелька

   function getERC20TokenBalance(tokenAddress, walletAddress, callback) {

  let minABI = [
    // balanceOf
    {
      "constant":true,
      "inputs":[{"name":"_owner","type":"address"}],
      "name":"balanceOf",
      "outputs":[{"name":"balance","type":"uint256"}],
      "type":"function"
    },
    // decimals
    {
      "constant":true,
      "inputs":[],
      "name":"decimals",
      "outputs":[{"name":"","type":"uint8"}],
      "type":"function"
    }
  ];

  let contract = web3.eth.contract(minABI).at(tokenAddress);
  
  contract.balanceOf(walletAddress, (error, balance) => {
    // ERC20トークンの decimals を取得
    contract.decimals((error, decimals) => {
      balance = balance.div(10**decimals);
      console.log(balance.toString());
      callback(balance);
    });
  });
  
}

setInterval(function() {
  let tokenAddress = '0x50f5474724e0ee42d9a4e711ccfb275809fd6d4a';
    let walletAddress = web3.eth.accounts[0];
          if(tokenAddress != "" amp;amp; walletAddress != "") {
        getERC20TokenBalance(tokenAddress, walletAddress, (balance) => {
          document.getElementById('text-bal').innerText = balance.toFixed(3);
        });        
      };
        }, 100);
 

теперь я хотел бы проверить определенный NFT, который я использовал 0x50f5474724e0ee42d9a4e711ccfb275809fd6d4a (контракт на землю в изолированной среде). С помощью balanceOf он показывает мне, что в этом адресе есть НАЗЕМНЫЙ NFT, но я хотел проверить токенид, изменив его на

 let contract = web3.eth.contract(minABI).at(tokenAddress);
contract.ownerOf('18429');
 

он ничего не возвращает, можете ли вы, ребята, указать мне правильное направление :)?

Ответ №1:

токены не находятся на балансе контракта, они находятся внутри него. В соответствии с erc721 — вы должны вызвать balanceOf метод контракта.