一、说明
在自动交易系统开发过程中经常需要实时的监控链上新部署的合约,需要实时的查询链上新部署并且添加流动性的合约。针对合约做安全行检测,验证合约的有效持币数量,是否为貔貅合约,貔貅合约创建者,有效流动性体量、合约开源情况、交易手续费、黑白名单、是否可铸造增发等相关指标来衡量代币的优劣,从而自动选择合适的交易策略。
在自动交易系统、链端动作监控系统、oracle预言机、喂价机等系统开发设计过程中都需要实时的去获取链上新部署的合约,识别添加流动性的行为动作。
尤其是在目前针对MEV进行交易攻击行为的夹子软件更需要第一时间捕获链上交易行为,识别新上线的ERC20合约token。
二、通过python程序实时捕获链上新添加流动性的合约,并保存到数据库
通过监控BSC链上factory_contract合约的PairCreated事件捕获相关的流动性对已经资金池中的两种代币合约地址。通过合约地址来筛选流动性对中的代币,进而进行合约安全性验证,从而确定合理的自助交易行为策略。
通常触发PairCreated事件的行为有如下两种:
- ERC20通证合约在部署时即创建了空的流动性对(BNB,USDT,CAKE)等
- 在首次添加流动性时触发PairCreated事件,创建流动性池,开启代币的线上交易
- 在合约部署时直接创建了流动性对,并且同步添加了流动性资金池
根据以上不同情况,采取不同的自动交易最优化策略。
以下为监控PairCreated事件,捕获最新部署并创建流动性对(包含空对)的源代码实现:
# 处理PairCreated事件
def handle_pair_created(event):
token0 = event['args']['token0']
token1 = event['args']['token1']
pairAddress = event['args']['pair']
# 获取事件所在区块的时间戳
block_number = event['blockNumber']
block = web3.eth.get_block(block_number)
timestamp = block['timestamp']
# 日志记录到文件
logging.info(f"New Pair Created - Token0: {token0}, Token1: {token1}, Pair Address: {pairAddress}, Timestamp: {timestamp}")
# 保存token0, token1, pairAddress, timestamp到数据库
save_contract_data_to_db(token0, token1, pairAddress, timestamp)
# 监控PancakeSwap工厂合约的PairCreated事件
def monitor_pancakeswap():
event_filter = factory_contract.events.PairCreated.create_filter(fromBlock='latest')
while True:
for event in event_filter.get_new_entries():
handle_pair_created(event)
# 等待一些时间再轮询
time.sleep(10) # 这里可以根据需要调整延迟时间
将最新部署并添加流动性资金池的合约地址保存到数据库后,可以合约进行安全性验证,根据合约的优劣评级,选择最优化的自动交易抢购套利策略。
三、执行最佳的合约抢购套利策略
通过如下自动抢购交易套利接口来处理实时捕获的最新部署并添加流动性的合约token
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external;
function swapExactTokensForTokensSupportingFeeOnTransferTokens(
uint amountIn,
uint amountOutMin,
address[] calldata path,
address to,
uint deadline
) external virtual override ensure(deadline) {
TransferHelper.safeTransferFrom(
path[0], msg.sender, PancakeLibrary.pairFor(factory, path[0], path[1]), amountIn
);
uint balanceBefore = IERC20(path[path.length - 1]).balanceOf(to);
_swapSupportingFeeOnTransferTokens(path, to);
require(
IERC20(path[path.length - 1]).balanceOf(to).sub(balanceBefore) >= amountOutMin,
'PancakeRouter: INSUFFICIENT_OUTPUT_AMOUNT'
);
}
至此,完成实时捕获BSC链上新发行并添加流动性的代币合约并执行最佳的抢购套利策略所有操作流程。
pdf+视频币安智能链BSC发币教程及多模式组合合约源代码下载:
币安智能链BSC发币(合约部署、开源、锁仓、LP、参数配置、开发、故障处理、工具使用)教程下载:
多模式(燃烧、回流指定营销地址、分红本币及任意币种,邀请推广八代收益,LP加池分红、交易分红、复利分红、NFT分红、自动筑池、动态手续费、定时开盘、回购)组合合约源代码下载:
pdf+视频币安智能链BSC发币教程及多模式组合合约源代码下载地址:
添加VX或者telegram获取全程线上免费指导
评论前必须登录!
注册