龙卷风现金如何运作?
在深入研究解释和简化 Tornado.Cash 使用的教程之前,这里是该协议的全局功能的整体概述。

Tornado.Cash 功能的全局概述
为了实现隐私,Tornado.Cash 使用智能合约从一个地址接受代币存款并允许从另一个地址提取。这些智能合约作为混合所有存入资产的池。一旦资金被一个全新的地址从这些池中提取,源和目的地之间的链上链接就会断开。因此,提取的加密资产是匿名的。虽然代币在 Tornado Cash 池中,但保管权仍在用户手中。因此,用户可以完全控制他们的代币。对于传统的 Tornado Cash 固定金额池:
当用户将资金存入池中(即存款)时,会生成私人票据。此私人票据充当用户以后访问这些资金的私钥。要提取资金,同一个用户可以使用不同的地址(旧地址或新地址),并借助此私钥恢复其资金。
对于 Tornado Cash Nova,具有任意金额和屏蔽转账的新 ETH 池:
资金直接链接到给定的钱包地址。没有私人票据或密钥。用户可以通过使用适当的地址连接到池来访问他们的资金。
托管是通过将代币存入池中或在池中注册并从另一个地址接收屏蔽转账来获得的。
这种协议的强度与其用户数量和池的大小直接相关。存入池中的用户越多,越好。但是,为了保护隐私和匿名性,用户必须牢记一些基本规则,例如:
使用中继器在提款时支付 gas;
允许存款和提款操作之间有时间间隔;
等待几笔交易后再收回资产,将其资金与人群混合。
更多建议请参见: 保持匿名的技巧。
zk-SNARK 和哈希过程的贡献
Tornado.Cash 使用零知识简洁非交互式知识论证(也称为 zk-SNARK)来验证和允许交易。为了处理存款,Tornado.Cash 会生成一个随机的字节区域,通过 Pedersen Hash 计算它(因为它对 zk-SNARKs 更友好),然后将代币和 20 MiMC 哈希发送到智能合约。然后,合约会将其插入 Merkle 树。为了处理提款,同一字节区域被分成两个独立的部分:一边是秘密,另一边是无效符。无效符是散列的。此无效符是公共输入,发送到链上以使用智能合约和 Merkle 树数据进行检查。例如,它可以避免双重支付。借助 zk-SNARK,可以在不透露任何信息的情况下证明初始承诺和无效符的 20 MiMC 哈希值。即使无效符是公开的,隐私仍可维持,因为无法将散列无效符链接到初始承诺。此外,即使有关交易的信息存在于 Merkle 根中,有关确切 Merkle 路径以及随后的交易位置的信息仍保持私密。从技术角度来看,存款很简单,但在 gas 方面很昂贵,因为它们需要计算 20 MiMC 哈希值并更新 Merkle 树。另一方面,提款过程虽然复杂但更便宜,因为只需要为无效哈希和零知识证明消耗 gas。
Last updated