一、说明
在自动抢购套利系统正确捕获到链上新部署发现的代币后,需要衡量代币的安全性避免出现抢购到貔貅币、黑名单代币、高卖出税费代币,跑路币都危险性较高币种的情况。因此需要对最新识别到的代币进行综合性的评估,只有满足安全性要求的代币才能执行抢购套利动作。
ERC20代币合约安全性评估主要从以下几个方面进行分析:
- 是否为只能买入不能卖出的貔貅币
- 是否为可变貔貅币的正常合约,前期正常交易,后期变貔貅币无法卖出
- 代币的持币地址数量,只有足够分散去中心化程度高的代币才是相对安全的。一般的跑路合约,钓鱼合约,貔貅合约都是快进快撤型的,一般不会有相对足够高的去中心化程度
- 代币的部署者是否经常发现貔貅币,或者有危险币种的动作行为
- 合约是否开源。其中开源需要验证是否是合约部署完成正在合约阶段,还是合约以及上线交易并永久性的闭源
- 代币的流动性体量,只有在合理范围内的流动性体量才是正常的合约。流动性体量过小或者过大都不是正常的代币合约
- 代币是否允许线上交易
- 代币合约中是否存在黑白名单,可以限制特定地址的交易行为
- 合约是否为可增发合约,或者隐藏增发功能
- 合约流动性是否锁定以及锁定时间,通过流动性的锁定情况来判断资金池的安全性
- 代币的持币地址前10中持有的代币总量占代币发行总量的百分比来确定代币的去中心化程度
- 代币是否为代理合约,可升级合约,可自毁合约等
- 判断合约的所有权,隐藏权限,二级权限等可以修改合约执行行为的接口
二、以下为合约安全性校验核心代码
- 通过代币的持币地址数量来判断代币的去中心化程度
if FALHTokenData['result']TESTToken.lower()]['holder_count'] is not None:
# holders_len = len(TESTTokenData['result'][TESTToken.lower()]['holders']) holder_count = int(FALHTokenData['result'][FALHToken.lower()]['holder_count'])
if holder_count <= 100:
logging.info(f"Token {TESTToken} holders counts: {holder_count} less than required. Skipping swap.")
continue
else:
logging.info(f"Token {TESTToken} holders counts: {holder_count} meet required.")
2. 初步判断合约是否为貔貅币
if FALHTokenData['result'][TESTToken.lower()]['is_honeypot'] == "1" or speContractDetectLibs.detect_honeypot(TESTToken):
logging.info(f"Token {TESTToken} is identified as a honeypot. Skipping swap.")
updateHoneypotSql = "UPDATE TEST SET honeypot = 1 WHERE id = %s"
cursor.execute(updateHoneypotSql, (id,))
connection.commit()
continue
3. 判断合约的创建者是否经常发行貔貅合约,以及发行过的貔貅合约的数量
if TESTTokenData['result'][TESTToken.lower()]['honeypot_with_same_creator'] is not None:
honeypotCreator = TESTTokenData['result'][TESTToken.lower()]['honeypot_with_same_creator']
if honeypotCreator != "0":
logging.info(f"Token {TESTToken} creator is identified as a honeypot creator. Skipping swap.")
updateHoneypotCreatorSql = "UPDATE test SET honeypotCreator = 1 WHERE id = %s"
cursor.execute(updateHoneypotCreatorSql, (id,))
connection.commit()
continue
后续判断合约安全性指标的验证由于篇幅有限,不再一一赘述。请自行完善其他安全性指标的合约校验。
三、调用链端合约完成自动抢购交易
# 获取私钥和钱包地址
private_key, wallet_address = get_wallet_address_from_private_key()
# 调用智能合约函数并捕获事件数据
success = swap_exact_eth_for_tokens(private_key, TESTToken, pairAddress, id)
if success:
updateTradeStatusSql = "UPDATE TEST set tradeStatus = %s WHERE id = %s"
cursor.execute(updateTradeStatusSql, (1, id))
logging.info(f"TradeStatus update to 1 for id: {id}")
logging.info(f"Successfully called swap function for TESTToken: {TESTToken}, PairAddress: {pairAddress}")
else:
updateTradeStatusSql = "UPDATE TEST set tradeStatus = %s WHERE id = %s"
cursor.execute(updateTradeStatusSql, (2, id))
logging.info(f"TradeStatus update to 2 for id: {id}")
logging.info(f"Failed to call swap function for TESTToken: {TESTToken}, PairAddress: {pairAddress}")
# 提交更新操作,防止重复处理
connection.commit()
# 处理每行交易的冷却时间最小为30秒,保证正确识别到 next nonce 值
time.sleep(30)
完成链端合约的抢购交易后,更新代币记录的状态为“1”即抢购成功。
后续最优化自动卖出策略需要查询所有状态为“1”即买入成功的记录,更加代币的涨跌幅度和当前资金池体量以及dex中合约的安全性等情况执行最佳的卖出策略。
至此,完成BSC链自动抢购套利系统衡量合约代币的安全性的参数指标和参考值范围所有操作流程。
pdf+视频币安智能链BSC发币教程及多模式组合合约源代码下载:
币安智能链BSC发币(合约部署、开源、锁仓、LP、参数配置、开发、故障处理、工具使用)教程下载:
多模式(燃烧、回流指定营销地址、分红本币及任意币种,邀请推广八代收益,LP加池分红、交易分红、复利分红、NFT分红、自动筑池、动态手续费、定时开盘、回购)组合合约源代码下载:
pdf+视频币安智能链BSC发币教程及多模式组合合约源代码下载地址:
添加VX或者telegram获取全程线上免费指导
评论前必须登录!
注册