Tornado Cash는 zkSNARK를 기반으로 하는 비수탁 이더리움 및 ERC20 개인 정보 보호 솔루션입니다. 수신자와 대상 주소 사이의 온체인 링크를 끊음으로써 거래 개인정보 보호를 향상시킵니다. 다른 주소로 인출할 수 있는 ETH 예금을 허용하는 스마트 계약을 사용합니다. ETH가 새 주소로 인출될 때마다 인출과 예금을 연결할 수 있는 방법이 없으므로 완전한 개인 정보 보호가 보장됩니다.
예치하려면 사용자는 비밀을 생성하고 예치 금액과 함께 해당 해시(약정이라고 함)를 Tornado 스마트 계약에 보냅니다. 계약은 예금을 수락하고 예금 목록에 약정을 추가합니다.
나중에 사용자는 출금을 결정합니다. 이를 위해 사용자는 스마트 계약의 예금 목록에서 사용되지 않은 약정에 대한 비밀을 보유하고 있다는 증거를 제공해야 합니다. zkSnark 기술을 사용하면 어떤 정확한 입금액이 이 비밀에 해당하는지 밝히지 않고도 이러한 일이 발생할 수 있습니다. 스마트 계약은 증명을 확인하고 입금된 자금을 출금을 위해 지정된 주소로 이체합니다. 외부 관찰자는 이 인출이 어느 예금에서 발생했는지 확인할 수 없습니다.
이 Medium 기사에서 이에 대한 자세한 내용을 읽을 수 있습니다.
TornadoCash_whitepaper_v1.4.pdf
Tornado.cash 프로토콜, 회로 및 스마트 계약은 영지식, 암호화 및 스마트 계약을 전문으로 하는 ABDK Consulting의 전문가 그룹에 의해 감사되었습니다.
감사 결과, 중대한 문제는 발견되지 않았으며 미해결 문제는 모두 해결되었습니다. 결과는 여기에서 확인할 수 있습니다:
기본 circcomlib 종속성은 현재 감사 중이며 팀은 이미 발견된 문제에 대한 대부분의 수정 사항을 게시했습니다.
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
메모: 토네이도-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
메모 . 모든 인스턴스에 대해 동일한 검증 도구를 재사용하려면 인스턴스 중 하나를 배포한 후 각각 ETH 또는 ERC20 계약에 대해 4번째 또는 5번째 마이그레이션만 실행해야 합니다( --f 4 --to 4
또는 --f 5
).
Resolver
링크(2)를 클릭합니다. Contract
탭으로 이동합니다. 5. text
Read Contract
를 클릭하고 텍스트 방법까지 아래로 스크롤합니다.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