Tornado Cash は、zkSNARK に基づく非保管イーサリアムおよび 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、Mainnet で動作します。
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 は、tornadoCash の実稼働環境の信頼できるセットアップで4c0af6a8b65aabea3c09f377f63c44e7a58afa6d
コミットを使用します例:
./cli.js deposit ETH 0.1 --rpc https://kovan.infura.io/v3/27a9649f826b4e31a83e07ae09a87448
あなたのメモ: tornado-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 トルネード コントラクトから現在の状態を取得する 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
注記。すべてのインスタンスで同じベリファイアを再利用したい場合は、インスタンスの 1 つをデプロイした後、ETH または ERC20 コントラクトに対してそれぞれ 4 回目または 5 回目の移行のみを実行する必要があります ( --f 4 --to 4
または--f 5
)。
Resolver
リンクをクリックします (2) Contract
タブに移動します。 Read Contract
をクリックし、 5. text
メソッドまで下にスクロールします。Query
をクリックすると、DNS 名が取得されます。それにhttps://
を追加して、 relayer url
として使用するだけです貴重な意見を提供してくれた @barryWhiteHat と @kobigurk、そして素晴らしい Circom & Websnark フレームワークを提供してくれた @jbaylina に特別に感謝します
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