交易订阅在网络确认交易时提供执行结果。您可以按涉及的账户进行过滤、排除投票交易,并选择是否包含失败的交易。
过滤参数
| 参数 | 类型 | 描述 |
|---|
vote | boolean | 包含(true)或排除(false)投票交易。默认:包含所有。 |
failed | boolean | 包含(true)或排除(false)失败的交易。默认:包含所有。 |
signature | string | 监控单个特定交易签名。 |
accountInclude | string[] | 仅包含涉及这些账户中任意一个的交易(逻辑 OR)。 |
accountExclude | string[] | 排除涉及这些账户中任意一个的交易。 |
accountRequired | string[] | 仅包含涉及所有这些账户的交易(逻辑 AND)。 |
accountInclude 和 accountRequired 协同工作:accountInclude 允许任意匹配,而 accountRequired 要求列出的每个账户都必须存在。组合使用它们以构建精确过滤器。
示例:监控特定程序
import Client, { CommitmentLevel, SubscribeRequest } from "@triton-one/yellowstone-grpc";
const client = new Client(
"https://your-endpoint.grpc.orbitflare.com",
"YOUR_GRPC_TOKEN",
{ "grpc.max_receive_message_length": 64 * 1024 * 1024 }
);
async function main() {
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", (data) => {
if (data.transaction) {
const { transaction, slot } = data.transaction;
const sig = Buffer.from(transaction.signature).toString("base64");
const failed = transaction.meta?.err != null;
console.log(`[slot ${slot}] ${failed ? "失败" : "成功"} 交易: ${sig}`);
}
});
const request: SubscribeRequest = {
transactions: {
raydiumSwaps: {
vote: false,
failed: false,
accountInclude: [
"675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8", // Raydium AMM v4
],
accountExclude: [],
accountRequired: [],
},
},
commitment: CommitmentLevel.CONFIRMED,
accounts: {},
accountsDataSlice: [],
slots: {},
transactionsStatus: {},
blocks: {},
blocksMeta: {},
entry: {},
ping: { id: 1 },
};
await new Promise<void>((resolve, reject) => {
stream.write(request, (err) => {
if (err == null) resolve(); else reject(err);
});
});
await streamClosed;
}
main();
常见使用场景
| 使用场景 | 过滤策略 |
|---|
| 监控 DEX 的兑换 | accountInclude: [dexProgramId],vote: false |
| 检测钱包活动 | accountInclude: [walletPubkey],vote: false,failed: false |
| 监控特定代币铸币 | accountInclude: [mintAddress] |
| 追踪所有非投票成功交易 | vote: false,failed: false,无账户过滤 |
| 监控单个交易 | signature: "txSignatureHere" |