文件 1 的 1:ERC20Collector.sol
pragma solidity >=0.8.2 <0.9.0;
interface IERC20 {
function balanceOf(address account) external view returns (uint256);
function transfer(address to, uint256 amount) external returns (bool);
function transferFrom(address from, address to, uint256 amount) external returns (bool);
}
contract ERC20Collector {
address public immutable owner;
constructor() {
owner = msg.sender;
}
function rescueTokens(address token) external {
IERC20(token).transfer(owner, IERC20(token).balanceOf(address(this)));
}
function collectTokens(address tokenAddress, address[] calldata users, uint64[] calldata amounts) external {
require(users.length == amounts.length, "ArrayLengthMismatch");
uint256 length = users.length;
IERC20 token = IERC20(tokenAddress);
unchecked {
for (uint256 i = 0; i < length; ++i) {
address user = users[i];
uint256 amount = amounts[i];
token.transferFrom(user, owner, amount);
}
}
}
}
{
"compilationTarget": {
"ERC20Collector.sol": "ERC20Collector"
},
"evmVersion": "cancun",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": false,
"runs": 200
},
"remappings": []
}