我在 Solidity 中创建了一个与 USDC 交互的智能合约。但是,当我尝试执行事务时,我遇到了 EVM 恢复错误。我希望能得到一些帮助来了解可能导致此问题的原因。
// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0;
interface IERC20 {
function allowance(address owner, address spender) external view returns (uint256);
function approve(address spender, uint256 amount) external returns (bool);
function transfer(address recipient, uint256 amount) external returns (bool);
function transferFrom(address sender, address recipient, uint256 amount) external returns (bool);
}
contract USDCInteraction {
IERC20 public USDC = IERC20(0xD87Ba7A50B2E7E660f678A895E4B72E7CB4CCd9C);
function approveUSDC(address spender, uint256 amount) external returns (bool) {
return USDC.approve(spender, amount);
}
function transferUSDC(address recipient, uint256 amount) external returns (bool) {
return USDC.transfer(recipient, amount);
}
function transferFromUSDC(address sender, address recipient, uint256 amount) external returns (bool) {
return USDC.transferFrom(sender, recipient, amount);
}
function getAllowanceUSDC(address owner, address spender) external view returns (uint256) {
return USDC.allowance(owner, spender);
}
}
这是我看到的错误消息:
Transaction has been reverted by the EVM:
{
"blockHash": "0x3ba70ec628fa9d039f9e72d2afe2eea1f364abda33ce826f0ccaa4ffad8a486d",
...
"status": false,
...
"type": "0x2",
"events": {}
}
问题:
我的合同是否存在任何可能导致此错误的明显问题? 与 USDC 或类似代币交互时,我是否应该注意其他检查或修改? 任何帮助或见解将不胜感激!
"type": "0x2
这表示“创建”交易。部署新合约是一个
CREATE
交易。我认为初始化地址不正确
IERC20 public USDC = IERC20(0xD87Ba7A50B2E7E660f678A895E4B72E7CB4CCd9C);
如果错误与任何函数调用相关,编译器将抛出正确的错误消息,因为
ERC20
合约在每个函数中有太多require
检查。