Tornado Cash ist eine nicht verwahrte Datenschutzlösung für Ethereum und ERC20, die auf zkSNARKs basiert. Es verbessert den Transaktionsschutz, indem es die On-Chain-Verbindung zwischen der Empfänger- und der Zieladresse unterbricht. Es verwendet einen intelligenten Vertrag, der ETH-Einzahlungen akzeptiert, die von einer anderen Adresse abgehoben werden können. Wenn ETH über die neue Adresse ausgezahlt wird, gibt es keine Möglichkeit, die Auszahlung mit der Einzahlung zu verknüpfen, um absolute Privatsphäre zu gewährleisten.
Um eine Einzahlung zu tätigen, generiert der Benutzer ein Geheimnis und sendet seinen Hash (Commitment genannt) zusammen mit dem Einzahlungsbetrag an den Tornado-Smart-Vertrag. Der Vertrag akzeptiert die Anzahlung und fügt die Verpflichtung zu seiner Anzahlungsliste hinzu.
Später entscheidet sich der Benutzer für eine Auszahlung. Dazu muss der Nutzer einen Nachweis erbringen, dass er über ein Geheimnis einer nicht ausgegebenen Verpflichtung aus der Einzahlungsliste des Smart Contracts verfügt. Die zkSnark-Technologie ermöglicht dies, ohne preiszugeben, welche genaue Einzahlung diesem Geheimnis entspricht. Der Smart Contract prüft den Nachweis und überweist das eingezahlte Geld an die für die Auszahlung angegebene Adresse. Ein externer Beobachter wird nicht feststellen können, von welcher Einzahlung dieser Abzug stammt.
Mehr darüber können Sie in diesem Medium-Artikel lesen
TornadoCash_whitepaper_v1.4.pdf
Die Protokolle, Schaltkreise und Smart Contracts von Tornado.cash wurden von einer Expertengruppe von ABDK Consulting geprüft, die auf Zero-Knowledge, Kryptographie und Smart Contracts spezialisiert ist.
Während der Prüfung wurden keine kritischen Probleme festgestellt und alle offenen Probleme wurden behoben. Die Ergebnisse finden Sie hier:
Die zugrunde liegende Circomlib-Abhängigkeit wird derzeit geprüft und das Team hat bereits die meisten Korrekturen für gefundene Probleme veröffentlicht
node v11.15.0
npm install -g npx
Sie können die Beispielverwendung in cli.js sehen, sie funktioniert sowohl in der Konsole als auch im Browser.
npm install
cp .env.example .env
npm run build
– dies kann 10 Minuten oder länger dauernnpx ganache-cli
npm run test
– führt optional Tests aus. Es kann sein, dass es beim ersten Versuch fehlschlägt. Führen Sie es einfach erneut aus.Verwenden Sie die Browserversion auf Kovan:
vi .env
– Fügen Sie Ihren privaten Kovan-Schlüssel hinzu, um Verträge bereitzustellennpm run migrate
npx http-server
– stellt das aktuelle Verzeichnis bereit, Sie können jeden anderen statischen http-Server verwendenlocalhost:8080
Verwenden Sie die Befehlszeilenversion. Funktioniert für Ganache, Kovan und 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
verwendet, um mit der lokalen vertrauenswürdigen Einrichtung zu arbeiten. Tornado-cli verwendet 4c0af6a8b65aabea3c09f377f63c44e7a58afa6d
-Commit mit der vertrauenswürdigen Produktionseinrichtung von tornadoCashBeispiel:
./cli.js deposit ETH 0.1 --rpc https://kovan.infura.io/v3/27a9649f826b4e31a83e07ae09a87448
Ihr Hinweis: tornado-eth-0.1-42-0xf73dd6833ccbcc046c44228c8e2aa312bf49e08389dadc7c65e 6a73239867b7ef49c705c4db227e2fadd8489a494b6880bdcb6016047e019d1abec1c7652 Das Tornado-ETH-Guthaben beträgt 8,9. Das ETH-Guthaben des Absenderkontos beträgt 1004873,470619891361352542. Die Einzahlungstransaktion wird übermittelt. Das Tornado-ETH-Guthaben beträgt 9. Das ETH-Guthaben des Absenderkontos beträgt 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
Relaisadresse: 0x6A31736e7490AbE5D5676be059DFf064AB4aC754 Aktuellen Status aus Tornado-Vertrag abrufen SNARK-Beweis generieren Beweiszeit: 9117,051 ms Auszahlungstransaktion über das Relay senden Transaktion über das Relay übermittelt. Transaktion auf Etherscan anzeigen https://kovan.etherscan.io/tx/0xcb21ae8cad723818c6bc7273e83e00c8393fcdbe74802ce5d562acad691a2a7b Transaktion im Block 17036120 abgebaut. Fertig
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
Notiz . Wenn Sie denselben Prüfer für alle Instanzen wiederverwenden möchten, sollten Sie nach der Bereitstellung einer der Instanzen nur die 4. oder 5. Migration für ETH- bzw. ERC20-Verträge ausführen ( --f 4 --to 4
oder --f 5
).
Resolver
Link (2). Contract
. Klicken Sie auf Read Contract
und scrollen Sie nach unten zur 5. text
.Query
und Sie erhalten den DNS-Namen. Fügen Sie einfach https://
hinzu und verwenden Sie es als relayer url
Besonderer Dank geht an @barryWhiteHat und @kobigurk für wertvolle Beiträge und an @jbaylina für das tolle Circom- und Websnark-Framework
npm i
ganache-cli -d
npm run download
npm run build:contract
cp .env.example .env
npm run migrate:dev
node minimal-demo.js
Testumgebung vorbereiten:
yarn install
yarn download
cp .env.example .env
npx ganache-cli > /dev/null &
npm run migrate:dev
Führen Sie Tests durch:
yarn test
Laufabdeckung:
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