如何打造你的 Solana 狙击机器人 (5)💰🚀

2025-06-07

如何打造你的 Solana 狙击机器人 (5)💰🚀

Solana交易机器人平台

集成 Solana 交易机器人平台


你好👋,

感谢您来到这里!🎉

在之前的文章中,我们介绍了构建 Solana 狙击机器人、SPL 代币、Solana DEX 平台、Telegram Bot 等的基本知识。在此过程中,我们构建了四个核心脚本:

  • SOL在钱包 A 和钱包 B 之间转移
  • 相同钱包之间的SPL 代币转移
  • 代币 A ↔ 代币 B 的交换(买入/卖出)脚本
  • 具有狙击功能的Telegram Bot 脚本

现在是时候探索开发 Solana Sniper 机器人的最重要部分了。

正如我之前提到的,Solana 上的狙击机器人是自动化程序,旨在在最合适的时机执行代币购买,通常是在代币发行或市场波动事件发生后的几毫秒内。为了最大化利润并最小化风险,我们需要了解最佳时机、策略、工具和相关风险。

在本期中,我将详细介绍狙击机器人何时应该在 Solana 上购买代币。我还将演示一个脚本,用于监听 pump.fun 迁移到 Raydium,以提供实际的编码示例。

另外,在本期的最后一部分,我将介绍我们团队开发的集成 Solana Trading Bot 平台。

1.购买狙击机器人的最佳时机

1.1 代币发行期间(流动性狙击)

狙击机器人活动最有利可图且战略意义最关键的窗口期恰恰发生在新代币发行并将初始流动性注入市场之时。这一阶段是机器人在价格大幅上涨之前以绝对最低价格锁定仓位的黄金机会。下文将详尽探讨这一过程,涵盖决定流动性狙击成败的每一个细微之处。

1.1.1 检测新的流动性池

狙击机器人如何识别发射令牌

狙击机器人采用复杂的监控系统,持续扫描所有主要的 Solana 去中心化交易所(DEX),包括:

  • Raydium(新 Solana 代币的主要启动平台),是新 Solana 代币发布的主要启动平台和最关键的交易场所,大约 78% 的新 SPL 代币首先通过其自动做市商 (AMM) 基础设施获得流动性,并且最有利可图的早期机会通常在交易开始后的 30 秒内出现。

  • Orca(具有新池创建的重要的二级市场),作为一个重要的二级市场,每天都会看到大量新的池创建,特别是对于在首次发布后存活下来的中期项目,其集中的流动性特征通常通过其独特的漩涡动态和交易量指标揭示有关新兴代币可行性的重要模式。

  • Jupiter(经常首先披露新代币的聚合器),领先的聚合器,经常通过其路由优化算法首先披露新代币,然后它们才会出现在各个 DEX 界面上,由于它全面扫描整个 Solana 生态系统中所有可能的流动性来源,包括规模较小、监控较少的交易场所,因此可以充当狙击机器人的预警系统。

  • Metis(新兴的、处于早期阶段的 DEX)是一个新兴但日益重要的 DEX,由于其较低的费用和不太拥挤的交易环境而因早期推出而引人注目,新的代币有时会在进入较大的交易所之前出现几个区块,为装备精良的机器人提供独特的套利机会。

这些机器人实施实时区块链解析来检测:

  • 新的代币铸造交易(识别新创建的 SPL 代币),其中机器人分析 Solana 程序库 (SPL) 代币创建事件直至单个指令级别,通过签名分析、创建者钱包分析和铸造权限模式的组合来识别新创建的代币,帮助区分合法启动与测试部署或诈骗企图。

  • 初始流动性对创建(SOL/代币或 USDC/代币池),系统监控所有主要 AMM 协议中涉及 SOL/代币或 USDC/代币池形成的特定交易模式,不仅跟踪流动性数量,还分析流动性提供者的钱包历史记录,以评估启动合法性和价格操纵的可能性。

  • 首次掉期交易(表示活跃交易开始),作为活跃交易开始的明确信号,机器人使用机器学习模型来解释这些初始市场动向 - 区分有机交易、机器人活动和潜在的虚假交易模式 - 所有这些都在代币交易存在的最初几个区块内进行,以做出毫秒级的进入决策。

泳池检测的关键监控工具

专业狙击手设置同时利用多个数据源:

  • 主要检测工具

    • DexScreener(最可靠的实时新配对警报,具有可自定义的过滤器)
    • Birdeye(非常适合追踪新市场的交易量突然飙升)
    • DexLab(专门识别预发布代币部署)
    • Solscan Token Explorer(用于尽早检测的原始区块链数据)
  • 观察者、搜索量或交易量的突然激增意味着代币即将移动。

  • 示例:如果某个代币在 5 分钟内获得1,000 多名新的 DexScreener 观察者,则机器人会在人群之前购买。

  • 二次确认系统

    • Telegram 机器人警报(自定义配置以在新的 Raydium 池上 ping)
    • RPC 节点 webhook(直接监控区块链事件,实现即时触发)
    • 社交聆听机器人(交叉引用 Discord/Twitter 以获取发布确认)
  • 许多泵组和影响者协调购买。

  • 机器人从 Telegram 频道中抓取诸如“加载”、“入口”或“宝石”之类的关键词。

  • 第三种方式——OnChain 鲸鱼追踪

    • 如果已知的鲸鱼钱包(例如,顶级交易员)购买了代币,机器人就会跟进。
    • SonarWatch、Step Finance 或 Bubblemaps等工具可以追踪聪明钱。

重要的毫秒:执行时间

  • 巨额利润和彻底失败之间的区别在于这些时间表:

    • 流动性增加后0-500 毫秒:理想的机器人执行窗口
    • 1-3秒:仍然盈利但面临竞争
    • 5秒以上:通常为时已晚,因为价格已经变动
  • 高级机器人实现:

    • 预先签署的交易(在流动性出现之前准备好)
    • Gas 费用优化(动态优先级费用调整)
    • 多 RPC 路由(同时连接以避免延迟)

1.1.2 抢先的社交炒作——在暴涨发生之前进行预测

社交媒体催化剂效应

统计分析显示,87% 的成功 meme 币在社交媒体推广后的15-45 分钟内,价格首次出现大幅波动。狙击机器人会利用这一点,具体做法如下:

  • Twitter (X) 监控策略

    • 实时追踪300 多位顶级加密货币影响者
    • 分析帖子参与速度(每分钟的点赞/重拍次数)
    • 检测协调的标签活动(#100x、#SolanaSeason)
    • 监控已删除的推文(通常表明存在诈骗)
  • Telegram 和 Discord 情报

    • 通过机器人账户加入500 多个优质加密货币群组
    • 评分消息情绪分析(正面与诈骗可能性)
    • 跟踪管理员钱包活动(他们持有代币吗?)
    • 衡量项目渠道的会员增长率

历史案例研究

  • $BONK:在Twitter 大规模攻击开始前 12 分钟就检测到机器人
  • $WIF:早期购买价格为0.01 美元
  • $MYRO:零售进入之前,87% 的初始购买都是机器人进行的

高级预测模型

尖端狙击系统现已包括:

  • 自然语言处理(NLP)评估炒作潜力

  • 钱包聚类算法用于检测影响力的积累

  • 通过图像识别分析流行的 meme 格式

1.2 低网络拥堵(最佳执行速度)

Solana 的网络性能变化无常,交易处理速度会根据全局使用模式、验证器节点性能和整体网络需求而大幅波动。当区块链拥堵时(在交易活跃或 NFT 铸造热潮期间经常发生),交易可能会完全失败,或出现 30 秒或更长时间的危险延迟,从而彻底摧毁时间敏感的狙击机器人操作的盈利潜力。了解这些拥堵模式并根据网络状况进行优化对于成功狙击至关重要。

1.2.1 快速执行的最佳时间框架——战略时机分析

最佳低流量窗口

  • 最可靠的平稳、低竞争执行时间始终发生在UTC 凌晨时段(凌晨 12 点至凌晨 4 点),此时:

    • 北美交易员正在沉睡(EST/PST 时区)
    • 欧洲市场尚未开始日间交易
    • 亚洲市场正在结束其活动
    • 与高峰时段相比,整体网络活动下降了 40-60%
  • 对 Solana 历史拥堵模式的统计分析显示,以下时间段内会出现以下情况:

    • 交易失败率降低 78%
    • 平均区块确认时间加快 55%
    • 优先费用竞价战减少92%

应避免的高风险拥堵时段

  • 狙击行动最危险的时期与美国市场高峰时段(UTC 时间下午 2 点至晚上 8 点)一致,此时:

    • 华尔街交易与加密货币市场活动重叠
    • 主要的 NFT 投放和代币发行已安排
    • 零售交易员参与度大幅飙升
  • 在这些窗口期间,网络会定期经历:

    • 交易失败率超过35%
    • 优先费用飙升至正常水平的 50 倍
    • 15+个区块的确认延迟
    • RPC 节点响应时间缩短 400-800 毫秒

先进的网络监控技术

专业狙击手实施多层监控:

  • 通过 Solana Beach/Explorer 进行实时 TPS 跟踪(低于 2,000 TPS = 安全)

  • 通过内存池深度分析预测即将到来的拥堵

  • 验证器健康指标用于识别网络压力点

  • 重复拥堵事件的历史模式识别

1.2.2 优先费用和基础设施优化

动态费用调整策略

  • 复杂的机器人实施人工智能驱动的费用算法:

    • 持续分析最近50个区块的费用市场
    • 预测未来 2-3 个区块的最佳费用水平
    • 在费用高峰期间自动调整出价
    • 当费用超过盈利阈值时实施后备策略
  • 费用调整考虑因素包括:

    • 基本费用与优先费用明细
    • 每个区块费用竞争分析
    • 机会成本计算
    • 交易成本预测失败

企业级基础设施设置

为了应对延迟,专业运营部署了:

  • 私有 RPC 节点(Helius/QuickNode/Triton/Shyft)

    • 地理分布的端点
    • 负载平衡配置
    • 专用验证器连接
  • 事务处理集群

    • 预签名交易池
    • 并行提交系统
    • 故障转移机制
  • 网络级优化

    • 内核级 TCP 调优
    • 低于 1ms 延迟的光纤路由
    • 共置服务器部署

毫秒之战——执行优化

  • 成功与失败的区别往往在于:

    • 首字节延迟:将 RPC 响应缩短至 5 毫秒以下
    • TX 传播路径:优化验证器节点选择
    • 区块时间:根据领导者的时间表调整提交
    • 捆绑构造:高效的交易分组
  • 性能最佳的系统可实现:

    • 轻度拥堵时成功率超过 98%
    • 端到端执行时间为 500-800 毫秒
    • 交易过期率<0.1%
    • 极端拥塞期间的自适应回退协议

索拉纳的黑暗森林
了解机器人层次结构

  • 第一层狙击手(0-100ms执行)

  • 第二波套利者(100-500毫秒)

  • 零售领先者(延迟 1-3 秒)

  • 手动交易员(10秒以上 - 已经太晚了)

1.3 风险及缓解方法

在深入研究 Solana Sniper Bot 的参数之前,务必认识到任何配置都无法完全消除风险。无论是通过“拉屎”、漏洞利用还是其他恶意手段,您始终都会身处险境。以下是主要威胁的细分,以及如何缓解这些威胁。

1.3.1 地毯拉扯和蜜罐

当流动性池启动时,没有销毁流动性代币,创建者可以随时提取资金,就会出现“地毯式拉动”现象。即使你使用过滤器来检查已销毁的流动性,仍然容易受到攻击。

更复杂的版本——蜜罐——发生在创建者启动矿池时,无需撤销冻结权限(Raydium V3 中可以实现)。他们可以在矿池启动后立即冻结代币,从而阻止狙击机器人的购买,使其无法出售。

减轻

  • 流动性销毁验证

    • 使用区块链浏览器(Solscan、DexScreener)手动确认 LP 代币已被烧毁。
    • Burn脚本自动检查: LP 创建交易中缺少指令是一个危险信号。
    • 与Raydium 和 Orca池数据进行交叉核对——一些假池伪造流动性但无法交易。
  • 冻结权限检查

    • 在狙击之前,请验证令牌的冻结权限是否已被撤销(在蜜罐中很常见)。
    • Solana Token Sniffer或自定义脚本等工具可以检测创建者是否保留冻结权。
  • 多钱包测试销售

    • 不要只测试销售一次——使用2-3 个不同的钱包来确认代币不会有选择地阻止销售。
    • 一些蜜罐允许小额出售(例如 1 美元),但阻止大额退出——因此要用不同的金额进行测试。
  • 创建者钱包监控

    • 跟踪部署者的钱包过去的 rug pulls(例如,rugcheck.xyzDexLabs)。
    • 如果创作者有放弃项目的历史,则完全避免推出他们的新项目
  • 定时锁地毯拉

    • 有些地毯不会立即出现——它们会等到达到一定的市场上限。
    • 设置自动销售触发器(例如,以 2 倍的价格出售 50%,以 5 倍的价格出售 30%)以确保在延迟出售之前获得利润。

1.3.2 通过 Bundle Sniping 进行攻击

一些创建者会使用捆绑狙击策略,在同一笔交易中增加流动性并买入,以确保自己是第一名。即使流动性代币被销毁,他们也能控制最初的价格走势——这意味着快速抛售就像地毯拉动一样。

减轻

  • 识别捆绑狙击手

    • 交易历史分析

      • 在购买之前,请检查流动性增加+首次购买是否发生在一次交易中。
      • BirdeyeSolanaFM等工具可以显示捆绑操作——避免这些池。
    • 流动性来源检查

      • 如果初始流动性来自新钱包(而不是部署者),那么它通常是一个假的“有机”泵。
      • 真正的项目通常从已知的开发/营销钱包中提供流动性资金。
    • 价格影响模拟

      • 使用Jupiter 的价格影响 API或自定义脚本来估计您的买入/卖出将对价格产生多大的影响。
      • 如果 5% 的抛售导致价格下跌 30% 以上,那么该资金池很可能会被利用。
  • 防御性交易策略

    • 部分狙击策略

      • 不要完全狙击,而是将您的购买分成2-3 个较小的交易,以避免抢先交易。
      • 例如:在启动时买入 30%,30 秒后买入 30%(如果没有抛售),然后如果趋势保持不变,买入 40%。
    • 狙击延迟调整

      • 大多数机器人都会在前1-2 个区块内争相购买——这是捆绑狙击手占据主导地位的地方。
      • 1-3 秒的延迟可以帮助避开初始陷阱,同时仍然可以捕捉早期的泵。
    • 防抢先滑点

      • 设置动态滑点:从低(5%)开始,如果交易失败则增加(最大 15-20%)。
      • 滑点过高(例如 50%)会使您容易受到夹心攻击。
    • 狙击后监视

      • 购买后,监控部署者的钱包是否有突然提款的情况。
      • 如果他们撤出 LP 或大量抛售,立即退出——不要等待“复苏”。

1.3.3 机器人竞赛(Gas Wars)

当过多的机器人竞争同一笔交易时,Solana 网络可能会变得拥堵,导致交易失败、优先交易费飙升,甚至被更激进的机器人抢先交易。由于狙击依赖于速度和精准度,激烈的竞争会大幅降低你的成功率,甚至由于 Gas 成本过高而导致狙击完全无利可图。

减轻

  • 使用私有 RPC:公共 RPC 端点通常会受到延迟和速率限制的影响,因此私有 RPC 对于减少延迟至关重要。

  • 动态 Gas 调整:不使用固定优先费用,而是实施一种根据实时网络拥塞和竞争机器人活动调整 gas 的算法。

  • 交易模拟:在发送完整的狙击之前,模拟交易以估计成功概率和最佳 gas 设置。

  • 避开高峰时段:监控历史 Solana 拥塞模式,避免在高流量时段(例如,主要代币发布)进行狙击。

1.3.4 Solana 网络故障

Solana 的网络以偶尔出现拥堵、中断或性能下降而闻名,尤其是在高需求时段。如果网络速度变慢或停止,你的狙击机器人可能无法执行交易、错失良机,甚至会因为交易待处理而陷入困境。

减轻

  • 后备 RPC 端点:维护多个 RPC 提供程序(例如私有、高级和备份公共 RPC),以便在其中一个发生故障时自动切换。

  • 实时网络监控:使用 Solana Beach、Solscan 或自定义脚本等工具来检测网络速度变慢并在必要时暂停操作。

  • 事务重试逻辑:通过指数退避实现智能重试,以处理临时故障,而不会向网络发送垃圾邮件。

  • 本地验证器节点(高级):为了实现最大的可靠性,运行您自己的 Solana 验证器节点可确保最小的延迟并且不依赖第三方 RPC。

1.3.5 代币黑名单和反机器人措施

许多代币创建者会主动将已知的机器人钱包列入黑名单,或实施机制来阻止自动狙击手。一些项目甚至会在代币上线后冻结设置转账限制,让机器人购买的代币无法出售。

减轻

  • 每次狙击时使用新钱包:避免重复使用钱包;为每笔交易生成新地址以逃避检测。

  • 去中心化身份(DID)欺骗:一些高级机器人会轮换 IP 并修改交易指纹以显示为不同的用户。

  • Snipe 前代币分析:在执行 snipe 之前,检查代币合约是否具有:

    • 撤销冻结权限(防止蜜罐)。
    • 没有黑名单功能(确保您可以销售)。
    • 没有隐藏的所有者特权(降低地毯拉动风险)。
  • 小额测试交易:在全面狙击之前,买卖少量代币以确认代币未被锁定。

即使采取上述缓解策略,风险仍然无法避免。最优秀的狙击手会将自动检查人工审核相结合——切勿完全信任机器人。始终假设每个新代币都可能是骗局,并且切勿投资超过您承受能力的损失



2.聆听 pump.fun 迁移到 Raydium

了解 pump.fun 代币迁移

pump.fun 上的代币最初交易时遵循联合曲线——一种基于供求关系确定代币价格的数学公式。然而,一旦满足某些条件,代币就会“毕业”,并将其流动性迁移到 Raydium DEX。

  • 当出现以下情况时,代币将迁移至 Raydium:

    • 联合曲线达到完成状态(由complete曲线状态中的标志跟踪)
    • 代币已积累足够的流动性和交易量
    • 迁移交易由协议执行
  • 迁移后,交易将从联合曲线机制转移到

    • Raydium 的传统 AMM(自动做市商)模式。这一转变意义重大,因为:
    • 交易机制从联合曲线转变为 AMM 流动性变得更加灵活,用户可以添加/删除
    • 该代币可供更广泛的 Raydium 生态系统使用

长话短说

  • pump.fun 代币从联合曲线开始,然后迁移到 Raydium 进行传统的 AMM 交易。

  • 使用check_boding_curve_status.py脚本查看令牌的曲线是否仍然有效或已完成。

  • 使用listen_to_raydium_migration.py脚本通过解码相关的链上交易来跟踪实时迁移事件。

  • 当代币从 pump.fun 的结合曲线转移到 Raydium 流动性池时,这些工具可以帮助您调整交易策略。

步骤1:设置环境

  • 让我们使用 VS Code 开发自己的代码。假设您已经安装了PythonVS Code(3.8 或更高版本)。
  • 克隆pump-fun-bot GitHub 存储库
  • 使用此命令安装库:
pip install -r requirements.txt
Enter fullscreen mode Exit fullscreen mode
  • 提供节点 HTTP 和 WebSocket 端点config.py

步骤2:主要代码

有 2 个主要文件用于监听 pump.fun 迁移到 Raydium。

-check_boding_curve_status.py文件

import argparse
import asyncio
import os
import struct
import sys
from typing import Final

from construct import Flag, Int64ul, Struct
from solana.rpc.async_api import AsyncClient
from solders.pubkey import Pubkey

sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))

from core.pubkeys import PumpAddresses

# Constants
EXPECTED_DISCRIMINATOR: Final[bytes] = struct.pack("<Q", 6966180631402821399)

RPC_ENDPOINT = os.environ.get("SOLANA_NODE_RPC_ENDPOINT")


class BondingCurveState:
    _STRUCT = Struct(
        "virtual_token_reserves" / Int64ul,
        "virtual_sol_reserves" / Int64ul,
        "real_token_reserves" / Int64ul,
        "real_sol_reserves" / Int64ul,
        "token_total_supply" / Int64ul,
        "complete" / Flag,
    )

    def __init__(self, data: bytes) -> None:
        parsed = self._STRUCT.parse(data[8:])
        self.__dict__.update(parsed)


def get_associated_bonding_curve_address(
    mint: Pubkey, program_id: Pubkey
) -> tuple[Pubkey, int]:
    """
    Derives the associated bonding curve address for a given mint
    """
    return Pubkey.find_program_address([b"bonding-curve", bytes(mint)], program_id)


async def get_bonding_curve_state(
    conn: AsyncClient, curve_address: Pubkey
) -> BondingCurveState:
    response = await conn.get_account_info(curve_address, encoding="base64")
    if not response.value or not response.value.data:
        raise ValueError("Invalid curve state: No data")

    data = response.value.data
    if data[:8] != EXPECTED_DISCRIMINATOR:
        raise ValueError("Invalid curve state discriminator")

    return BondingCurveState(data)


