3.2 KiB
Tornado Cash是如何工作的?
在深入通俗理解Tornado Cash的使用教程前,以下是协议全面运作的总体概况。
Tornado.Cash功能的全面概述
为了实现隐私,Tornado.Cash 使用智能合约来接受来自一个地址的代币存款,并允许他们从另一个地址提款。这些智能合约作为混合所有已存资产的池。
一旦从这些池中通过一个全新的地址提取资金,来源地址和目的地址之间的链上关联就会断开。因此,被提取的加密资产是匿名的。
虽然代币在 Tornado Cash池中,但保管权仍掌握在用户手中。因此,用户可以完全控制他们的代币。
对于传统的 Tornado Cash 固定金额池:
- • 当用户将资金存入池(也称为存款)时,会生成私人票据。此私人票据用作用户稍后访问这些资金的私人密钥。要提取资金,用户可以使用不同的地址 - 旧地址或新地址 - 并通过此私人票据提取资金。
对于Tornado Cash Nova,新的ETH池具有任意数量和隐蔽转账:
- 资金直接链接到给定的钱包地址。没有私人票据或密钥。用户可以连接到指定的地址来访问他们的资金。
- 资金托管是通过将代币存入池中或通过从已注册到Nova的账户隐蔽转账来获得的。
这种协议的优势自然来自它的用户数量和池的大小。存入池中的用户越多越好。但是,为了保护隐私和匿名性,用户必须牢记一些基本规则,例如:
- 提款时使用中继器支付gas;
- 在存款和取款操作之间留有充足的时间间隔;
- 通过等待几笔交易再提取资产,将其资金与其它人的资金混合一起。
更多的窍门可以在这找到:保持匿名的窍门。
zk-SNARK和哈希过程的贡献
Tornado.Cash使用零知识简洁的非互动知识论证(也称为zk-SNARK),以验证和允许交易。
来处理一笔存款,Tornado Cash生成一个随机的字节区域,通过Pederson哈希 (因为它与zk-SNARK更友好), 计算它,然后将代币和20 mimc哈希发送到智能合约。然后合同将把它插入到Merkle树中。
为了处理提款,相同区域的字节被分成两个独立的部分:一边是secret,另一边是nullifier 。nullifier被散列。这个nullifier是链上发送的公共输入,用于用智能合约和Merkle树数据进行检查。例如,它避免了双重支付。
多亏了zk-SNARK,可以在不透露任何信息的情况下证明20 mimc哈希的初始承诺和nullifier。即使nullifier是公开的,隐私性也会得到维护,因为没有办法将散列的nullifier关联到初始承诺。此外,即使交易的信息存在于Merkle根中,关于确切的Merkle路径的信息,即交易的位置,仍然是保密的。
从技术角度来看,存款是简单的,但在gas方面昂贵,因为他们需要计算20 mimc哈希和更新Merkle树。相反,提款过程很复杂,但成本更低,因为只有进行nullifier哈希和零知识证明才需要使用gas。
编写 @ayefda