聪明钱监控

聪明钱跟单指监听链上胜率高的地址后跟随买入和卖出,本文提供了一个简单的demo,教你如何监控聪明钱地址。主要内容包括:① 基于geyser grpc监听聪明钱包地址与pump和raydium交互的交易;② 解析交易中的余额变动

用到的库

import "dotenv/config";
import Client, {CommitmentLevel, SubscribeRequest} from '@triton-one/yellowstone-grpc';
import bs58 from "bs58";
import {Connection, PublicKey, LAMPORTS_PER_SOL} from "@solana/web3.js";
import{ Metadata, deprecated } from "@metaplex-foundation/mpl-token-metadata";

监听包含聪明钱账户的交易

本部分使用geyser grpc订阅的方式获取链上与聪明钱地址有关的交易,并再次过滤了一下聪明钱地址与pump和raydium合约交互的交易(因为此地址可能会有一些其他类型的交易,例如此处未考虑在内的转账交易等)

因为聪明钱的交易频率不高,所以此处所指的聪明钱其实是一个高频交易的pump狙击,经常可以做到+0和+1冲开盘

const addr = ['orcACRJYTFjTeo2pV8TfYRTpmqfoYgbVi9GeANXTCc8'] // 聪明钱地址

const client = new Client('https://grpc.chainbuff.com', undefined, {
    "grpc.max_receive_message_length": 64 * 1024 * 1024, // 64MiB
});

const stream = await client.subscribe();

const streamClosed = new Promise<void>((resolve, reject) => {
    stream.on("error", (error) => {
        reject(error);
        stream.end();
    });
    stream.on("end", () => {
        resolve();
    });
    stream.on("close", () => {
        resolve();
    });
});

stream.on("data", async (data) => {

    if (data.transaction) {
        const accountKeys = data.transaction.transaction.transaction.message.accountKeys.map(ak => bs58.encode(ak));
        if (accountKeys.includes('6EF8rrecthR5Dkzon8Nwu78hRvfCKubJ14M5uBEwF6P') || accountKeys.includes('675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8')) {
        
		        // 解析余额变动
            checkBalances(data)
        }
    }
});

// 配置订阅
const request = {
    accounts: {},
    slots: {},
    transactions: {},
    blocks: {},
    blocksMeta: {},
    entry: {},
    commitment: CommitmentLevel.CONFIRMED,
    accountsDataSlice: [],
    ping: undefined,
};

request.transactions.tx = {
    vote: false,
    failed: false,
    signature: undefined,
    accountInclude: addr,
    accountExclude: [],
    accountRequired: [],
};

await new Promise<void>((resolve, reject) => {
    stream.write(request, (err) => {
        if (err === null || err === undefined) {
            resolve();
        } else {
            reject(err);
        }
    });
}).catch((reason) => {
    console.error(reason);
    throw reason;
});

await streamClosed;

这样就监听过滤出了所有聪明钱地址跟pump和raydium交互的交易,后续通过一个checkBalances函数来解析余额变动

解析余额变动

先来看一笔pump买入的交易示例,主要关注两部分:

  • solana余额的变化

  • 聪明钱账户代币余额的变化

可以看到这笔交易实际总花费2.545549387个sol买入了80,144,432.9898个某代币,所以我们的checkBalances函数先打印一下这两部分

一个示例的输出应如下,preBalances 和 postBalances 的首个元素为此账户sol余额的变动,preTokenBalances 和 postTokenBalances 为此笔交易中账户代币余额的变化,代币余额变化我们只关注owner为此聪明钱地址的部分

所以,完整的checkBalances函数应该如下

关于买入和卖出可以通过sol和代币余额的正负来判断,如上面输出是1笔买单和4笔卖单。

最后,监控到聪明钱后,可以根据自己的策略买入和卖出,也可以将日志消息推送给telegram机器人,实时的接收通知消息。

最后更新于