空投领取:分开有资格、已领取与实际分发
空投分配资格、成功领取和持续使用应用,是三种不同观察。把宣传分配量写成采用量或已分发量之前,应把资格集合与分发合约真实代币移动核对起来。
OpenZeppelin的MerkleProof说明介绍相对Merkle根的成员验证。它不规定所有空投的资格、资金和重复领取规则,这些必须读实际分发合约及分配文件。
先固定分配对象
记录网络、分发地址、代币地址、根及版本、分配文件与领取窗口。按部署记录叶子字段,例如序号、账户、金额。证明匹配根,只支持相应编码构造下的成员身份,不能证明宣传中的所有合资格者都得到了应有分配。
确认分配单位是地址、序号还是其他对象。同一账户可能有多个叶子,一人也可能控制多个账户。独立叶子数、账户数和代币数量应分别保存。
再检查如何阻止重复领取。合约可能记录已领取序号或账户状态,但实现不同。应将状态与成功事件结合,而不是把所有提交调用相加;重复领取回滚可以增加尝试数,却没有新增分发。
假设案例:资格与领取漏斗
假设虚构活动有1000个合资格叶子,每个100代币,分配总额100000。独立账户只有900个,因为部分账户有多个叶子。截止时成功领取600个叶子,实际发出60000代币。
| 阶段 | 假设数量 | 分母 |
|---|---|---|
| 合资格叶子 | 1000 | 分配构造 |
| 合资格账户 | 900 | 独立编码账户 |
| 已领取叶子 | 600 | 叶子的60% |
| 已分发代币 | 60000 | 分配量的60% |
| 未领取分配 | 40000 | 剩余有效分配 |
此处叶子覆盖率与金额覆盖率相同,只因每个叶子分配相同。若大额资格者先领取,金额覆盖率可能显著高于叶子覆盖率。两者应同时报告,不能不加标签地统称领取率。
如果领取涉及550个独立账户,则账户覆盖率为550÷900≈61.1%,又不同于60%的叶子率。这些比率都不能证明550个独立自然人或客户,例子数字全部是假设。
调节资金与未领取额
将成功转账与已领取状态变化核对。代币有特殊转账行为时,应另核实实际收到量,不能自动假设分配事件金额就是到账金额。失败及待定领取不计入成功分发小计。
调节分发合约期初余额、补款、成功发放、获准回收和期末余额。剩余余额不必等于未领取分配:可能超额或不足供资、收到无关存款,或存在回收机制。截止日期和到期后处理没查明之前,不要把余额直接叫作没收。
根改变时保留两个版本,核对旧根下已领取是否仍有效、是否消耗新根资格。直接合并两份分配文件,可能把同一资格算两次。网站提供替换文件,也不证明合约实际采用了新根。
研究采用时,另设领取后的活动窗口及具体动作。领取补贴不证明愿意付费,转出也不能未经接收上下文核对就叫出售。留存主张必须有独立账户复现规则与覆盖限制。
最终分开列资格、执行、实际分发、剩余义务和后续使用。根更新、期限改变、补款或回收时复查。这是在核对机制,不是普查用户。
分配文件也要独立复核:按真实代币小数位加总金额,检查叶子键是否唯一。下载文件中的重复行,不自动产生第二份资格;同一账户具有不同序号,则可能是有意安排。应使用合约真正采用的资格键,把文件与成功领取连接,不能先按地址去重就删掉合法多份分配。
常见问题
有Merkle证明就说明已经收到代币吗?
不是。证明支持给定根下的资格,成功执行及真实到账需要分别验证。
分发合约剩余余额就是未领取金额吗?
不一定。供资、回收、代币行为与合约条款,都可能让两者不同。