1
0
Fork 0
docs/general/how-does-tornado.cash-work.md

3.2 KiB
Raw Permalink Blame History

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