什么空投合约
“空投合约”(Airdrop Contract)是指专门用于自动向一组地址发送代币或 NFT 的智能合约。常用与项目早期免费向参与者发送奖励,激励用户参与项目,获取流量。
加密货币历史上资金量最大的空投项目是 Hyperliquid 的 HYPE 代币分发。该项目于 2024 年 11 月向其社区分发了 3.1 亿枚 HYPE 代币,占总供应量的 31%。在短短几周内,这些代币的价值飙升至超过 108 亿美元,创下了空投历史上的新纪录。
下面我将以以太坊上的空投合约构建说起,使用以太坊 ERC20 合约来讲解智能合约中发放空投的三种实现方式。
空投合约的实现三种方式
空投合约的实现方式分别有三种。
批量铸造:项目方直接通过调用合约中的 mint 函数,主动给满足条件的参与者批量铸造代币。但是这种方式,虽然简单易懂,但在参与者较多的情况下,通常需要消耗海量 gas。极不经济。并且这种方式发送空投,权限全由项目方控制,中心化程度较高。
默克尔证明:这种方式通过在智能合约中存储一个默克尔根,链下维护默克尔树。默克尔树及默克尔证明原理请看默克尔树 用户领取空投,传入默克尔证明和空投地址即可完成空投地址的认证。
默克尔证明的好处是,链上只需存储默克尔树根即可,通过节省合约的存储空间来降低 gas 消耗。链下维护默克尔树。在验证空投资格的时候,传入空投地址和相应的默克尔证明,通过合约内的计算即可完成空投的发放。缺点是,一旦部署合约后,合约中的默克尔根无法修改,没办法动态增加空投地址。
数字签名:数字签名发放空投的方式,相对而言更加有优势。数字签名的实现原理请看 数字签名,验证空投者的身份通过数字签名验证来完成,项目方只负责给空投者的地址发送签名,空投者拿着这个签名和空投数量即可调用合约的函数来进行领取空投。数字签名的方案,比默克尔证明的方式更省 gas,因为链上无需存储任何数据,签名全程在链下执行。并且,数字签名的方式还能实现空投地址的动态增加。
下面,我们来分别讲解三种方案的实现流程。
项目方批量铸造三种方案的完整代码实现
代码仓库
批量铸造
- **测试命令**
```js
forge test --match-path "./test/airdrop/Airdrop1.t.sol" -vvvv
默克尔证明
数字签名