空投常用签名方案备注时间:2025年9月21日作者:33357正文目前常见的空投签名方式主要有MerkleList和EIP712两种。下面我会对它们的机制和区别做个分析。MerkleList使用MerkleList要先构建一棵默克尔树:构建者先准备好空投
时间:2025 年 9 月 21 日
作者:33357
目前常见的空投签名方式主要有 Merkle List 和 EIP712 两种。下面我会对它们的机制和区别做个分析。
使用 Merkle List 要先构建一棵默克尔树:
(地址, 数量)
计算 keccak256(addr, amount)
,得到叶子节点。keccak256(left, right)
,逐层往上拼接,最终得到 MerkleRoot
。MerkleRoot
。(地址, 数量, MerkleProof)
时,合约就能通过验证是否能重算出同一个 MerkleRoot
。graph TD
R[MerkleRoot]
H01[Hash_0_1] --> R
H23[Hash_2_3] --> R
L0[Leaf0<br/>#40;addr0, amt0#41;] --> H01
L1[Leaf1<br/>#40;addr1, amt1#41;] --> H01
L2[Leaf2<br/>#40;addr2, amt2#41;] --> H23
L3[Leaf3<br/>#40;addr3, amt3#41;] --> H23
style R stroke-width:2px
特点:
MerkleRoot
一旦确定,空投名单和数量就不能更改,安全性和透明度高。使用 EIP712 要依赖私钥的签名:
Domain
和 Types
。(地址, 数量)
使用 signer
私钥签名,得到 signature
。signer
的地址。(地址, 数量, signature)
,合约通过 ECDSA 验证签名者是否等于 signer。graph LR
D[Domain, Types] --> Sig[signature]
S[signer 私钥] --> Sig
P[地址, 数量] --> Sig
Sig --> E[ECDSA 解析地址]
E --> V[验证 signer 地址]
特点:
signer
可以随时签发新空投,灵活性强。目前来看,Merkle List 是用得最多的方案。但无论哪种方式,都只能发放给事先知道的地址,灵活性有限。
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!