我在ERC20 solidity智能合约中有以下功能:
function getSummary() public view returns (string, string, address, uint, uint){
return(
symbol,
name,
creator,
balances[msg.sender],
_totalSupply
);
}
当我在remix中调用这个函数时,我在metamask中的帐户余额为非零。这个值是正确的。但是当我在react 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条答案
按热度按时间wwwo4jvm1#
将解决方案从注解迁移到答案
试试
let tokenSummary = await tokenContract.methods.getSummary().call({from: account})
msg.sender
是发起交易/呼叫的人的地址。如果没有在transaction对象中指定,web 3 js将使用web3.eth.defaultAccount
中的值,默认情况下未定义。代码的最终结果是msg.sender
的值为0x0
-- Adam Kipnis ;2018年3月9日19:55和2018年3月9日20:43