前言
距离上次测试视频发布已经过去一周时间,在这一周本人对机器人的购买方式进行了升级,使得速度以及稳定性都有了明显提升。
升级技术细节
第一版 直接调用PancakeRouter接口购买
第一代购买方式,监听到加池子后,脚本直接通过web3调用PancakeRouter的购买接口进行购买。但是txpool的上链速度比合约内部交易慢的多,所以需要进行升级。
也就是 薄饼抢购机器人测试视频_中本灯 Satoshi Light的博客-CSDN博客
这篇文章里使用的购买方式。
if token['USECUSTOMBASEPAIR'].lower() == 'true':
transaction = routerContract.functions.swapExactTokensForTokens(
'''
).buildTransaction({
'''
})
else:
transaction = routerContract.functions.swapExactETHForTokens(
'''
).buildTransaction({
'''
})
第二版 初代合约购买版本
监听到加池子后,脚本将用于购买的币种传入合约,由合约调用PancakeRouter购买
因为合约在执行购买操作前需要先调用transferFrom从钱包中提币,再调用approve允许pancake从合约中提币,所以对速度有一定影响,此时优化效果还不是很明显。
合约代码如下:
function swap(address _tokenIn, address _tokenOut, uint256 _amountIn, uint256 _amountOutMin, address _to) external {
IERC20(_tokenIn).transferFrom(msg.sender, address(this), _amountIn);
IERC20(_tokenIn).approve(UNISWAP_V2_ROUTER, _amountIn);
address[] memory path;
if (_tokenIn == WETH || _tokenOut == WETH) {
path = new address[](2);
path[0] = _tokenIn;
path[1] = _tokenOut;
} else {
path = new address[](3);
path[0] = _tokenIn;
path[1] = WETH;
path[2] = _tokenOut;
}
IUniswapV2Router(UNISWAP_V2_ROUTER).swapExactTokensForTokens(_amountIn, _amountOutMin, path, _to, block.timestamp);
}
web3调用代码如下:
transaction = tokenSwapContract.functions.swap(
''')
第三版 合约存币版本
在机器人启动监听之前将购买使用的币存入合约并完成approve操作,这样当脚本调用合约的购买函数时可以立即向PancakeRouter发出购买请求而不需要其他操作。
这一版性能有明显提升,在使用公有节点的情况下,可以在加池子的下一区块成功买入(比如1731551加池子,可以在1731552买入),如果使用私有高速节点可以和加池子在同一个区块,但是这样很容易被kill。
全流程测试视频如下:
智能合约版抢购机器人,支持uniswap/pancake等
题外话:B站上其他的机器人视频我看了很多,没有一个敢放出运行过程和交易tx_hash的,是不是骗子我就不说了。
下一步工作计划
经过调研打算改用第三方的监听pending交易服务
为机器人添加检测貔貅能力
联系方式
vx satoshi_light
tg @zhongbendeng