transfer(address,uint256) 调用处理器以及映射中 balanceOf 调用的 subgraph 从最近的一个区块开始索引,并始终与链头保持在一个区块以内。要改为索引网络的 fork 副本,请参见使用 The Graph 索引 Virtual Environment。
开始之前
- 您所用网络的 Node RPC URL,可在 Tenderly Dashboard 中 Node RPC 的 Integrate 视图中获取
- 一个 subgraph 以及
graph init为其生成的docker-compose.yml(参见设置 Graph Node 和 subgraph;对于公共网络,脚手架生成步骤相同)
配置 Ethereum 提供程序
在生成的docker-compose.yml 中,将 graph-node 服务中的 ethereum 设置为 <network>:archive,traces:<Node RPC URL>。第一个冒号之前的网络名称必须与 subgraph.yaml 中的 network 一致。
docker-compose.yml(graph-node 的 environment)
${TENDERLY_NODE_ACCESS_KEY},因此访问密钥不会写入文件:
capabilities: archive, traces 和 Provider supports block receipts,后者表示它通过一个 eth_getBlockReceipts 请求获取区块的所有收据。
当
ethereum 值未声明任何能力时(mainnet:<url>),Graph Node 会假定两项能力都可用。请显式声明它们,使配置能够表明 subgraph 依赖哪些能力。
在公共网络上,请将 ETHEREUM_REORG_THRESHOLD 保持为默认值 250。Graph Node 使用它在网络发生重组时回退区块,因此不要照搬 Virtual Environment 设置中的值 1。
检查您的网络是否提供 trace_filter
调用处理器需要trace_filter,但并非 Node RPC 上的每个网络都提供该方法。请针对最近的一个区块发出请求:
result 中返回数组,说明调用处理器可以在该网络上使用。如果返回 the method trace_filter does not exist/is not available 或 Method not found 之类的错误,说明无法使用;请改用 eventHandlers 索引合约的事件。请以十六进制传入区块号,因为 trace_filter 会以 Invalid params 拒绝 latest 标签。
Graph Node 发送的请求
Graph Node 会持续轮询 Node RPC,因此即使没有 subgraph 出现新事件,每个被索引的网络也会产生请求。各类请求的成本请参见 Node RPC 定价。
在 Node RPC 上,调用处理器是典型 subgraph 中成本最高的部分,因为一次 trace 请求的成本高于一次读取或一次合约调用。如果合约针对同一操作会发出事件,请改为索引该事件。如果可以接受几秒的索引延迟,请调高
ETHEREUM_POLLING_INTERVAL 以降低轮询频率。
故障排除
相关内容
- Node RPC 概览
- Node RPC 定价
trace_filter的 RPC 参考- 使用 The Graph 索引 Virtual Environment,用于索引 fork 出的网络