| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 区块链 -> Tornado.Cash ZK过程深入解析 -> 正文阅读 |
|
[区块链]Tornado.Cash ZK过程深入解析 |
?Tornado的现金池,以DAI池子为例,每个Coin为100DAI。 目前有三个Coin:C1, C2, C3。 C1,C2,C3 在池子里,即300DAI,另外还有2个nullifier在合约里存储。 nullifier是为了防止双花的数据结构,存储的是花出去的note对应的nullifier。 C1,C2,C3 被保存在一个Merkle树中,这些Coin对外是公开的。 H1, H2是哈希函数。 接下来是deposit过程,比如Alice转100DAI到Tornado合约中,她需要提供:
智能合约验证MerkleProof(4) 是否合法,并用C4更新合约的merkle树,同时更新state。 Alice会保存(k,r) 作为note,一个note对应一个Coin,这里的note就是Tornado生成的txt文件。 这里,外部观察者可以对应到C4和Alice地址的关系。 Bob手中有:
Bob需要证明:
Bob构建证明Π
电路 Circuit(x,w)=0,需要满足:
注意,这里A没有在电路中,但是也包含在公开陈述中,是为了防止被矿工修改为其他值。 提现过程:
隐私性分析:
提现的时候,gas fee谁来支付?——答案是relayer来支付。 为了防止用户提现的时候,将提现地址和支付fee的地址关联起来,这时候需要一个relayer代替用户和合约进行交互,并且在提现金额中把对应的fee进行扣除返回给用户。 三、总结用户存入资金的时候,只需要提供把note的哈希和插入Merkle树的相关Proof提供给合约。这时候,Coin和该用户是关联起来的。 用户提现的时候,只需要提供note对应的Merkle证明,证明该note对应的Coin存在于Merkle树中。 在合约的角度上,合约不知道究竟是哪个Coin被花费了,也不知道花费这个Coin的用户究竟是哪一个存币的用户,也就是说无法知道支取和存入的关系。 外部看来,只能知道合约默克尔树中保存Coin的人是谁,无法知道这个Coin是否被花费,更不知道支取和存入的关系了。 |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/28 18:28:25- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |