Надежность смарт-контракта не возвращает правильное значение
У меня есть следующая функция в смарт-контракте на твердость 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