async def check_token_status(mint_address: str) -> None:
    try:
        mint = Pubkey.from_string(mint_address)

        # Get the associated bonding curve address
        bonding_curve_address, bump = get_associated_bonding_curve_address(
            mint, PumpAddresses.PROGRAM
        )

        print("\nToken Status:")
        print("-" * 50)
        print(f"Token Mint:              {mint}")
        print(f"Associated Bonding Curve: {bonding_curve_address}")
        print(f"Bump Seed:               {bump}")
        print("-" * 50)

        # Check completion status
        async with AsyncClient(RPC_ENDPOINT) as client:
            try:
                curve_state = await get_bonding_curve_state(
                    client, bonding_curve_address
                )

                print("\nBonding Curve Status:")
                print("-" * 50)
                print(
                    f"Completion Status: {'Completed' if curve_state.complete else 'Not Completed'}"
                )
                if curve_state.complete:
                    print(
                        "\nNote: This bonding curve has completed and liquidity has been migrated to Raydium."
                    )
                print("-" * 50)

            except ValueError as e:
                print(f"\nError accessing bonding curve: {e}")

    except ValueError as e:
        print(f"\nError: Invalid address format - {e}")
    except Exception as e:
        print(f"\nUnexpected error: {e}")


def main():
    parser = argparse.ArgumentParser(description="Check token bonding curve status")
    parser.add_argument("mint_address", help="The token mint address")

    args = parser.parse_args()
    asyncio.run(check_token_status(args.mint_address))


