首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MetaMask - RPC错误:执行恢复{代码:-32000,消息:‘执行恢复’}

问MetaMask - RPC错误:执行恢复{代码:-32000,消息:‘执行恢复’}
EN

Stack Overflow用户
提问于 2022-06-21 22:06:28
回答 1查看 1.7K关注 0票数 0

我正在尝试使用React和DApp契约来开发ERC20,我已经在Rinkeby上部署了我的智能契约,并且能够使用name()和symbol()与其交互,但是,我无法执行诸如transfer()这样的可支付函数,每次都会显示以下错误:

代码语言:javascript
复制
MetaMask - RPC Error: execution reverted {code: -32000, message: 'execution reverted'}

我试过简单地打电话给contract.transfer( ... ),在发送的数量前后加上引号,这两种方法都不起作用。

联署材料:

代码语言:javascript
复制
await contract.transfer.call(account, 50)

索尔:

代码语言:javascript
复制
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);
}
代码语言:javascript
复制
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;
    }

}
EN

回答 1

Stack Overflow用户

发布于 2022-07-22 09:25:32

首先,您还没有将transfer()方法标记为"payable“修饰符。所以,你没有按你的要求调用任何付费方法。

其次,当您从元问询钱包中发送任何金额时,如果您的合同收到任何金额,合同应该有以下任何一种方法:

代码语言:javascript
复制
fallback() external payable;
receive() external payable;

因为只有这样,你的合同才知道如何处理收到的金额;

与js:交互

另外,若要发送任何“any *并与js.交互,可以使用sendTransaction({})”

代码语言:javascript
复制
await contractInstance.sendTransaction({
        from: accountAddress,
        value: web3.utils.toWei("0.001", "ether")
});

不要执行等待contractInstance.receive({})并直接调用接收()方法。

有关这方面的更多信息,您可以看到这答案或这博客。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72707603

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档