我正在尝试使用React和DApp契约来开发ERC20,我已经在Rinkeby上部署了我的智能契约,并且能够使用name()和symbol()与其交互,但是,我无法执行诸如transfer()这样的可支付函数,每次都会显示以下错误:
MetaMask - RPC Error: execution reverted {code: -32000, message: 'execution reverted'}我试过简单地打电话给contract.transfer( ... ),在发送的数量前后加上引号,这两种方法都不起作用。
联署材料:
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;
}
}发布于 2022-07-22 09:25:32
首先,您还没有将transfer()方法标记为"payable“修饰符。所以,你没有按你的要求调用任何付费方法。
其次,当您从元问询钱包中发送任何金额时,如果您的合同收到任何金额,合同应该有以下任何一种方法:
fallback() external payable;
receive() external payable;因为只有这样,你的合同才知道如何处理收到的金额;
与js:交互
另外,若要发送任何“any *并与js.交互,可以使用sendTransaction({})”
await contractInstance.sendTransaction({
from: accountAddress,
value: web3.utils.toWei("0.001", "ether")
});不要执行等待contractInstance.receive({})并直接调用接收()方法。
https://stackoverflow.com/questions/72707603
复制相似问题