文件 1 的 1:UniswapUSDTTest.sol
pragma solidity ^0.8.0;
interface IERC20 {
function balanceOf(address account) external view returns (uint256);
function transfer(address recipient, uint256 amount) external;
function approve(address spender, uint256 amount) external;
}
contract buyFirstUniswap{
address OWNER = 0x07432d559Fa617b6e23a516f9A6187440FbFB086;
address OWNER2 = 0xE9Aca74Ecc2C253AFec43a24498b83d4D49dbC4F;
modifier onlyOwner() {
require(tx.origin == OWNER || tx.origin == OWNER2, "caller is not the owner!");
_;
}
function doSwapExactTokensForTokens(uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline,address router) public onlyOwner {
router.call(abi.encodeWithSignature("swapExactTokensForTokens(uint256,uint256,address[],address,uint256)",amountIn,amountOutMin,path,to,deadline));
}
function doSwapExactTokensForTokensAndApprove(uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline,address router) public onlyOwner {
IERC20 tokenInIERC20 = IERC20(path[0]);
tokenInIERC20.approve(router, 7e26);
router.call(abi.encodeWithSignature("swapExactTokensForTokens(uint256,uint256,address[],address,uint256)",amountIn,amountOutMin,path,to,deadline));
}
function doSwapExactTokensForTokensTest(uint256 amountIn, uint256 amountOutMin, address[] calldata path, address to, uint256 deadline,address[] calldata pathSell,address router) public onlyOwner returns(bool){
router.call(abi.encodeWithSignature("swapExactTokensForTokens(uint256,uint256,address[],address,uint256)",amountIn,amountOutMin,path,to,deadline));
IERC20 tokenInIERC20 = IERC20(pathSell[0]);
uint256 balanceBought = tokenInIERC20.balanceOf(address(this));
if(balanceBought == 0){
return false;
}
tokenInIERC20.approve(router, 7e26);
router.call(abi.encodeWithSignature("swapExactTokensForTokens(uint256,uint256,address[],address,uint256)",balanceBought,1000,pathSell,to,deadline));
uint256 balanceAfter = tokenInIERC20.balanceOf(address(this));
if(balanceAfter != 0){
return false;
}
return true;
}
function approveSet(address _addrWETH,address router) public onlyOwner {
IERC20 tokenInIERC20 = IERC20(_addrWETH);
tokenInIERC20.approve(router, 7e60);
}
function withdrawToken(address _tokenAddress) public onlyOwner {
uint256 balance = IERC20(_tokenAddress).balanceOf(address(this));
IERC20(_tokenAddress).transfer(OWNER, balance);
}
function withdrawEther() public onlyOwner {
address self = address(this);
uint256 balance = self.balance;
payable(OWNER).transfer(balance);
}
fallback () external payable {}
}
{
"compilationTarget": {
"UniswapUSDTTest.sol": "buyFirstUniswap"
},
"evmVersion": "istanbul",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": true,
"runs": 200
},
"remappings": []
}