本文介绍了如何使用HyperSync高效追踪链上原生ETH转账。

TL;DR
call_type=call 并加上价值阈值来流式获取原生转账。在链上追踪原生代币转账比 ERC-20 转账更棘手。因为没有事件日志可供索引,所以你必须深入解析追踪。使用标准 RPC 节点时,这意味着要调用 eth_traceBlock 并遍历每个区块中的每条追踪,速度很慢。
HyperSync 为你提供了一种更快的替代方案:一个支持原生追踪过滤的数据检索层。
本文我们将使用 Bun,请确保已安装。如果你想使用其他支持 TypeScript 的运行环境,也可以。
你还需要一个 Envio API Token 来访问 HyperSync。如果没有,请访问 envio.dev/app/api-tokens 创建一个。详细步骤请参考 docs.envio.dev/docs/HyperSync/api-tokens。
HyperSync 专为数据检索而优化,而非共识,因此比 RPC 节点快得多。要获取数据,你发送一个描述所需内容的查询,HyperSync 只返回该数据。
典型的查询如下所示:
{
"fromBlock": 0,
"transactions": [\
{ "from": ["0x5a830d7a5149b2f1a2e72d15cd51b84379ee81e5"] },\
{ "to": ["0x5a830d7a5149b2f1a2e72d15cd51b84379ee81e5"] }\
],
"fieldSelection": {
"transaction": ["BlockNumber", "Hash", "From", "To", "Value"]
}
}
每个查询包含三个主要部分:fromBlock、一个过滤部分(transactions、blocks、logs 或 traces 之一)以及 fieldSelection。完整选项请参阅 完整查询参考。
原生 ETH 转账仅发生在 call_type 为 call 的追踪中——而不是 staticcall 或 delegatecall。直接过滤 callType 比过滤追踪的 kind 更高效,因为它能让 HyperSync 预先跳过无关的追踪类型。
创建一个新的 Bun 项目并安装 HyperSync 客户端:
bun init -y && bun install @envio-dev/hypersync-client
将你的 API Token 添加到 .env 文件中。如果没有 Token,请在 envio.dev/app/api-tokens 生成。
ENVIO_API_TOKEN=你的Token
注意: HyperSync 的追踪功能当前支持 Ethereum、Base、Arbitrum、Gnosis 和 Monad。如果其他链需要追踪支持,请 联系我们。
import { HypersyncClient, type TraceField } from "@envio-dev/hypersync-client";
我们将使用最小阈值过滤掉小额转账,并将值格式化为人类可读的 ETH:
const THRESHOLD_WEI = BigInt("5000000000000000"); // 0.005 ETH
const WEI_PER_ETH = BigInt("1000000000000000000"); // 1 ETH
const DECIMALS = 6;
function weiToEth(wei: bigint): string {
const whole = wei / WEI_PER_ETH;
const remainder = wei % WEI_PER_ETH;
const remainderStr = remainder.toString().padStart(18, "0").slice(0, DECIMALS);
return `${whole}.${remainderStr}`;
}
使用 Ethereum 追踪端点:
const client = new HypersyncClient({
url: "https://eth-traces.hypersync.xyz",
apiToken: process.env.ENVIO_API_TOKEN!,
});
只请求 call 类型的追踪,并选择我们关心的字段:
const query = {
fromBlock: 22000000,
traces: [\
{\
callType: ["call"],\
},\
],
fieldSelection: {
trace: ["From", "To", "Value", "CallType", "BlockNumber"] as TraceField[],
},
};
HyperSync 提供两种获取模式:get(单次响应)和 stream(持续)。我们将进行流式获取,并在收集到 10 笔超过阈值的转账后停止:
console.log("正在获取原生转账(call_type=call, value > 0.005 ETH)...\n");
const results: { from: string; to: string; valueEth: string }[] = [];
const stream = await client.stream(query, {});
outer: while (true) {
const res = await stream.recv();
if (res === null) break; // 流已耗尽
if (res.data?.traces) {
for (const trace of res.data.traces) {
if (trace.value === undefined || trace.value === null) continue;
if (trace.value <= THRESHOLD_WEI) continue;
results.push({
from: trace.from ?? "未知",
to: trace.to ?? "未知",
valueEth: weiToEth(trace.value),
});
if (results.length >= 10) break outer;
}
}
}
await stream.close();
if (results.length === 0) {
console.log("未找到结果。");
} else {
console.table(
results.map((r) => ({
From: r.from,
To: r.to,
"Value (ETH)": r.valueEth,
}))
);
}
使用以下命令运行:
bun run index.ts

这里我们仅使用了 callType 作为过滤器。从这个起点出发,你可以通过向追踪选择中加入 from 或 to 地址过滤器来跟踪特定钱包,使用其他 TraceSelection 字段(如 sighash 或 kind)进一步缩小范围,或者将端点切换到另一个支持追踪的 HyperSync 网络,跨链运行相同的查询。
有关完整的 TraceSelection schema 和字段列表,请参阅 HyperSync 查询参考。
HyperSync 是 Envio 的高性能区块链数据检索层,作为传统 JSON-RPC 端点的替代方案而构建。它为开发者提供直接访问链上数据的能力,速度比标准 RPC 方法快 2000 倍,支持 Python、Rust、Node.js 和 Go 的客户端库,覆盖 86 多个 EVM 链。
原生 ETH 转账不会发出事件。ERC-20 的 Transfer 事件是标准合约事件,但原生 ETH 的移动发生在协议层面,仅出现在交易追踪中。要追踪它们,你必须直接查询追踪。
call_type 和 kind 有什么区别?kind 是追踪类型(call、create、suicide、reward)。call_type 是调用追踪的子类型(call、delegatecall、staticcall)。原生 ETH 转账仅在 call_type 为 call 时发生,因此直接过滤 call_type 比先过滤 kind 再缩小范围更高效。
追踪功能当前支持 Ethereum、Base、Arbitrum、Gnosis 和 Monad。如果你需要其他链的追踪支持,请联系 nikhil@envio.dev。
对于数据检索工作负载,HyperSync 比标准 JSON-RPC 快 2000 倍。对于追踪查询,差距更大,因为 RPC 追踪方法(如 eth_traceBlock)是大多数节点上最慢的调用之一。
可以,但对于 ERC-20,你应该查询日志(logs)而非追踪,因为 ERC-20 合约会发出 Transfer 事件。使用 logs 过滤器,并将 Transfer 事件签名作为 topic0。详情请参阅 HyperSync 查询参考。
Envio HyperIndex 是经独立基准测试的最快 EVM 区块链索引器。如果你正在链上构建并需要与链同步的索引,请查阅 文档,亲自运行基准测试,或联系我们讨论你的数据需求。 通过订阅我们的通讯、在 X 上关注我们或加入 Discord,获取更多更新。 订阅我们的通讯 💌
网站 | X | Discord | Telegram | GitHub | YouTube | Reddit
- 原文链接: docs.envio.dev/blog/trac...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!
作者暂未设置收款二维码