很多开发者并不缺思路,缺的是「能直接抄改」的代码片段。本文整理一组高频 The Graph 代码模板,覆盖建模、Mapping、查询与测试四个层面,可作为日常开发的速查表。
实体定义模板
schema.graphql 中常见的实体包括 Token、Pair、Trade、User。每个实体推荐用 id 字段加复合键(交易对地址加方向)保证唯一性。@derivedFrom 关系用于从 Pair 自动派生 Trade 列表,避免冗余字段。详细字段含义可对照 The Graph入门指南 中的样例。
Swap 事件 Mapping 模板
export function handleSwap(event: Swap): void {
let trade = new Trade(event.transaction.hash.toHex());
trade.pair = event.address.toHex();
trade.amountIn = event.params.amount0In;
trade.amountOut = event.params.amount1Out;
trade.timestamp = event.block.timestamp;
trade.save();
}
把这个模板复制到自己的 Mapping 中,再根据合约 ABI 替换字段名,即可适配多数 AMM。配合 The Graph部署教程 跑通本地节点,半小时就能看到数据。
借贷协议 Mapping 思路
借贷协议常见事件包括 Deposit、Borrow、Repay、Liquidate。建议为每个事件单独建一张表,再用 User 实体做总账聚合。注意 BigInt 与 BigDecimal 的转换,参考 The Graph常见错误 中的精度章节,可以避免常见的精度漂移。
NFT 集合 Mapping 思路
NFT 项目常见需求是统计某 collection 的成交量与价格分布。Mapping 中除了记录 Transfer,还要在 Sale 事件中把支付币种与金额拆开,便于后续统计。可以结合 The Graph实战教程 中的端到端案例理解。
常用查询模板
{
trades(first: 100, orderBy: timestamp, orderDirection: desc, where: { pair: 0x对应地址 }) {
id
amountIn
amountOut
timestamp
}
}
这是分页 + 排序 + 过滤的标准模板,前端只要替换 pair 地址即可复用。
单元测试模板
配合 Matchstick,可以为每个 handler 写至少一条用例。模板包括:构造事件、调用 handler、断言实体字段。把这些模板放到自己的 utils 里,新增 handler 时复制即写。结合 The Graph最佳实践 中的测试覆盖率指标,团队能把质量基线稳稳拉起来。
把这些模板沉淀为团队代码片段库,新人也能在一两天内交付可用的子图。代码即文档,模板即生产力。