Tornado Cash هو حل خصوصية غير خاضع للحضانة لـ Ethereum وERC20 يعتمد على zkSNARKs. يعمل على تحسين خصوصية المعاملات عن طريق قطع الارتباط الموجود على السلسلة بين عناوين المستلم والوجهة. يستخدم عقدًا ذكيًا يقبل ودائع ETH التي يمكن سحبها بعنوان مختلف. عندما يتم سحب ETH بواسطة العنوان الجديد، لا توجد طريقة لربط السحب بالإيداع، مما يضمن الخصوصية الكاملة.
لإنشاء إيداع، يقوم المستخدم بإنشاء سر وإرسال التجزئة الخاصة به (يُسمى التزامًا) مع مبلغ الإيداع إلى عقد Tornado الذكي. يقبل العقد الإيداع ويضيف الالتزام إلى قائمة الودائع الخاصة به.
وفي وقت لاحق، يقرر المستخدم إجراء الانسحاب. للقيام بذلك، يجب على المستخدم تقديم دليل على أنه يمتلك سرًا لالتزام غير منفق من قائمة إيداعات العقد الذكي. تسمح تقنية zkSnark بحدوث ذلك دون الكشف عن الإيداع الدقيق الذي يتوافق مع هذا السر. سيقوم العقد الذكي بفحص الإثبات وتحويل الأموال المودعة إلى العنوان المحدد للسحب. لن يتمكن المراقب الخارجي من تحديد الإيداع الذي جاء منه هذا السحب.
يمكنك قراءة المزيد عنها في هذه المقالة المتوسطة
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 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 الحصول على الحالة الحالية من عقد الإعصار إنشاء إثبات SNARK وقت الإثبات: 9117.051 مللي ثانية إرسال معاملة السحب من خلال التتابع المعاملة المقدمة من خلال التتابع. عرض المعاملة على 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 على التوالي ( --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