if __name__ == "__main__":
    main()

Enter fullscreen mode Exit fullscreen mode
  • 在终端中运行以下命令
python check_boding_curve_status.py TOKEN_ADDRESS
Enter fullscreen mode Exit fullscreen mode

将其替换TOKEN_ADDRESS为您想要检查的代币的 Solana 地址。该脚本会根据您提供的代币地址导出相关的联合曲线地址,然后调用getAccountInfo联合曲线。

-listen_to_raydium_migration.py文件

import asyncio
import json
import os
import sys

import websockets

sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))

from core.pubkeys import PumpAddresses

WSS_ENDPOINT = os.environ.get("SOLANA_NODE_WSS_ENDPOINT")


def process_initialize2_transaction(data):
    """Process and decode an initialize2 transaction"""
    try:
        signature = data["transaction"]["signatures"][0]
        account_keys = data["transaction"]["message"]["accountKeys"]

        # Check raydium_amm_idl.json for the account keys
        # The token address is typically the 19th account (index 18)
        # The liquidity pool address is typically the 3rd account (index 2)
        if len(account_keys) > 18:
            token_address = account_keys[18]
            liquidity_address = account_keys[2]

            print(f"\nSignature: {signature}")
            print(f"Token Address: {token_address}")
            print(f"Liquidity Address: {liquidity_address}")
            print("=" * 50)
        else:
            print(f"\nError: Not enough account keys (found {len(account_keys)})")

    except Exception as e:
        print(f"\nError: {e!s}")


