簡體   English   中英

MetaMask - RPC 錯誤:執行恢復{代碼:-32000,消息:'執行恢復'}

[英]MetaMask - RPC Error: execution reverted {code: -32000, message: 'execution reverted'}

我正在嘗試使用 ERC20 合約使用 React 和 Solidity 開發 DApp,我已經在 Rinkeby 上部署了的智能合約,並且能夠使用name()symbol()與之交互,但是,我無法執行支付功能,例如transfer() ,每次都顯示如下錯誤:

MetaMask - RPC Error: execution reverted {code: -32000, message: 'execution reverted'}

我試過簡單地調用contract.transfer( ... )並在發送的金額周圍加上報價,但都不起作用。


JS:

await contract.transfer.call(account, 50)

溶膠:


interface IERC20 {
    function transfer(address recipient, uint256 amount) external returns (bool);
    // Omitted other functions...

    event Transfer(address indexed from, address indexed to, uint256 value);
    event Approval(address indexed owner, address indexed spender, uint256 value);
}
contract MyCoin is IERC20 {

function transfer(address receiver, uint256 numTokens) public override returns (bool) {
        require(numTokens <= balances[msg.sender]);
        balances[msg.sender] = balances[msg.sender].sub(numTokens);
        balances[receiver] = balances[receiver].add(numTokens);
        emit Transfer(msg.sender, receiver, numTokens);
        return true;
    }

}

首先,您沒有使用“ payable ”修飾符標記 transfer() 方法。 因此,正如您所要求的,您沒有調用任何應付方法。

其次,當您從元掩碼錢包發送任何金額時,合約應該具有這些方法中的任何一種,並符合邏輯,以防您的合約收到任何金額

fallback() external payable;
receive() external payable;

只有這樣,您的合同才知道如何處理收到的金額


與js交互:

此外,要發送任何“金額*”並使用 js 與合同進行交互。您可以使用sendTransaction({})

await contractInstance.sendTransaction({
        from: accountAddress,
        value: web3.utils.toWei("0.001", "ether")
});

不要await contractInstance.receive({})並直接調用 receive() 方法。

您可以查看答案或博客以獲取更多信息。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM