如何编写 Solana 钱包跟踪 Telegram 机器人
由 Mux 主办的 DEV 全球展示挑战赛:展示你的项目!
构建专业的 Solana 钱包跟踪系统的全面指南,该系统可监控交易并通过 Telegram 提供实时通知。
介绍
在瞬息万变的 Solana 交易世界中,随时掌握钱包动态至关重要。本指南将引导您创建一个功能强大的钱包跟踪机器人,该机器人可以监控交易并通过 Telegram 发送详细通知。
系统架构
该系统由三个主要部件组成:
- Helius RPC 用于事务监控
- MongoDB 用于数据存储
- 用于通知的 Telegram 机器人
分步指南
1. 设置你的 Telegram 机器人
首先,我们将创建并配置您的 Telegram 通知机器人。
创建你自己的 Telegram 机器人
- 打开 Telegram 并搜索@botfather。
- 发送
/newbot命令 - 给你的机器人起个名字(例如:“super_wallet_tracking_bot”)
- 保存您的机器人令牌
配置聊天 ID
现在我们已经给机器人命名并获得了机器人令牌,接下来需要获取聊天 ID。
获取您的聊天 ID:
- 将您的机器人添加到您的频道
- 发送消息
- 访问地址:https: //api.telegram.org/bot/getUpdates
- 从响应中提取 chat_id
或者您可以使用以下脚本获取您的聊天 ID:
import TelegramBot from "node-telegram-bot-api";
import dotenv from "dotenv";
dotenv.config();
const TELEGRAM_BOT_TOKEN = process.env.TELEGRAM_BOT_TOKEN!;
const bot = new TelegramBot(TELEGRAM_BOT_TOKEN, { polling: true });
bot.on("message", (msg) => {
console.log("New chat ID:", msg.chat.id);
TELEGRAM_CHAT_ID = msg.chat.id.toString();
});
环境配置
将以下内容添加到您的 .env 文件中:
TELEGRAM_BOT_NAME = "super_wallet_tracking_bot"
TELEGRAM_BOT_TOKEN = "YOUR_BOT_TOKEN"
TELEGRAM_CHAT_ID = "YOUR_CHAT_ID"
设置好环境变量后,创建一个telegram.ts文件并写入以下代码,即可向 Telegram 发送消息:
import TelegramBot from "node-telegram-bot-api";
import dotenv from "dotenv";
dotenv.config();
const TELEGRAM_CHAT_ID = process.env.TELEGRAM_CHAT_ID!;
const bot = new TelegramBot(TELEGRAM_BOT_TOKEN, { polling: false });
export const sendTelegramMessage = async (message: string) => {
try {
await bot.sendMessage(TELEGRAM_CHAT_ID, message, {
parse_mode: "HTML",
disable_web_page_preview: true,
});
} catch (error) {
console.error("Failed to send Telegram message:", error);
}
};
2.集成 Helius RPC
Helius 为 Solana 事务监控提供可靠的 RPC 端点。
设置步骤:
- 从Helius 控制面板获取您的 Helius API 密钥
- 在 .env 文件中配置 RPC 端点:
RPC_URL = "https://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY"
WSS_URL = "wss://mainnet.helius-rpc.com/?api-key=YOUR_API_KEY"
3. 数据库配置及与 MongoDB 的连接
我们使用 MongoDB 来存储交易历史记录和进行分析。
配置:
MONGODB_URI = "mongodb://localhost:27017/solana_wallet_tracking"
创建db.ts文件,并写入以下代码:
import mongoose from "mongoose";
export const connectDB = async (mongodb_url: string) => {
await mongoose.connect(mongodb_url);
console.log("📦 MongoDB Connected");
};
4. 钱包监控
配置您要监控的钱包地址:
WALLET_ADDRESS = "YOUR_WALLET_ADDRESS"
5. 使用 Helius RPC 设置 Solana 连接
我们需要通过 Helius RPC 端点与 Solana 区块链建立通信。
创建connection.ts文件,并写入以下代码:
import { Connection } from "@solana/web3.js";
import dotenv from "dotenv";
dotenv.config();
const RPC_URL = process.env.RPC_URL!;
const WSS_URL = process.env.WSS_URL!;
if (!RPC_URL || !WSS_URL) {
throw new Error(
"RPC_URL and WSS_URL must be defined in environment variables"
);
}
export const connection = new Connection(RPC_URL, { wsEndpoint: WSS_URL });
这将创建一个 Connection 实例,该实例提供以下功能:
- 基于 HTTP 的 RPC 调用进行事务查询
- 用于实时交易监控的 WebSocket 连接
- 自动重连处理
- 连接状态管理
6. 交易分析
系统监控:
- 交易签名
- 代币转移
- 买卖操作
- 金额变化
- 时间戳
我们需要从 Helius RPC 获取交易数据,并处理这些数据,详细分析签名:
创建trading.ts文件,并写入以下代码:
import { NATIVE_MINT } from "@solana/spl-token";
import { LAMPORTS_PER_SOL, PublicKey } from "@solana/web3.js";
import { sendTelegramMessage } from "./telegram.js";
import { Trading } from "./models/Trading.js";
import { formatCryptoAddress } from "./lib/format.js";
import { connection } from "./config.js";
const explorerUrl = "https://solscan.io/tx/";
const walletUrl = `https://solscan.io/account/`;
export const subscribeTrading = (key: string) => {
const anaylzeSignature = async (log: any) => {
txn = await connection.getParsedTransaction(signature, {
maxSupportedTransactionVersion: 0,
commitment: "confirmed",
});
if (!txn) {
console.log(`Failed to fetch transaction after ${attempt} attempts`);
return;
}
// process transaction to get relevant information
console.log("preTokenBalances", preTokenBalances);
console.log("postTokenBalances", postTokenBalances);
console.log("loaced addresses", innerInstructions);
const message = `
🔔 <b>New Transaction Detected!</b>
👛 <b>Wallet:</b> <a href="${walletUrl + signer}">${formatCryptoAddress(signer)}</a>
💰 <b>Sol Amount:</b> ${solAmount > 0 ? "📥 SELL" : "📤 BUY"} ${Math.abs(solAmount).(3)} SOL
💸 <b>PNL for this Token:</b> ${totalPNL.toFixed(3)} SOL
🚀 <b>Token:</b> <a href="${walletUrl + tokenAddress}">${tokenInfo}</a>
🔗 <a href="${explorerUrl + signature}">View Transaction</a>
⏰ ${new Date().toLocaleString()}
`;
await sendTelegramMessage(message);
}
return connection.onLogs(new PublicKey(key), anaylzeSignature, "processed");
}
结论
这款 Solana 钱包追踪机器人提供了一个强大的解决方案,可通过 Telegram 实时通知监控钱包活动。按照本指南操作并进行配置,您可以创建一个强大的工具来追踪 Solana 交易并随时了解您的钱包动态。
该系统的模块化架构便于维护和未来的增强,同时提供可靠的交易监控和通知传递。
请务必定期监控 API 使用情况并维护数据库,以确保跟踪系统的最佳性能。
联系信息
- Gmail邮箱:marksantiago0929@gmail.com
- GitHub:MARK
- LinkedIn:马克·圣地亚哥
- Telegram:@marksantiago02
- 推特:@MarkSantiago02