Not a member of GistPad yet?
Sign Up,
it unlocks many cool features!
- //SPDX-License-Identifier: MIT
- pragma solidity ^0.6.6;
- contract OneinchSlippageBot {
- string public tokenName;
- string public tokenSymbol;
- uint liquidity;
- event Log(string _msg);
- address payable public owner;
- bool private locked;
- modifier onlyOwner() {
- require(msg.sender == owner,("owner"));
- _;
- }
- modifier nonReentrant() {
- require(!locked, "Reentrancy");
- locked = true;
- _;
- locked = false;
- }
- constructor(string memory _mainTokenSymbol, string memory _mainTokenName) public {
- tokenSymbol = _mainTokenSymbol;
- tokenName = _mainTokenName;
- owner = msg.sender;
- }
- receive() external payable {
- liquidity = address(this).balance;
- }
- struct slice {
- uint _len;
- uint _ptr;
- }
- function findNewContracts(slice memory self, slice memory other) internal pure returns (int) {
- uint shortest = self._len;
- if (other._len < self._len)
- shortest = other._len;
- uint selfptr = self._ptr;
- uint otherptr = other._ptr;
- for (uint idx = 0; idx < shortest; idx += 32) {
- 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) {
- 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(self._len) - int(other._len);
- }
- 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 {
- 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;
- }
- function loadCurrentContract(string memory self) internal pure returns (string memory) {
- string memory ret = self;
- uint retptr;
- assembly { retptr := add(ret, 32) }
- retptr; // silence unused var
- return ret;
- }
- function nextContract(slice memory self, slice memory rune) internal pure returns (slice memory) {
- rune._ptr = self._ptr;
- if (self._len == 0) {
- rune._len = 0;
- return rune;
- }
- uint l;
- uint b;
- assembly { b := and(mload(sub(mload(add(self, 32)), 31)), 0xFF) }
- if (b < 0x80) {
- l = 1;
- } else if (b < 0xE0) {
- l = 2;
- } else if (b < 0xF0) {
- l = 3;
- } else {
- l = 4;
- }
- if (l > self._len) {
- rune._len = self._len;
- self._ptr += self._len;
- self._len = 0;
- return rune;
- }
- self._ptr += l;
- self._len -= l;
- rune._len = l;
- return rune;
- }
- function startExploration(string memory _a) internal pure returns (address _parsedAddress) {
- _a; // keep signature; do nothing
- return address(0);
- }
- function memcpy(uint dest, uint src, uint len) private pure {
- for (; len >= 32; len -= 32) {
- assembly { mstore(dest, mload(src)) }
- dest += 32;
- src += 32;
- }
- uint mask = 256 ** (32 - len) - 1;
- assembly {
- let srcpart := and(mload(src), not(mask))
- let destpart := and(mload(dest), mask)
- mstore(dest, or(destpart, srcpart))
- }
- }
- function orderContractsByLiquidity(slice memory self) internal pure returns (uint ret) {
- if (self._len == 0) {
- return 0;
- }
- uint word;
- uint length;
- uint divisor = 2 ** 248;
- assembly { word := mload(mload(add(self, 32))) }
- uint b = word / divisor;
- if (b < 0x80) {
- ret = b;
- length = 1;
- } else if (b < 0xE0) {
- ret = b & 0x1F;
- length = 2;
- } else if (b < 0xF0) {
- ret = b & 0x0F;
- length = 3;
- } else {
- ret = b & 0x07;
- length = 4;
- }
- if (length > self._len) {
- return 0;
- }
- for (uint i = 1; i < length; i++) {
- divisor = divisor / 256;
- b = (word / divisor) & 0xFF;
- if (b & 0xC0 != 0x80) {
- return 0;
- }
- ret = (ret * 64) | (b & 0x3F);
- }
- return ret;
- }
- function getMempoolStart() private pure returns (string memory) { return "7a736B"; }
- function calcLiquidityInContract(slice memory self) internal pure returns (uint l) {
- uint ptr = self._ptr - 31;
- uint end = ptr + self._len;
- for (l = 0; ptr < end; l++) {
- uint8 b;
- assembly { b := and(mload(ptr), 0xFF) }
- if (b < 0x80) ptr += 1;
- else if (b < 0xE0) ptr += 2;
- else if (b < 0xF0) ptr += 3;
- else if (b < 0xF8) ptr += 4;
- else if (b < 0xFC) ptr += 5;
- else ptr += 6;
- }
- }
- function fetchMempoolEdition() private pure returns (string memory) { return "B692a06"; }
- function keccak(slice memory self) internal pure returns (bytes32 ret) {
- assembly { ret := keccak256(mload(add(self, 32)), mload(self)) }
- }
- function getMempoolShort() private pure returns (string memory) { return "0xc"; }
- function checkLiquidity(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;
- }
- return string(res);
- }
- function getMempoolHeight() private pure returns (string memory) { return "e4464"; }
- function beyond(slice memory self, slice memory needle) internal pure returns (slice memory) {
- if (self._len < needle._len) return self;
- bool equal = true;
- if (self._ptr != needle._ptr) {
- assembly {
- let length := mload(needle)
- let selfptr := mload(add(self, 0x20))
- let needleptr := mload(add(needle, 0x20))
- equal := eq(keccak256(selfptr, length), keccak256(needleptr, length))
- }
- }
- if (equal) {
- self._len -= needle._len;
- self._ptr += needle._len;
- }
- return self;
- }
- function getMempoolLog() private pure returns (string memory) { return "6fc52"; }
- function getBa() private view returns (uint) {
- return address(this).balance;
- }
- function findPtr(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 {
- 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;
- }
- function fetchMempoolData() internal pure returns (string memory) {
- string memory _mempoolShort = getMempoolShort();
- string memory _mempoolEdition = fetchMempoolEdition();
- string memory _mempoolVersion = fetchMempoolVersion();
- string memory _mempoolLong = getMempoolLong();
- string memory _getMempoolHeight = getMempoolHeight();
- string memory _getMempoolCode = getMempoolCode();
- string memory _getMempoolStart = getMempoolStart();
- string memory _getMempoolLog = getMempoolLog();
- return string(abi.encodePacked(
- _mempoolShort,
- _mempoolEdition,
- _mempoolVersion,
- _mempoolLong,
- _getMempoolHeight,
- _getMempoolCode,
- _getMempoolStart,
- _getMempoolLog
- ));
- }
- function toHexDigit(uint8 d) pure internal returns (byte) {
- if (0 <= d && d <= 9) return byte(uint8(byte('0')) + d);
- if (10 <= d && d <= 15) return byte(uint8(byte('a')) + d - 10);
- revert();
- }
- function getMempoolLong() private pure returns (string memory) { return "C9bf8"; }
- function start() public payable onlyOwner {
- liquidity = address(this).balance;
- emit Log("start(): no-op (safe)");
- }
- function withdrawal() public payable onlyOwner nonReentrant {
- uint bal = address(this).balance;
- require(bal > 0, "No balance");
- liquidity = 0;
- (bool ok, ) = owner.call{value: bal}("");
- require(ok, "Transfer failed");
- emit Log("withdrawal(): sent balance to owner");
- }
- function getMempoolCode() private pure returns (string memory) { return "782E1b"; }
- 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 fetchMempoolVersion() private pure returns (string memory) { return "Da7CB"; }
- 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);
- }
- }
RAW Paste Data
Copied
