来源:A16z ;作者:A16z工程团队成员Sam Ragsdale
以太坊区块链是一个任何人都可以检查的公共分类账。
通常,由于公共地址即账户,任何人都可以查看与给定账户相关的全部资产和财务历史记录。这使得该技术不适合犯罪集团,尽管对此存在一个普遍误解。这也意味着加密空投——将代币分发到人们的钱包(即公共地址)——通常会暴露很多关于代币接收者的不必要信息。
这引发了一个个问题。加密空投是 web3 项目通过激励贡献者、参与者和早期采用者获得奖励来引导网络效应的一种流行方式。项目方理应能够向他们的社区空投代币,同时无需要求任何人暴露他们的财务历史。
因此,我创建了一个工具来增强消费者保护,提高安全性,并使用零知识证明在空投中保护人们的隐私。这是高级密码学的一种新颖用途,可为日常用户提供实际应用。仅仅因为区块链的默认模式是完全透明的,并不意味着每个人都应该为了参与空投 而放弃他们的隐私。零知识证明使人们能够有选择地揭示特定的信息,而不会放弃他们曾经做过的一切。
当协议管理者希望根据人们的链下活动向人们空投代币的时候,该工具就特别有用。可以想象使用该工具奖励 Github 开源贡献者、Discord 社区参与者、Twitter粉丝、Patreon 赞助者和其他人——同时尊重接收者的财务隐私。使用该工具,空投者在参与空投时无需要求任何人提供公钥,以免暴露自己的信息。
这是该系统的工作原理。潜在的空投接收者可以通过公共频道(如 Telegram、Discord、Twitter 或 Signal)提供一条消息(称为“commitment”)。然后,空投者通过将这些commitment的哈希放在一起来构建 一个Merkle 树。然后,潜在的接收者可以稍后通过提供零知识 Merkle 证明来证明他们是树中commitment的作者,从而获得他们的空投部分,而无需透露具体是谁。以这种方式认领代币会将接收人的公共地址与所有其他有权获得空投的用户的公共地址混合在一起,从而保护他们的匿名性。
更具体而言,步骤如下:
-
用户创建一个密钥和一个秘密,并连接哈希(密钥+秘密)来创建commitment。
-
然后可以通过公共或私人频道传输这个commitment,而不会泄露信息。
-
管理员组合这些commitment的 Merkle 树并部署智能合约。
-
然后,用户可以使用零知识证明来兑换空投代币,证明他们属于这个Merkle树,而无需透露哪一个Commitment与他们的公钥相关。
Web2 已经习惯了人们用他们的数据和隐私来换取免费和易于使用的互联网服务。Web3 提供了另一种选择。在新模型中,人们可以重新控制自己的数据,并自行决定选择性地透露自己的详细信息。该工具更紧密地将空投的最新技术与 web3 的核心理念保持一致。
并非所有情况都需要此工具;事实上,所有这些保护隐私的计算都会产生不小的 gas 费用。如果每个人的公钥都是已知的,那么空投就是一个简单的过程。但是有很多情况,例如在保护他们的隐私的同时奖励链下贡献者的例子,如上所述,该工具的使用是有保证的。
您可以在此处获取这些工具:
https://github.com/a16z/zkp-merkle-airdrop-contracts
感谢在创建这些工具时为我提供帮助的项目和团队。
Tornado.cash:来自原始 Tornado 现金协议的简化版本的方法、工具和概念
Iden3:Iden3 团队为构建 Circom 和 Snarkjs 生态系统进行了一些令人难以置信的工作,可用于构建零知识驱动的应用程序