返回 Web3 笔记
Day 38

Day 38:空投机制设计 — 快照与 Merkle 树

理解空投的快照与 Merkle 证明方案,查看 3 个空投合约,产出可复用的空投方案模板

2025-02-17
Web3空投Merkle快照Day38Week6

Day 38: 空投机制设计 — 快照与 Merkle 树

今日目标

完成三件事:

  1. 理解空投的两种核心实现思路:快照(Snapshot)Merkle 树 证明发放。
  2. 在 Etherscan 等浏览器中查看 3 个空投相关合约,记录核心函数与发放逻辑。
  3. 产出空投方案模板docs/空投方案模板.md),可复用于 PRD 或内部方案。

核心概念

什么是「空投」在机制层面的设计?

一句话定义:在某一时间点(快照)确定「谁可以领、领多少」,再通过链上合约把代币/资产发放给符合条件的地址;常用 Merkle Tree 把名单压缩成一个根哈希上链,用户凭 Merkle Proof 自助领取,以节省 Gas 并保护名单隐私。

类比理解:就像发「兑换券」:先定规则、拍快照得到名单,再发券(链上就是发 token)。Merkle 相当于「只贴一张总校验码(根),每个人拿自己的小纸条(proof)来兑」,合约只验证你的小纸条是否属于这张总码,不用把所有人的名字都写在链上。

为什么重要?

  • 增长与冷启动:空投是 Web3 项目拉新、激励早期用户和治理参与的核心手段。
  • PM 必懂:设计资格规则、防女巫、选择快照与发放方式,都是产品与运营的决策点。
  • 面试高频:如何设计空投、如何防女巫、Merkle 和直接转账的取舍,常被问到。

知识点详解

1. 快照(Snapshot)

  • 含义:在某一区块高度时间点,根据链上/链下数据确定「符合资格的钱包 + 可领取数量」的名单。
  • 数据来源:链上事件(如交易、存款)、Subgraph、Dune/Flipside 查询导出等。
  • 注意:快照结果通常是「地址 + 数量」列表,可链下保存;上链时不必全量写入,用 Merkle 只存根即可。

2. Merkle 树在空投中的用法

  • 流程:将 (address, amount) 列表构建成 Merkle Tree → 得到 Merkle Root → 合约只存储该 root;用户领取时提交自己的 (index, amount, merkleProof),合约用 MerkleProof.verify(proof, root, leafHash) 验证后执行 transfer
  • 优点:Gas 低(不存全量名单)、名单可离线生成与更新(换 root 即可)、可配合前端或后端按需生成 proof。
  • 典型合约:Uniswap 的 merkle-distributor,核心为 claimisClaimedmerkleRoot

3. 与「直接转账」的对比

方式优点缺点
Merkle 领取Gas 低、名单可很大、用户自助 claim需要前端/工具生成 proof、用户需主动领
直接转账用户无感、到账即领Gas 高、需在合约中遍历或批量转,适合小规模

链上实操记录

查看 3 个空投相关合约

建议在 Etherscan 搜索「merkle」「airdrop」「distributor」或使用已知地址,完成至少 3 个合约的查看并记录:

序号合约/项目核心函数/逻辑备注
1(如 Uniswap merkle-distributor 部署地址)Ethereumclaim, isClaimed, merkleRoot经典 Merkle 发放
2(如 Arbitrum ARB 空投合约)Arbitrum领取条件、时间窗口可参考官方文档
3(自选一个协议空投合约)

观察要点:谁可以调 claim、是否防重入/防重复领取、root 是否可更新、代币从哪来(合约持有还是 mint)。


空投方案模板(产出)

已在本项目中创建 docs/空投方案模板.md,包含:

  • 空投目标(目的、代币、预期人数)
  • 资格规则(用户范围、门槛、排除、权重)
  • 快照(内容、时间/区块、数据来源、名单格式)
  • 发放方式(Merkle vs 直接转、领取窗口)
  • 防女巫与风控
  • 时间线与里程碑
  • 参考合约与资源

可直接复制到 PRD 或内部方案中,按项目填写具体内容。


今日思考

1. 为什么多数项目用「用户主动 claim」而不是「直接打到钱包」?

主要为了 Gas 成本与合规:由用户主动领,项目方不必为不活跃用户支付 Gas;且部分地区对「主动空投到钱包」有监管顾虑,claim 模式更易界定为「用户主动参与」。

2. Merkle root 一旦设置,还能改吗?

取决于合约设计。若合约允许 owner 更新 root,可以「换名单」再设新 root;若不可更新,则名单固定,只能部署新合约再发新空投。


学习资源

类型资源说明
合约Uniswap merkle-distributor经典 Merkle 发放,可 fork
文档Arbitrum Airdrop 资格与分配资格规则与分配比例参考
工具Etherscan查空投合约的 claimmerkleRoot、事件

面试题准备(简要)

Q: 如何设计一次空投?要考虑哪些点?

30 秒版本:先定目标和资格规则,再在某一区块做快照得到名单;用 Merkle Tree 把名单压成根上链,用户凭 proof 自助 claim,既省 Gas 又便于防女巫和审计。还要考虑领取窗口、未领取回收、以及合约安全(防重入、单次领取)。2025 年常见延伸:结合 vesting(分批释放减少砸盘)、锁仓与行为绑定(领取代币后质押/治理参与可提高实际到手比例)。


今日执行清单

  • 理解快照与 Merkle 树在空投中的作用
  • 在 Etherscan 查看 3 个空投合约并记录
  • 填写或完善 docs/空投方案模板.md(可先用示例项目练手)
  • (可选)阅读 Uniswap merkle-distributor 源码

明日预告

Day 39:女巫检测 — 链上行为分析,研究 LayerZero 女巫猎人,产出面试题答案:防女巫设计。