无法退出合同

unable to withdraw from the contract

我有一个非常简单的合同,它适用于混音。我可以存款(回退)和取款。 我想在我的 webapp 上用 web3js 库来做。

合约有这些功能

fallback() external payable {}

 modifier onlyOwner(address caller) {
        require(caller == _owner, "You are not the owner of the contract");
        _;
    }

function getContractAmount(address caller) public view onlyOwner(caller) returns (uint256){
    return address(this).balance;
}

function withdraw() external {
  address payable to = payable(msg.sender);
  to.transfer(getContractAmount(to));
}

在我的网络应用程序上,我能够与我的合约的其他功能进行交互,所以我也导入了地址合约和 ABI。

我有这个功能

contract.methods.withdraw().call().then((res) => {
    console.dir(res)
    $('#info').html(res);
  })
    .catch(revertReason => {
      console.log({ revertReason });
      $('#info').text(revertReason);
    }
 )

但我无法检索我的智能合约的金额(是的,智能合约有以太币)

与 console.dir,我得到“u”

call() 方法用于 read-only 个调用。

由于withdraw()函数改变了状态,你需要send()一个事务。

contract.methods.withdraw().send({
    from: senderAddress
})

您的 web3 实例或节点需要知道 senderAddress 的私钥使用 wallet.add() 将私钥添加到 web3 实例。