Day 38:空投机制设计 — 快照与 Merkle 树
理解空投的快照与 Merkle 证明方案,查看 3 个空投合约,产出可复用的空投方案模板
Day 38: 空投机制设计 — 快照与 Merkle 树
今日目标
完成三件事:
- 理解空投的两种核心实现思路:快照(Snapshot) 与 Merkle 树 证明发放。
- 在 Etherscan 等浏览器中查看 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,核心为
claim、isClaimed、merkleRoot。
3. 与「直接转账」的对比
| 方式 | 优点 | 缺点 |
|---|---|---|
| Merkle 领取 | Gas 低、名单可很大、用户自助 claim | 需要前端/工具生成 proof、用户需主动领 |
| 直接转账 | 用户无感、到账即领 | Gas 高、需在合约中遍历或批量转,适合小规模 |
链上实操记录
查看 3 个空投相关合约
建议在 Etherscan 搜索「merkle」「airdrop」「distributor」或使用已知地址,完成至少 3 个合约的查看并记录:
| 序号 | 合约/项目 | 链 | 核心函数/逻辑 | 备注 |
|---|---|---|---|---|
| 1 | (如 Uniswap merkle-distributor 部署地址) | Ethereum | claim, 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 | 查空投合约的 claim、merkleRoot、事件 |
面试题准备(简要)
Q: 如何设计一次空投?要考虑哪些点?
30 秒版本:先定目标和资格规则,再在某一区块做快照得到名单;用 Merkle Tree 把名单压成根上链,用户凭 proof 自助 claim,既省 Gas 又便于防女巫和审计。还要考虑领取窗口、未领取回收、以及合约安全(防重入、单次领取)。2025 年常见延伸:结合 vesting(分批释放减少砸盘)、锁仓与行为绑定(领取代币后质押/治理参与可提高实际到手比例)。
今日执行清单
- 理解快照与 Merkle 树在空投中的作用
- 在 Etherscan 查看 3 个空投合约并记录
- 填写或完善
docs/空投方案模板.md(可先用示例项目练手) - (可选)阅读 Uniswap merkle-distributor 源码
明日预告
Day 39:女巫检测 — 链上行为分析,研究 LayerZero 女巫猎人,产出面试题答案:防女巫设计。