async def listen_for_events():
    while True:
        try:
            async with websockets.connect(WSS_ENDPOINT) as websocket:
                subscription_message = json.dumps(
                    {
                        "jsonrpc": "2.0",
                        "id": 1,
                        "method": "blockSubscribe",
                        "params": [
                            {
                                "mentionsAccountOrProgram": str(
                                    PumpAddresses.LIQUIDITY_MIGRATOR
                                )
                            },
                            {
                                "commitment": "confirmed",
                                "encoding": "json",
                                "showRewards": False,
                                "transactionDetails": "full",
                                "maxSupportedTransactionVersion": 0,
                            },
                        ],
                    }
                )

                await websocket.send(subscription_message)
                response = await websocket.recv()
                print(f"Subscription response: {response}")
                print("\nListening for Raydium pool initialization events...")

                while True:
                    try:
                        response = await asyncio.wait_for(websocket.recv(), timeout=30)
                        data = json.loads(response)

                        if "method" in data and data["method"] == "blockNotification":
                            if "params" in data and "result" in data["params"]:
                                block_data = data["params"]["result"]
                                if (
                                    "value" in block_data
                                    and "block" in block_data["value"]
                                ):
                                    block = block_data["value"]["block"]
                                    if "transactions" in block:
                                        for tx in block["transactions"]:
                                            logs = tx.get("meta", {}).get(
                                                "logMessages", []
                                            )

                                            # Check for initialize2 instruction
                                            for log in logs:
                                                if (
                                                    "Program log: initialize2: InitializeInstruction2"
                                                    in log
                                                ):
                                                    print(
                                                        "Found initialize2 instruction!"
                                                    )
                                                    process_initialize2_transaction(tx)
                                                    break

                    except TimeoutError:
                        print("\nChecking connection...")
                        print("Connection alive")
                        continue

        except Exception as e:
            print(f"\nConnection error: {e!s}")
            print("Retrying in 5 seconds...")
            await asyncio.sleep(5)


if __name__ == "__main__":
    asyncio.run(listen_for_events())

Enter fullscreen mode Exit fullscreen mode

listen_to_raydium_migration.py脚本使用 WebSocket 订阅来监控从 pump.fun 到 Raydium DEX 的代币实时迁移。

pump.fun 迁移账户是39azUYFWPz3VHgKCf3VChUwbpURdCHRxjWVowf5jUJjg

  • 在终端中运行以下命令
python listen_to_raydium_migration.py
Enter fullscreen mode Exit fullscreen mode

当代币联合曲线完成时,该账户会将代币连同其流动性一起添加到 Raydium 的 AMM 池中。这实际上完成了从 pump.fun 到 Raydium 的代币迁移。

该脚本blockSubscribe | Solana通过 WebSocket 使用该方法,监听所有涉及迁移账户的交易39azUYFWPz3VHgKCf3VChUwbpURdCHRxjWVowf5jUJjg,然后使用同样位于存储库中的 Raydium IDL 解码这些交易raydium_amm_idl.json。解码数据后,它会打印出我们真正需要的内容——已迁移的 pump.fun 代币的地址,以及该代币在 Raydium 上的新流动性池地址。



3.集成 Solana 交易机器人平台

Solana交易机器人平台

我很高兴介绍集成的 Solana 交易机器人平台,这是我们团队创新和技术专长的产物。

我们拥有技术娴熟、经验丰富的开发人员,开发了多个高性能交易机器人,并通过统一平台展示它们,增强了它们的技术能力和用户可访问性。

虽然这个项目尚处于早期阶段,但我迫不及待地想与过去五篇文章中一直关注我的读者分享。在我们不断完善和发展这个平台的过程中,您的反馈、见解和建设性批评至关重要。



如果您喜欢我的文章,请在 Github 上关注我。

跟我来


❓如果您对这篇文章有任何疑问或意见,请随时联系我。🎯


📧我的联系方式

Gmail : saivietthanh0314@gmail.com
电报

文章来源:https://dev.to/vietthanhsai/how-to-build-your-solana-sniper-bot-5-f8k
PREV
从你的终端打开 Dev.to
NEXT
异步 JavaScript 终极指南