1/n

白话介绍下 TC:
(吐槽:没办法打全称Torn...Cash,不然Tweet)

在ZK很火热的今天,考古下TC是很有意义的,毕竟它在我眼里是区块链领域第一个成功将ZK用于有效解决实际问题的协议!

TC是一个混币协议,顾名思义,你把token存入到TC中,再取出来的时候就很难追踪它的来源了(“洗钱”);
#zk #ZKP
2/n

实际用途:

由于区块链账户在链上做的所有操作,以及账户余额都是公开的,所以基本没有隐私可言;
而TC可以让你实现一笔加密转账,这笔转账除了发送和接收账户,其他人都无法通过链上信息破译这笔交易。
3/n

具体实现:

TC 通过两个方法来实现加密转账,第一个是deposit ,第二个方法是 withdraw.

TC的加密转账实际上需要执行两步,先deposit到Tornado Cash合约中,然后隔一段时间后用另外一个账户从合约中取出来,来完成一笔加密转账
4/n

deposit 方法:

执行deposit的时候分为三步:

1)用户为自己随机选定两个随机数:secret 和 nullifier; 然后对这两个随机数做一次哈希运算,得到一个commitment
- commitment = Hash(secret,nullifier)
5/n

2)用户调用deposit(commitment) 将commitment部署到TC的合约内(意味着secret 和 nullifier都只存在于链下的,永远只有用户自己知道)
6/n

3)TC会发生以下状态改变:
TC合约内会维护一颗commitment作为叶子节点的状态树,当有新的commitment进来的时候,这个commitment会被添加到最后的叶子节点中

(Tornado 合约内会有一个nextIndex的变量来记录最后的叶子节点是哪个; 同时添加完一个叶子节点后,nextIndex会往后移动一位)
7/n

完成以上三步,实际上只是执行了一笔deposit(commitment)的交易。

当这笔交易成功后,我们就成功将我们想进行混币的金额deposit到TC合约中。

接下来我们就通过另外一个账户,来将我们其中的钱秘密的拿出来
8/n
withdraw 操作:

1) withdraw的时候用户就需要利用zk,在链下生成一个取款proof,这个proof内包含以下电路:

- commitment === Hash(secret,nullifier)
- commitment merkle-tree path
- nullfieriHash === Hash(nullifier)

(别走,后面大白话这些电路的作用
9/n

2) 然后执行withdraw方法,将我们生成的proof和相应的参数送到链上做验证并取钱
10/n

3) 链上验证proof(在withdraw的执行中会有一个verifyProof的操作)的步骤:
- 验证proof中用户给出的secret和nullifier生成commitment的电路能不能对应上当前的commitment

- 验证proof中生成的merkle path电路能不能对应上当前的tree root,从而判定这个commitment是不是有效的commitment
- 验证proof中生成的nullifier 进行哈希得出nullifierHash的电路能不能对应上当前的nullifierHash

4) 如果proof验证通过,那么用户可以成功走commitment对应的存款。

用户也就通过deposit和withdraw的方式完成了一次加密转账
11/n

这里我们回顾下withdraw的过程,我们可以发现,在withdraw操作中用户没有暴露自己的,secret,nullifier和要取款的commitment节点。
12/n

因为我们将secret、nullifier和commitment的关系 以及 commitment , merkle path 和 tree root的关系都转换成电路约束隐藏在了zk-proof这个证明中, 而zk-proff本身就有零知识的特性,所以没有任何人能从我们链上的这个proof中提取任何相关信息。
13/n

因为对于每一笔withdraw操作而言,只有取款者自己知道自己取走的是哪个commitment叶子节点对应的存款

也可以将Tornado Cash的混币过程理解为透明存款,匿名取款。
14/n

因为你存款的时候,任何人都知道你将多少金额存在哪commitment叶子节点上;但是当你用一个新的账户去withdraw这个commitment上的钱时,是没有人知道的
15/n

TornadoCash 额外的设计细节:
1.每笔deposit的金额是固定的,如果是任意金额就容易暴露

2.每次withdraw必须取走叶子节点对应的所有存款

3. 取款后,合约内会记录这个commitment的nullifierHash已经取过钱了避免双花
16/n

4.合约的Merkle tree是一颗20层的树,并且一开始所有叶子节点都会被初始化为0

5.TornadoCash 只会存储最新的100个tree root

6.TornadoCash不会在合约内存储整棵Merkle Tree,只会存储最新的merkle path
没办法打全称,不然不让发推.....

• • •

Missing some Tweet in this thread? You can try to force a refresh
 

Keep Current with hhh_quickCreation

hhh_quickCreation Profile picture

Stay in touch and get notified when new unrolls are available from this author!

Read all threads

This Thread may be Removed Anytime!

PDF

Twitter may remove this content at anytime! Save it as PDF for later use!

Try unrolling a thread yourself!

how to unroll video
  1. Follow @ThreadReaderApp to mention us!

  2. From a Twitter thread mention us with a keyword "unroll"
@threadreaderapp unroll

Practice here first or read more on our help page!

More from @hhh69251498

Mar 4
1/n
Arbitrum 提出了一种新的 Sequencer 交易排序策略介绍:

Arbitrum 目前使用的交易排序的方式是FCFS(先进先出),用通俗的话解释就是Sequencer先处理它先接收到的交易(optimism 也是用的相同的策略)。

但是这种方式有一个缺点,就是会造成"延迟竞争"(latency racing)。
#Arbitrum #MEV
2/n
“延迟竞争“指的是,在当前Arbi的Sequencer的排序策略下,用户希望自己的交易比其他人的交易更快被Sequencer接收,并且打包到L1的方法,就是向一个与Sequencer连接并且网络延迟最低的fullnode发送交易。
3/n

Arbitrum 为了避免大家为了成为延迟最低的fullnode互相卷,而导致物理资源浪费提出了一种time boost机制,你可以通过额外的手续费,让你的交易可以更快被处理(类似 bid for position)
Read 12 tweets

Did Thread Reader help you today?

Support us! We are indie developers!


This site is made by just two indie developers on a laptop doing marketing, support and development! Read more about the story.

Become a Premium Member ($3/month or $30/year) and get exclusive features!

Become Premium

Don't want to be a Premium member but still want to support us?

Make a small donation by buying us coffee ($5) or help with server cost ($10)

Donate via Paypal

Or Donate anonymously using crypto!

Ethereum

0xfe58350B80634f60Fa6Dc149a72b4DFbc17D341E copy

Bitcoin

3ATGMxNzCUFzxpMCHL5sWSt4DVtS8UqXpi copy

Thank you for your support!

Follow Us on Twitter!

:(