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
您的註解:tornado-eth-0.1-42-0xf73dd6833ccbcc046c44228c8e2aa312bf49e08389dadc7c65e6a73239867b7ef49c705c4db227e6a73239867b7ef49c705c4db227e2f1 c1c7652 Tornado ETH 餘額為 8.9 發送者帳戶 ETH 餘額為 1004873.470619891361352542 提交存款交易 Tornado ETH 餘額為 9 發送者帳戶 ETH 餘額為 1004873.3616535
./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