reactjs Solidity智能合约无法返回正确的值

9avjhtql  于 2023-05-06  发布在  React
关注(0)|答案(1)|浏览(250)

我在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,我会得到一个非零值(这是正确的)。是什么导致了这个问题?

wwwo4jvm

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

相关问题