狙击pump

更新于2024/12/15

Pump作为Solana上的一个代币公平发售平台,每天有大量的新流动池被创建,本文提供了一个demo,教你如何狙击pump上的新流动池。主要内容包括:① 基于geyser grpc监听pump新流动池创建;② 获取买入和卖出新流动池代币所需要的账户;③ 基于Jito上链的买入;④ 卖出

用到的库

import "dotenv/config";
import Client, {CommitmentLevel, SubscribeRequest} from '@triton-one/yellowstone-grpc';
import bs58 from "bs58";
import {Connection, PublicKey, Transaction, SystemProgram} from "@solana/web3.js";
import {AnchorProvider, Program, Wallet} from "@coral-xyz/anchor";
import {getKeypairFromEnvironment} from "@solana-developers/helpers";
import fs from "fs";
import {createAssociatedTokenAccountInstruction, getAssociatedTokenAddress} from "@solana/spl-token";
import { BN } from "bn.js";
import axios from "axios";

监听pump新流动池创建

为了保证获取链上数据的速度,本部分采用geyser grpc订阅的方法获取链上数据。

以下为订阅pump新池子的代码,主要步骤为:

  • 创建grpc订阅的客户端

  • 订阅交易中包含pump账户(6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P)的交易

  • 判断日志中是否有InitializeMint2方法

  • 打印一些新池子账户,包括代币Mint账户,Bonding Curve账户和Associated Bonding Curve账户,都是后面买入操作需要的

输出应如下:

买入

买入操作需要与pump合约交互,首先我们需要pump合约的的idl文件,在此获取

观察一笔pump的买入交易会发现,在调用pump合约的买入指令时,

  • 输入账户1,2,8,9,10,11,12是固定的;3,4,5从刚才监听到的新池子创建交易中已经获取到;6和7分别是ATA和我们的买入账户

  • 指令参数分别是买入的代币数量和最大的sol花费

因此,买入的交易可以按照下面的方法组装

  • 创建交易

  • 添加ATA创建指令

  • 添加pump买入指令

至此,pump新池子买入交易的组装其实就已经完成,通过对交易进行签名后,就可以正常发送。

此处可以在自己的rpc上模拟一下交易指令是否组装正确

输出如下,没有报错

Jito发送交易

使用Jito上链只需要①在交易的最后添加一笔给jito tip账户转账的指令,用于支付小费;②将交易发给Jito的block engine

具体代码如下

成功的买入示例交易可以在此查看:https://solscan.io/tx/3SsYxUY5F9w2Wk6APMSEGbSz7Yw13tYrRax2PECk1yF6XsTXVWuG2jQLwxCaJxdRN9MhewwZGcSpv58qMwdmLyie

卖出

观察一笔卖出的交易指令会发现,输入账户与买入相同,指令参数变为了卖出的代币数量和获得的最少sol数量。可参照之前的买入操作写自己的卖出策略。

卖出策略因人而异,不仅要保证自己获取链上数据的速度和上链的速度,要买的快,还要卖的好。但要问我哪个更重要,我想说,买的快不如卖的好。

最后更新于