Tornado Cash 是基于 zkSNARKs 的非托管以太坊和 ERC20 隐私解决方案。它通过打破收件人地址和目标地址之间的链上链接来提高交易隐私。它使用智能合约,接受 ETH 存款,并可以通过不同的地址提取。每当新地址提取 ETH 时,都无法将提取与存款联系起来,从而确保完全的隐私。
为了进行存款,用户生成一个秘密并将其哈希值(称为承诺)与存款金额一起发送到 Tornado 智能合约。合约接受存款并将承诺添加到其存款列表中。
随后,用户决定提现。为此,用户应该提供证明,证明他或她拥有智能合约存款列表中未使用承诺的秘密。 zkSnark 技术允许这种情况发生,而无需透露与该秘密相对应的确切存款。智能合约将检查证明并将存入的资金转移到指定的提款地址。外部观察者将无法确定这笔提款来自哪笔存款。
您可以在这篇 Medium 文章中阅读更多相关信息
TornadoCash_whitepaper_v1.4.pdf
Tornado.cash 协议、电路和智能合约均由 ABDK Consulting 的零知识、密码学和智能合约专家组进行了审核。
审计期间,未发现重大问题,所有突出问题均已得到解决。结果可以在这里找到:
目前正在审核底层 circomlib 依赖项,团队已经发布了针对已发现问题的大部分修复程序
node v11.15.0
npm install -g npx
您可以在 cli.js 中查看示例用法,它在控制台和浏览器中都有效。
npm install
cp .env.example .env
npm run build
- 这可能需要 10 分钟或更长时间npx ganache-cli
npm run test
- 可选择运行测试。第一次尝试可能会失败,只需再次运行即可。在 Kovan 上使用浏览器版本:
vi .env
- 添加您的 Kovan 私钥以部署合约npm run migrate
npx http-server
- 服务当前目录,您可以使用任何其他静态http服务器localhost:8080
使用命令行版本。适用于 Ganache、Kovan 和主网:
cp .env.example .env
npm run download
npm run build:contract
ganache-cli -i 1337
npm run migrate:dev
./cli.js test
./cli.js --help
2041cfa5fa0b71cd5cca9022a4eeea4afe28c9f7
提交哈希以便与本地可信设置一起使用。 Tornado-cli 使用4c0af6a8b65aabea3c09f377f63c44e7a58afa6d
提交以及 TornadoCash 的生产可信设置例子:
./cli.js deposit ETH 0.1 --rpc https://kovan.infura.io/v3/27a9649f826b4e31a83e07ae09a87448
您的备注:龙卷风-eth-0.1-42-0xf73dd6833ccbcc046c44228c8e2aa312bf49e08389dadc7c65e 6a73239867b7ef49c705c4db227e2fadd8489a494b6880bdcb6016047e019d1abec1c7652 Tornado ETH 余额为 8.9 发送者账户 ETH 余额为 1004873.470619891361352542 提交存款交易 Tornado ETH 余额为 9 发送者账户 ETH 余额为 1004873.361652048361352542
./cli.js withdraw tornado-eth-0.1-42-0xf73dd6833ccbcc046c44228c8e2aa312bf49e08389dadc7c65e6a73239867b7ef49c705c4db227e2fadd8489a494b6880bdcb6016047e019d1abec1c7652 0x8589427373D6D84E98730D7795D8f6f8731FDA16 --rpc https://kovan.infura.io/v3/27a9649f826b4e31a83e07ae09a87448 --relayer https://kovan-frelay.duckdns.org
中继地址:0x6A31736e7490AbE5D5676be059DFf064AB4aC754 从tornado合约获取当前状态生成SNARK证明证明时间:9117.051ms通过中继发送提现交易通过中继提交交易。在 etherscan 上查看交易 https://kovan.etherscan.io/tx/0xcb21ae8cad723818c6bc7273e83e00c8393fcdbe74802ce5d562acad691a2a7b 在区块 17036120 中开采的交易已完成
cp .env.example .env
npx truffle migrate --network kovan --reset --f 2 --to 4
cp .env.example .env
npx truffle migrate --network kovan --reset --f 2 --to 3
npx truffle migrate --network kovan --reset --f 5
笔记。如果您想对所有实例重复使用相同的验证程序,那么在部署其中一个实例后,您应该分别为 ETH 或 ERC20 合约运行第 4 次或第 5 次迁移( --f 4 --to 4
或--f 5
)。
Resolver
链接 (2)Contract
卡。单击Read Contract
并向下滚动到5. text
方法。Query
即可获取DNS名称。只需添加https://
并将其用作relayer url
特别感谢@barryWhiteHat 和@kobigurk 提供的宝贵意见,以及@jbaylina 提供的出色的Circom 和Websnark 框架
npm i
ganache-cli -d
npm run download
npm run build:contract
cp .env.example .env
npm run migrate:dev
node minimal-demo.js
准备测试环境:
yarn install
yarn download
cp .env.example .env
npx ganache-cli > /dev/null &
npm run migrate:dev
运行测试:
yarn test
运行覆盖范围:
yarn coverage
cargo install zkutil
npx circom circuits/withdraw.circom -o build/circuits/withdraw.json
zkutil setup -c build/circuits/withdraw.json -p build/circuits/withdraw.params
zkutil export-keys -c build/circuits/withdraw.json -p build/circuits/withdraw.params -r build/circuits/withdraw_proving_key.json -v build/circuits/withdraw_verification_key.json
zkutil generate-verifier -p build/circuits/withdraw.params -v build/circuits/Verifier.sol
sed -i -e ' s/pragma solidity ^0.6.0/pragma solidity 0.5.17/g ' ./build/circuits/Verifier.sol