b bajsj.com
bajsj.com / the-graphdai-ma-shi-li

The Graph代码示例集锦:常用Mapping与查询模板速查

汇总The Graph子图开发中最常用的Mapping模板、查询模板与单元测试样例,涵盖币安智能链上DEX、借贷、NFT等典型场景,节省重复造轮子时间。

The Graph代码示例 - The Graph代码示例集锦:常用Mapping与查询模板速查

极速体验

毫秒级响应,全球节点加速

🔒

资产安全

多重加密,冷热钱包分离

🌐

覆盖全球

180+ 国家与地区可用

📅 2026-05-24T06:12:21.442158+00:00 🔄 2026-05-24T15:51:08.189544+00:00

很多开发者并不缺思路,缺的是「能直接抄改」的代码片段。本文整理一组高频 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最佳实践 中的测试覆盖率指标,团队能把质量基线稳稳拉起来。

把这些模板沉淀为团队代码片段库,新人也能在一两天内交付可用的子图。代码即文档,模板即生产力。