Tornado Cash — это некастодиальное решение для обеспечения конфиденциальности Ethereum и ERC20, основанное на zkSNARK. Это улучшает конфиденциальность транзакций, разрывая внутрисетевую связь между адресами получателя и назначения. Он использует смарт-контракт, который принимает депозиты в 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 использует коммит 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
Примечание . Если вы хотите повторно использовать один и тот же верификатор для всех экземпляров, то после развертывания одного из экземпляров вам следует запустить только 4-ю или 5-ю миграцию для контрактов ETH или ERC20 соответственно ( --f 4 --to 4
или --f 5
).
Resolver
(2).Contract
. Нажмите Read Contract
и 5. text
метода.Query
, и вы получите DNS-имя. Просто добавьте к нему https://
и используйте его в качестве relayer url
Особая благодарность @barryWhiteHat и @kobigurk за ценный вклад, а также @jbaylina за потрясающий фреймворк Circcom и 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