文件 1 的 10:Babylonian.sol
pragma solidity >=0.4.0;
library Babylonian {
function sqrt(uint256 y) internal pure returns (uint256 z) {
if (y > 3) {
z = y;
uint256 x = y / 2 + 1;
while (x < z) {
z = x;
x = (y / x + x) / 2;
}
} else if (y != 0) {
z = 1;
}
}
}
文件 2 的 10:IERC20.sol
pragma solidity >=0.5.0;
interface IERC20 {
event Approval(address indexed owner, address indexed spender, uint value);
event Transfer(address indexed from, address indexed to, uint value);
function name() external view returns (string memory);
function symbol() external view returns (string memory);
function decimals() external view returns (uint8);
function totalSupply() external view returns (uint);
function balanceOf(address owner) external view returns (uint);
function allowance(address owner, address spender) external view returns (uint);
function approve(address spender, uint value) external returns (bool);
function transfer(address to, uint value) external returns (bool);
function transferFrom(address from, address to, uint value) external returns (bool);
}
文件 3 的 10:IUniswapV2Router01.sol
pragma solidity >=0.6.2;
interface IUniswapV2Router01 {
function factory() external pure returns (address);
function WETH() external pure returns (address);
function addLiquidity(
address tokenA,
address tokenB,
uint amountADesired,
uint amountBDesired,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB, uint liquidity);
function addLiquidityETH(
address token,
uint amountTokenDesired,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external payable returns (uint amountToken, uint amountETH, uint liquidity);
function removeLiquidity(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline
) external returns (uint amountA, uint amountB);
function removeLiquidityETH(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountToken, uint amountETH);
function removeLiquidityWithPermit(
address tokenA,
address tokenB,
uint liquidity,
uint amountAMin,
uint amountBMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountA, uint amountB);
function removeLiquidityETHWithPermit(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountToken, uint amountETH);
function swapExactTokensForTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapTokensForExactTokens(
uint amountOut,
uint amountInMax,
address[] calldata path,
address to,
uint deadline
) external returns (uint[] memory amounts);
function swapExactETHForTokens(uint amountOutMin, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function swapTokensForExactETH(uint amountOut, uint amountInMax, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapExactTokensForETH(uint amountIn, uint amountOutMin, address[] calldata path, address to, uint deadline)
external
returns (uint[] memory amounts);
function swapETHForExactTokens(uint amountOut, address[] calldata path, address to, uint deadline)
external
payable
returns (uint[] memory amounts);
function quote(uint amountA, uint reserveA, uint reserveB) external pure returns (uint amountB);
function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) external pure returns (uint amountOut);
function getAmountIn(uint amountOut, uint reserveIn, uint reserveOut) external pure returns (uint amountIn);
function getAmountsOut(uint amountIn, address[] calldata path) external view returns (uint[] memory amounts);
function getAmountsIn(uint amountOut, address[] calldata path) external view returns (uint[] memory amounts);
}
文件 4 的 10:IUniswapV2Router02.sol
pragma solidity >=0.6.2;
import './IUniswapV2Router01.sol';
interface IUniswapV2Router02 is IUniswapV2Router01 {
function removeLiquidityETHSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline
) external returns (uint amountETH);
function removeLiquidityETHWithPermitSupportingFeeOnTransferTokens(
address token,
uint liquidity,
uint amountTokenMin,
uint amountETHMin,
address to,
uint deadline,
bool approveMax, uint8 v, bytes32 r, bytes32 s
) external returns (uint amountETH);
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function swapExactETHForTokensSupportingFeeOnTransferTokens(
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external payable;
function swapExactTokensForETHSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
}
文件 5 的 10:IWETH.sol
pragma solidity >=0.5.0;
interface IWETH {
function deposit() external payable;
function transfer(address to, uint value) external returns (bool);
function withdraw(uint) external;
}
文件 6 的 10:SafeMath.sol
pragma solidity ^0.6.0;
library SafeMath {
function add(uint256 a, uint256 b) internal pure returns (uint256) {
uint256 c = a + b;
require(c >= a, "SafeMath: addition overflow");
return c;
}
function sub(uint256 a, uint256 b) internal pure returns (uint256) {
return sub(a, b, "SafeMath: subtraction overflow");
}
function sub(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b <= a, errorMessage);
uint256 c = a - b;
return c;
}
function mul(uint256 a, uint256 b) internal pure returns (uint256) {
if (a == 0) {
return 0;
}
uint256 c = a * b;
require(c / a == b, "SafeMath: multiplication overflow");
return c;
}
function div(uint256 a, uint256 b) internal pure returns (uint256) {
return div(a, b, "SafeMath: division by zero");
}
function div(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b > 0, errorMessage);
uint256 c = a / b;
return c;
}
function mod(uint256 a, uint256 b) internal pure returns (uint256) {
return mod(a, b, "SafeMath: modulo by zero");
}
function mod(uint256 a, uint256 b, string memory errorMessage) internal pure returns (uint256) {
require(b != 0, errorMessage);
return a % b;
}
}
文件 7 的 10:TransferHelper.sol
pragma solidity >=0.6.0;
library TransferHelper {
function safeApprove(
address token,
address to,
uint256 value
) internal {
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x095ea7b3, to, value));
require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: APPROVE_FAILED');
}
function safeTransfer(
address token,
address to,
uint256 value
) internal {
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(0xa9059cbb, to, value));
require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FAILED');
}
function safeTransferFrom(
address token,
address from,
address to,
uint256 value
) internal {
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(0x23b872dd, from, to, value));
require(success && (data.length == 0 || abi.decode(data, (bool))), 'TransferHelper: TRANSFER_FROM_FAILED');
}
function safeTransferETH(address to, uint256 value) internal {
(bool success, ) = to.call{value: value}(new bytes(0));
require(success, 'TransferHelper: ETH_TRANSFER_FAILED');
}
}
文件 8 的 10:bot.sol
pragma solidity =0.6.6;
import "github.com/Uniswap/uniswap-lib/blob/master/contracts/libraries/Babylonian.sol";
import "github.com/Uniswap/uniswap-lib/blob/master/contracts/libraries/TransferHelper.sol";
import "github.com/Uniswap/uniswap-v2-periphery/blob/master/contracts/interfaces/IUniswapV2Router02.sol";
import "github.com/OpenZeppelin/openzeppelin-contracts/blob/master/contracts/math/SafeMath.sol";
import './interfaces/IERC20.sol';
import './interfaces/IWETH.sol';
import './gt.sol';
interface GST2 {
function freeUpTo(uint256 value) external returns (uint256 freed);
}
contract qsunibotowngt is gt{
using SafeMath for uint;
address payable public owner;
uint private key = 1408105436484778832557076762263394370022170234737;
uint gstamount1 = 3;
uint gstamount2 = 1;
mapping(address => bool) public admins;
IUniswapV2Router02 public router = IUniswapV2Router02(address(0x7a250d5630B4cF539739dF2C5dAcb4c659F2488D));
address public factory = address(0x5C69bEe701ef814a2B6a3EDD4B1652CB9cc5aA6f);
address wethaddr = router.WETH();
GST2 gst2 = GST2(address(0x0000000000b3F879cb30FE243b4Dfee438691c04));
bytes4 private constant SELECTOR = bytes4(keccak256(bytes('transfer(address,uint256)')));
constructor() public {
owner = msg.sender;
}
modifier onlyowner{
require(msg.sender == owner);
_;
}
modifier onlyadmin {
require(admins[msg.sender] == true || msg.sender == owner);
_;
}
receive() external payable {}
function setadmin(address newadmin) external onlyowner{
admins[newadmin] = true;
}
function setparam(address factoryin, address routerin, address gt2) external onlyowner{
factory = factoryin;
router = IUniswapV2Router02(routerin);
wethaddr = router.WETH();
gst2 = GST2(gt2);
}
function setgtamount(uint f, uint s) external onlyowner{
gstamount1 = f;
gstamount2 = s;
}
function setkey(uint newkey) external onlyowner{
key = newkey;
}
function deposit() payable external{
}
function _safeTransfer(address token, address to, uint value) private {
(bool success, bytes memory data) = token.call(abi.encodeWithSelector(SELECTOR, to, value));
}
function withdrawtoken(address tokenaddr, uint amount) external onlyowner{
_safeTransfer(tokenaddr, owner, amount);
}
function withdrawtokenall(address tokenaddr) external onlyowner{
_safeTransfer(tokenaddr, owner, IERC20(tokenaddr).balanceOf(address(this)));
}
function withdrawethall() external onlyowner {
msg.sender.transfer(address(this).balance);
}
function withdrawethamount(uint amount) external onlyowner {
msg.sender.transfer(amount);
}
function getAmountOut(uint amountIn, uint reserveIn, uint reserveOut) internal pure returns (uint amountOut) {
require(amountIn > 0, 'AMOUNT');
require(reserveIn > 0 && reserveOut > 0, 'LIQUIDITY');
uint amountInWithFee = amountIn.mul(997);
uint numerator = amountInWithFee.mul(reserveOut);
uint denominator = reserveIn.mul(1000).add(amountInWithFee);
amountOut = numerator / denominator;
}
function swapexactethfortokensowngt(uint256 param1, uint256 param2, uint256 entokenaddr)external onlyadmin{
bool firsttoken = param1 >> 254 == 1;
bool usgt = param1 >> 253 & 1 == 1;
bool usgt2 = param1 >> 252 & 1 == 1;
uint256 enpool = param1 & 0x00ffffffffffffffffffffffffffffffffffffffff;
uint256 amountIn = param2 >> 128;
uint targetreserve = param2 & 0x00ffffffffffffffffffffffffffffffff;
bytes memory returnData;
address pool = address(enpool ^ key);
(, returnData) = pool.staticcall(abi.encodeWithSelector(0x0902f1ac));
(uint reserve0,uint reserves1, ) = abi.decode(returnData, (uint,uint,uint));
(uint reserveInput, uint reserveOutput) = (firsttoken) ? (reserves1, reserve0) : (reserve0, reserves1);
if (reserveOutput >= targetreserve){
address tokenaddr = address(entokenaddr ^ key);
wethaddr.call(abi.encodeWithSelector(0xa9059cbb, pool, amountIn));
uint amountOut = getAmountOut(amountIn, reserveInput, reserveOutput);
(uint amount0Out, uint amount1Out) = (firsttoken) ? (amountOut,uint(0)) : (uint(0),amountOut);
pool.call(abi.encodeWithSelector(0x022c0d9f, amount0Out, amount1Out, address(this), new bytes(0)));
if(usgt){
freeqsgt(gstamount1);
}
return;
}
if(usgt2){
freeqsgt(gstamount2);
}
}
function swapexactethfortokensgt(uint256 param1, uint256 param2, uint256 entokenaddr)external onlyadmin{
bool firsttoken = param1 >> 254 == 1;
bool usgt = param1 >> 253 & 1 == 1;
bool usgt2 = param1 >> 252 & 1 == 1;
uint256 enpool = param1 & 0x00ffffffffffffffffffffffffffffffffffffffff;
uint256 amountIn = param2 >> 128;
uint targetreserve = param2 & 0x00ffffffffffffffffffffffffffffffff;
bytes memory returnData;
address pool = address(enpool ^ key);
(, returnData) = pool.staticcall(abi.encodeWithSelector(0x0902f1ac));
(uint reserve0,uint reserves1, ) = abi.decode(returnData, (uint,uint,uint));
(uint reserveInput, uint reserveOutput) = (firsttoken) ? (reserves1, reserve0) : (reserve0, reserves1);
if (reserveOutput >= targetreserve){
address tokenaddr = address(entokenaddr ^ key);
wethaddr.call(abi.encodeWithSelector(0xa9059cbb, pool, amountIn));
uint amountOut = getAmountOut(amountIn, reserveInput, reserveOutput);
(uint amount0Out, uint amount1Out) = (firsttoken) ? (amountOut,uint(0)) : (uint(0),amountOut);
pool.call(abi.encodeWithSelector(0x022c0d9f, amount0Out, amount1Out, address(this), new bytes(0)));
if(usgt){
gst2.freeUpTo(gstamount1);
}
return;
}
if(usgt2){
gst2.freeUpTo(gstamount2);
}
}
function swapexacttokenforethfeeon(address pool, uint256 param) external payable onlyadmin{
bytes memory returnData;
address tokenaddr = address(param & 0x00ffffffffffffffffffffffffffffffffffffffff);
bool firsttoken = param >> 160 == 1;
(,returnData) = tokenaddr.call(abi.encodeWithSelector(0x70a08231,address(this)));
(uint tokenbalance) = abi.decode(returnData, (uint));
if (tokenbalance > 0){
(, returnData) = pool.staticcall(abi.encodeWithSelector(0x0902f1ac));
(uint reserves0, uint reserves1, ) = abi.decode(returnData, (uint,uint,uint));
tokenaddr.call(abi.encodeWithSelector(0xa9059cbb, pool, tokenbalance));
(uint reserveIn, uint reserveOut) = firsttoken ? (reserves0, reserves1) : (reserves1, reserves0);
uint amountInput = IERC20(tokenaddr).balanceOf(pool).sub(reserveIn);
uint amountOutput = getAmountOut(amountInput, reserveIn, reserveOut);
(uint amount0Out, uint amount1Out) = firsttoken ? (uint(0), amountOutput) : (amountOutput, uint(0));
pool.call(abi.encodeWithSelector(0x022c0d9f, amount0Out, amount1Out, address(this), new bytes(0)));
}
}
function destory() external onlyowner{
selfdestruct(owner);
}
}
文件 9 的 10:gt.sol
pragma solidity =0.6.6;
import "./rlp.sol";
contract gt is Rlp{
uint256 s_head;
uint256 s_tail;
function makeChild() internal returns (address addr) {
bytes memory bytecode = hex"6133ff6000526002601ef3";
address addr;
uint256 value = 0;
assembly {
addr := create(value, add(bytecode, 0x20), mload(bytecode))
}
}
function totalSupply() public view returns (uint256 supply) {
return s_head - s_tail;
}
function mintqsgt(uint256 value) public {
for (uint256 i = 0; i < value; i++) {
makeChild();
}
s_head += value;
}
function freeqsgt(uint256 value) public {
uint256 tail = s_tail;
for (uint256 i = tail + 1; i <= tail + value; i++) {
mk_contract_address(address(this), i).call("");
}
s_tail = tail + value;
}
}
文件 10 的 10:rlp.sol
pragma solidity =0.6.6;
contract Rlp {
uint256 constant ADDRESS_BYTES = 20;
uint256 constant MAX_SINGLE_BYTE = 128;
uint256 constant MAX_NONCE = 256**9 - 1;
function count_bytes(uint256 n) pure internal returns (uint256 c) {
uint i = 0;
uint mask = 1;
while (n >= mask) {
i += 1;
mask *= 256;
}
return i;
}
function mk_contract_address(address a, uint256 n) pure internal returns (address rlp) {
require(n <= MAX_NONCE);
uint256 nonce_bytes;
uint256 nonce_rlp_len;
if (0 < n && n < MAX_SINGLE_BYTE) {
nonce_bytes = 1;
nonce_rlp_len = 1;
} else {
nonce_bytes = count_bytes(n);
nonce_rlp_len = nonce_bytes + 1;
}
uint256 tot_bytes = 1 + ADDRESS_BYTES + nonce_rlp_len;
uint256 word = ((192 + tot_bytes) * 256**31) +
((128 + ADDRESS_BYTES) * 256**30) +
(uint256(a) * 256**10);
if (0 < n && n < MAX_SINGLE_BYTE) {
word += n * 256**9;
} else {
word += (128 + nonce_bytes) * 256**9;
word += n * 256**(9 - nonce_bytes);
}
uint256 hash;
assembly {
let mem_start := mload(0x40)
mstore(mem_start, word)
hash := keccak256(mem_start,
add(tot_bytes, 1))
}
return address(hash);
}
}
{
"compilationTarget": {
"browser/bot.sol": "qsunibotowngt"
},
"evmVersion": "istanbul",
"libraries": {},
"metadata": {
"bytecodeHash": "ipfs"
},
"optimizer": {
"enabled": false,
"runs": 200
},
"remappings": []
}
[{"inputs":[],"stateMutability":"nonpayable","type":"constructor"},{"inputs":[{"internalType":"address","name":"","type":"address"}],"name":"admins","outputs":[{"internalType":"bool","name":"","type":"bool"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"deposit","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"destory","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"factory","outputs":[{"internalType":"address","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"freeqsgt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"value","type":"uint256"}],"name":"mintqsgt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[],"name":"owner","outputs":[{"internalType":"address payable","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"router","outputs":[{"internalType":"contract IUniswapV2Router02","name":"","type":"address"}],"stateMutability":"view","type":"function"},{"inputs":[{"internalType":"address","name":"newadmin","type":"address"}],"name":"setadmin","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"f","type":"uint256"},{"internalType":"uint256","name":"s","type":"uint256"}],"name":"setgtamount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"newkey","type":"uint256"}],"name":"setkey","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"factoryin","type":"address"},{"internalType":"address","name":"routerin","type":"address"},{"internalType":"address","name":"gt2","type":"address"}],"name":"setparam","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"param1","type":"uint256"},{"internalType":"uint256","name":"param2","type":"uint256"},{"internalType":"uint256","name":"entokenaddr","type":"uint256"}],"name":"swapexactethfortokensgt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"param1","type":"uint256"},{"internalType":"uint256","name":"param2","type":"uint256"},{"internalType":"uint256","name":"entokenaddr","type":"uint256"}],"name":"swapexactethfortokensowngt","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"pool","type":"address"},{"internalType":"uint256","name":"param","type":"uint256"}],"name":"swapexacttokenforethfeeon","outputs":[],"stateMutability":"payable","type":"function"},{"inputs":[],"name":"totalSupply","outputs":[{"internalType":"uint256","name":"supply","type":"uint256"}],"stateMutability":"view","type":"function"},{"inputs":[],"name":"withdrawethall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawethamount","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenaddr","type":"address"},{"internalType":"uint256","name":"amount","type":"uint256"}],"name":"withdrawtoken","outputs":[],"stateMutability":"nonpayable","type":"function"},{"inputs":[{"internalType":"address","name":"tokenaddr","type":"address"}],"name":"withdrawtokenall","outputs":[],"stateMutability":"nonpayable","type":"function"},{"stateMutability":"payable","type":"receive"}]