一个非常好的介绍Tornado Cash思想和代码的文章:zk.bearblog.dev/tornado-cas…
Tornado Cash的思想
简而言之,Tornado Cash是智能合约,用户可以存1ETH到该合约,同时需要提供一个commitment,由用户的secret哈希得来。合约中存储该commitment。当用户需要提取1ETH时,提供zkp证明用户知道合约中存储的某一个commitment的secret即可。
这样就实现了将存钱者和提款者断开联系的效果。比如,某人使用地址A把1ETH存入了合约,在提款的时候他可以换一个地址B。这样别人只知道地址A存入了1ETH,但是无法知道是否地址A背后对应的人是否有将该1ETH提出。除非合约只有地址A存款过😄。