![](/img/trans.png)
[英]MetaMask - RPC Error: execution reverted, Simple NFT Miniting Dapp
[英]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.