Надежность смарт-контракта не возвращает правильное значение

У меня есть следующая функция в смарт-контракте на твердость ERC20:

  function getSummary() public view returns (string, string, address, uint, uint){
    return(
      symbol,
      name,
      creator,
      balances[msg.sender],
      _totalSupply
      );
  }

Когда я вызываю эту функцию в ремиксе, я получаю ненулевой баланс для учетной записи, в которой я нахожусь в метамаске. Это значение является правильным. Но когда я вызываю эту функцию в приложении реагировать на next.js, баланс возвращает ноль. Вот этот код:

const accounts = await web3.eth.getAccounts();
const account = accounts[0];
let tokenContract = new web3.eth.Contract(abi, props.query.address);
let tokenSummary = await tokenContract.methods.getSummary().call();
let balance = await tokenContract.methods.balanceOf(account).call();
console.log(tokenSummary);

Когда я console.log tokenSummary, баланс равен 0. Но тогда, если я вызываю balanceOf, я получаю ненулевое значение (что является правильным). Что может быть причиной этой проблемы?

1 ответ

Перенос решения из комментариев в ответ

Пытатьсяlet tokenSummary = await tokenContract.methods.getSummary().call({from: account}).

— это адрес того, кто инициировал транзакцию/вызов. Если не указано в объекте транзакции, web3js будет использовать значение вweb3.eth.defaultAccountкоторый по умолчанию не определен. Конечным результатом вашего кода было то, что значениеmsg.senderбыл0x0

-- user8474917 ; 9 мар 2018 в 19:55 и 9 мар 2018 в 20:43

Другие вопросы по тегам