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

43 lines
3.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Tornado Cash是如何工作的
在深入通俗理解Tornado Cash的使用教程前以下是协议全面运作的总体概况。
### Tornado.Cash功能的全面概述
为了实现隐私Tornado.Cash **使用智能合约来接受来自一个地址的代币存款,并允许他们从另一个地址提款**。这些智能合约作为混合所有已存资产的池。
一旦从这些池中通过一个全新的地址提取资金,来源地址和目的地址之间的链上关联就会断开。因此,被提取的加密资产是匿名的。
虽然代币在 Tornado Cash池中但保管权仍掌握在用户手中。因此用户可以完全控制他们的代币。
**对于传统的 Tornado Cash 固定金额池:**
* • 当用户将资金存入池(也称为存款)时,会生成私人票据。此私人票据用作用户稍后访问这些资金的私人密钥。要提取资金,用户可以使用不同的地址 - 旧地址或新地址 - 并通过此私人票据提取资金。
**对于Tornado Cash Nova新的ETH池具有任意数量和隐蔽转账**
* 资金直接链接到给定的钱包地址。没有私人票据或密钥。用户可以连接到指定的地址来访问他们的资金。
* 资金托管是通过将代币存入池中或通过从已注册到Nova的账户隐蔽转账来获得的。
这种协议的优势自然来自它的用户数量和池的大小。存入池中的用户越多越好。但是,为了保护隐私和匿名性,用户必须牢记一些基本规则,例如:
* 提款时使用中继器支付gas
* 在存款和取款操作之间留有充足的时间间隔;
* 通过等待几笔交易再提取资产,将其资金与其它人的资金混合一起。
_更多的窍门可以在这找到_[_保持匿名的窍门_](tips-to-remain-anonymous.md)_。_
### zk-SNARK和哈希过程的贡献
Tornado.Cash使用零知识简洁的非互动知识论证(也称为zk-SNARK),以验证和允许交易。
来处理一笔存款Tornado Cash生成一个随机的字节区域通过[Pederson哈希](https://iden3-docs.readthedocs.io/en/latest/iden3\_repos/research/publications/zkproof-standards-workshop-2/pedersen-hash/pedersen.html) 因为它与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_](https://torn.community/u/ayefda)